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.
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.