arkynChangelogGuides
arkyn
docs / changelogs / v3xx

Changelog v3.x.x

This document tracks every release of Arkyn's stable v3.x.x line, starting at v3.0.2, from the most recent version down. Each entry is written from the perspective of the library's consumers: what actually changed in practice, not just which files were touched.
For a quick summary of the current release, see Latest. For the beta history that led up to v3.0.2, see the v3.0.1-beta changelog. If you're upgrading straight from Arkyn v2.2.3, see the v2 → v3 migration guide instead.

v3.0.4

Date: 2026-07-19
Maintenance release: fixes a PhoneInput round-trip bug left over from v3.0.3, and cleans up comment/JSDoc prose across the codebase. No new components, hooks, or public API changes.

Fixes

  • PhoneInput: no longer duplicates or misplaces the country dial-code digits when the onChange value is round-tripped straight back as the controlled value, a common controlled-input pattern in React. A value in international format (starting with +) now has the selected country's dial code stripped before masking; values without a leading + behave exactly as in v3.0.3. See Breaking Changes.

Internal changes

  • Reformats comments, JSDoc, and README prose across ~100 files in @arkyn/components, @arkyn/server, and @arkyn/shared (dashes replaced with commas for readability); no behavioral, type, or build changes.
  • Two example strings updated in the internal apps/development playground (components.slider.tsx, components.tooltip.tsx); cosmetic only.
  • Version bumped across all packages (@arkyn/components, @arkyn/server, @arkyn/shared, @arkyn/templates) to 3.0.4; @arkyn/templates has no code changes at all in this release, and @arkyn/server/@arkyn/shared only have the prose cleanup above.

v3.0.3

Date: 2026-07-19
Introduces DatePicker, a new form field for single-date and date-range selection built on top of the existing Calendar component, alongside a PhoneInput fix that changes what a controlled value renders as, a ModalProvider stale-closure fix, and an accessibility fix in FieldTemplate that benefits every form field in the library.

New

  • Adds DatePicker (@arkyn/components/datePicker, styles via @arkyn/components/datePicker.css), a form field wrapping Calendar in a popover, supporting type="single" (Date) and type="range" ([Date, Date]) selection, the same solid/outline/underline variants and md/lg sizes used across the library, prefix/leftIcon, errorMessage/useForm integration, disabled/readOnly/isLoading states, and a hidden input for native form submission (YYYY-MM-DD in single mode, a JSON-encoded [start, end] pair in range mode). Ships with 6 internal, non-exported subcomponents (DatePickerContainer, DatePickerContent, DatePickerCalendarContainer, DatePickerChevron, DatePickerOverlay, DatePickerSpinner) and a ~20-case test suite. Displayed dates and default text are fixed to the pt-BR locale in this version. See the DatePicker docs.

Fixes

  • PhoneInput: a controlled value is now formatted with the selected country's mask before being displayed, previously it rendered the raw digits while typing already applied the mask, an inconsistency between controlled and uncontrolled use. This changes the rendered output for existing controlled usages, see Breaking Changes.
  • FieldTemplate: labels now receive htmlFor, correctly associating them with their field. This is a shared service used by nearly every form field (Checkbox, CurrencyInput, DatePicker, Input, MaskedInput, MultiSelect, PhoneInput, RadioGroup, Select, Switch, Textarea, and more), so the fix applies across all of them at once.
  • ModalProvider: fixes a stale-closure bug where openModal/closeModal updated state from a closed-over variable instead of a functional setState updater, risking a lost update under fast/concurrent calls.

Performance

  • ModalProvider: memoizes modalIsOpen, modalData, openModal, closeModal, closeAll, and the context value itself (useCallback/useMemo), reducing unnecessary re-renders in useModal consumers.

Internal changes

  • Adds an optional third placeholder parameter (default "9") to the internal applyMask utility, used by PhoneInput to support non-Brazilian country masks that use "_" as their placeholder character.
  • Adds datePicker/datePicker.css entries to exports and typesVersions in @arkyn/components's package.json.
  • Reformats indentation in all four packages' package.json files; no semantic changes.
  • Version bumped across all packages (@arkyn/components, @arkyn/server, @arkyn/shared, @arkyn/templates) to 3.0.3; only @arkyn/components has actual code changes in this release.
  • Internal apps/development playground: adds demo routes for DatePicker and for an automation pattern combining the existing useAutomation, useModal, and useDrawer; adds small "controlled" examples to about a dozen other existing demo pages. None of this affects published package behavior.

Notes

  • DatePicker's popover decides to open above or below the field only once, when it opens, it does not recalculate on window resize or scroll.
  • DatePicker exposes an onBlur prop, but it does not appear to be invoked internally in this version, treat it as unconfirmed rather than relying on it.

v3.0.2

Date: 2026-07-13
The first stable release of Arkyn v3. Promotes the entire v3.0.1-beta line (v3.0.1-beta.139 through v3.0.1-beta.207) to a stable, non-beta version, consolidating the full v2.2.3 → v3 rewrite described in the migration guide, together with a final round of stabilization corrections across all four packages (@arkyn/components, @arkyn/server, @arkyn/shared, @arkyn/templates).

Notes

  • Every feature, fix, and breaking change introduced across the beta line remains in effect in v3.0.2, see the v3.0.1-beta changelog for that full history, and Breaking Changes for anything that requires a code change.
  • Version bumped across all packages (@arkyn/components, @arkyn/server, @arkyn/shared, @arkyn/templates) to 3.0.2, dropping the -beta suffix and moving from the beta npm dist-tag to latest.
Related in Tags
On this page