chore(release): version packages - #61
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 17, 2026 16:35
1d05391 to
49a45cf
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 18, 2026 20:28
49a45cf to
37e8337
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 20, 2026 15:40
37e8337 to
805cb7a
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 21, 2026 15:27
805cb7a to
d990f58
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 22, 2026 13:50
d990f58 to
ae89cb5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@dunky.dev/state-machine-dom@0.1.0
Minor Changes
#32
e6caca8Thanks @ivanbanov! - Add@dunky.dev/state-machine-dom— the DOM half of the bindings translation,shared by every DOM target. The
aria-*attribute projection and the payloadadapters (
onValueChange/onWheel/onScroll/onScrollEnd→ neutralpayloads, with
preventDefaultbound to its event) were byte-identical in theReact and Solid normalizers; they now live once, in this package, and each
target keeps only what genuinely differs: its handler prop names
(
onChange/onDoubleClickvsonInput/onDblClick), thefocusable→tabindex casing (
tabIndexvstabindex), and its value serialization(React passes ARIA booleans through; Solid stringifies them).
No API change for consumers of the React or Solid packages —
normalizebehaves exactly as before; the shared package becomes a dependency of both.
The motivation is drift-proofing: a payload-adapter fix previously had to be
applied to each DOM target by hand, and had already diverged once.
Patch Changes
c8e94e4]:@dunky.dev/native-state-machine@0.4.0
Minor Changes
#62
caafda4Thanks @ivanbanov! - Themodalbinding now reaches React Native instead of being dropped:normalize()maps it toaria-modal, the web-aligned alias RN routes toaccessibilityViewIsModal.It was dropped on the assumption RN had no element-attr analog. It does —
aria-modalsits in the same alias block asaria-hidden, which thisnormalizer already targets. The effect is iOS-only (VoiceOver stops reading
siblings of the modal surface); Android has no sibling-inerting equivalent, so
it degrades to a no-op there, the same per-platform fan-out
aria-hiddenalready relies on.
Without it, a dialog authored once in core announced as modal on the web and as
an ordinary view on native — the substrate-agnostic contract leaking a hole
exactly where a screen reader user would notice it.
Patch Changes
#60
c8e94e4Thanks @ivanbanov! - Rolls back 0.4.0's translation-contract surface — it shipped by mistake.DROPPED_HANDLERS/DROPPED_ATTRSare removed, andHandlerTargets/AttrTargetsare now the partial rename maps(
Partial<Record<HandlerKey, string>>) instead of exhaustivenull-accounting records.
What stays is the part that mattered: maps and drop sets are typed by the
real vocabulary keys (
HandlerKey/AttrKey), so a typo'd or unknown entryis a compile error instead of a silent leak.
Updated dependencies [
e6caca8,6deab75,6deab75,b70bedc,c8e94e4,e6caca8]:@dunky.dev/state-machine-utils@0.4.0
Minor Changes
#66
6deab75Thanks @ivanbanov! - Remove the dead exports: the positioning module (Placement,Side,PositioningOptions,placementToSide,pickSide),memo, andcomposeHandlers. Nothing in the repo ever consumed them —mergePropscomposes handlers through its own private helper, and positioning was
speculative vocabulary for floating components that don't exist yet.
mergePropsis now the package's whole surface. Minor (not patch) becausethe symbols were publicly exported: any external import of them breaks.
Positioning will come back designed against a real floating component when
one lands.
#66
6deab75Thanks @ivanbanov! - ExportcomposeHandlers— the handler-pair compositionmergePropshasalways applied to overlapping
on*props, now public: the consumer handlerruns first, and the library handler is skipped when the consumer prevented
default (the first argument's
defaultPrevented, per Radix/Ark conventions).No behavior change anywhere —
mergePropscalls the same function; it wasjust private before.
@dunky.dev/solid-state-machine@0.3.0
Minor Changes
#32
e6caca8Thanks @ivanbanov! - Add@dunky.dev/solid-state-machine— the Solid bindings target.A first-class Solid bridge (not a React re-export):
useMachinemirrors theconnector's snapshot into a Solid
createStore(viareconcile) so reading afield in JSX is fine-grained, runs the lifecycle through
onSettled/onCleanup,keeps props fresh with a tracked
setPropseffect, and runs eachComponentEffectas its own dep-trackedcreateEffect(compute, apply).useSelectorreturns a Solid accessor.normalizemaps the agnostic bindingsto Solid DOM props (
onInput,onDblClick,tabindex) andmergePropsapplies Solid's
classconcat + single-objectstylemerge. The sameconnectand machine config run unchanged across React, Solid, React Native, and OpenTUI.
Targets Solid 2.0 as a first-class citizen: the peer range is
solid-js^2.0.0-rc.1. Solid 1.x is not supported — 2.0 removed the surface a 1.xbridge would stand on (
solid-js/store, single-argumentcreateEffect,onMount) and 1.x lacks the root exports this package imports, so, like therest of the Solid ecosystem (router, TanStack, solid-primitives), the majors
are version-split. Two consumer-facing 2.0 behaviors: writes commit on the
microtask queue (call
flush()in tests before asserting), and JSX comes fromthe renderer package (
"jsxImportSource": "@solidjs/web",renderfrom@solidjs/web).Patch Changes
#32
e6caca8Thanks @ivanbanov! - Add@dunky.dev/state-machine-dom— the DOM half of the bindings translation,shared by every DOM target. The
aria-*attribute projection and the payloadadapters (
onValueChange/onWheel/onScroll/onScrollEnd→ neutralpayloads, with
preventDefaultbound to its event) were byte-identical in theReact and Solid normalizers; they now live once, in this package, and each
target keeps only what genuinely differs: its handler prop names
(
onChange/onDoubleClickvsonInput/onDblClick), thefocusable→tabindex casing (
tabIndexvstabindex), and its value serialization(React passes ARIA booleans through; Solid stringifies them).
No API change for consumers of the React or Solid packages —
normalizebehaves exactly as before; the shared package becomes a dependency of both.
The motivation is drift-proofing: a payload-adapter fix previously had to be
applied to each DOM target by hand, and had already diverged once.
#32
e6caca8Thanks @ivanbanov! -preventDefaulton the adapted payloads (ChangePayload,WheelPayload) nowactually works.
normalize()used to copy the native event'spreventDefaultonto the payload detached from its event, so the first
connect()to callpayload.preventDefault()would throwTypeError: Illegal invocation— nativeDOM methods require
thisto be a realEvent. The payload now carries aclosure bound to the originating event:
Latent until now (no in-repo
connect()calls it yet), but it is the behaviorthe bindings contract promises, so it's fixed in both DOM targets before a
component relies on it.
#32
e6caca8Thanks @ivanbanov! - AComponentEffectbody now runs untracked, so its authoreddepslist is thewhole re-run contract — identical to the React target's dep array. Previously
the body executed inside the tracking scope, so any prop the effect merely read
became a hidden dependency and re-ran it (cleanup + re-subscribe) on changes to
props it never declared.
Updated dependencies [
e6caca8,6deab75,6deab75,b70bedc]:@dunky.dev/state-machine@0.3.3
Patch Changes
#65
b70bedcThanks @ivanbanov! - Harden the notify and teardown paths across the core, and cut hot-pathallocations:
notify (a send from inside a subscriber) rebuilds the iteration snapshot
mid-pass — unsubscribing is now final even under re-entrancy. The same
guarantee now holds for connector and store subscribers, and the mechanism
lives in one shared primitive instead of three near-copies.
the pass populated: every cleanup runs (timers and subscriptions all
release), the first error is rethrown after the pass, and the next stop
cannot double-run them.
sync()rule orcombine().subscribe()disposed by hand now detaches fromthe composition's registry — long-lived groups with subscribe/unsubscribe
churn no longer grow it without bound, and
stop()no longer re-runshand-run disposers.
buffers and are captured at read time, so the old post-pass that re-read
every dep is gone. In the benchmark suite this lands recompute ~1.5× and
4-deep computed chains ~1.6× faster.
machine.selectis built once and reused instead of allocating a freshfacade object on every property access, so its identity is stable (safe for
dependency arrays).
versioncounter — bumped on every notify,read by nothing.
@dunky.dev/opentui-state-machine@0.3.4
Patch Changes
#60
c8e94e4Thanks @ivanbanov! - Rolls back 0.4.0's translation-contract surface — it shipped by mistake.DROPPED_HANDLERS/DROPPED_ATTRSare removed, andHandlerTargets/AttrTargetsare now the partial rename maps(
Partial<Record<HandlerKey, string>>) instead of exhaustivenull-accounting records.
What stays is the part that mattered: maps and drop sets are typed by the
real vocabulary keys (
HandlerKey/AttrKey), so a typo'd or unknown entryis a compile error instead of a silent leak.
Updated dependencies [
6deab75,6deab75,c8e94e4]:@dunky.dev/react-state-machine@0.3.4
Patch Changes
#32
e6caca8Thanks @ivanbanov! - Add@dunky.dev/state-machine-dom— the DOM half of the bindings translation,shared by every DOM target. The
aria-*attribute projection and the payloadadapters (
onValueChange/onWheel/onScroll/onScrollEnd→ neutralpayloads, with
preventDefaultbound to its event) were byte-identical in theReact and Solid normalizers; they now live once, in this package, and each
target keeps only what genuinely differs: its handler prop names
(
onChange/onDoubleClickvsonInput/onDblClick), thefocusable→tabindex casing (
tabIndexvstabindex), and its value serialization(React passes ARIA booleans through; Solid stringifies them).
No API change for consumers of the React or Solid packages —
normalizebehaves exactly as before; the shared package becomes a dependency of both.
The motivation is drift-proofing: a payload-adapter fix previously had to be
applied to each DOM target by hand, and had already diverged once.
#60
c8e94e4Thanks @ivanbanov! - Rolls back 0.4.0's translation-contract surface — it shipped by mistake.DROPPED_HANDLERS/DROPPED_ATTRSare removed, andHandlerTargets/AttrTargetsare now the partial rename maps(
Partial<Record<HandlerKey, string>>) instead of exhaustivenull-accounting records.
What stays is the part that mattered: maps and drop sets are typed by the
real vocabulary keys (
HandlerKey/AttrKey), so a typo'd or unknown entryis a compile error instead of a silent leak.
#32
e6caca8Thanks @ivanbanov! -preventDefaulton the adapted payloads (ChangePayload,WheelPayload) nowactually works.
normalize()used to copy the native event'spreventDefaultonto the payload detached from its event, so the first
connect()to callpayload.preventDefault()would throwTypeError: Illegal invocation— nativeDOM methods require
thisto be a realEvent. The payload now carries aclosure bound to the originating event:
Latent until now (no in-repo
connect()calls it yet), but it is the behaviorthe bindings contract promises, so it's fixed in both DOM targets before a
component relies on it.
Updated dependencies [
e6caca8,6deab75,6deab75,b70bedc]:@dunky.dev/state-machine-bindings@0.4.1
Patch Changes
#60
c8e94e4Thanks @ivanbanov! - Rolls back 0.4.0's translation-contract surface — it shipped by mistake.DROPPED_HANDLERS/DROPPED_ATTRSare removed, andHandlerTargets/AttrTargetsare now the partial rename maps(
Partial<Record<HandlerKey, string>>) instead of exhaustivenull-accounting records.
What stays is the part that mattered: maps and drop sets are typed by the
real vocabulary keys (
HandlerKey/AttrKey), so a typo'd or unknown entryis a compile error instead of a silent leak.