diff --git a/.changeset/content-role-dialog-element.md b/.changeset/content-role-dialog-element.md deleted file mode 100644 index cd5ffd3..0000000 --- a/.changeset/content-role-dialog-element.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@dunky.dev/react-dialog': minor ---- - -`Dialog.Content` now renders a `
` carrying the `dialog` (or `alertdialog`) role instead of the native `` element. Consumers styling `dialog { ... }` should target the part directly (or its role), and a forwarded ref is now an `HTMLDivElement`; `...props` accept `ComponentProps<'div'>`. - -The dialog window is the initial focus target — focusable in script, out of the tab order — which needs `tabindex="-1"`, and HTML states that [the `tabindex` attribute must not be specified on `dialog` elements](https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element). The native element would only pay off through `showModal()`, and this contract deliberately keeps modality, dismissal, and focus in the core machine rather than splitting authority with the browser's built-in behavior — so the element brought nothing but a conformance violation. Nothing about the exposed semantics changes: the same role, `aria-modal`, name, description, and focus behavior as before. UA `` resets (`position: static`, `border: none`) are no longer needed in consumer styles. diff --git a/.changeset/dom-dialog.md b/.changeset/dom-dialog.md deleted file mode 100644 index 6b09b3a..0000000 --- a/.changeset/dom-dialog.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -'@dunky.dev/dom-dialog': minor -'@dunky.dev/react-dialog': patch -'@dunky.dev/solid-dialog': patch ---- - -New package: `@dunky.dev/dom-dialog`, the framework-free DOM half of the -Dialog. The React and Solid bindings had grown two copies of the same -document-level code — the Escape listener, the ordered focus/stack sequence -around the open edge, the exit window, the session-history guard, the -outside-press gating — differing only in which lifecycle scheduled them. That -duplication is the drift risk the architecture exists to remove, and it would -have been copied a third time for Vue. - -Both bindings now contribute only their host's lifecycle: - -```ts -// before — the same twenty lines in every DOM substrate -const previous = document.activeElement -const unregister = registerLayer({ id, depth, element: content, modal, backdrop }) -const target = initialFocus ?? getInitialFocus(content) -target.focus({ preventScroll: true }) -// ... - -// after -return openDialogLayer(content, { id, depth, modal, backdrop, initialFocus }) -``` - -The ordering that made those sequences correct — the stack joins before focus -moves in, and releases the layers beneath before focus moves back out — is now -stated and tested in one place rather than re-derived per substrate. - -No consumer-visible behavior changes in either binding; this is an internal -extraction. `@dunky.dev/dom-dialog` is published because the bindings depend on -it at runtime, and a substrate outside this repo can build on it directly. - -This also establishes `packages/dom/components/` as a layer: a DOM package -scoped to one primitive, which may import that primitive's core package and any -DOM util, but never a framework. `pnpm scaffold ` stamps one for every new -primitive. diff --git a/.changeset/solid-dialog.md b/.changeset/solid-dialog.md deleted file mode 100644 index 1c3fc7d..0000000 --- a/.changeset/solid-dialog.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -'@dunky.dev/solid-dialog': minor ---- - -New substrate: the Solid binding for `@dunky.dev/dialog`, targeting Solid 2.0 -(peers: `solid-js` and `@solidjs/web` at `^2.0.0-rc.1`; 1.x is unsupported — -the binding stands on 2.0's primitives). The same compound anatomy and -behavior contract as the React binding — one core machine, a new host — -delivered in Solid's native shape: the connected api is a fine-grained store, -so a machine transition updates exactly the bindings that changed, and the -core options are plain reactive props (per the controlled contract a -dismissal on a controlled dialog reports nothing — decide it at its source in -the dismissal callbacks, which carry `preventDefault()` for the veto). - -```tsx -import { Dialog } from '@dunky.dev/solid-dialog' -; setOpen(false)}> - Open - - - - - Title - Description - Close - - - - -``` - -`Content`'s `initialFocus` accepts an element or an accessor resolved at open -time — the Solid idiom for a ref variable that fills during render, so -`initialFocus={() => cancelButton}` works. Everything else follows the core -spec: layer stack with assistive-tech containment, focus trap with Close as -the cycle's last stop, scroll lock (scoped to the Portal container when -given), exit animations through `data-state="closing"`, and `closeOnBack`. diff --git a/.changeset/solid-hooks.md b/.changeset/solid-hooks.md deleted file mode 100644 index a06afcf..0000000 --- a/.changeset/solid-hooks.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@dunky.dev/solid-use-focus-trap': minor -'@dunky.dev/solid-use-scroll-lock': minor ---- - -New substrate: the Solid lifecycle wrappers over the framework-free DOM utils, -mirroring the React hooks one-for-one and targeting Solid 2.0 (peer -`solid-js@^2.0.0-rc.1`). `useFocusTrap(target, options?)` takes an accessor -for the container (a plain ref variable fills during render, so the trap arms -on mount and re-arms when a reactive accessor yields a new element); -`useScrollLock(locked?, target?)` accepts a `MaybeAccessor` for both -parameters so the lock tracks reactive state. The behavior itself lives in -`@dunky.dev/dom-focus-trap` and `@dunky.dev/dom-scroll-lock` — these -primitives own only the lifecycle. diff --git a/.changeset/state-machine-0-3-3.md b/.changeset/state-machine-0-3-3.md deleted file mode 100644 index c53a603..0000000 --- a/.changeset/state-machine-0-3-3.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@dunky.dev/controllable': patch -'@dunky.dev/dialog': patch -'@dunky.dev/native-dialog': patch -'@dunky.dev/react-dialog': patch ---- - -Update the state-machine packages to the 2026-08-22 release: runtime `0.3.3`, -bindings `0.4.1`, utils `0.4.0`, and the React (`0.3.4`), Solid (`0.3.0`), and -native (`0.4.0`) adapters. - -Every range moves together on purpose. The published adapters pin the runtime -exactly (`@dunky.dev/state-machine: 0.3.3`), so a package left on an older -caret would have pulled a second physical copy of the runtime into a consumer's -install — the dependency diamond `ARCHITECTURE.md` warns about, where anything -identity-sensitive (a singleton, a `WeakMap`, module-level state) silently stops -agreeing across the two copies. `@dunky.dev/controllable` was the oldest -offender, still on `^0.1.0`; the tree now resolves to a single runtime. diff --git a/packages/core/dialog/CHANGELOG.md b/packages/core/dialog/CHANGELOG.md index 28044cc..47b93bb 100644 --- a/packages/core/dialog/CHANGELOG.md +++ b/packages/core/dialog/CHANGELOG.md @@ -1,5 +1,24 @@ # @dunky.dev/dialog +## 0.3.1 + +### Patch Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Update the state-machine packages to the 2026-08-22 release: runtime `0.3.3`, + bindings `0.4.1`, utils `0.4.0`, and the React (`0.3.4`), Solid (`0.3.0`), and + native (`0.4.0`) adapters. + + Every range moves together on purpose. The published adapters pin the runtime + exactly (`@dunky.dev/state-machine: 0.3.3`), so a package left on an older + caret would have pulled a second physical copy of the runtime into a consumer's + install — the dependency diamond `ARCHITECTURE.md` warns about, where anything + identity-sensitive (a singleton, a `WeakMap`, module-level state) silently stops + agreeing across the two copies. `@dunky.dev/controllable` was the oldest + offender, still on `^0.1.0`; the tree now resolves to a single runtime. + +- Updated dependencies [[`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071)]: + - @dunky.dev/controllable@0.1.2 + ## 0.3.0 ### Minor Changes diff --git a/packages/core/dialog/package.json b/packages/core/dialog/package.json index ee13e47..3af8481 100644 --- a/packages/core/dialog/package.json +++ b/packages/core/dialog/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/dialog", - "version": "0.3.0", + "version": "0.3.1", "description": "Framework-agnostic dialog interaction, modeled as a state machine.", "license": "MIT", "repository": { diff --git a/packages/core/utils/controllable/CHANGELOG.md b/packages/core/utils/controllable/CHANGELOG.md index 0349ca9..489ff72 100644 --- a/packages/core/utils/controllable/CHANGELOG.md +++ b/packages/core/utils/controllable/CHANGELOG.md @@ -1,5 +1,21 @@ # @dunky.dev/controllable +## 0.1.2 + +### Patch Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Update the state-machine packages to the 2026-08-22 release: runtime `0.3.3`, + bindings `0.4.1`, utils `0.4.0`, and the React (`0.3.4`), Solid (`0.3.0`), and + native (`0.4.0`) adapters. + + Every range moves together on purpose. The published adapters pin the runtime + exactly (`@dunky.dev/state-machine: 0.3.3`), so a package left on an older + caret would have pulled a second physical copy of the runtime into a consumer's + install — the dependency diamond `ARCHITECTURE.md` warns about, where anything + identity-sensitive (a singleton, a `WeakMap`, module-level state) silently stops + agreeing across the two copies. `@dunky.dev/controllable` was the oldest + offender, still on `^0.1.0`; the tree now resolves to a single runtime. + ## 0.1.1 ### Patch Changes diff --git a/packages/core/utils/controllable/package.json b/packages/core/utils/controllable/package.json index cecb281..b30650c 100644 --- a/packages/core/utils/controllable/package.json +++ b/packages/core/utils/controllable/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/controllable", - "version": "0.1.1", + "version": "0.1.2", "description": "Controlled/uncontrolled machinery for state machines: a controllable context slice and gated transitions.", "license": "MIT", "repository": { diff --git a/packages/dom/components/dialog/CHANGELOG.md b/packages/dom/components/dialog/CHANGELOG.md new file mode 100644 index 0000000..665a7a6 --- /dev/null +++ b/packages/dom/components/dialog/CHANGELOG.md @@ -0,0 +1,51 @@ +# @dunky.dev/dom-dialog + +## 0.1.0 + +### Minor Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071) Thanks [@ivanbanov](https://github.com/ivanbanov)! - New package: `@dunky.dev/dom-dialog`, the framework-free DOM half of the + Dialog. The React and Solid bindings had grown two copies of the same + document-level code — the Escape listener, the ordered focus/stack sequence + around the open edge, the exit window, the session-history guard, the + outside-press gating — differing only in which lifecycle scheduled them. That + duplication is the drift risk the architecture exists to remove, and it would + have been copied a third time for Vue. + + Both bindings now contribute only their host's lifecycle: + + ```ts + // before — the same twenty lines in every DOM substrate + const previous = document.activeElement + const unregister = registerLayer({ + id, + depth, + element: content, + modal, + backdrop, + }) + const target = initialFocus ?? getInitialFocus(content) + target.focus({ preventScroll: true }) + // ... + + // after + return openDialogLayer(content, { id, depth, modal, backdrop, initialFocus }) + ``` + + The ordering that made those sequences correct — the stack joins before focus + moves in, and releases the layers beneath before focus moves back out — is now + stated and tested in one place rather than re-derived per substrate. + + No consumer-visible behavior changes in either binding; this is an internal + extraction. `@dunky.dev/dom-dialog` is published because the bindings depend on + it at runtime, and a substrate outside this repo can build on it directly. + + This also establishes `packages/dom/components/` as a layer: a DOM package + scoped to one primitive, which may import that primitive's core package and any + DOM util, but never a framework. `pnpm scaffold ` stamps one for every new + primitive. + +### Patch Changes + +- Updated dependencies [[`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071)]: + - @dunky.dev/dialog@0.3.1 diff --git a/packages/dom/components/dialog/package.json b/packages/dom/components/dialog/package.json index ed1fe60..7dcfc7e 100644 --- a/packages/dom/components/dialog/package.json +++ b/packages/dom/components/dialog/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/dom-dialog", - "version": "0.0.0", + "version": "0.1.0", "description": "Framework-free DOM behavior for @dunky.dev/dialog: the document-level effects, the open and exit sequences, and the outside-press gating every DOM substrate shares.", "license": "MIT", "repository": { diff --git a/packages/native/dialog/CHANGELOG.md b/packages/native/dialog/CHANGELOG.md index 4cb9e4a..18118fa 100644 --- a/packages/native/dialog/CHANGELOG.md +++ b/packages/native/dialog/CHANGELOG.md @@ -1,5 +1,24 @@ # @dunky.dev/native-dialog +## 0.1.1 + +### Patch Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Update the state-machine packages to the 2026-08-22 release: runtime `0.3.3`, + bindings `0.4.1`, utils `0.4.0`, and the React (`0.3.4`), Solid (`0.3.0`), and + native (`0.4.0`) adapters. + + Every range moves together on purpose. The published adapters pin the runtime + exactly (`@dunky.dev/state-machine: 0.3.3`), so a package left on an older + caret would have pulled a second physical copy of the runtime into a consumer's + install — the dependency diamond `ARCHITECTURE.md` warns about, where anything + identity-sensitive (a singleton, a `WeakMap`, module-level state) silently stops + agreeing across the two copies. `@dunky.dev/controllable` was the oldest + offender, still on `^0.1.0`; the tree now resolves to a single runtime. + +- Updated dependencies [[`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071)]: + - @dunky.dev/dialog@0.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/native/dialog/package.json b/packages/native/dialog/package.json index 238b711..aab7f9b 100644 --- a/packages/native/dialog/package.json +++ b/packages/native/dialog/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/native-dialog", - "version": "0.1.0", + "version": "0.1.1", "description": "React Native binding for @dunky.dev/dialog.", "license": "MIT", "repository": { diff --git a/packages/react/dialog/CHANGELOG.md b/packages/react/dialog/CHANGELOG.md index d78ac99..6513547 100644 --- a/packages/react/dialog/CHANGELOG.md +++ b/packages/react/dialog/CHANGELOG.md @@ -1,5 +1,72 @@ # @dunky.dev/react-dialog +## 0.3.0 + +### Minor Changes + +- [#40](https://github.com/dunky-dev/ui/pull/40) [`148ee66`](https://github.com/dunky-dev/ui/commit/148ee66481f70852734a77814643814af5b339fc) Thanks [@ivanbanov](https://github.com/ivanbanov)! - `Dialog.Content` now renders a `
` carrying the `dialog` (or `alertdialog`) role instead of the native `` element. Consumers styling `dialog { ... }` should target the part directly (or its role), and a forwarded ref is now an `HTMLDivElement`; `...props` accept `ComponentProps<'div'>`. + + The dialog window is the initial focus target — focusable in script, out of the tab order — which needs `tabindex="-1"`, and HTML states that [the `tabindex` attribute must not be specified on `dialog` elements](https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element). The native element would only pay off through `showModal()`, and this contract deliberately keeps modality, dismissal, and focus in the core machine rather than splitting authority with the browser's built-in behavior — so the element brought nothing but a conformance violation. Nothing about the exposed semantics changes: the same role, `aria-modal`, name, description, and focus behavior as before. UA `` resets (`position: static`, `border: none`) are no longer needed in consumer styles. + +### Patch Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071) Thanks [@ivanbanov](https://github.com/ivanbanov)! - New package: `@dunky.dev/dom-dialog`, the framework-free DOM half of the + Dialog. The React and Solid bindings had grown two copies of the same + document-level code — the Escape listener, the ordered focus/stack sequence + around the open edge, the exit window, the session-history guard, the + outside-press gating — differing only in which lifecycle scheduled them. That + duplication is the drift risk the architecture exists to remove, and it would + have been copied a third time for Vue. + + Both bindings now contribute only their host's lifecycle: + + ```ts + // before — the same twenty lines in every DOM substrate + const previous = document.activeElement + const unregister = registerLayer({ + id, + depth, + element: content, + modal, + backdrop, + }) + const target = initialFocus ?? getInitialFocus(content) + target.focus({ preventScroll: true }) + // ... + + // after + return openDialogLayer(content, { id, depth, modal, backdrop, initialFocus }) + ``` + + The ordering that made those sequences correct — the stack joins before focus + moves in, and releases the layers beneath before focus moves back out — is now + stated and tested in one place rather than re-derived per substrate. + + No consumer-visible behavior changes in either binding; this is an internal + extraction. `@dunky.dev/dom-dialog` is published because the bindings depend on + it at runtime, and a substrate outside this repo can build on it directly. + + This also establishes `packages/dom/components/` as a layer: a DOM package + scoped to one primitive, which may import that primitive's core package and any + DOM util, but never a framework. `pnpm scaffold ` stamps one for every new + primitive. + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Update the state-machine packages to the 2026-08-22 release: runtime `0.3.3`, + bindings `0.4.1`, utils `0.4.0`, and the React (`0.3.4`), Solid (`0.3.0`), and + native (`0.4.0`) adapters. + + Every range moves together on purpose. The published adapters pin the runtime + exactly (`@dunky.dev/state-machine: 0.3.3`), so a package left on an older + caret would have pulled a second physical copy of the runtime into a consumer's + install — the dependency diamond `ARCHITECTURE.md` warns about, where anything + identity-sensitive (a singleton, a `WeakMap`, module-level state) silently stops + agreeing across the two copies. `@dunky.dev/controllable` was the oldest + offender, still on `^0.1.0`; the tree now resolves to a single runtime. + +- Updated dependencies [[`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071), [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071)]: + - @dunky.dev/dom-dialog@0.1.0 + - @dunky.dev/dialog@0.3.1 + ## 0.2.2 ### Patch Changes diff --git a/packages/react/dialog/package.json b/packages/react/dialog/package.json index bda251a..47be229 100644 --- a/packages/react/dialog/package.json +++ b/packages/react/dialog/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/react-dialog", - "version": "0.2.2", + "version": "0.3.0", "description": "React binding for @dunky.dev/dialog.", "license": "MIT", "repository": { diff --git a/packages/solid/dialog/CHANGELOG.md b/packages/solid/dialog/CHANGELOG.md new file mode 100644 index 0000000..c3234bd --- /dev/null +++ b/packages/solid/dialog/CHANGELOG.md @@ -0,0 +1,88 @@ +# @dunky.dev/solid-dialog + +## 0.1.0 + +### Minor Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`4480950`](https://github.com/dunky-dev/ui/commit/4480950cd629beb214c36da0db4f0eab3e9e1341) Thanks [@ivanbanov](https://github.com/ivanbanov)! - New substrate: the Solid binding for `@dunky.dev/dialog`, targeting Solid 2.0 + (peers: `solid-js` and `@solidjs/web` at `^2.0.0-rc.1`; 1.x is unsupported — + the binding stands on 2.0's primitives). The same compound anatomy and + behavior contract as the React binding — one core machine, a new host — + delivered in Solid's native shape: the connected api is a fine-grained store, + so a machine transition updates exactly the bindings that changed, and the + core options are plain reactive props (per the controlled contract a + dismissal on a controlled dialog reports nothing — decide it at its source in + the dismissal callbacks, which carry `preventDefault()` for the veto). + + ```tsx + import { Dialog } from '@dunky.dev/solid-dialog' + ; setOpen(false)}> + Open + + + + + Title + Description + Close + + + + + ``` + + `Content`'s `initialFocus` accepts an element or an accessor resolved at open + time — the Solid idiom for a ref variable that fills during render, so + `initialFocus={() => cancelButton}` works. Everything else follows the core + spec: layer stack with assistive-tech containment, focus trap with Close as + the cycle's last stop, scroll lock (scoped to the Portal container when + given), exit animations through `data-state="closing"`, and `closeOnBack`. + +### Patch Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071) Thanks [@ivanbanov](https://github.com/ivanbanov)! - New package: `@dunky.dev/dom-dialog`, the framework-free DOM half of the + Dialog. The React and Solid bindings had grown two copies of the same + document-level code — the Escape listener, the ordered focus/stack sequence + around the open edge, the exit window, the session-history guard, the + outside-press gating — differing only in which lifecycle scheduled them. That + duplication is the drift risk the architecture exists to remove, and it would + have been copied a third time for Vue. + + Both bindings now contribute only their host's lifecycle: + + ```ts + // before — the same twenty lines in every DOM substrate + const previous = document.activeElement + const unregister = registerLayer({ + id, + depth, + element: content, + modal, + backdrop, + }) + const target = initialFocus ?? getInitialFocus(content) + target.focus({ preventScroll: true }) + // ... + + // after + return openDialogLayer(content, { id, depth, modal, backdrop, initialFocus }) + ``` + + The ordering that made those sequences correct — the stack joins before focus + moves in, and releases the layers beneath before focus moves back out — is now + stated and tested in one place rather than re-derived per substrate. + + No consumer-visible behavior changes in either binding; this is an internal + extraction. `@dunky.dev/dom-dialog` is published because the bindings depend on + it at runtime, and a substrate outside this repo can build on it directly. + + This also establishes `packages/dom/components/` as a layer: a DOM package + scoped to one primitive, which may import that primitive's core package and any + DOM util, but never a framework. `pnpm scaffold ` stamps one for every new + primitive. + +- Updated dependencies [[`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071), [`4480950`](https://github.com/dunky-dev/ui/commit/4480950cd629beb214c36da0db4f0eab3e9e1341), [`e3a5e96`](https://github.com/dunky-dev/ui/commit/e3a5e96b13499b3a0b1dc49d6ec195f67b2d0071)]: + - @dunky.dev/dom-dialog@0.1.0 + - @dunky.dev/solid-use-focus-trap@0.1.0 + - @dunky.dev/solid-use-scroll-lock@0.1.0 + - @dunky.dev/dialog@0.3.1 diff --git a/packages/solid/dialog/package.json b/packages/solid/dialog/package.json index ddbb65d..72d5a6c 100644 --- a/packages/solid/dialog/package.json +++ b/packages/solid/dialog/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/solid-dialog", - "version": "0.0.0", + "version": "0.1.0", "description": "Solid binding for @dunky.dev/dialog.", "license": "MIT", "repository": { diff --git a/packages/solid/hooks/use-focus-trap/CHANGELOG.md b/packages/solid/hooks/use-focus-trap/CHANGELOG.md new file mode 100644 index 0000000..b205b71 --- /dev/null +++ b/packages/solid/hooks/use-focus-trap/CHANGELOG.md @@ -0,0 +1,15 @@ +# @dunky.dev/solid-use-focus-trap + +## 0.1.0 + +### Minor Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`4480950`](https://github.com/dunky-dev/ui/commit/4480950cd629beb214c36da0db4f0eab3e9e1341) Thanks [@ivanbanov](https://github.com/ivanbanov)! - New substrate: the Solid lifecycle wrappers over the framework-free DOM utils, + mirroring the React hooks one-for-one and targeting Solid 2.0 (peer + `solid-js@^2.0.0-rc.1`). `useFocusTrap(target, options?)` takes an accessor + for the container (a plain ref variable fills during render, so the trap arms + on mount and re-arms when a reactive accessor yields a new element); + `useScrollLock(locked?, target?)` accepts a `MaybeAccessor` for both + parameters so the lock tracks reactive state. The behavior itself lives in + `@dunky.dev/dom-focus-trap` and `@dunky.dev/dom-scroll-lock` — these + primitives own only the lifecycle. diff --git a/packages/solid/hooks/use-focus-trap/package.json b/packages/solid/hooks/use-focus-trap/package.json index 98776de..42570a7 100644 --- a/packages/solid/hooks/use-focus-trap/package.json +++ b/packages/solid/hooks/use-focus-trap/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/solid-use-focus-trap", - "version": "0.0.0", + "version": "0.1.0", "description": "Solid binding for @dunky.dev/dom-focus-trap.", "license": "MIT", "repository": { diff --git a/packages/solid/hooks/use-scroll-lock/CHANGELOG.md b/packages/solid/hooks/use-scroll-lock/CHANGELOG.md new file mode 100644 index 0000000..54ea886 --- /dev/null +++ b/packages/solid/hooks/use-scroll-lock/CHANGELOG.md @@ -0,0 +1,15 @@ +# @dunky.dev/solid-use-scroll-lock + +## 0.1.0 + +### Minor Changes + +- [#44](https://github.com/dunky-dev/ui/pull/44) [`4480950`](https://github.com/dunky-dev/ui/commit/4480950cd629beb214c36da0db4f0eab3e9e1341) Thanks [@ivanbanov](https://github.com/ivanbanov)! - New substrate: the Solid lifecycle wrappers over the framework-free DOM utils, + mirroring the React hooks one-for-one and targeting Solid 2.0 (peer + `solid-js@^2.0.0-rc.1`). `useFocusTrap(target, options?)` takes an accessor + for the container (a plain ref variable fills during render, so the trap arms + on mount and re-arms when a reactive accessor yields a new element); + `useScrollLock(locked?, target?)` accepts a `MaybeAccessor` for both + parameters so the lock tracks reactive state. The behavior itself lives in + `@dunky.dev/dom-focus-trap` and `@dunky.dev/dom-scroll-lock` — these + primitives own only the lifecycle. diff --git a/packages/solid/hooks/use-scroll-lock/package.json b/packages/solid/hooks/use-scroll-lock/package.json index 95eb1a9..fef89ef 100644 --- a/packages/solid/hooks/use-scroll-lock/package.json +++ b/packages/solid/hooks/use-scroll-lock/package.json @@ -1,6 +1,6 @@ { "name": "@dunky.dev/solid-use-scroll-lock", - "version": "0.0.0", + "version": "0.1.0", "description": "Solid binding for @dunky.dev/dom-scroll-lock.", "license": "MIT", "repository": {