@featherk/composables
| Install | |
|---|---|
npm install @featherk/composables |
|
| Latest Version: | 0.17.1 |
| Vue: | 3 |
| License: | MIT |
| Last Updated: | Oct 21, 2026 |
| Links: | npm |
@featherk/composables
Vue 3 composables that improve Kendo UI for Vue behavior and accessibility.
Composables Overview
- Address:
useUSAddress— Orchestrates full US address form behavior, including delayed validation (viauseFieldsetValidationKit), state options, ZIP integration, and normalized submit payloads.- Guide: docs/address/useUSAddress.md
- Address:
useZipTextBox— Dynamic multi-mask ZIP code input (5-digit and ZIP+4) for Kendo VueTextBox, with caret preservation, submit-gated validation, and focus-on-error support. - Date:
useMaskedDateInput— Masked single-date input with steppers and validation. - Form (Low-level):
useFieldsetTouchTracker— Primitive focus-leave touch tracker that powers the validation kit. - Form:
useFieldsetValidationKit— Delayed fieldset validation kit with submit/touch gating, field helpers, invalid-focus targeting, and reset handling. - Grid:
useGridA11y— Accessible row-level navigation and column menu keyboard support.- Guide: docs/grid/useGridA11y.md
- Grid:
useGridActiveFilter— Reactive header class resolver that marks filtered columns as"active". - Grid:
useGridRowAction— Safe, accessible row click and keyboard activation handlers for grid rows with interaction and selection guards. - ID:
useCompositeId— SSR-safe component-scoped DOM ID generation for related controls and ARIA relationships.- Guide: docs/id/useCompositeId.md
- Menu:
usePopupMenu— Accessible Kendo Popup + Menu action-menu toggling, selection modality, and contextual focus restoration.- Guide: docs/menu/usePopupMenu.md
- Grid orchestration overview: docs/menu/usePopupMenuGridOrchestration.md
- Activation anchors: docs/menu/usePopupMenuActivationAnchor.md
- Shared instances: docs/menu/usePopupMenuSharedInstance.md
- Active-ID registry lifecycle: docs/menu/usePopupMenuAndActiveIdRegistry.md
- Focus and exclusivity: docs/menu/usePopupMenuFocusAndExclusivity.md
- Upgrade to 0.13.0: docs/menu/usePopupMenuUpgrade0130.md
- Observer:
useIntersectionObserver— Reactive intersection observation with optional clipping-root tracking and SSR-safe no-op behavior. - Range:
useMaskedDateRangeInput— Masked date range input with validation, clamp, and optional popup coordination. - Registry:
useActiveIdRegistry— Shared active-id bookkeeping for single-open patterns across many grid rows/buttons. - Registry:
useExclusiveGroup— Lifecycle-managed mutual exclusivity for active-id registries. - Time:
useMaskedTimeInput— Masked single-time input with AM/PM conveniences and bounds. - Trap:
usePopupTrap— Focus trap + Escape/Outside click close behavior for popups.- Guide: docs/trap/usePopupTrap.md
- Window:
useWindow— Zero/low-config KendoWindowwrapper: viewport-clamped dragging and resizing, stage transitions, and an internal pointerdown-capture resize/text-selection workaround.- Guide: docs/window/useWindow.md
Utility Export
computeCollisionOffset is a pure utility export, not a Vue composable. It applies per-axis fit or flip collision behavior and is available from @featherk/composables/geometry or the package root.
Importing Composables
You can import directly from subpaths or from the package root.
Subpath imports (recommended for clarity):
// Grid
import {
useGridA11y,
useGridActiveFilter,
useGridRowAction,
type RowActionContext,
} from "@featherk/composables/grid";
// Date input
import {
useMaskedDateInput,
type DateChangePayload,
} from "@featherk/composables/date";
// Date range input
import {
useMaskedDateRangeInput,
type RangeChangePayload,
} from "@featherk/composables/range";
// Time input
import {
useMaskedTimeInput,
type TimeChangePayload,
} from "@featherk/composables/time";
// Popup focus trap utilities
import { usePopupTrap } from "@featherk/composables/trap";
// Kendo Popup + Menu action-menu utilities
import {
usePopupMenu,
type KendoMenuSelectEvent,
} from "@featherk/composables/menu";
// Shared active-id bookkeeping for single-open grid or list patterns
import {
useActiveIdRegistry,
useExclusiveGroup,
} from "@featherk/composables/registry";
// Intersection observer utilities
import { useIntersectionObserver } from "@featherk/composables/observer";
// Geometry utilities
import { computeCollisionOffset } from "@featherk/composables/geometry";
// Component-scoped DOM ID utilities
import { useCompositeId } from "@featherk/composables/id";
// Address utilities
import {
useZipTextBox,
useUSAddress,
type USAddressSubmitPayload,
} from "@featherk/composables/address";
// Form utilities
import {
useFieldsetValidationKit,
useFieldsetTouchTracker,
} from "@featherk/composables/form";
// Kendo Window wrapper
import { useWindow } from "@featherk/composables/window";
Root imports (types are aliased to avoid name collisions):
import {
useGridA11y,
useGridActiveFilter,
useGridRowAction,
type RowActionContext,
useMaskedDateInput,
type DateChangePayload,
useMaskedDateRangeInput,
type RangeChangePayload,
useMaskedTimeInput,
type TimeChangePayload,
usePopupTrap,
usePopupMenu,
type KendoMenuSelectEvent,
useActiveIdRegistry,
useExclusiveGroup,
useIntersectionObserver,
useCompositeId,
useZipTextBox,
useUSAddress,
useFieldsetValidationKit,
useFieldsetTouchTracker,
useWindow,
} from "@featherk/composables";
usePopupTrap depends on VueUse integrations and focus-trap internally. Those runtime packages are shipped as regular dependencies of @featherk/composables, so consumers do not need to install them separately.
Kendo UI Compatibility
Built and tested against Kendo UI for Vue 6.4.1. The composables do not import Kendo at runtime, but they depend on the DOM structure and k-* classes rendered by specific Kendo versions, and several public types come from Kendo packages. Those packages are declared as optional peer dependencies (^6.4.1): none is required, but any you install must be in the supported range.
| Composables | Kendo package |
|---|---|
useGridA11y, useGridActiveFilter, useGridRowAction |
@progress/kendo-vue-grid, @progress/kendo-data-query |
useWindow |
@progress/kendo-vue-dialogs |
usePopupMenu |
@progress/kendo-vue-layout, @progress/kendo-vue-popup |
usePopupTrap |
@progress/kendo-vue-popup |
useMaskedDateInput, useMaskedDateRangeInput, useMaskedTimeInput |
@progress/kendo-vue-dateinputs |
useZipTextBox, useUSAddress |
@progress/kendo-vue-inputs |
Peer Dependencies
- Required:
vue(3.5+)
npm install vue
- Optional: the Kendo packages listed under Kendo UI Compatibility, for the composables you use.
Notes
- Every public feature area has a source
index.tsbarrel, is re-exported from the package root, and has a matching public package subpath. For example, importuseIntersectionObserverfrom@featherk/composables/observer,useCompositeIdfrom@featherk/composables/id, or either from the package root. Consumers should not import internaldistpaths. - The runtime files for
useGridA11y,useGridActiveFilter, anduseGridRowActionlive insrc/grid/. All three are re-exported from the package root and from@featherk/composables/grid— no import path changes are needed by consumers.
Changelog
Release history for all @featherk/* packages is maintained in a single CHANGELOG.md.
Related Packages
Framework-agnostic accessibility helpers (ARIA live regions, focus management, r...
WCAG accessibility audit tool — Nuxt layer with report generation, PDF export an...
Version History
| Version | Released | License |
|---|---|---|
| 0.17.1 | MIT | |
| 0.17.0 | MIT | |
| 0.16.2 | MIT | |
| 0.16.1 | MIT | |
| 0.16.0 | MIT | |
| 0.15.8 | MIT | |
| 0.15.7 | MIT | |
| 0.15.6 | MIT | |
| 0.15.5 | MIT | |
| 0.15.4 | MIT | |
| 0.15.3 | MIT | |
| 0.15.2 | MIT | |
| 0.15.1 | MIT | |
| 0.15.0 | MIT | |
| 0.14.1 | MIT | |
| 0.14.0 | MIT | |
| 0.13.9 | MIT | |
| 0.13.8 | MIT | |
| 0.13.7 | MIT | |
| 0.13.6 | MIT | |
| 0.13.5 | MIT | |
| 0.13.4 | MIT | |
| 0.13.3 | MIT | |
| 0.13.2 | MIT | |
| 0.13.1 | MIT | |
| 0.13.0 | MIT | |
| 0.12.5 | MIT | |
| 0.12.4 | MIT | |
| 0.12.3 | MIT | |
| 0.12.2 | MIT |
Showing the latest 30 of 120. See every release on npm