diff --git a/.changeset/pre.json b/.changeset/pre.json index 5ad02e875..2fbf67124 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -102,7 +102,8 @@ "@solid-primitives/async": "0.0.100", "@solid-primitives/url": "0.1.0", "@solid-primitives/favicon": "0.0.100", - "@solid-primitives/sortable": "0.0.100" + "@solid-primitives/sortable": "0.0.100", + "@solid-primitives/drag-drop": "0.0.100" }, "changesets": [ "a11y-dataset-hydration-safety", @@ -127,6 +128,7 @@ "deep-solid2-migration", "destructure-solid2-migration", "devices-solid2-migration", + "drag-new-package", "eleven-baths-build", "eleven-buttons-jump", "event-bus-solid2-migration", diff --git a/packages/drag-drop/CHANGELOG.md b/packages/drag-drop/CHANGELOG.md new file mode 100644 index 000000000..44608f29a --- /dev/null +++ b/packages/drag-drop/CHANGELOG.md @@ -0,0 +1,30 @@ +# @solid-primitives/drag-drop + +## 0.1.0-next.0 + +### Minor Changes + +- 75d2a1f: New package: `@solid-primitives/drag-drop` — composable drag-and-drop primitives for Solid 2.0. + + ### Exports + + **Pointer-event DnD** (UI element dragging): + - `makeDraggable` — non-reactive base, no Solid owner required + - `makeDroppable` — non-reactive drop target base + - `createDraggable` — reactive draggable with `isDragging`, `transform`, auto style/class; keyboard-accessible (`Space`/`Enter` to pick up/drop, arrow keys to nudge, `Escape` to cancel) + - `createDroppable` — reactive drop target with `isOver`, `active`, auto style/class + - `createSortable` — combines draggable + droppable on the same element + - `createDragContext` — coordinates a tree of draggables and droppables, with optional `autoScroll` near viewport edges + - `arrayMove` — pure reorder helper for `onDragEnd` + `createSortable` + + **Native HTML5 DnD** (file drops, `draggable="true"` elements): + - `makeNativeDroppable` — non-reactive base with depth-counter fix for child elements + - `createNativeDroppable` — reactive native drop zone for OS file drops + + **Collision detection strategies** (pure functions, pass to `createDragContext`): + - `closestCenter`, `closestCorners`, `rectIntersection`, `pointerWithin` (default) + + ### Notes + - The reported `transform` is corrected for page scroll during a drag, so the dragged element doesn't visually drift from the pointer if the page scrolls mid-drag (needed for `autoScroll` to look right, and for any scrollable page in general). + - `createDroppable`/`createSortable` log a dev-mode warning when used without a `createDragContext` ancestor, since `isOver`/`active` silently stay `false`/`null` in that case. + - `isDragging`/`isOver` are backed by `createProjection` instead of a per-instance `active()?.id === id` memo, so a drag start/end or hover change in a large list only notifies the specific items involved. diff --git a/packages/drag-drop/deno.jsonc b/packages/drag-drop/deno.jsonc index 1bd78ed8e..28fa462da 100644 --- a/packages/drag-drop/deno.jsonc +++ b/packages/drag-drop/deno.jsonc @@ -1,6 +1,6 @@ { "name": "@solid-primitives/drag-drop", - "version": "0.0.100", + "version": "0.1.0-next.0", "description": "Composable drag-and-drop primitives.", "license": "MIT", "exports": "./src/index.ts", diff --git a/packages/drag-drop/package.json b/packages/drag-drop/package.json index 6426793ab..edbd31f7c 100644 --- a/packages/drag-drop/package.json +++ b/packages/drag-drop/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/drag-drop", - "version": "0.0.100", + "version": "0.1.0-next.0", "description": "Composable drag-and-drop primitives.", "author": "David Di Biase ", "contributors": [], diff --git a/packages/upload/CHANGELOG.md b/packages/upload/CHANGELOG.md index f532fea06..48cf813d9 100644 --- a/packages/upload/CHANGELOG.md +++ b/packages/upload/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/upload +## 1.0.0-next.4 + +### Patch Changes + +- Updated dependencies [75d2a1f] + - @solid-primitives/drag-drop@0.1.0-next.0 + ## 1.0.0-next.3 ### Patch Changes diff --git a/packages/upload/deno.jsonc b/packages/upload/deno.jsonc index 0e3bc85c8..0733a00b5 100644 --- a/packages/upload/deno.jsonc +++ b/packages/upload/deno.jsonc @@ -1,6 +1,6 @@ { "name": "@solid-primitives/upload", - "version": "1.0.0-next.3", + "version": "1.0.0-next.4", "description": "Primitives for uploading files.", "license": "MIT", "exports": "./src/index.ts", diff --git a/packages/upload/package.json b/packages/upload/package.json index cb993bea7..f8fdbb0e1 100644 --- a/packages/upload/package.json +++ b/packages/upload/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/upload", - "version": "1.0.0-next.3", + "version": "1.0.0-next.4", "description": "Primitives for uploading files.", "author": "Rustam Ashurmatov ", "license": "MIT",