# Changelog

All notable changes to `kview/ui-core` are documented here.

## [Unreleased]

- Added `KviewMultiSelect`, a searchable checkbox dropdown that stays open
  during selection, submits Laravel-compatible array values and preserves the
  shared field, popover, focus and validation contracts.
- Added render-only `KviewBentoGrid` and `KviewBentoItem` Vue primitives for
  responsive two-, three- and four-column dashboard compositions without
  duplicating card surfaces.
- Made `KviewDatePicker` switch automatically to a localized numeric short
  date with a two-digit year inside narrow containers while preserving the full display value and
  the authoritative ISO form value.
- Added `x-ui.checkbox`/`KviewCheckbox` (standalone checkbox with an
  indeterminate state, backed by Reka `CheckboxRoot` in Vue and a native
  `input[type=checkbox]` in Blade), `x-ui.menu`/`KviewMenu` (contextual action
  menu backed by Reka `DropdownMenu` in Vue and `window.kviewFloating` in
  Blade, with Arrow/Home/End/Escape keyboard support and danger/separator
  items), and `x-ui.separator`/`KviewSeparator` (semantic divider, decorative
  by default). Added the `more-horizontal` icon for menu triggers.
- Added an opt-in `showSelectedIndicator` seam to `KviewDropdown` so a narrow
  consumer can omit the decorative check without changing the selected color,
  submitted value, keyboard behavior, or `aria-selected` state.
- Added typed `id` and `aria-haspopup` forwarding to `KviewIconButton` so
  compact menu and confirmation triggers keep stable popup relationships.
- Prevented touch entry and pointer-restored focus from opening Blade or Vue
  tooltips while preserving mouse/stylus hover, keyboard-visible focus, Escape,
  and dynamically refreshed automatic labels without native `title` bubbles.
- Added portable Vue date-picker and combobox adapters with the existing kView
  form, validation, Teleport, focus, keyboard, and native Laravel submission
  contracts. Lookup fetching remains host-owned.
- Added matching Blade/Vue card surfaces through `x-ui.card` and `KviewCard`,
  with shared default/compact header and body spacing for reusable page
  composition.
- Added `KviewConfirmDialog`, a typed alert-dialog composition over
  `KviewDialog` with safe initial focus, Escape/backdrop cancellation, pending
  guards, trigger-focus restoration, localized defaults, and the historical
  safe mobile gutter/backdrop while the host retains its native destructive
  form.
- Added the `detail` page-header variant to preserve compact record-detail Back,
  title, and action geometry across Blade and Vue.
- Added one canonical Excel-file icon using the historical Font Awesome Free
  5.15.4 silhouette so Blade and Vue shell actions render the same
  package-owned geometry instead of mixing icon runtimes.
- Added public `KviewDialog` and `KviewDropdown` Vue primitives. Reka UI is
  confined to their internal modal/select mechanics while the public API,
  validation/form semantics, Teleport layers, focus restoration, and visual
  classes remain kView-owned.
- Declared Vue and Reka UI as peers of the optional Vue source entry and made
  the clean-consumer Vite fixture resolve Reka from its host installation,
  preventing monorepo-only dependency resolution.
- Added `KviewToastProvider` and `useKviewToast` with typed show, update,
  dismiss, promise, and semantic convenience commands; Vue notifications now
  reuse the Blade toast presentation through a body Teleport with localized
  labels, stable IDs, focus-safe live regions, and complete timer cleanup.
- Added portable Vue avatar and non-modal popover primitives with image
  fallback, body Teleport, viewport collision, topmost Escape handling, focus
  restoration, outside-pointer behavior, and complete listener cleanup.
- Kept nested popovers, date pickers, and confirmation dialogs above their
  owning modal through contextual floating layers while preserving the parent
  focus trap.
- Raised secondary, muted, accent, and informational text tokens to WCAG 2.2
  AA contrast on their default light surfaces.
- Added the optional `@kview/ui-core/vue` source entry with the first typed Vue
  adapters for icons, actions, feedback, loading, text fields, and page headers.
- Added typed Vue adapters for tabs, segmented choices, native switches, and
  grouped commands while preserving the Blade class and accessibility
  contracts.
- Completed the route-pilot foundation with Vue adapters for tooltips,
  breadcrumbs, resource and section headers, form actions, textareas, money
  inputs, and percent inputs; icon buttons now share the semantic tooltip
  policy.
- Preserved external field ARIA states and description IDs, including
  `grammar`/`spelling`, and cleaned up the previous tooltip description when a
  dynamic tooltip ID changes.
- Closed pointer-opened tooltips from document Escape, cleaned up their global
  listeners on dynamic disable or empty content, and kept icon-button focus
  working through a host link adapter.
- Added explicit Inertia action forwarding to Vue empty states and a
  `resetKey` alert contract so a new server flash can reopen identical copy.
- Added a typed Vue UI provider with explicit English defaults, host-localized
  messages, resource icon mappings, and an optional host link-component seam.
- Consolidated Blade, legacy JavaScript, and Vue icon names, aliases, SVG
  geometry, and unknown-name fallback in one package-owned JSON registry.
- Added a package-owned visually hidden utility and stable focus/disabled
  states for shared buttons.

## [0.1.0] - 2026-07-16

- Added tokens, icons, icon buttons, tooltips, floating-layer controllers,
  buttons, forms, dropdowns, date pickers, tabs, feedback, loading states,
  confirmation, headers, and navigation primitives.
- Added Laravel auto-discovery, publishable configuration/assets/translations,
  and Vite entry points.
- Added English and French package translations with client-side label seams.
