## 0.3.1

### Patch Changes

* a157bae: Fix arrow base component to use smooth bezier curve path instead of polygon. Correct `TooltipArrow` and `PopoverArrow` to use `PopperArrow` primitive instead of `PopperAnchor` (was rendering invisible). Fix `asChild` propagation to `Primitive.svg` that caused SVG to become a Slot and eject children.

## 0.3.0

### Minor Changes

* 95638de: Audit-driven refactor across all 15 public packages. Closes type holes, hardens security boundaries, eliminates dead code, and dedups duplicated patterns.

  **Highlights**

  * `duck-docs` — CompiledMdxBody branded type gates `new Function(body)`; sanitizeSvg covers SMIL, unquoted javascript: URIs, nested script, CSS url(), bare iframe; code-preview tag + attr allowlists
  * `duck-registry-build` — safe-path containment at every fs sink; per-phase Zod cache schemas; JSON.stringify in generated TSX; cache manifest rejection on tamper
  * `duck-cli` — install pipeline path containment unified across add/init/update; env-var allowlist contract reconciled with one-time warning; aliases.ui regex validation
  * `duck-primitives` — `observe-element-rect` rAF loop guard (no leak when empty); `compose-ref` useCallback memo fix; popper forwardRef restored for R18 peer compat
  * `duck-hooks` — `useDebounce` is now a real hook (stable identity, unmount cleanup); `useStableId` delegates to React.useId (SSR-safe); `scheduleTransitionTimeout` rename strips two `useHookAtTopLevel` lint suppressions
  * `duck-lazy` — spread order fix restores the lazy swap; `next/image` moved behind `/lazy-image-next` subpath so non-Next consumers don't pull the peer
  * `duck-vim` — single document listener fans out to chord matcher + sequence manager; canonical modifier order; `requireReset` auto-clears for chord bindings; all three hook dep arrays corrected
  * `duck-variants` — `Props<T, D>` makes defaulted variant keys optional and non-defaulted required; bounded `preludeCache` LRU; second-layer `filter2` set eliminates last clone in hot path
  * `duck-ttest` — `predictates/` renamed to `predicates/`, twin dirs deleted, type-utility duplicates reconciled to canonical sources, `IsVoid` actually distinguishes void from undefined now
  * `duck-calendar` — `./*` wildcard export removed; falsy-zero `weekStartDay: 0` (Sunday) bug fixed; Gregorian helpers extracted; Hebrew `addMonths` uses Metonic cycle
  * `duck-libs` — `cnMemo` bounded LRU; `filteredObject` rejects typo keys at compile time; `parseDate` rejects ambiguous one-token inputs
  * `duck-query` — single AnyReq boundary cast replaces 14 `as any`; param regex escape; throws on unresolved `:tokens`
  * `registers` — schema tightened (`z.any()` removed); ~1000 LoC of identical block-registry boilerplate replaced with builders
  * `registry-ui` — `_audio` / `_upload` (~1.1K LoC) deleted; `motion-shell` HOC + `withMotion` collapses simple motion clones; `toDirection()` narrower replaces 52 `as IDirection.Kind` casts; chart `CSS_NAMED_COLORS` finite allowlist
  * `duck-motion` — refcounted body `pointer-events` ownership; easing/blur/duration token dedup; half of public exports were unused and removed

  Tests: 3133+ across the monorepo, all green. Type-checks clean across every project. No commits skipped hooks.

### Patch Changes

* Updated dependencies \[95638de]
  * @gentleduck/calendar@0.4.0

## 0.2.14

### Patch Changes

* 95dbbce: Standardize README headers across all packages: centered logo, h1, tagline, nav links, and npm badges (matching the @duck-md template). Replace per-repo `*.gentleduck.org` subdomain refs with path-based `gentleduck.org/duck-<name>` URLs. No runtime code changes.

## 0.2.13

### Patch Changes

* 918b34c: Strip `workspace:*` and `catalog:` protocol tokens from `devDependencies`/`dependencies`/`peerDependencies` of every public package before `changeset publish`. Previously published artifacts leaked these tokens into npm metadata, which broke strict resolvers (bun, deno) for downstream consumers. Adds `scripts/clean-publish.ts` and wires it into the root `release` script with a `git checkout` restore step so source remains workspace-friendly.

## 0.2.12

### Patch Changes

* b4706d3: Replace `workspace:*` deps in published `dependencies` and `peerDependencies` with explicit semver. Previous publishes leaked `workspace:*` to the npm tarball, breaking `bun install` for downstream consumers (`error: Workspace dependency "@gentleduck/calendar" not found`).

## 0.2.11

### Patch Changes

* df57671: fix(slot): use cn() with twMerge in mergeProps for className resolution

  Raw string join caused conflicting Tailwind utilities (e.g. `inline-flex` vs `flex`, `gap-1` vs `gap-2`) to both appear in the final className, producing non-deterministic CSS and hydration mismatches when Slot clones client components like Next.js Link.

## 0.2.10

### Patch Changes

* 7d6fb7b: Align tsconfig shared configs, fix TS strict mode errors (exactOptionalPropertyTypes, verbatimModuleSyntax), align package.json deps to catalog refs, apply biome lint fixes.
* Updated dependencies \[7d6fb7b]
  * @gentleduck/calendar@0.3.0

## 0.2.9

### Patch Changes

* 5136398: fix: popover and tooltip arrow components now use PopperArrow instead of PopperAnchor, fixing positioning when arrows are present
* Updated dependencies \[32d0136]
  * @gentleduck/calendar@0.2.1

## 0.2.8

### Patch Changes

* 76e824b: fix: presence animation interrupt, breadcrumb keys, theme hydration, nested buttons

  * Presence: cancel in-flight exit animation on re-mount to prevent stale animationend from unmounting re-opened content
  * Breadcrumb: move key from BreadcrumbItem to Fragment (React key warning)
  * ModeSwitcher: use stable aria-label until mounted to prevent hydration mismatch
  * PopoverTrigger: add asChild to calendar-7 and combobox-7 to prevent nested buttons

## 0.2.7

### Patch Changes

* Updated dependencies \[58d1c61]
  * @gentleduck/calendar@0.2.0

## 0.2.6

### Patch Changes

* 6f0e067: Standardize package exports to use explicit named exports, add `sideEffects` field and `types` export entries to package.json, and annotate internal APIs with `@internal` JSDoc tags.

## 0.2.5

### Patch Changes

* 2b6e8d0: Resolve all biome lint warnings, improve type safety, and add test coverage across the monorepo.

## 0.2.4

### Patch Changes

* fix(search): disable primitive's built-in filter when using custom lunr search

  The command menu had two competing filtering systems: lunr-based search and the primitive's
  substring filter. The primitive's filter was hiding items via `el.hidden = true` even when
  lunr correctly found them, causing search results to not appear. Added `shouldFilter` prop
  to the Command primitive to allow disabling the built-in filter.

## 0.2.3

### Patch Changes

* 7c2aa88: Update dependencies and publish unpublished packages

## 0.2.2

### Patch Changes

* c9bbef8: Documentation and style updates.

## 0.2.1

### Patch Changes

* ad86755: Add 15+ new headless primitive components, full RTL/direction support, and major architecture overhaul.

  **New Primitives:**

  * Add dialog, alert-dialog, tooltip, popover, hover-card with individual file splitting
  * Add popper positioning primitive with CSS variable-based placement
  * Add focus-scope and dismissable-layer for overlay management
  * Add menu, context-menu, and menubar primitives with roving-focus navigation
  * Add progress primitive with split file structure
  * Add command primitive with keyboard-driven list navigation
  * Add toggle, toggle-group, and radio-group primitives
  * Add avatar primitive with composition API and AvatarGroup support
  * Add input-otp primitive module
  * Add pagination primitive

  **RTL / Direction Support:**

  * Add shared direction API with DirectionProvider DOM wrapper
  * Pass dir prop from context to all exported primitive components
  * Add dir prop to Dialog, Popover, HoverCard, and Tooltip
  * Fix select RTL support with logical CSS positioning

  **Architecture:**

  * Add slot composition system for flexible component rendering
  * Add shared hooks library (useControllableState, useCallbackRef, useComposedRefs)
  * Add shared lib utilities (composeEventHandlers, createContext)
  * Add primitive element wrappers and utility primitives (Presence, Portal, VisuallyHidden)
  * Reorganize file structure with data-slot attributes throughout
  * Extract shared list-navigation logic for Select and Command

  **Fixes:**

  * Fix radio-group arrow-key navigation sync with checked state
  * Fix select value text duplication on item click
  * Narrow avatar src type to string for TypeScript compatibility
  * Fix CSS variable typos in popper content
  * Fix internal registry source path and build types

## 0.2.0

### Minor Changes

* 36f9364: Add dynamic z-index layering system (`useDynamicLayer`) for correct stacking of nested overlays. Integrate into dialog, popover, sheet, and tooltip primitives. Fix scrollbar lock to use reference counting so concurrent overlays don't unlock prematurely.

## 0.1.45

### Patch Changes

* 4f93768: Fix compatibility with duck-gen output format and resolve build issues with generated component wrappers.

## 0.1.44

### Patch Changes

* d0a2c1d: Fix tooltip primitive behavior by removing click-toggle on the trigger.
* d0a2c1d: Add `disabled` option for focus management in `Tooltip.Content` to prevent focus trapping when tooltip is used as a passive hint.

## 0.1.43

### Patch Changes

* 45ec82f: Fix context menu positioning and event propagation to prevent menu from appearing at incorrect coordinates on right-click.

## 0.1.42

### Patch Changes

* cd47e32: Fix overlay dismiss behavior when clicking outside nested dialog/popover stacks.

## 0.1.41

### Patch Changes

* Fix scroll lock edge case where rapid open/close cycles could leave the body in a locked state.

## 0.1.1

### Patch Changes

* Initial public release of @gentleduck/primitives headless component library.