@vuecs/navigation 4.0.1 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,20 +1,54 @@
1
1
  # @vuecs/navigation
2
2
 
3
- [![npm version](https://badge.fury.io/js/@vuecs%2Fnavigation.svg)](https://badge.fury.io/js/@vuecs%2Fnavigation)
4
- [![main](https://github.com/Tada5hi/vuecs/actions/workflows/main.yml/badge.svg)](https://github.com/Tada5hi/vuecs/actions/workflows/main.yml)
3
+ [![npm version](https://img.shields.io/npm/v/@vuecs/navigation)](https://www.npmjs.com/package/@vuecs/navigation)
4
+ [![CI](https://github.com/Tada5hi/vuecs/actions/workflows/main.yml/badge.svg)](https://github.com/Tada5hi/vuecs/actions/workflows/main.yml)
5
+ [![license](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE)
5
6
 
6
- Multi-level navigation for Vue 3 with optional `vue-router` integration. Every `<VCNavItems>` owns its items via a `:data` prop; navs opt into publishing to / reading from a shared reactive registry for dependent layouts (e.g. header sidebar). Also ships `<VCStepper>` (built on Reka's `StepperRoot`) for multi-step wizards / checkout / onboarding flows.
7
+ **Multi-level navigation for Vue 3**, part of [vuecs](https://github.com/tada5hi/vuecs). Each `<VCNavItems>` owns its items via a `:data` prop (plain array, sync fn, or async resolver), and dependent navs coordinate through a shared reactive registry header tabs that swap a sidebar with zero app wiring.
7
8
 
8
- Full documentation:
9
+ ## ✨ What's inside
9
10
 
10
- - [Navigation component](https://vuecs.dev/components/navigation)
11
- - [Navigation guide](https://vuecs.dev/guide/navigation)
12
- - [Stepper component](https://vuecs.dev/components/stepper)
11
+ - 🗂️ **`:data`-driven** — pass `NavigationItem[]`, a function, or an async resolver receiving `{ path, registry }`; reactive reads retrigger automatically, `refresh()` for imperative re-runs.
12
+ - 📡 **Reactive registry** — a nav publishes its resolved tree under a `registry-id`; other navs read it (`items`, `active`, `activeTrail`) and derive their own list. The canonical header → sidebar pattern.
13
+ - 🎯 **Three active concepts** — `active` (exact leaf, best path-score match), `activeWithin` (ancestor highlight + auto-open), `activeTrail` (root → leaf chain). Url-less items become click-driven section switchers.
14
+ - 📐 **Submenu modes** — `collapse` (inline Collapsible), `dropdown` (Reka NavigationMenu flyout), or `auto`; full arrow / Home / End keyboard navigation.
15
+ - 🧭 **Router-optional** — soft-reads vue-router's `$route` when present; works router-free with an explicit `:path`.
16
+ - 🪜 **`<VCStepper>` compound** — Stepper / Item / Trigger / Indicator / Title / Description / Separator on Reka's Stepper, for wizards and checkout flows, with linear-mode gating.
17
+
18
+ ## 📦 Installation
13
19
 
14
20
  ```bash
15
21
  npm install @vuecs/navigation
16
22
  ```
17
23
 
24
+ ## ⚡ Usage
25
+
26
+ ```vue
27
+ <VCNavItems
28
+ :data="[
29
+ { name: 'Dashboard', url: '/', icon: 'lucide:home' },
30
+ {
31
+ name: 'Settings',
32
+ icon: 'lucide:settings',
33
+ children: [
34
+ { name: 'Profile', url: '/settings/profile' },
35
+ { name: 'Security', url: '/settings/security' },
36
+ ],
37
+ },
38
+ ]"
39
+ />
40
+ ```
41
+
42
+ ```vue
43
+ <!-- dependent navs: top bar publishes, sidebar derives -->
44
+ <VCNavItems :data="topItems" registry registry-id="top" />
45
+ <VCNavItems :data="({ registry }) => registry('top').active.value[0]?.children ?? []" />
46
+ ```
47
+
48
+ ## 📚 Documentation
49
+
50
+ [Navigation component](https://vuecs.dev/components/navigation) · [Navigation guide](https://vuecs.dev/guide/navigation) · [Stepper](https://vuecs.dev/components/stepper)
51
+
18
52
  ## License
19
53
 
20
54
  Made with 💚
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/components/item/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EACR,SAAS,EACT,sBAAsB,EACtB,QAAQ,EACR,SAAS,EAEZ,MAAM,KAAK,CAAC;AAqBb,OAAO,KAAK,EACR,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,KAAK,EACR,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,SAAS,CAAC;AAIjB,QAAA,MAAM,YAAY;;cAEM,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;cAQlC,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;;OAKG;;cAEiB,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;OAIG;;cAE2B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAG1D;;;;OAIG;;cAE2B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAItC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cAItD,QAAQ,CAAC,aAAa,CAAC;;;CAG9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvE,eAAO,MAAM,SAAS;;cAnDE,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;cAQlC,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;;OAKG;;cAEiB,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;OAIG;;cAE2B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAG1D;;;;OAIG;;cAE2B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAItC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cAItD,QAAQ,CAAC,aAAa,CAAC;;;;;;;cA5CvB,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;cAQlC,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;;OAKG;;cAEiB,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;OAIG;;cAE2B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAG1D;;;;OAIG;;cAE2B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAItC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cAItD,QAAQ,CAAC,aAAa,CAAC;;;;;;;;;;;;eAW5B,yBAAyB;UAC9B,oBAAoB;SACrB,mBAAmB;iBACX,wBAAwB;iBACxB,wBAAwB;yEAmQ3C,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/components/item/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EACR,SAAS,EACT,sBAAsB,EACtB,QAAQ,EACR,SAAS,EAEZ,MAAM,KAAK,CAAC;AAqBb,OAAO,KAAK,EACR,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,KAAK,EACR,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,SAAS,CAAC;AAIjB,QAAA,MAAM,YAAY;;cAEM,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;cAQlC,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;;OAKG;;cAEiB,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;OAIG;;cAEqC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAGpE;;;;OAIG;;cAEqC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAIhD,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cAItD,QAAQ,CAAC,aAAa,CAAC;;;CAG9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,sBAAsB,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvE,eAAO,MAAM,SAAS;;cAnDE,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;cAQlC,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;;OAKG;;cAEiB,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;OAIG;;cAEqC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAGpE;;;;OAIG;;cAEqC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAIhD,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cAItD,QAAQ,CAAC,aAAa,CAAC;;;;;;;cA5CvB,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;cAQlC,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;;OAKG;;cAEiB,QAAQ,CAAC,qBAAqB,CAAC;;;IAGnD;;;;OAIG;;cAEqC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAGpE;;;;OAIG;;cAEqC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAIhD,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cAItD,QAAQ,CAAC,aAAa,CAAC;;;;;;;;;;;;eAW5B,yBAAyB;UAC9B,oBAAoB;SACrB,mBAAmB;iBACX,wBAAwB;iBACxB,wBAAwB;yEAmQ3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/components/items/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EACR,SAAS,EACT,sBAAsB,EACtB,QAAQ,EACR,SAAS,EAGT,WAAW,EACd,MAAM,KAAK,CAAC;AAgBb,OAAO,KAAK,EACR,cAAc,EAEd,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAY5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGrD,QAAA,MAAM,aAAa;IACf;;;;;;;;;OASG;;cAE4B,QAAQ,CAAC,cAAc,EAAE,GAAG,kBAAkB,CAAC;;;IAG9E,yEAAyE;;;;;IAEzE,wEAAwE;;;;;IAExE;;;;OAIG;;;;;IAEH;;;;OAIG;;cACqB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;cAEhB,QAAQ,CAAC,qBAAqB,CAAC;;;IAC9D;;;OAGG;;cACwB,QAAQ,CAAC,iBAAiB,CAAC;;;IACtD;;;;;OAKG;;cAC6B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D;;;;OAIG;;cACiC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAClC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cACpD,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzE,eAAO,MAAM,UAAU;IAxDnB;;;;;;;;;OASG;;cAE4B,QAAQ,CAAC,cAAc,EAAE,GAAG,kBAAkB,CAAC;;;IAG9E,yEAAyE;;;;;IAEzE,wEAAwE;;;;;IAExE;;;;OAIG;;;;;IAEH;;;;OAIG;;cACqB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;cAEhB,QAAQ,CAAC,qBAAqB,CAAC;;;IAC9D;;;OAGG;;cACwB,QAAQ,CAAC,iBAAiB,CAAC;;;IACtD;;;;;OAKG;;cAC6B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D;;;;OAIG;;cACiC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAClC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cACpD,QAAQ,CAAC,aAAa,CAAC;;;;;;IAnDvD;;;;;;;;;OASG;;cAE4B,QAAQ,CAAC,cAAc,EAAE,GAAG,kBAAkB,CAAC;;;IAG9E,yEAAyE;;;;;IAEzE,wEAAwE;;;;;IAExE;;;;OAIG;;;;;IAEH;;;;OAIG;;cACqB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;cAEhB,QAAQ,CAAC,qBAAqB,CAAC;;;IAC9D;;;OAGG;;cACwB,QAAQ,CAAC,iBAAiB,CAAC;;;IACtD;;;;;OAKG;;cAC6B,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D;;;;OAIG;;cACiC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAClC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cACpD,QAAQ,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;UAS7C,qBAAqB;yEAqPjC,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/components/items/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EACR,SAAS,EACT,sBAAsB,EACtB,QAAQ,EACR,SAAS,EAGT,WAAW,EACd,MAAM,KAAK,CAAC;AAgBb,OAAO,KAAK,EACR,cAAc,EAEd,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAY5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGrD,QAAA,MAAM,aAAa;IACf;;;;;;;;;OASG;;cAE4B,QAAQ,CAAC,cAAc,EAAE,GAAG,kBAAkB,CAAC;;;IAG9E,yEAAyE;;;;;IAEzE,wEAAwE;;;;;IAExE;;;;OAIG;;;;;IAEH;;;;OAIG;;cACqB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;cAEhB,QAAQ,CAAC,qBAAqB,CAAC;;;IAC9D;;;OAGG;;cACwB,QAAQ,CAAC,iBAAiB,CAAC;;;IACtD;;;;;OAKG;;cACuC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE;;;;OAIG;;cAC2C,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAC5C,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cACpD,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzE,eAAO,MAAM,UAAU;IAxDnB;;;;;;;;;OASG;;cAE4B,QAAQ,CAAC,cAAc,EAAE,GAAG,kBAAkB,CAAC;;;IAG9E,yEAAyE;;;;;IAEzE,wEAAwE;;;;;IAExE;;;;OAIG;;;;;IAEH;;;;OAIG;;cACqB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;cAEhB,QAAQ,CAAC,qBAAqB,CAAC;;;IAC9D;;;OAGG;;cACwB,QAAQ,CAAC,iBAAiB,CAAC;;;IACtD;;;;;OAKG;;cACuC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE;;;;OAIG;;cAC2C,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAC5C,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cACpD,QAAQ,CAAC,aAAa,CAAC;;;;;;IAnDvD;;;;;;;;;OASG;;cAE4B,QAAQ,CAAC,cAAc,EAAE,GAAG,kBAAkB,CAAC;;;IAG9E,yEAAyE;;;;;IAEzE,wEAAwE;;;;;IAExE;;;;OAIG;;;;;IAEH;;;;OAIG;;cACqB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;cAEhB,QAAQ,CAAC,qBAAqB,CAAC;;;IAC9D;;;OAGG;;cACwB,QAAQ,CAAC,iBAAiB,CAAC;;;IACtD;;;;;OAKG;;cACuC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE;;;;OAIG;;cAC2C,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;cAC5C,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;;;;cACpD,QAAQ,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;UAS7C,qBAAqB;yEAqPjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepperDescription.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperDescription.vue"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,uBAAuB;IACzB,yFAAyF;;;;;IAEzF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,OAAO,uBAAuB,CAAC,CAAC;wBAExE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,yFAAyF;;;;;IAEzF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,yFAAyF;;;;;IAEzF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAoCzD,CAAC"}
1
+ {"version":3,"file":"StepperDescription.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperDescription.vue"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,uBAAuB;IACzB,yFAAyF;;;;;IAEzF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,OAAO,uBAAuB,CAAC,CAAC;wBAExE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,yFAAyF;;;;;IAEzF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,yFAAyF;;;;;IAEzF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAoCzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepperIndicator.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperIndicator.vue"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,qBAAqB;IACvB,uFAAuF;;;;;IAEvF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,OAAO,qBAAqB,CAAC,CAAC;wBAEpE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,uFAAuF;;;;;IAEvF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,uFAAuF;;;;;IAEvF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAuCzD,CAAC"}
1
+ {"version":3,"file":"StepperIndicator.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperIndicator.vue"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,qBAAqB;IACvB,uFAAuF;;;;;IAEvF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,OAAO,qBAAqB,CAAC,CAAC;wBAEpE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,uFAAuF;;;;;IAEvF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,uFAAuF;;;;;IAEvF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAuCzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepperSeparator.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperSeparator.vue"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,qBAAqB;IACvB,uFAAuF;;;;;IAEvF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,OAAO,qBAAqB,CAAC,CAAC;wBAEpE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,uFAAuF;;;;;IAEvF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,uFAAuF;;;;;IAEvF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAoCzD,CAAC"}
1
+ {"version":3,"file":"StepperSeparator.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperSeparator.vue"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,qBAAqB;IACvB,uFAAuF;;;;;IAEvF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,OAAO,qBAAqB,CAAC,CAAC;wBAEpE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,uFAAuF;;;;;IAEvF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,uFAAuF;;;;;IAEvF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAoCzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepperTitle.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperTitle.vue"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,iBAAiB;IACnB,mFAAmF;;;;;IAEnF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,OAAO,iBAAiB,CAAC,CAAC;wBAE5D,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,mFAAmF;;;;;IAEnF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,mFAAmF;;;;;IAEnF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAoCzD,CAAC"}
1
+ {"version":3,"file":"StepperTitle.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperTitle.vue"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,iBAAiB;IACnB,mFAAmF;;;;;IAEnF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,OAAO,iBAAiB,CAAC,CAAC;wBAE5D,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,mFAAmF;;;;;IAEnF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,mFAAmF;;;;;IAEnF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EAoCzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepperTrigger.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperTrigger.vue"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,mBAAmB;IACrB,qFAAqF;;;;;IAErF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,OAAO,mBAAmB,CAAC,CAAC;wBAEhE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,qFAAqF;;;;;IAErF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,qFAAqF;;;;;IAErF,0BAA0B;;cACM,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IAC5D,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EA4CzD,CAAC"}
1
+ {"version":3,"file":"StepperTrigger.vue.d.ts","sourceRoot":"","sources":["../../../src/components/stepper/StepperTrigger.vue"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAA0B,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,QAAA,MAAM,mBAAmB;IACrB,qFAAqF;;;;;IAErF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;CAC1D,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,OAAO,mBAAmB,CAAC,CAAC;wBAEhE,OAAO,YAAY;AAAxC,wBAAyC;AAQzC,QAAA,MAAM,YAAY;IApBd,qFAAqF;;;;;IAErF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;IAPvD,qFAAqF;;;;;IAErF,0BAA0B;;cACgB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;IACtE,yDAAyD;;cAC3B,QAAQ,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;;;IACjF,wDAAwD;;cACxB,QAAQ,CAAC,aAAa,CAAC;;;;;;;;4EA4CzD,CAAC"}
package/dist/index.mjs CHANGED
@@ -304,7 +304,11 @@ const VCNavItem = defineComponent({
304
304
  * collapse mode only.
305
305
  */
306
306
  as: {
307
- type: [String, Object],
307
+ type: [
308
+ String,
309
+ Object,
310
+ Function
311
+ ],
308
312
  default: "li"
309
313
  },
310
314
  /**
@@ -313,7 +317,11 @@ const VCNavItem = defineComponent({
313
317
  * Honored in collapse mode only.
314
318
  */
315
319
  itemsAs: {
316
- type: [String, Object],
320
+ type: [
321
+ String,
322
+ Object,
323
+ Function
324
+ ],
317
325
  default: "ul"
318
326
  },
319
327
  themeClass: {
@@ -539,7 +547,11 @@ const VCNavItems = defineComponent({
539
547
  * dropdown mode keeps Reka's NavigationMenu primitives.
540
548
  */
541
549
  as: {
542
- type: [String, Object],
550
+ type: [
551
+ String,
552
+ Object,
553
+ Function
554
+ ],
543
555
  default: "ul"
544
556
  },
545
557
  /**
@@ -548,7 +560,11 @@ const VCNavItems = defineComponent({
548
560
  * only — dropdown mode keeps Reka's NavigationMenu primitives.
549
561
  */
550
562
  itemAs: {
551
- type: [String, Object],
563
+ type: [
564
+ String,
565
+ Object,
566
+ Function
567
+ ],
552
568
  default: "li"
553
569
  },
554
570
  themeClass: {
@@ -843,7 +859,11 @@ var StepperTrigger_default = defineComponent({
843
859
  },
844
860
  /** HTML tag to render. */
845
861
  as: {
846
- type: [String, Object],
862
+ type: [
863
+ String,
864
+ Object,
865
+ Function
866
+ ],
847
867
  default: "button"
848
868
  },
849
869
  /** Theme-class overrides for this component instance. */
@@ -893,7 +913,11 @@ var StepperIndicator_default = defineComponent({
893
913
  },
894
914
  /** HTML tag to render. */
895
915
  as: {
896
- type: [String, Object],
916
+ type: [
917
+ String,
918
+ Object,
919
+ Function
920
+ ],
897
921
  default: "div"
898
922
  },
899
923
  /** Theme-class overrides for this component instance. */
@@ -943,7 +967,11 @@ var StepperTitle_default = defineComponent({
943
967
  },
944
968
  /** HTML tag to render. */
945
969
  as: {
946
- type: [String, Object],
970
+ type: [
971
+ String,
972
+ Object,
973
+ Function
974
+ ],
947
975
  default: "h4"
948
976
  },
949
977
  /** Theme-class overrides for this component instance. */
@@ -993,7 +1021,11 @@ var StepperDescription_default = defineComponent({
993
1021
  },
994
1022
  /** HTML tag to render. */
995
1023
  as: {
996
- type: [String, Object],
1024
+ type: [
1025
+ String,
1026
+ Object,
1027
+ Function
1028
+ ],
997
1029
  default: "p"
998
1030
  },
999
1031
  /** Theme-class overrides for this component instance. */
@@ -1043,7 +1075,11 @@ var StepperSeparator_default = defineComponent({
1043
1075
  },
1044
1076
  /** HTML tag to render. */
1045
1077
  as: {
1046
- type: [String, Object],
1078
+ type: [
1079
+ String,
1080
+ Object,
1081
+ Function
1082
+ ],
1047
1083
  default: "div"
1048
1084
  },
1049
1085
  /** Theme-class overrides for this component instance. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["inject","inject","inject"],"sources":["../src/registry/module.ts","../src/registry/singleton.ts","../src/helpers/match.ts","../src/helpers/normalize.ts","../src/helpers/trace.ts","../src/helpers/reset.ts","../src/helpers/submenu.ts","../src/helpers/trail.ts","../src/helpers/url.ts","../src/components/items/theme.ts","../src/components/select-context.ts","../src/components/item/module.ts","../src/components/items/module.ts","../src/components/stepper/context.ts","../src/components/stepper/theme.ts","../src/components/stepper/Stepper.vue","../src/components/stepper/Stepper.vue","../src/components/stepper/StepperItem.vue","../src/components/stepper/StepperItem.vue","../src/components/stepper/StepperTrigger.vue","../src/components/stepper/StepperTrigger.vue","../src/components/stepper/StepperIndicator.vue","../src/components/stepper/StepperIndicator.vue","../src/components/stepper/StepperTitle.vue","../src/components/stepper/StepperTitle.vue","../src/components/stepper/StepperDescription.vue","../src/components/stepper/StepperDescription.vue","../src/components/stepper/StepperSeparator.vue","../src/components/stepper/StepperSeparator.vue","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { computed, ref, shallowReactive } from 'vue';\nimport type { NavigationItemNormalized } from '../types';\nimport type { NavigationRegistryEntry } from './types';\n\ntype Occupant = {\n token: symbol;\n entry: NavigationRegistryEntry;\n};\n\nfunction createEmptyEntry(): NavigationRegistryEntry {\n const items = ref<NavigationItemNormalized[]>([]);\n return {\n items,\n active: computed(() => []),\n activeTrail: computed(() => []),\n };\n}\n\ntype NavigationRegistryUnregisterFn = () => void;\n\n/**\n * Reactive, app-wide navigation registry. `<VCNavItems registry>`\n * publishes its resolved output here under a `registry-id`; other navs\n * read it reactively + empty-safe via the resolver context's\n * `registry(id)`.\n *\n * The backing map is `shallowReactive`, so membership changes\n * (register + the returned unregister closure) are tracked dependencies\n * — a consumer reading `get(id)` inside a `computed` / `watchEffect`\n * re-runs when the id's occupancy flips.\n */\nexport class NavigationRegistry {\n protected map = shallowReactive(\n new Map<string, Occupant>(),\n );\n\n /**\n * Stable empty entries handed out for absent ids, memoized per id so\n * the SAME reactive handle is returned every call — a consumer\n * subscribed to an absent id keeps its dependency and lights up the\n * moment an occupant registers.\n */\n protected empties = new Map<string, NavigationRegistryEntry>();\n\n /**\n * Claim `id`. Last-wins: a newer occupant replaces the current one\n * (dev warning on collision). Returns a token-guarded unregister\n * closure: it releases `id` ONLY if this registration is still the\n * occupant. During a route handoff (Vue mounts the new page before\n * unmounting the old) the departing nav's closure holds a stale token\n * and cannot evict the incoming occupant.\n */\n register(id: string, entry: NavigationRegistryEntry): NavigationRegistryUnregisterFn {\n if (this.map.has(id)) {\n // eslint-disable-next-line no-console\n console.warn(`[vuecs] navigation registry id \"${id}\" reassigned to a new occupant.`);\n }\n\n const token = Symbol('vc-nav-registry-token');\n\n this.map.set(id, { token, entry });\n\n return () => {\n const occupant = this.map.get(id);\n if (occupant && occupant.token === token) {\n this.map.delete(id);\n }\n };\n }\n\n /** Reactive, empty-safe read. Never returns `undefined`. */\n get<META = any>(id: string): NavigationRegistryEntry<META> {\n const occupant = this.map.get(id);\n if (occupant) {\n return occupant.entry as NavigationRegistryEntry<META>;\n }\n\n let empty = this.empties.get(id);\n if (!empty) {\n empty = createEmptyEntry();\n this.empties.set(id, empty);\n }\n\n return empty as NavigationRegistryEntry<META>;\n }\n\n /** True when an occupant currently holds `id`. */\n has(id: string): boolean {\n return this.map.has(id);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { inject, provide } from '@vuecs/core';\nimport type { App } from 'vue';\nimport { NavigationRegistry } from './module';\n\nconst sym = Symbol.for('VCNavigationRegistry');\n\nexport function tryInjectNavigationRegistry(app?: App): NavigationRegistry | undefined {\n return inject<NavigationRegistry>(sym, app);\n}\n\nexport function injectNavigationRegistry(app?: App): NavigationRegistry {\n const instance = tryInjectNavigationRegistry(app);\n if (!instance) {\n throw new Error('A navigation registry has not been provided.');\n }\n\n return instance;\n}\n\nexport function provideNavigationRegistry(\n registry: NavigationRegistry = new NavigationRegistry(),\n app?: App,\n): NavigationRegistry {\n provide(sym, registry, app);\n return registry;\n}\n","import type { NavigationItemNormalized } from '../types';\n\ntype ParentMatch = {\n score: number\n};\n\ntype ItemMatchesFindOptions = {\n path?: string\n};\n\nfunction calculateItemScoreForPath(\n item: NavigationItemNormalized,\n currentPath: string,\n) {\n if (item.url === '/') {\n return 1;\n }\n\n if (item.activeMatch) {\n if (item.activeMatch === currentPath) {\n return 6;\n } if (currentPath.startsWith(item.activeMatch)) {\n return 4;\n }\n }\n\n if (item.url) {\n if (item.url === currentPath) {\n return 3;\n } if (currentPath.startsWith(item.url)) {\n return 2;\n }\n }\n\n return 0;\n}\n\nfunction findItemMatchesIF(\n items: NavigationItemNormalized[],\n options: ItemMatchesFindOptions,\n parent: ParentMatch,\n) {\n const output : {\n data: NavigationItemNormalized,\n score: number\n }[] = [];\n\n for (const item of items) {\n let { score } = parent;\n\n if (options.path) {\n score += calculateItemScoreForPath(item, options.path);\n }\n\n if (item.default) {\n score += 1;\n }\n\n if (item.children) {\n const childMatches = findItemMatchesIF(item.children, options, { score });\n\n output.push(...childMatches);\n }\n\n output.push({ data: item, score });\n }\n\n return output.sort((a, b) => b.score - a.score);\n}\n\nexport function findBestItemMatches(\n items: NavigationItemNormalized[],\n options: ItemMatchesFindOptions = {},\n) : NavigationItemNormalized[] {\n const result = findItemMatchesIF(items, options, { score: 0 });\n const [first] = result;\n if (!first) {\n return [];\n }\n\n return result\n .filter((match) => match.score === first.score)\n .map((match) => match.data);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NavigationItem, NavigationItemNormalized } from '../types';\n\nfunction normalizeItemIF(\n item: NavigationItem,\n trace: string[],\n) : NavigationItemNormalized {\n const output : NavigationItemNormalized = {\n ...item,\n children: [],\n trace: [\n ...trace,\n item.name,\n ],\n meta: item.meta || {},\n };\n\n if (!item.children) {\n return output;\n }\n\n for (let i = 0; i < item.children.length; i++) {\n output.children.push(normalizeItemIF(item.children[i], output.trace));\n }\n\n return output;\n}\n\nexport function normalizeItem(\n item: NavigationItem,\n) : NavigationItemNormalized {\n return normalizeItemIF(item, []);\n}\n\nexport function normalizeItems(\n items: NavigationItem[],\n) : NavigationItemNormalized[] {\n return items.map((item) => normalizeItem(item));\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isTraceEqual(\n a: string[],\n b: string[],\n): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n for (const [i, element] of a.entries()) {\n if (element !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function isTracePartOf(item: string[], parent: string[]) {\n for (const [i, element] of item.entries()) {\n if (parent[i] !== element) {\n return false;\n }\n }\n\n return true;\n}\n","import type { NavigationItemNormalized } from '../types';\nimport { isTraceEqual, isTracePartOf } from './trace';\n\nfunction resetItemsByTraceIF(\n items: NavigationItemNormalized[],\n trace: string[],\n) {\n for (const item of items) {\n const isEqual = isTraceEqual(item.trace, trace);\n item.active = isEqual;\n item.display = true;\n\n if (isEqual) {\n item.activeWithin = false;\n item.displayChildren = true;\n } else {\n const isAncestor = isTracePartOf(item.trace, trace);\n item.activeWithin = isAncestor;\n item.displayChildren = isAncestor;\n }\n\n item.children = resetItemsByTraceIF(item.children, trace);\n }\n\n return items;\n}\n\nexport function resetItemsByTrace(\n items: NavigationItemNormalized[],\n trace: string[],\n) {\n return resetItemsByTraceIF(items, trace);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n NavigationOrientation,\n NavigationSubmenu,\n NavigationSubmenuMode,\n} from '../types';\n\n/**\n * Resolve the effective submenu presentation. An explicit `collapse` /\n * `dropdown` wins; `auto` derives from orientation — only an explicit\n * `horizontal` opts into the dropdown (NavigationMenu) path, everything\n * else collapses (Collapsible).\n */\nexport function resolveSubmenuMode(\n submenu: NavigationSubmenu | undefined,\n orientation: NavigationOrientation | undefined,\n): NavigationSubmenuMode {\n if (submenu === 'collapse' || submenu === 'dropdown') {\n return submenu;\n }\n\n return orientation === 'horizontal' ? 'dropdown' : 'collapse';\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NavigationItemNormalized } from '../types';\n\n/**\n * Walk a normalized tree along `trace` (an ordered list of item names,\n * root → leaf) and collect the item at each depth. Returns the ordered\n * active trail: `[0]` is the top-level section, `.at(-1)` is the leaf.\n */\nexport function collectTrail(\n items: NavigationItemNormalized[],\n trace: string[],\n): NavigationItemNormalized[] {\n const output: NavigationItemNormalized[] = [];\n\n let level = items;\n for (const name of trace) {\n const found = level.find((item) => item.name === name);\n if (!found) {\n break;\n }\n\n output.push(found);\n level = found.children;\n }\n\n return output;\n}\n\n/**\n * Depth-first collect of every item in the tree matching `predicate`.\n */\nexport function flattenWhere(\n items: NavigationItemNormalized[],\n predicate: (item: NavigationItemNormalized) => boolean,\n): NavigationItemNormalized[] {\n const output: NavigationItemNormalized[] = [];\n\n for (const item of items) {\n if (predicate(item)) {\n output.push(item);\n }\n\n if (item.children.length > 0) {\n output.push(...flattenWhere(item.children, predicate));\n }\n }\n\n return output;\n}\n","export function isAbsoluteURL(str: string): boolean {\n return str.substring(0, 7) === 'http://' ||\n str.substring(0, 8) === 'https://';\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\n\n/**\n * Default classes for the `navigation` theme entry. Shared between\n * `<VCNavItems>` (the container) and `<VCNavItem>` (the per-row\n * component) — both call `useComponentTheme('navigation', …)` with\n * the same slot defaults, so the source of truth lives here.\n */\nexport const navigationThemeDefaults: ComponentThemeDefinition<NavigationThemeClasses> = {\n classes: {\n group: 'vc-nav-items',\n item: 'vc-nav-item',\n itemNested: 'vc-nav-item-nested',\n separator: 'vc-nav-separator',\n link: 'vc-nav-link',\n linkRoot: 'vc-nav-link-root',\n linkIcon: 'vc-nav-link-icon',\n linkText: 'vc-nav-link-text',\n trigger: 'vc-nav-trigger',\n content: 'vc-nav-content',\n viewport: 'vc-nav-viewport',\n },\n variants: {\n // `list` is the default vertical/stacked look; `pills` renders the\n // items as a joined pill group (the nav-pills style). Structural CSS\n // for these markers ships in the package `assets/index.css`; palette\n // colors stay the theme's responsibility.\n variant: {\n list: {},\n pills: {\n group: 'vc-nav-items--pills',\n item: 'vc-nav-item--pills',\n link: 'vc-nav-link--pills',\n },\n },\n orientation: {\n horizontal: {},\n vertical: { group: 'vc-nav-items--vertical' },\n },\n },\n defaultVariants: {\n variant: 'list',\n orientation: 'horizontal',\n },\n};\n","import type { ComputedRef, InjectionKey } from 'vue';\nimport type { NavigationItemNormalized } from '../types';\n\n/**\n * Channels a `<VCNavItem>`'s already-normalized + scored `children` down\n * to the nested `<VCNavItems>` that renders its submenu.\n *\n * The top-level nav scores the WHOLE tree once; nested lists must render\n * those results as-is rather than re-resolving / re-scoring a subtree\n * (which would clobber traces and lose whole-tree active context). The\n * nested `<VCNavItems>` reads this when it has no own `data` prop —\n * presence of the injected nodes is what marks it as a nested renderer\n * rather than a resolving root. Each `<VCNavItem>` re-provides its own\n * children, so the value is correctly scoped per nesting level.\n */\nexport const NAVIGATION_NODES_KEY: InjectionKey<ComputedRef<NavigationItemNormalized[]>> = Symbol('vc-navigation-nodes');\n\n/**\n * Bridges a clicked `<VCNavItem>` up to the owning root `<VCNavItems>`.\n *\n * A url-less item can't navigate, so a click instead \"selects\" it: the\n * root nav records the item's trace and folds it into its active-state\n * derivation, publishing it through the registry's `active` / `activeTrail`.\n * Dependent navs then react with zero app wiring — exactly as they would\n * for a route-driven active change.\n */\nexport type NavigationSelectContext = {\n /** Invoke to mark `item` as the selected (active) item of the root nav. */\n select: (item: NavigationItemNormalized) => void;\n};\n\nexport const NAVIGATION_SELECT_KEY: InjectionKey<NavigationSelectContext> = Symbol('vc-navigation-select');\n","import { hasNormalizedSlot, normalizeSlot, useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport type { LinkProperties } from '@vuecs/link';\nimport { VCLink } from '@vuecs/link';\nimport type {\n Component,\n ExtractPublicPropTypes,\n PropType,\n SlotsType,\n VNodeChild,\n} from 'vue';\nimport {\n computed,\n defineComponent,\n h,\n inject,\n provide,\n ref,\n resolveComponent,\n toRef,\n watch,\n} from 'vue';\nimport {\n CollapsibleContent,\n CollapsibleRoot,\n CollapsibleTrigger,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuTrigger,\n} from 'reka-ui';\nimport type {\n NavigationItemNormalized,\n NavigationOrientation,\n NavigationSubmenuMode,\n} from '../../types';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\nimport { isAbsoluteURL } from '../../helpers';\nimport { ElementType, SlotName } from '../../constants';\nimport type {\n NavItemLinkSlotProps,\n NavItemSeparatorSlotProps,\n NavItemSubItemsSlotProps,\n NavItemSubSlotProps,\n NavItemSubTitleSlotProps,\n} from '../type';\nimport { navigationThemeDefaults } from '../items/theme';\nimport { NAVIGATION_NODES_KEY, NAVIGATION_SELECT_KEY } from '../select-context';\n\nconst navItemProps = {\n data: {\n type: Object as PropType<NavigationItemNormalized>,\n required: true,\n },\n variant: {\n type: String,\n default: undefined,\n },\n orientation: {\n type: String as PropType<NavigationOrientation>,\n default: undefined,\n },\n /**\n * Resolved submenu presentation handed down by the parent\n * `<VCNavItems>`. `collapse` renders groups as an inline\n * Reka `Collapsible`; `dropdown` renders them as Reka\n * `NavigationMenu` flyouts.\n */\n submenu: {\n type: String as PropType<NavigationSubmenuMode>,\n default: 'collapse',\n },\n /**\n * The tag (or component) this item renders as — its own wrapper\n * (`<li>` by default). Receives `<VCNavItems>`' `itemAs`. Honored in\n * collapse mode only.\n */\n as: {\n type: [String, Object] as PropType<string | Component>,\n default: 'li',\n },\n /**\n * The list-container tag for this item's nested submenu\n * `<VCNavItems>` (`<ul>` by default). Receives `<VCNavItems>`' `as`.\n * Honored in collapse mode only.\n */\n itemsAs: {\n type: [String, Object] as PropType<string | Component>,\n default: 'ul',\n },\n themeClass: {\n type: Object as PropType<ThemeClassesOverride<NavigationThemeClasses>>,\n default: undefined,\n },\n themeVariant: {\n type: Object as PropType<VariantValues>,\n default: undefined,\n },\n};\n\nexport type NavItemProps = ExtractPublicPropTypes<typeof navItemProps>;\n\nexport const VCNavItem = defineComponent({\n name: 'VCNavItem',\n props: navItemProps,\n slots: Object as SlotsType<{\n separator: NavItemSeparatorSlotProps;\n link: NavItemLinkSlotProps;\n sub: NavItemSubSlotProps;\n 'sub-title': NavItemSubTitleSlotProps;\n 'sub-items': NavItemSubItemsSlotProps;\n }>,\n setup(props, { slots }) {\n const itemsNode = resolveComponent('VCNavItems');\n\n const themeProps: UseComponentThemeProps<NavigationThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.variant !== undefined ? { variant: props.variant } : {}),\n };\n },\n };\n\n const theme = useComponentTheme('navigation', themeProps, navigationThemeDefaults);\n\n const data = toRef(props, 'data');\n const hasChildren = computed(() => data.value.children &&\n data.value.children.length > 0);\n\n // Channel this item's already-scored children down to the nested\n // `<VCNavItems>` that renders its submenu, so the child list renders\n // them as-is instead of re-resolving / re-scoring a subtree. Scoped\n // per item — each `<VCNavItem>` re-provides its own children.\n provide(NAVIGATION_NODES_KEY, computed(() => data.value.children));\n\n // Local expand state — seeded from the resolved `displayChildren`\n // (driven by active-trail matching upstream) and resynced whenever\n // that recomputes, so a path change auto-opens the active branch.\n const open = ref(!!data.value.displayChildren);\n watch(() => data.value.displayChildren, (value) => {\n open.value = !!value;\n });\n\n // Selection bubbles up to the owning root `<VCNavItems>`, which folds\n // this item's trace into its active state and republishes through the\n // registry. The primary use is url-less section switchers (a top-nav\n // tab that swaps a dependent sidebar without navigating). Items with\n // a real url also navigate; the route change then supersedes the\n // selection upstream.\n const selectContext = inject(NAVIGATION_SELECT_KEY, null);\n const select = () => {\n selectContext?.select(data.value);\n };\n\n const toggle = () => {\n open.value = !open.value;\n };\n\n // Iconify-style icon strings (e.g. `fa6-solid:home`, `lucide:plus`)\n // contain a colon. Render via the globally-registered <VCIcon> so\n // they resolve through the Iconify pipeline rather than landing as\n // raw CSS classes on a literal <i>. Legacy class-string icons\n // (`fa fa-home`, `material-icons home`) keep their <i class> rendering.\n const renderIcon = (icon: string): VNodeChild => {\n if (icon.includes(':')) {\n return h(resolveComponent('VCIcon'), { name: icon });\n }\n return h('i', { class: icon });\n };\n\n const renderTitleInner = (resolved: NavigationThemeClasses): VNodeChild[] => [\n ...(data.value.icon ?\n [h('div', { class: resolved.linkIcon || undefined }, [\n renderIcon(data.value.icon),\n ])] :\n []),\n h('div', { class: resolved.linkText || undefined }, [\n data.value.name,\n ]),\n ];\n\n const renderLeaf = (resolved: NavigationThemeClasses): VNodeChild => {\n if (hasNormalizedSlot(SlotName.LINK, slots)) {\n return normalizeSlot(SlotName.LINK, {\n data: data.value,\n select,\n isActive: data.value.active,\n }, slots);\n }\n\n const linkProps: LinkProperties = {\n active: data.value.active,\n disabled: false,\n prefetch: true,\n };\n\n if (data.value.url) {\n if (\n isAbsoluteURL(data.value.url) ||\n data.value.url.startsWith('#')\n ) {\n linkProps.href = data.value.url;\n if (data.value.urlTarget) {\n linkProps.target = data.value.urlTarget;\n }\n } else {\n linkProps.to = data.value.url;\n }\n }\n\n return h(VCLink, {\n class: [resolved.link],\n 'data-vc-collection-item': '',\n ...linkProps,\n onClicked: select,\n }, { default: () => renderTitleInner(resolved) });\n };\n\n const renderChildren = (): VNodeChild => {\n if (hasNormalizedSlot(SlotName.SUB_ITEMS, slots)) {\n return normalizeSlot(SlotName.SUB_ITEMS, {\n data: data.value,\n select,\n toggle,\n });\n }\n\n // A dropdown group's flyout panel is plain content — a list of\n // links — NOT another menu bar. Recursing with `submenu=\"dropdown\"`\n // would nest a second `NavigationMenuRoot` inside this root's\n // `NavigationMenuContent`; Reka's NavigationMenu is built around a\n // SINGLE root per bar, and nesting roots breaks the hover state\n // machine (the panel only opens on the first hover and never\n // reopens). Rendering the panel contents in `collapse` mode keeps\n // them a plain `<ul>` of links, so deeper groups degrade to inline\n // collapsibles within the flyout instead of buggy sub-roots.\n // No `data`: the nested list reads this item's children via the\n // NAVIGATION_NODES_KEY inject provided in setup above.\n return h(itemsNode, {\n variant: props.variant,\n orientation: props.orientation,\n submenu: props.submenu === 'dropdown' ? 'collapse' : props.submenu,\n as: props.itemsAs,\n itemAs: props.as,\n themeClass: props.themeClass,\n themeVariant: props.themeVariant,\n });\n };\n\n return () => {\n const resolved = theme.value;\n const isDropdown = props.submenu === 'dropdown';\n const isActive = data.value.active || data.value.activeWithin;\n\n // type: separator\n if (data.value.type === ElementType.SEPARATOR) {\n const body = hasNormalizedSlot(SlotName.SEPARATOR, slots) ?\n normalizeSlot(SlotName.SEPARATOR, { data: data.value }, slots) :\n h('div', { class: resolved.separator || undefined }, data.value.name);\n\n if (isDropdown) {\n return h(NavigationMenuItem, { class: [resolved.item] }, { default: () => body });\n }\n return h(props.as, { class: [resolved.item] }, [body]);\n }\n\n // type: link (no children)\n if (!hasChildren.value) {\n const leaf = renderLeaf(resolved);\n\n if (isDropdown) {\n return h(NavigationMenuItem, {\n class: [resolved.item],\n 'data-active': data.value.active ? '' : undefined,\n }, {\n default: () => h(NavigationMenuLink, {\n active: data.value.active,\n asChild: true,\n }, { default: () => leaf }),\n });\n }\n\n return h(props.as, {\n class: [resolved.item, { active: data.value.active }],\n 'data-active': data.value.active ? '' : undefined,\n }, [leaf]);\n }\n\n // type: group with children — full-override slot bypasses the\n // Collapsible / NavigationMenu machinery entirely.\n if (hasNormalizedSlot(SlotName.SUB, slots)) {\n const body = normalizeSlot(SlotName.SUB, {\n data: data.value,\n select,\n toggle,\n }, slots);\n\n if (isDropdown) {\n return h(NavigationMenuItem, {\n class: [resolved.item, resolved.itemNested],\n 'data-active': isActive ? '' : undefined,\n }, { default: () => body });\n }\n return h(props.as, {\n class: [resolved.item, resolved.itemNested, { active: isActive }],\n 'data-active': isActive ? '' : undefined,\n }, [body]);\n }\n\n const title = hasNormalizedSlot(SlotName.SUB_TITLE, slots) ?\n normalizeSlot(SlotName.SUB_TITLE, {\n data: data.value,\n select,\n toggle,\n }) :\n renderTitleInner(resolved);\n\n // dropdown: Reka NavigationMenu flyout\n if (isDropdown) {\n return h(NavigationMenuItem, {\n class: [resolved.item, resolved.itemNested],\n 'data-active': isActive ? '' : undefined,\n }, {\n default: () => [\n h(NavigationMenuTrigger, {\n class: resolved.trigger || undefined,\n 'data-vc-collection-item': '',\n 'data-active': isActive ? '' : undefined,\n }, { default: () => title }),\n // Re-invoke `renderChildren()` per mount: Reka's\n // NavigationMenuContent unmounts on close and remounts on\n // reopen (unmountOnHide). A VNode can only be rendered\n // once, so handing back a pre-computed tree renders an\n // EMPTY flyout on the second open. The thunk produces a\n // fresh subtree each time the content mounts.\n h(NavigationMenuContent, { class: resolved.content || undefined }, { default: () => renderChildren() }),\n ],\n });\n }\n\n // collapse: inline Reka Collapsible\n return h(CollapsibleRoot, {\n as: props.as,\n class: [\n resolved.item,\n resolved.itemNested,\n { active: data.value.active || open.value },\n ],\n 'data-active': isActive ? '' : undefined,\n open: open.value,\n 'onUpdate:open': (value: boolean) => {\n open.value = value;\n },\n }, {\n default: () => [\n h(CollapsibleTrigger, {\n class: resolved.trigger || undefined,\n 'data-vc-collection-item': '',\n 'data-active': isActive ? '' : undefined,\n }, { default: () => title }),\n h(CollapsibleContent, { class: resolved.content || undefined }, { default: () => renderChildren() }),\n ],\n });\n };\n },\n});\n","import {\n hasNormalizedSlot,\n isPromise,\n normalizeSlot,\n useArrowNavigation,\n useComponentTheme,\n} from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport type {\n Component,\n ExtractPublicPropTypes,\n PropType,\n SlotsType,\n VNodeArrayChildren,\n VNodeChild,\n WatchSource,\n} from 'vue';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watch,\n watchEffect,\n} from 'vue';\nimport { NavigationMenuList, NavigationMenuRoot } from 'reka-ui';\nimport { SlotName } from '../../constants';\nimport type {\n NavigationItem,\n NavigationItemNormalized,\n NavigationOrientation,\n NavigationResolver,\n NavigationSubmenu,\n} from '../../types';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\nimport {\n collectTrail,\n findBestItemMatches,\n flattenWhere,\n normalizeItems,\n resetItemsByTrace,\n resolveSubmenuMode,\n} from '../../helpers';\nimport { NavigationRegistry, tryInjectNavigationRegistry } from '../../registry';\nimport { VCNavItem } from '../item';\nimport { NAVIGATION_NODES_KEY, NAVIGATION_SELECT_KEY } from '../select-context';\nimport type { NavItemsItemSlotProps } from '../type';\nimport { navigationThemeDefaults } from './theme';\n\nconst navItemsProps = {\n /**\n * The source of this nav's items. Plain array, sync fn, or async fn.\n * A fn receives a NavigationResolverContext and may read reactive\n * state freely — the nav re-runs it automatically when that state\n * changes.\n *\n * When omitted, the nav checks whether it is a nested submenu of a\n * parent `<VCNavItem>` (via the {@link NAVIGATION_NODES_KEY} inject)\n * and, if so, renders that parent's already-scored children as-is.\n */\n data: {\n type: [Array, Function] as PropType<NavigationItem[] | NavigationResolver>,\n default: undefined,\n },\n /** Opt in to publishing this nav's resolved output into the registry. */\n registry: { type: Boolean, default: false },\n /** The key under which to publish. Required when `registry` is true. */\n registryId: { type: String, default: undefined },\n /**\n * Current path for active-state matching. When omitted, the nav softly\n * reads vue-router's current route (via the `$route` global property)\n * if a router is installed; router-free apps simply get `undefined`.\n */\n path: { type: String, default: undefined },\n /**\n * Extra reactive deps that should retrigger the resolver — for state\n * read only AFTER the first `await` in an async resolver (auto-track\n * can't see past an await).\n */\n watch: { type: Array as PropType<WatchSource[]>, default: undefined },\n variant: { type: String, default: undefined },\n orientation: { type: String as PropType<NavigationOrientation>, default: undefined },\n /**\n * How items with children render their submenu. `auto` derives from\n * orientation (horizontal → dropdown, otherwise collapse).\n */\n submenu: { type: String as PropType<NavigationSubmenu>, default: 'auto' },\n /**\n * The tag (or component) for this nav's list container. Defaults to\n * `'ul'`. Forwarded unchanged to every nesting level so the whole tree\n * renders the same container tag. Honored in collapse mode only —\n * dropdown mode keeps Reka's NavigationMenu primitives.\n */\n as: { type: [String, Object] as PropType<string | Component>, default: 'ul' },\n /**\n * The tag (or component) for each item wrapper. Defaults to `'li'`.\n * Forwarded unchanged to every nesting level. Honored in collapse mode\n * only — dropdown mode keeps Reka's NavigationMenu primitives.\n */\n itemAs: { type: [String, Object] as PropType<string | Component>, default: 'li' },\n themeClass: { type: Object as PropType<ThemeClassesOverride<NavigationThemeClasses>>, default: undefined },\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type NavItemsProps = ExtractPublicPropTypes<typeof navItemsProps>;\n\nexport const VCNavItems = defineComponent({\n name: 'VCNavItems',\n props: navItemsProps,\n slots: Object as SlotsType<{\n item: NavItemsItemSlotProps;\n }>,\n setup(props, { slots, expose }) {\n // Merge the convenience `variant` prop into themeVariant before\n // resolution so themes can drive slot classes off it. Getter keeps\n // it reactive (computed() inside useComponentTheme tracks the read).\n const themeProps: UseComponentThemeProps<NavigationThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.variant !== undefined ? { variant: props.variant } : {}),\n ...(props.orientation !== undefined ? { orientation: props.orientation } : {}),\n };\n },\n };\n\n const theme = useComponentTheme('navigation', themeProps, navigationThemeDefaults);\n\n const rootRef = ref<HTMLUListElement | null>(null);\n\n const onKeyDown = (event: KeyboardEvent) => {\n useArrowNavigation(\n event,\n event.target as HTMLElement | null,\n rootRef.value,\n {\n arrowKeyOptions: 'vertical',\n focus: true,\n loop: true,\n },\n );\n };\n\n // Registry is empty-safe: a standalone nav (no plugin installed)\n // falls back to a local empty registry so `registry(id)` still works.\n const registry = tryInjectNavigationRegistry() ?? new NavigationRegistry();\n\n // Soft vue-router lookup: vue-router installs a reactive `$route`\n // getter on `globalProperties`. Reading it inside a computed tracks\n // route changes without a static `vue-router` import, so router-free\n // apps degrade to `undefined` instead of failing to resolve the\n // module. An explicit `:path` prop always wins.\n const globals = getCurrentInstance()?.appContext.config.globalProperties;\n const currentPath = computed<string | undefined>(() => {\n if (typeof props.path !== 'undefined') {\n return props.path;\n }\n const route = globals?.$route as { path?: string } | undefined;\n return route?.path;\n });\n\n // Nested submenu detection: a parent `<VCNavItem>` provides its\n // already-scored children via NAVIGATION_NODES_KEY. When this nav\n // has no own `data` and such nodes are present, it is a nested\n // renderer — it skips resolving / scoring / select / registry and\n // just renders the provided subtree. An explicit `data` always\n // wins (treated as a resolving root even when nested in markup).\n const injectedNodes = inject(NAVIGATION_NODES_KEY, null);\n const isNested = computed(() => typeof props.data === 'undefined' && injectedNodes !== null);\n\n // --- click-driven selection (url-less section switchers) ---\n // A url-less item can't navigate, so a click \"selects\" it instead:\n // we record its trace and fold it into active-state derivation\n // below, publishing it through the registry like a route change.\n // Only a root nav holds this state and provides the bridge —\n // nested `<VCNavItems>` let the click bubble up to their owning root.\n const selectedTrace = ref<string[] | null>(null);\n if (!isNested.value) {\n provide(NAVIGATION_SELECT_KEY, {\n select: (item) => {\n selectedTrace.value = item.trace;\n },\n });\n // A real navigation supersedes a prior selection: once the\n // route changes, hand active-state back to path matching.\n watch(currentPath, () => {\n selectedTrace.value = null;\n });\n }\n\n // --- resolver + reactivity (root mode only; nested bypasses) ---\n const raw = ref<NavigationItem[]>([]);\n // Monotonic run token: overlapping async resolvers can settle out of\n // order, so only the latest invocation is allowed to write `raw.value`\n // — a slower earlier run must not clobber a fresher result.\n let runToken = 0;\n\n async function run() {\n const token = ++runToken;\n const value = typeof props.data === 'function' ?\n props.data({\n path: currentPath.value,\n registry: (id: string) => registry.get(id),\n }) :\n (props.data ?? []);\n\n if (!isPromise(value)) {\n raw.value = value ?? [];\n return;\n }\n\n try {\n const awaited = (await value) ?? [];\n if (token === runToken) {\n raw.value = awaited;\n }\n } catch (error) {\n // Without this, a rejected resolver surfaces as an unhandled\n // rejection from the watcher effect. Only the latest run logs.\n if (token === runToken) {\n // eslint-disable-next-line no-console\n console.error('[vuecs] <VCNavItems> resolver rejected:', error);\n }\n }\n }\n\n if (!isNested.value) {\n // Auto-track: reactive reads in `run` BEFORE the first await retrigger it.\n watchEffect(run);\n // Escape hatch for state read AFTER an await:\n if (props.watch) {\n watch(props.watch, run);\n }\n }\n\n // Imperative escape hatch:\n expose({ refresh: run });\n\n // --- normalized + tree-wide scored derivation ---\n const resolved = computed<{ items: NavigationItemNormalized[]; trace: string[] }>(() => {\n if (isNested.value && injectedNodes) {\n return { items: injectedNodes.value, trace: [] };\n }\n\n const normalized = normalizeItems(raw.value);\n const [match] = findBestItemMatches(normalized, { path: currentPath.value });\n // A click-driven selection (url-less switcher) overrides the\n // path match until the next real navigation clears it.\n const trace = selectedTrace.value ?? (match ? match.trace : []);\n // sets per item: .active (exact) AND .activeWithin (ancestor)\n resetItemsByTrace(normalized, trace);\n return { items: normalized, trace };\n });\n\n const tree = computed(() => resolved.value.items);\n const active = computed(() => flattenWhere(tree.value, (item) => !!item.active));\n const activeTrail = computed(() => collectTrail(tree.value, resolved.value.trace));\n\n // --- registry publish (opt-in, lifecycle-bound) ---\n if (props.registry) {\n let unsubscribeFn : (() => void) | undefined;\n\n const entry = {\n items: tree,\n active,\n activeTrail,\n };\n\n onMounted(() => {\n if (!props.registryId) {\n // eslint-disable-next-line no-console\n console.warn('[vuecs] <VCNavItems registry> requires a `registry-id`.');\n return;\n }\n unsubscribeFn = registry.register(props.registryId, entry);\n });\n onUnmounted(() => {\n if (!props.registryId || !unsubscribeFn) {\n return;\n }\n\n unsubscribeFn();\n });\n }\n\n const submenuMode = computed(() => resolveSubmenuMode(props.submenu, props.orientation));\n\n return () => {\n const resolvedTheme = theme.value;\n const vNodes: VNodeArrayChildren = [];\n\n for (let i = 0; i < tree.value.length; i++) {\n const item = tree.value[i];\n if (!item.display && !item.displayChildren) {\n continue;\n }\n\n let vNode: VNodeChild;\n if (hasNormalizedSlot(SlotName.ITEM, slots)) {\n vNode = normalizeSlot(SlotName.ITEM, { data: item }, slots);\n } else {\n vNode = h(\n VCNavItem,\n {\n key: item.trace.join('/') || i,\n data: item,\n variant: props.variant,\n orientation: props.orientation,\n submenu: submenuMode.value,\n as: props.itemAs,\n itemsAs: props.as,\n themeClass: props.themeClass,\n themeVariant: props.themeVariant,\n },\n );\n }\n\n vNodes.push(vNode);\n }\n\n // Dropdown mode wraps the list in Reka's NavigationMenu so group\n // triggers get flyout machinery (hover-grace, edge-aware content,\n // arrow-key nav). Collapse mode stays a plain <ul> and wires our\n // own arrow-navigation on the root.\n if (submenuMode.value === 'dropdown') {\n return h(\n NavigationMenuRoot,\n { orientation: 'horizontal' },\n {\n default: () => h(\n NavigationMenuList,\n { class: resolvedTheme.group || undefined },\n { default: () => vNodes },\n ),\n },\n );\n }\n\n const isRoot = !isNested.value;\n\n return h(\n props.as,\n {\n class: resolvedTheme.group || undefined,\n ...(isRoot ?\n { ref: rootRef, onKeydown: onKeyDown } :\n {}),\n },\n vNodes,\n );\n };\n },\n});\n","import type { InjectionKey } from 'vue';\nimport { inject, provide } from 'vue';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport type { StepperThemeClasses } from './types';\n\n/**\n * Context shared from `<VCStepper>` to its descendant parts so that\n * theme-class and theme-variant values applied to the root propagate\n * automatically to indicator / title / description / separator / item /\n * trigger without the consumer having to repeat the props on every\n * child. Per-instance values on a child still win over inherited ones.\n *\n * Optional — children render bare (without inherited theme values) when\n * mounted outside `<VCStepper>` for unit tests / Storybook.\n */\nexport type StepperContext = {\n themeClass: () => ThemeClassesOverride<StepperThemeClasses> | undefined;\n themeVariant: () => VariantValues | undefined;\n};\n\nconst STEPPER_CONTEXT_KEY: InjectionKey<StepperContext> = Symbol('vcStepperContext');\n\nexport function provideStepperContext(ctx: StepperContext): void {\n provide(STEPPER_CONTEXT_KEY, ctx);\n}\n\nexport function useStepperContext(): StepperContext | null {\n return inject(STEPPER_CONTEXT_KEY, null);\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { StepperThemeClasses } from './types';\n\nexport const stepperThemeDefaults: ComponentThemeDefinition<StepperThemeClasses> = {\n classes: {\n root: 'vc-stepper',\n item: 'vc-stepper-item',\n trigger: 'vc-stepper-trigger',\n indicator: 'vc-stepper-indicator',\n title: 'vc-stepper-title',\n description: 'vc-stepper-description',\n separator: 'vc-stepper-separator',\n },\n};\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { provideStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperProps = {\n /** Active step (1-based). v-modeled. */\n modelValue: { type: Number, default: undefined },\n /** Initial active step for uncontrolled usage. */\n defaultValue: { type: Number, default: 1 },\n /** Layout direction. */\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n /** Reading direction. Falls back to the ConfigManager's `dir` value when omitted. */\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n /** When `true`, steps must be completed in order — Reka blocks navigation past the next incomplete step. */\n linear: { type: Boolean, default: true },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperProps = ExtractPublicPropTypes<typeof stepperProps>;\n\nexport default defineComponent({\n name: 'VCStepper',\n inheritAttrs: false,\n props: stepperProps,\n emits: ['update:modelValue'],\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n // Propagate theme-class + theme-variant to descendant indicator /\n // title / description / separator / item / trigger parts so a single\n // `<VCStepper :theme-variant=\"{ size: 'sm' }\">` resizes the whole\n // stepper, and `:theme-class=\"{ indicator: 'ring-2' }\">` skins every\n // indicator. Children fall back to their own per-instance values\n // when the consumer wants to override them.\n provideStepperContext({\n themeClass: () => props.themeClass,\n themeVariant: () => props.themeVariant,\n });\n const theme = useComponentTheme('stepper', props, stepperThemeDefaults);\n return () => h(\n StepperRoot,\n mergeProps(attrs, {\n modelValue: props.modelValue,\n defaultValue: props.defaultValue,\n orientation: props.orientation,\n dir: props.dir,\n linear: props.linear,\n 'onUpdate:modelValue': (value: number | undefined) => emit('update:modelValue', value),\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { provideStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperProps = {\n /** Active step (1-based). v-modeled. */\n modelValue: { type: Number, default: undefined },\n /** Initial active step for uncontrolled usage. */\n defaultValue: { type: Number, default: 1 },\n /** Layout direction. */\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n /** Reading direction. Falls back to the ConfigManager's `dir` value when omitted. */\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n /** When `true`, steps must be completed in order — Reka blocks navigation past the next incomplete step. */\n linear: { type: Boolean, default: true },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperProps = ExtractPublicPropTypes<typeof stepperProps>;\n\nexport default defineComponent({\n name: 'VCStepper',\n inheritAttrs: false,\n props: stepperProps,\n emits: ['update:modelValue'],\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n // Propagate theme-class + theme-variant to descendant indicator /\n // title / description / separator / item / trigger parts so a single\n // `<VCStepper :theme-variant=\"{ size: 'sm' }\">` resizes the whole\n // stepper, and `:theme-class=\"{ indicator: 'ring-2' }\">` skins every\n // indicator. Children fall back to their own per-instance values\n // when the consumer wants to override them.\n provideStepperContext({\n themeClass: () => props.themeClass,\n themeVariant: () => props.themeVariant,\n });\n const theme = useComponentTheme('stepper', props, stepperThemeDefaults);\n return () => h(\n StepperRoot,\n mergeProps(attrs, {\n modelValue: props.modelValue,\n defaultValue: props.defaultValue,\n orientation: props.orientation,\n dir: props.dir,\n linear: props.linear,\n 'onUpdate:modelValue': (value: number | undefined) => emit('update:modelValue', value),\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { StepperItem } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nexport type StepperItemSlotProps = {\n state: 'active' | 'completed' | 'inactive';\n};\n\nconst stepperItemProps = {\n /** 1-based step index. Required by Reka — used to determine completion / active state. */\n step: { type: Number, required: true },\n /** Block interaction with this step. */\n disabled: { type: Boolean, default: false },\n /** Force completion state. Reka derives this automatically when `false`. */\n completed: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperItemProps = ExtractPublicPropTypes<typeof stepperItemProps>;\n\nexport default defineComponent({\n name: 'VCStepperItem',\n inheritAttrs: false,\n props: stepperItemProps,\n slots: Object as SlotsType<{\n default: StepperItemSlotProps;\n }>,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperItem,\n // `step` is required on StepperItem; vue-tsc loses that\n // through `mergeProps`'s untyped `Data` return, so we pass\n // it as a direct prop (and merge attrs separately for\n // pass-through HTML attrs / data-* / class composition).\n // The `group` utility scopes child\n // `group-data-[state=...]:` selectors in theme-tailwind so\n // child indicators / titles can react to the parent step's\n // state without explicit attribute wiring on every child.\n {\n step: props.step,\n disabled: props.disabled,\n completed: props.completed,\n ...mergeProps(attrs, { class: ['group', theme.value.item || undefined] }),\n },\n { default: ({ state }: StepperItemSlotProps) => slots.default?.({ state }) },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { StepperItem } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nexport type StepperItemSlotProps = {\n state: 'active' | 'completed' | 'inactive';\n};\n\nconst stepperItemProps = {\n /** 1-based step index. Required by Reka — used to determine completion / active state. */\n step: { type: Number, required: true },\n /** Block interaction with this step. */\n disabled: { type: Boolean, default: false },\n /** Force completion state. Reka derives this automatically when `false`. */\n completed: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperItemProps = ExtractPublicPropTypes<typeof stepperItemProps>;\n\nexport default defineComponent({\n name: 'VCStepperItem',\n inheritAttrs: false,\n props: stepperItemProps,\n slots: Object as SlotsType<{\n default: StepperItemSlotProps;\n }>,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperItem,\n // `step` is required on StepperItem; vue-tsc loses that\n // through `mergeProps`'s untyped `Data` return, so we pass\n // it as a direct prop (and merge attrs separately for\n // pass-through HTML attrs / data-* / class composition).\n // The `group` utility scopes child\n // `group-data-[state=...]:` selectors in theme-tailwind so\n // child indicators / titles can react to the parent step's\n // state without explicit attribute wiring on every child.\n {\n step: props.step,\n disabled: props.disabled,\n completed: props.completed,\n ...mergeProps(attrs, { class: ['group', theme.value.item || undefined] }),\n },\n { default: ({ state }: StepperItemSlotProps) => slots.default?.({ state }) },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTrigger } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTriggerProps = {\n /** Render the consumer's slot child as the trigger root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'button' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTriggerProps = ExtractPublicPropTypes<typeof stepperTriggerProps>;\n\nexport default defineComponent({\n name: 'VCStepperTrigger',\n inheritAttrs: false,\n props: stepperTriggerProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTrigger,\n mergeProps(\n // Default to type=\"button\" only when rendering a real\n // <button>; otherwise it'd submit any wrapping <form>.\n // Consumer's `attrs` still wins because mergeProps gives\n // later objects precedence on `type`.\n props.as === 'button' ? { type: 'button' } : {},\n attrs,\n {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.trigger || undefined,\n },\n ),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTrigger } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTriggerProps = {\n /** Render the consumer's slot child as the trigger root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'button' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTriggerProps = ExtractPublicPropTypes<typeof stepperTriggerProps>;\n\nexport default defineComponent({\n name: 'VCStepperTrigger',\n inheritAttrs: false,\n props: stepperTriggerProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTrigger,\n mergeProps(\n // Default to type=\"button\" only when rendering a real\n // <button>; otherwise it'd submit any wrapping <form>.\n // Consumer's `attrs` still wins because mergeProps gives\n // later objects precedence on `type`.\n props.as === 'button' ? { type: 'button' } : {},\n attrs,\n {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.trigger || undefined,\n },\n ),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperIndicator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperIndicatorProps = {\n /** Render the consumer's slot child as the indicator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperIndicatorProps = ExtractPublicPropTypes<typeof stepperIndicatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperIndicator',\n inheritAttrs: false,\n props: stepperIndicatorProps,\n setup(props, { attrs, slots }) {\n // Inherit theme-variant (notably `size`) from the parent <VCStepper>\n // so the consumer doesn't have to repeat `:theme-variant` on every\n // indicator. Per-instance `props.themeVariant` still wins.\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperIndicator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.indicator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperIndicator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperIndicatorProps = {\n /** Render the consumer's slot child as the indicator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperIndicatorProps = ExtractPublicPropTypes<typeof stepperIndicatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperIndicator',\n inheritAttrs: false,\n props: stepperIndicatorProps,\n setup(props, { attrs, slots }) {\n // Inherit theme-variant (notably `size`) from the parent <VCStepper>\n // so the consumer doesn't have to repeat `:theme-variant` on every\n // indicator. Per-instance `props.themeVariant` still wins.\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperIndicator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.indicator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTitle } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTitleProps = {\n /** Render the consumer's slot child as the title root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'h4' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTitleProps = ExtractPublicPropTypes<typeof stepperTitleProps>;\n\nexport default defineComponent({\n name: 'VCStepperTitle',\n inheritAttrs: false,\n props: stepperTitleProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTitle,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.title || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTitle } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTitleProps = {\n /** Render the consumer's slot child as the title root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'h4' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTitleProps = ExtractPublicPropTypes<typeof stepperTitleProps>;\n\nexport default defineComponent({\n name: 'VCStepperTitle',\n inheritAttrs: false,\n props: stepperTitleProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTitle,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.title || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperDescription } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperDescriptionProps = {\n /** Render the consumer's slot child as the description root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'p' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperDescriptionProps = ExtractPublicPropTypes<typeof stepperDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCStepperDescription',\n inheritAttrs: false,\n props: stepperDescriptionProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperDescription,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.description || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperDescription } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperDescriptionProps = {\n /** Render the consumer's slot child as the description root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'p' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperDescriptionProps = ExtractPublicPropTypes<typeof stepperDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCStepperDescription',\n inheritAttrs: false,\n props: stepperDescriptionProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperDescription,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.description || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperSeparator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperSeparatorProps = {\n /** Render the consumer's slot child as the separator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperSeparatorProps = ExtractPublicPropTypes<typeof stepperSeparatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperSeparator',\n inheritAttrs: false,\n props: stepperSeparatorProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperSeparator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.separator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperSeparator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperSeparatorProps = {\n /** Render the consumer's slot child as the separator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperSeparatorProps = ExtractPublicPropTypes<typeof stepperSeparatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperSeparator',\n inheritAttrs: false,\n props: stepperSeparatorProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperSeparator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.separator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","import { installDefaultsManager, installThemeManager } from '@vuecs/core';\nimport type { App, Plugin } from 'vue';\n\nimport '../assets/index.css';\nimport './vue';\nimport { NavigationRegistry, provideNavigationRegistry } from './registry';\n\nimport {\n VCNavItem,\n VCNavItems,\n VCStepper,\n VCStepperDescription,\n VCStepperIndicator,\n VCStepperItem,\n VCStepperSeparator,\n VCStepperTitle,\n VCStepperTrigger,\n} from './components';\nimport type { Options } from './types';\n\nexport * from './components';\nexport * from './registry';\nexport * from './types';\n\nexport function install(instance: App, options: Options = {}): void {\n provideNavigationRegistry(new NavigationRegistry(), instance);\n\n installThemeManager(instance, options);\n installDefaultsManager(instance, options);\n\n Object.entries({\n VCNavItem,\n VCNavItems,\n VCStepper,\n VCStepperItem,\n VCStepperTrigger,\n VCStepperIndicator,\n VCStepperTitle,\n VCStepperDescription,\n VCStepperSeparator,\n }).forEach(([componentName, component]) => {\n instance.component(componentName, component);\n });\n}\n\nexport default { install } satisfies Plugin<[Options?]>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["inject","inject","inject"],"sources":["../src/registry/module.ts","../src/registry/singleton.ts","../src/helpers/match.ts","../src/helpers/normalize.ts","../src/helpers/trace.ts","../src/helpers/reset.ts","../src/helpers/submenu.ts","../src/helpers/trail.ts","../src/helpers/url.ts","../src/components/items/theme.ts","../src/components/select-context.ts","../src/components/item/module.ts","../src/components/items/module.ts","../src/components/stepper/context.ts","../src/components/stepper/theme.ts","../src/components/stepper/Stepper.vue","../src/components/stepper/Stepper.vue","../src/components/stepper/StepperItem.vue","../src/components/stepper/StepperItem.vue","../src/components/stepper/StepperTrigger.vue","../src/components/stepper/StepperTrigger.vue","../src/components/stepper/StepperIndicator.vue","../src/components/stepper/StepperIndicator.vue","../src/components/stepper/StepperTitle.vue","../src/components/stepper/StepperTitle.vue","../src/components/stepper/StepperDescription.vue","../src/components/stepper/StepperDescription.vue","../src/components/stepper/StepperSeparator.vue","../src/components/stepper/StepperSeparator.vue","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { computed, ref, shallowReactive } from 'vue';\nimport type { NavigationItemNormalized } from '../types';\nimport type { NavigationRegistryEntry } from './types';\n\ntype Occupant = {\n token: symbol;\n entry: NavigationRegistryEntry;\n};\n\nfunction createEmptyEntry(): NavigationRegistryEntry {\n const items = ref<NavigationItemNormalized[]>([]);\n return {\n items,\n active: computed(() => []),\n activeTrail: computed(() => []),\n };\n}\n\ntype NavigationRegistryUnregisterFn = () => void;\n\n/**\n * Reactive, app-wide navigation registry. `<VCNavItems registry>`\n * publishes its resolved output here under a `registry-id`; other navs\n * read it reactively + empty-safe via the resolver context's\n * `registry(id)`.\n *\n * The backing map is `shallowReactive`, so membership changes\n * (register + the returned unregister closure) are tracked dependencies\n * — a consumer reading `get(id)` inside a `computed` / `watchEffect`\n * re-runs when the id's occupancy flips.\n */\nexport class NavigationRegistry {\n protected map = shallowReactive(\n new Map<string, Occupant>(),\n );\n\n /**\n * Stable empty entries handed out for absent ids, memoized per id so\n * the SAME reactive handle is returned every call — a consumer\n * subscribed to an absent id keeps its dependency and lights up the\n * moment an occupant registers.\n */\n protected empties = new Map<string, NavigationRegistryEntry>();\n\n /**\n * Claim `id`. Last-wins: a newer occupant replaces the current one\n * (dev warning on collision). Returns a token-guarded unregister\n * closure: it releases `id` ONLY if this registration is still the\n * occupant. During a route handoff (Vue mounts the new page before\n * unmounting the old) the departing nav's closure holds a stale token\n * and cannot evict the incoming occupant.\n */\n register(id: string, entry: NavigationRegistryEntry): NavigationRegistryUnregisterFn {\n if (this.map.has(id)) {\n // eslint-disable-next-line no-console\n console.warn(`[vuecs] navigation registry id \"${id}\" reassigned to a new occupant.`);\n }\n\n const token = Symbol('vc-nav-registry-token');\n\n this.map.set(id, { token, entry });\n\n return () => {\n const occupant = this.map.get(id);\n if (occupant && occupant.token === token) {\n this.map.delete(id);\n }\n };\n }\n\n /** Reactive, empty-safe read. Never returns `undefined`. */\n get<META = any>(id: string): NavigationRegistryEntry<META> {\n const occupant = this.map.get(id);\n if (occupant) {\n return occupant.entry as NavigationRegistryEntry<META>;\n }\n\n let empty = this.empties.get(id);\n if (!empty) {\n empty = createEmptyEntry();\n this.empties.set(id, empty);\n }\n\n return empty as NavigationRegistryEntry<META>;\n }\n\n /** True when an occupant currently holds `id`. */\n has(id: string): boolean {\n return this.map.has(id);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { inject, provide } from '@vuecs/core';\nimport type { App } from 'vue';\nimport { NavigationRegistry } from './module';\n\nconst sym = Symbol.for('VCNavigationRegistry');\n\nexport function tryInjectNavigationRegistry(app?: App): NavigationRegistry | undefined {\n return inject<NavigationRegistry>(sym, app);\n}\n\nexport function injectNavigationRegistry(app?: App): NavigationRegistry {\n const instance = tryInjectNavigationRegistry(app);\n if (!instance) {\n throw new Error('A navigation registry has not been provided.');\n }\n\n return instance;\n}\n\nexport function provideNavigationRegistry(\n registry: NavigationRegistry = new NavigationRegistry(),\n app?: App,\n): NavigationRegistry {\n provide(sym, registry, app);\n return registry;\n}\n","import type { NavigationItemNormalized } from '../types';\n\ntype ParentMatch = {\n score: number\n};\n\ntype ItemMatchesFindOptions = {\n path?: string\n};\n\nfunction calculateItemScoreForPath(\n item: NavigationItemNormalized,\n currentPath: string,\n) {\n if (item.url === '/') {\n return 1;\n }\n\n if (item.activeMatch) {\n if (item.activeMatch === currentPath) {\n return 6;\n } if (currentPath.startsWith(item.activeMatch)) {\n return 4;\n }\n }\n\n if (item.url) {\n if (item.url === currentPath) {\n return 3;\n } if (currentPath.startsWith(item.url)) {\n return 2;\n }\n }\n\n return 0;\n}\n\nfunction findItemMatchesIF(\n items: NavigationItemNormalized[],\n options: ItemMatchesFindOptions,\n parent: ParentMatch,\n) {\n const output : {\n data: NavigationItemNormalized,\n score: number\n }[] = [];\n\n for (const item of items) {\n let { score } = parent;\n\n if (options.path) {\n score += calculateItemScoreForPath(item, options.path);\n }\n\n if (item.default) {\n score += 1;\n }\n\n if (item.children) {\n const childMatches = findItemMatchesIF(item.children, options, { score });\n\n output.push(...childMatches);\n }\n\n output.push({ data: item, score });\n }\n\n return output.sort((a, b) => b.score - a.score);\n}\n\nexport function findBestItemMatches(\n items: NavigationItemNormalized[],\n options: ItemMatchesFindOptions = {},\n) : NavigationItemNormalized[] {\n const result = findItemMatchesIF(items, options, { score: 0 });\n const [first] = result;\n if (!first) {\n return [];\n }\n\n return result\n .filter((match) => match.score === first.score)\n .map((match) => match.data);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NavigationItem, NavigationItemNormalized } from '../types';\n\nfunction normalizeItemIF(\n item: NavigationItem,\n trace: string[],\n) : NavigationItemNormalized {\n const output : NavigationItemNormalized = {\n ...item,\n children: [],\n trace: [\n ...trace,\n item.name,\n ],\n meta: item.meta || {},\n };\n\n if (!item.children) {\n return output;\n }\n\n for (let i = 0; i < item.children.length; i++) {\n output.children.push(normalizeItemIF(item.children[i], output.trace));\n }\n\n return output;\n}\n\nexport function normalizeItem(\n item: NavigationItem,\n) : NavigationItemNormalized {\n return normalizeItemIF(item, []);\n}\n\nexport function normalizeItems(\n items: NavigationItem[],\n) : NavigationItemNormalized[] {\n return items.map((item) => normalizeItem(item));\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isTraceEqual(\n a: string[],\n b: string[],\n): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n for (const [i, element] of a.entries()) {\n if (element !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function isTracePartOf(item: string[], parent: string[]) {\n for (const [i, element] of item.entries()) {\n if (parent[i] !== element) {\n return false;\n }\n }\n\n return true;\n}\n","import type { NavigationItemNormalized } from '../types';\nimport { isTraceEqual, isTracePartOf } from './trace';\n\nfunction resetItemsByTraceIF(\n items: NavigationItemNormalized[],\n trace: string[],\n) {\n for (const item of items) {\n const isEqual = isTraceEqual(item.trace, trace);\n item.active = isEqual;\n item.display = true;\n\n if (isEqual) {\n item.activeWithin = false;\n item.displayChildren = true;\n } else {\n const isAncestor = isTracePartOf(item.trace, trace);\n item.activeWithin = isAncestor;\n item.displayChildren = isAncestor;\n }\n\n item.children = resetItemsByTraceIF(item.children, trace);\n }\n\n return items;\n}\n\nexport function resetItemsByTrace(\n items: NavigationItemNormalized[],\n trace: string[],\n) {\n return resetItemsByTraceIF(items, trace);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n NavigationOrientation,\n NavigationSubmenu,\n NavigationSubmenuMode,\n} from '../types';\n\n/**\n * Resolve the effective submenu presentation. An explicit `collapse` /\n * `dropdown` wins; `auto` derives from orientation — only an explicit\n * `horizontal` opts into the dropdown (NavigationMenu) path, everything\n * else collapses (Collapsible).\n */\nexport function resolveSubmenuMode(\n submenu: NavigationSubmenu | undefined,\n orientation: NavigationOrientation | undefined,\n): NavigationSubmenuMode {\n if (submenu === 'collapse' || submenu === 'dropdown') {\n return submenu;\n }\n\n return orientation === 'horizontal' ? 'dropdown' : 'collapse';\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { NavigationItemNormalized } from '../types';\n\n/**\n * Walk a normalized tree along `trace` (an ordered list of item names,\n * root → leaf) and collect the item at each depth. Returns the ordered\n * active trail: `[0]` is the top-level section, `.at(-1)` is the leaf.\n */\nexport function collectTrail(\n items: NavigationItemNormalized[],\n trace: string[],\n): NavigationItemNormalized[] {\n const output: NavigationItemNormalized[] = [];\n\n let level = items;\n for (const name of trace) {\n const found = level.find((item) => item.name === name);\n if (!found) {\n break;\n }\n\n output.push(found);\n level = found.children;\n }\n\n return output;\n}\n\n/**\n * Depth-first collect of every item in the tree matching `predicate`.\n */\nexport function flattenWhere(\n items: NavigationItemNormalized[],\n predicate: (item: NavigationItemNormalized) => boolean,\n): NavigationItemNormalized[] {\n const output: NavigationItemNormalized[] = [];\n\n for (const item of items) {\n if (predicate(item)) {\n output.push(item);\n }\n\n if (item.children.length > 0) {\n output.push(...flattenWhere(item.children, predicate));\n }\n }\n\n return output;\n}\n","export function isAbsoluteURL(str: string): boolean {\n return str.substring(0, 7) === 'http://' ||\n str.substring(0, 8) === 'https://';\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\n\n/**\n * Default classes for the `navigation` theme entry. Shared between\n * `<VCNavItems>` (the container) and `<VCNavItem>` (the per-row\n * component) — both call `useComponentTheme('navigation', …)` with\n * the same slot defaults, so the source of truth lives here.\n */\nexport const navigationThemeDefaults: ComponentThemeDefinition<NavigationThemeClasses> = {\n classes: {\n group: 'vc-nav-items',\n item: 'vc-nav-item',\n itemNested: 'vc-nav-item-nested',\n separator: 'vc-nav-separator',\n link: 'vc-nav-link',\n linkRoot: 'vc-nav-link-root',\n linkIcon: 'vc-nav-link-icon',\n linkText: 'vc-nav-link-text',\n trigger: 'vc-nav-trigger',\n content: 'vc-nav-content',\n viewport: 'vc-nav-viewport',\n },\n variants: {\n // `list` is the default vertical/stacked look; `pills` renders the\n // items as a joined pill group (the nav-pills style). Structural CSS\n // for these markers ships in the package `assets/index.css`; palette\n // colors stay the theme's responsibility.\n variant: {\n list: {},\n pills: {\n group: 'vc-nav-items--pills',\n item: 'vc-nav-item--pills',\n link: 'vc-nav-link--pills',\n },\n },\n orientation: {\n horizontal: {},\n vertical: { group: 'vc-nav-items--vertical' },\n },\n },\n defaultVariants: {\n variant: 'list',\n orientation: 'horizontal',\n },\n};\n","import type { ComputedRef, InjectionKey } from 'vue';\nimport type { NavigationItemNormalized } from '../types';\n\n/**\n * Channels a `<VCNavItem>`'s already-normalized + scored `children` down\n * to the nested `<VCNavItems>` that renders its submenu.\n *\n * The top-level nav scores the WHOLE tree once; nested lists must render\n * those results as-is rather than re-resolving / re-scoring a subtree\n * (which would clobber traces and lose whole-tree active context). The\n * nested `<VCNavItems>` reads this when it has no own `data` prop —\n * presence of the injected nodes is what marks it as a nested renderer\n * rather than a resolving root. Each `<VCNavItem>` re-provides its own\n * children, so the value is correctly scoped per nesting level.\n */\nexport const NAVIGATION_NODES_KEY: InjectionKey<ComputedRef<NavigationItemNormalized[]>> = Symbol('vc-navigation-nodes');\n\n/**\n * Bridges a clicked `<VCNavItem>` up to the owning root `<VCNavItems>`.\n *\n * A url-less item can't navigate, so a click instead \"selects\" it: the\n * root nav records the item's trace and folds it into its active-state\n * derivation, publishing it through the registry's `active` / `activeTrail`.\n * Dependent navs then react with zero app wiring — exactly as they would\n * for a route-driven active change.\n */\nexport type NavigationSelectContext = {\n /** Invoke to mark `item` as the selected (active) item of the root nav. */\n select: (item: NavigationItemNormalized) => void;\n};\n\nexport const NAVIGATION_SELECT_KEY: InjectionKey<NavigationSelectContext> = Symbol('vc-navigation-select');\n","import { hasNormalizedSlot, normalizeSlot, useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport type { LinkProperties } from '@vuecs/link';\nimport { VCLink } from '@vuecs/link';\nimport type {\n Component,\n ExtractPublicPropTypes,\n PropType,\n SlotsType,\n VNodeChild,\n} from 'vue';\nimport {\n computed,\n defineComponent,\n h,\n inject,\n provide,\n ref,\n resolveComponent,\n toRef,\n watch,\n} from 'vue';\nimport {\n CollapsibleContent,\n CollapsibleRoot,\n CollapsibleTrigger,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuTrigger,\n} from 'reka-ui';\nimport type {\n NavigationItemNormalized,\n NavigationOrientation,\n NavigationSubmenuMode,\n} from '../../types';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\nimport { isAbsoluteURL } from '../../helpers';\nimport { ElementType, SlotName } from '../../constants';\nimport type {\n NavItemLinkSlotProps,\n NavItemSeparatorSlotProps,\n NavItemSubItemsSlotProps,\n NavItemSubSlotProps,\n NavItemSubTitleSlotProps,\n} from '../type';\nimport { navigationThemeDefaults } from '../items/theme';\nimport { NAVIGATION_NODES_KEY, NAVIGATION_SELECT_KEY } from '../select-context';\n\nconst navItemProps = {\n data: {\n type: Object as PropType<NavigationItemNormalized>,\n required: true,\n },\n variant: {\n type: String,\n default: undefined,\n },\n orientation: {\n type: String as PropType<NavigationOrientation>,\n default: undefined,\n },\n /**\n * Resolved submenu presentation handed down by the parent\n * `<VCNavItems>`. `collapse` renders groups as an inline\n * Reka `Collapsible`; `dropdown` renders them as Reka\n * `NavigationMenu` flyouts.\n */\n submenu: {\n type: String as PropType<NavigationSubmenuMode>,\n default: 'collapse',\n },\n /**\n * The tag (or component) this item renders as — its own wrapper\n * (`<li>` by default). Receives `<VCNavItems>`' `itemAs`. Honored in\n * collapse mode only.\n */\n as: {\n type: [String, Object, Function] as PropType<string | Component>,\n default: 'li',\n },\n /**\n * The list-container tag for this item's nested submenu\n * `<VCNavItems>` (`<ul>` by default). Receives `<VCNavItems>`' `as`.\n * Honored in collapse mode only.\n */\n itemsAs: {\n type: [String, Object, Function] as PropType<string | Component>,\n default: 'ul',\n },\n themeClass: {\n type: Object as PropType<ThemeClassesOverride<NavigationThemeClasses>>,\n default: undefined,\n },\n themeVariant: {\n type: Object as PropType<VariantValues>,\n default: undefined,\n },\n};\n\nexport type NavItemProps = ExtractPublicPropTypes<typeof navItemProps>;\n\nexport const VCNavItem = defineComponent({\n name: 'VCNavItem',\n props: navItemProps,\n slots: Object as SlotsType<{\n separator: NavItemSeparatorSlotProps;\n link: NavItemLinkSlotProps;\n sub: NavItemSubSlotProps;\n 'sub-title': NavItemSubTitleSlotProps;\n 'sub-items': NavItemSubItemsSlotProps;\n }>,\n setup(props, { slots }) {\n const itemsNode = resolveComponent('VCNavItems');\n\n const themeProps: UseComponentThemeProps<NavigationThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.variant !== undefined ? { variant: props.variant } : {}),\n };\n },\n };\n\n const theme = useComponentTheme('navigation', themeProps, navigationThemeDefaults);\n\n const data = toRef(props, 'data');\n const hasChildren = computed(() => data.value.children &&\n data.value.children.length > 0);\n\n // Channel this item's already-scored children down to the nested\n // `<VCNavItems>` that renders its submenu, so the child list renders\n // them as-is instead of re-resolving / re-scoring a subtree. Scoped\n // per item — each `<VCNavItem>` re-provides its own children.\n provide(NAVIGATION_NODES_KEY, computed(() => data.value.children));\n\n // Local expand state — seeded from the resolved `displayChildren`\n // (driven by active-trail matching upstream) and resynced whenever\n // that recomputes, so a path change auto-opens the active branch.\n const open = ref(!!data.value.displayChildren);\n watch(() => data.value.displayChildren, (value) => {\n open.value = !!value;\n });\n\n // Selection bubbles up to the owning root `<VCNavItems>`, which folds\n // this item's trace into its active state and republishes through the\n // registry. The primary use is url-less section switchers (a top-nav\n // tab that swaps a dependent sidebar without navigating). Items with\n // a real url also navigate; the route change then supersedes the\n // selection upstream.\n const selectContext = inject(NAVIGATION_SELECT_KEY, null);\n const select = () => {\n selectContext?.select(data.value);\n };\n\n const toggle = () => {\n open.value = !open.value;\n };\n\n // Iconify-style icon strings (e.g. `fa6-solid:home`, `lucide:plus`)\n // contain a colon. Render via the globally-registered <VCIcon> so\n // they resolve through the Iconify pipeline rather than landing as\n // raw CSS classes on a literal <i>. Legacy class-string icons\n // (`fa fa-home`, `material-icons home`) keep their <i class> rendering.\n const renderIcon = (icon: string): VNodeChild => {\n if (icon.includes(':')) {\n return h(resolveComponent('VCIcon'), { name: icon });\n }\n return h('i', { class: icon });\n };\n\n const renderTitleInner = (resolved: NavigationThemeClasses): VNodeChild[] => [\n ...(data.value.icon ?\n [h('div', { class: resolved.linkIcon || undefined }, [\n renderIcon(data.value.icon),\n ])] :\n []),\n h('div', { class: resolved.linkText || undefined }, [\n data.value.name,\n ]),\n ];\n\n const renderLeaf = (resolved: NavigationThemeClasses): VNodeChild => {\n if (hasNormalizedSlot(SlotName.LINK, slots)) {\n return normalizeSlot(SlotName.LINK, {\n data: data.value,\n select,\n isActive: data.value.active,\n }, slots);\n }\n\n const linkProps: LinkProperties = {\n active: data.value.active,\n disabled: false,\n prefetch: true,\n };\n\n if (data.value.url) {\n if (\n isAbsoluteURL(data.value.url) ||\n data.value.url.startsWith('#')\n ) {\n linkProps.href = data.value.url;\n if (data.value.urlTarget) {\n linkProps.target = data.value.urlTarget;\n }\n } else {\n linkProps.to = data.value.url;\n }\n }\n\n return h(VCLink, {\n class: [resolved.link],\n 'data-vc-collection-item': '',\n ...linkProps,\n onClicked: select,\n }, { default: () => renderTitleInner(resolved) });\n };\n\n const renderChildren = (): VNodeChild => {\n if (hasNormalizedSlot(SlotName.SUB_ITEMS, slots)) {\n return normalizeSlot(SlotName.SUB_ITEMS, {\n data: data.value,\n select,\n toggle,\n });\n }\n\n // A dropdown group's flyout panel is plain content — a list of\n // links — NOT another menu bar. Recursing with `submenu=\"dropdown\"`\n // would nest a second `NavigationMenuRoot` inside this root's\n // `NavigationMenuContent`; Reka's NavigationMenu is built around a\n // SINGLE root per bar, and nesting roots breaks the hover state\n // machine (the panel only opens on the first hover and never\n // reopens). Rendering the panel contents in `collapse` mode keeps\n // them a plain `<ul>` of links, so deeper groups degrade to inline\n // collapsibles within the flyout instead of buggy sub-roots.\n // No `data`: the nested list reads this item's children via the\n // NAVIGATION_NODES_KEY inject provided in setup above.\n return h(itemsNode, {\n variant: props.variant,\n orientation: props.orientation,\n submenu: props.submenu === 'dropdown' ? 'collapse' : props.submenu,\n as: props.itemsAs,\n itemAs: props.as,\n themeClass: props.themeClass,\n themeVariant: props.themeVariant,\n });\n };\n\n return () => {\n const resolved = theme.value;\n const isDropdown = props.submenu === 'dropdown';\n const isActive = data.value.active || data.value.activeWithin;\n\n // type: separator\n if (data.value.type === ElementType.SEPARATOR) {\n const body = hasNormalizedSlot(SlotName.SEPARATOR, slots) ?\n normalizeSlot(SlotName.SEPARATOR, { data: data.value }, slots) :\n h('div', { class: resolved.separator || undefined }, data.value.name);\n\n if (isDropdown) {\n return h(NavigationMenuItem, { class: [resolved.item] }, { default: () => body });\n }\n return h(props.as, { class: [resolved.item] }, [body]);\n }\n\n // type: link (no children)\n if (!hasChildren.value) {\n const leaf = renderLeaf(resolved);\n\n if (isDropdown) {\n return h(NavigationMenuItem, {\n class: [resolved.item],\n 'data-active': data.value.active ? '' : undefined,\n }, {\n default: () => h(NavigationMenuLink, {\n active: data.value.active,\n asChild: true,\n }, { default: () => leaf }),\n });\n }\n\n return h(props.as, {\n class: [resolved.item, { active: data.value.active }],\n 'data-active': data.value.active ? '' : undefined,\n }, [leaf]);\n }\n\n // type: group with children — full-override slot bypasses the\n // Collapsible / NavigationMenu machinery entirely.\n if (hasNormalizedSlot(SlotName.SUB, slots)) {\n const body = normalizeSlot(SlotName.SUB, {\n data: data.value,\n select,\n toggle,\n }, slots);\n\n if (isDropdown) {\n return h(NavigationMenuItem, {\n class: [resolved.item, resolved.itemNested],\n 'data-active': isActive ? '' : undefined,\n }, { default: () => body });\n }\n return h(props.as, {\n class: [resolved.item, resolved.itemNested, { active: isActive }],\n 'data-active': isActive ? '' : undefined,\n }, [body]);\n }\n\n const title = hasNormalizedSlot(SlotName.SUB_TITLE, slots) ?\n normalizeSlot(SlotName.SUB_TITLE, {\n data: data.value,\n select,\n toggle,\n }) :\n renderTitleInner(resolved);\n\n // dropdown: Reka NavigationMenu flyout\n if (isDropdown) {\n return h(NavigationMenuItem, {\n class: [resolved.item, resolved.itemNested],\n 'data-active': isActive ? '' : undefined,\n }, {\n default: () => [\n h(NavigationMenuTrigger, {\n class: resolved.trigger || undefined,\n 'data-vc-collection-item': '',\n 'data-active': isActive ? '' : undefined,\n }, { default: () => title }),\n // Re-invoke `renderChildren()` per mount: Reka's\n // NavigationMenuContent unmounts on close and remounts on\n // reopen (unmountOnHide). A VNode can only be rendered\n // once, so handing back a pre-computed tree renders an\n // EMPTY flyout on the second open. The thunk produces a\n // fresh subtree each time the content mounts.\n h(NavigationMenuContent, { class: resolved.content || undefined }, { default: () => renderChildren() }),\n ],\n });\n }\n\n // collapse: inline Reka Collapsible\n return h(CollapsibleRoot, {\n as: props.as,\n class: [\n resolved.item,\n resolved.itemNested,\n { active: data.value.active || open.value },\n ],\n 'data-active': isActive ? '' : undefined,\n open: open.value,\n 'onUpdate:open': (value: boolean) => {\n open.value = value;\n },\n }, {\n default: () => [\n h(CollapsibleTrigger, {\n class: resolved.trigger || undefined,\n 'data-vc-collection-item': '',\n 'data-active': isActive ? '' : undefined,\n }, { default: () => title }),\n h(CollapsibleContent, { class: resolved.content || undefined }, { default: () => renderChildren() }),\n ],\n });\n };\n },\n});\n","import {\n hasNormalizedSlot,\n isPromise,\n normalizeSlot,\n useArrowNavigation,\n useComponentTheme,\n} from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport type {\n Component,\n ExtractPublicPropTypes,\n PropType,\n SlotsType,\n VNodeArrayChildren,\n VNodeChild,\n WatchSource,\n} from 'vue';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watch,\n watchEffect,\n} from 'vue';\nimport { NavigationMenuList, NavigationMenuRoot } from 'reka-ui';\nimport { SlotName } from '../../constants';\nimport type {\n NavigationItem,\n NavigationItemNormalized,\n NavigationOrientation,\n NavigationResolver,\n NavigationSubmenu,\n} from '../../types';\nimport type { NavigationThemeClasses } from '../../helpers/component/types';\nimport {\n collectTrail,\n findBestItemMatches,\n flattenWhere,\n normalizeItems,\n resetItemsByTrace,\n resolveSubmenuMode,\n} from '../../helpers';\nimport { NavigationRegistry, tryInjectNavigationRegistry } from '../../registry';\nimport { VCNavItem } from '../item';\nimport { NAVIGATION_NODES_KEY, NAVIGATION_SELECT_KEY } from '../select-context';\nimport type { NavItemsItemSlotProps } from '../type';\nimport { navigationThemeDefaults } from './theme';\n\nconst navItemsProps = {\n /**\n * The source of this nav's items. Plain array, sync fn, or async fn.\n * A fn receives a NavigationResolverContext and may read reactive\n * state freely — the nav re-runs it automatically when that state\n * changes.\n *\n * When omitted, the nav checks whether it is a nested submenu of a\n * parent `<VCNavItem>` (via the {@link NAVIGATION_NODES_KEY} inject)\n * and, if so, renders that parent's already-scored children as-is.\n */\n data: {\n type: [Array, Function] as PropType<NavigationItem[] | NavigationResolver>,\n default: undefined,\n },\n /** Opt in to publishing this nav's resolved output into the registry. */\n registry: { type: Boolean, default: false },\n /** The key under which to publish. Required when `registry` is true. */\n registryId: { type: String, default: undefined },\n /**\n * Current path for active-state matching. When omitted, the nav softly\n * reads vue-router's current route (via the `$route` global property)\n * if a router is installed; router-free apps simply get `undefined`.\n */\n path: { type: String, default: undefined },\n /**\n * Extra reactive deps that should retrigger the resolver — for state\n * read only AFTER the first `await` in an async resolver (auto-track\n * can't see past an await).\n */\n watch: { type: Array as PropType<WatchSource[]>, default: undefined },\n variant: { type: String, default: undefined },\n orientation: { type: String as PropType<NavigationOrientation>, default: undefined },\n /**\n * How items with children render their submenu. `auto` derives from\n * orientation (horizontal → dropdown, otherwise collapse).\n */\n submenu: { type: String as PropType<NavigationSubmenu>, default: 'auto' },\n /**\n * The tag (or component) for this nav's list container. Defaults to\n * `'ul'`. Forwarded unchanged to every nesting level so the whole tree\n * renders the same container tag. Honored in collapse mode only —\n * dropdown mode keeps Reka's NavigationMenu primitives.\n */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'ul' },\n /**\n * The tag (or component) for each item wrapper. Defaults to `'li'`.\n * Forwarded unchanged to every nesting level. Honored in collapse mode\n * only — dropdown mode keeps Reka's NavigationMenu primitives.\n */\n itemAs: { type: [String, Object, Function] as PropType<string | Component>, default: 'li' },\n themeClass: { type: Object as PropType<ThemeClassesOverride<NavigationThemeClasses>>, default: undefined },\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type NavItemsProps = ExtractPublicPropTypes<typeof navItemsProps>;\n\nexport const VCNavItems = defineComponent({\n name: 'VCNavItems',\n props: navItemsProps,\n slots: Object as SlotsType<{\n item: NavItemsItemSlotProps;\n }>,\n setup(props, { slots, expose }) {\n // Merge the convenience `variant` prop into themeVariant before\n // resolution so themes can drive slot classes off it. Getter keeps\n // it reactive (computed() inside useComponentTheme tracks the read).\n const themeProps: UseComponentThemeProps<NavigationThemeClasses> = {\n get themeClass() {\n return props.themeClass;\n },\n get themeVariant() {\n return {\n ...(props.themeVariant ?? {}),\n ...(props.variant !== undefined ? { variant: props.variant } : {}),\n ...(props.orientation !== undefined ? { orientation: props.orientation } : {}),\n };\n },\n };\n\n const theme = useComponentTheme('navigation', themeProps, navigationThemeDefaults);\n\n const rootRef = ref<HTMLUListElement | null>(null);\n\n const onKeyDown = (event: KeyboardEvent) => {\n useArrowNavigation(\n event,\n event.target as HTMLElement | null,\n rootRef.value,\n {\n arrowKeyOptions: 'vertical',\n focus: true,\n loop: true,\n },\n );\n };\n\n // Registry is empty-safe: a standalone nav (no plugin installed)\n // falls back to a local empty registry so `registry(id)` still works.\n const registry = tryInjectNavigationRegistry() ?? new NavigationRegistry();\n\n // Soft vue-router lookup: vue-router installs a reactive `$route`\n // getter on `globalProperties`. Reading it inside a computed tracks\n // route changes without a static `vue-router` import, so router-free\n // apps degrade to `undefined` instead of failing to resolve the\n // module. An explicit `:path` prop always wins.\n const globals = getCurrentInstance()?.appContext.config.globalProperties;\n const currentPath = computed<string | undefined>(() => {\n if (typeof props.path !== 'undefined') {\n return props.path;\n }\n const route = globals?.$route as { path?: string } | undefined;\n return route?.path;\n });\n\n // Nested submenu detection: a parent `<VCNavItem>` provides its\n // already-scored children via NAVIGATION_NODES_KEY. When this nav\n // has no own `data` and such nodes are present, it is a nested\n // renderer — it skips resolving / scoring / select / registry and\n // just renders the provided subtree. An explicit `data` always\n // wins (treated as a resolving root even when nested in markup).\n const injectedNodes = inject(NAVIGATION_NODES_KEY, null);\n const isNested = computed(() => typeof props.data === 'undefined' && injectedNodes !== null);\n\n // --- click-driven selection (url-less section switchers) ---\n // A url-less item can't navigate, so a click \"selects\" it instead:\n // we record its trace and fold it into active-state derivation\n // below, publishing it through the registry like a route change.\n // Only a root nav holds this state and provides the bridge —\n // nested `<VCNavItems>` let the click bubble up to their owning root.\n const selectedTrace = ref<string[] | null>(null);\n if (!isNested.value) {\n provide(NAVIGATION_SELECT_KEY, {\n select: (item) => {\n selectedTrace.value = item.trace;\n },\n });\n // A real navigation supersedes a prior selection: once the\n // route changes, hand active-state back to path matching.\n watch(currentPath, () => {\n selectedTrace.value = null;\n });\n }\n\n // --- resolver + reactivity (root mode only; nested bypasses) ---\n const raw = ref<NavigationItem[]>([]);\n // Monotonic run token: overlapping async resolvers can settle out of\n // order, so only the latest invocation is allowed to write `raw.value`\n // — a slower earlier run must not clobber a fresher result.\n let runToken = 0;\n\n async function run() {\n const token = ++runToken;\n const value = typeof props.data === 'function' ?\n props.data({\n path: currentPath.value,\n registry: (id: string) => registry.get(id),\n }) :\n (props.data ?? []);\n\n if (!isPromise(value)) {\n raw.value = value ?? [];\n return;\n }\n\n try {\n const awaited = (await value) ?? [];\n if (token === runToken) {\n raw.value = awaited;\n }\n } catch (error) {\n // Without this, a rejected resolver surfaces as an unhandled\n // rejection from the watcher effect. Only the latest run logs.\n if (token === runToken) {\n // eslint-disable-next-line no-console\n console.error('[vuecs] <VCNavItems> resolver rejected:', error);\n }\n }\n }\n\n if (!isNested.value) {\n // Auto-track: reactive reads in `run` BEFORE the first await retrigger it.\n watchEffect(run);\n // Escape hatch for state read AFTER an await:\n if (props.watch) {\n watch(props.watch, run);\n }\n }\n\n // Imperative escape hatch:\n expose({ refresh: run });\n\n // --- normalized + tree-wide scored derivation ---\n const resolved = computed<{ items: NavigationItemNormalized[]; trace: string[] }>(() => {\n if (isNested.value && injectedNodes) {\n return { items: injectedNodes.value, trace: [] };\n }\n\n const normalized = normalizeItems(raw.value);\n const [match] = findBestItemMatches(normalized, { path: currentPath.value });\n // A click-driven selection (url-less switcher) overrides the\n // path match until the next real navigation clears it.\n const trace = selectedTrace.value ?? (match ? match.trace : []);\n // sets per item: .active (exact) AND .activeWithin (ancestor)\n resetItemsByTrace(normalized, trace);\n return { items: normalized, trace };\n });\n\n const tree = computed(() => resolved.value.items);\n const active = computed(() => flattenWhere(tree.value, (item) => !!item.active));\n const activeTrail = computed(() => collectTrail(tree.value, resolved.value.trace));\n\n // --- registry publish (opt-in, lifecycle-bound) ---\n if (props.registry) {\n let unsubscribeFn : (() => void) | undefined;\n\n const entry = {\n items: tree,\n active,\n activeTrail,\n };\n\n onMounted(() => {\n if (!props.registryId) {\n // eslint-disable-next-line no-console\n console.warn('[vuecs] <VCNavItems registry> requires a `registry-id`.');\n return;\n }\n unsubscribeFn = registry.register(props.registryId, entry);\n });\n onUnmounted(() => {\n if (!props.registryId || !unsubscribeFn) {\n return;\n }\n\n unsubscribeFn();\n });\n }\n\n const submenuMode = computed(() => resolveSubmenuMode(props.submenu, props.orientation));\n\n return () => {\n const resolvedTheme = theme.value;\n const vNodes: VNodeArrayChildren = [];\n\n for (let i = 0; i < tree.value.length; i++) {\n const item = tree.value[i];\n if (!item.display && !item.displayChildren) {\n continue;\n }\n\n let vNode: VNodeChild;\n if (hasNormalizedSlot(SlotName.ITEM, slots)) {\n vNode = normalizeSlot(SlotName.ITEM, { data: item }, slots);\n } else {\n vNode = h(\n VCNavItem,\n {\n key: item.trace.join('/') || i,\n data: item,\n variant: props.variant,\n orientation: props.orientation,\n submenu: submenuMode.value,\n as: props.itemAs,\n itemsAs: props.as,\n themeClass: props.themeClass,\n themeVariant: props.themeVariant,\n },\n );\n }\n\n vNodes.push(vNode);\n }\n\n // Dropdown mode wraps the list in Reka's NavigationMenu so group\n // triggers get flyout machinery (hover-grace, edge-aware content,\n // arrow-key nav). Collapse mode stays a plain <ul> and wires our\n // own arrow-navigation on the root.\n if (submenuMode.value === 'dropdown') {\n return h(\n NavigationMenuRoot,\n { orientation: 'horizontal' },\n {\n default: () => h(\n NavigationMenuList,\n { class: resolvedTheme.group || undefined },\n { default: () => vNodes },\n ),\n },\n );\n }\n\n const isRoot = !isNested.value;\n\n return h(\n props.as,\n {\n class: resolvedTheme.group || undefined,\n ...(isRoot ?\n { ref: rootRef, onKeydown: onKeyDown } :\n {}),\n },\n vNodes,\n );\n };\n },\n});\n","import type { InjectionKey } from 'vue';\nimport { inject, provide } from 'vue';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport type { StepperThemeClasses } from './types';\n\n/**\n * Context shared from `<VCStepper>` to its descendant parts so that\n * theme-class and theme-variant values applied to the root propagate\n * automatically to indicator / title / description / separator / item /\n * trigger without the consumer having to repeat the props on every\n * child. Per-instance values on a child still win over inherited ones.\n *\n * Optional — children render bare (without inherited theme values) when\n * mounted outside `<VCStepper>` for unit tests / Storybook.\n */\nexport type StepperContext = {\n themeClass: () => ThemeClassesOverride<StepperThemeClasses> | undefined;\n themeVariant: () => VariantValues | undefined;\n};\n\nconst STEPPER_CONTEXT_KEY: InjectionKey<StepperContext> = Symbol('vcStepperContext');\n\nexport function provideStepperContext(ctx: StepperContext): void {\n provide(STEPPER_CONTEXT_KEY, ctx);\n}\n\nexport function useStepperContext(): StepperContext | null {\n return inject(STEPPER_CONTEXT_KEY, null);\n}\n","import type { ComponentThemeDefinition } from '@vuecs/core';\nimport type { StepperThemeClasses } from './types';\n\nexport const stepperThemeDefaults: ComponentThemeDefinition<StepperThemeClasses> = {\n classes: {\n root: 'vc-stepper',\n item: 'vc-stepper-item',\n trigger: 'vc-stepper-trigger',\n indicator: 'vc-stepper-indicator',\n title: 'vc-stepper-title',\n description: 'vc-stepper-description',\n separator: 'vc-stepper-separator',\n },\n};\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { provideStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperProps = {\n /** Active step (1-based). v-modeled. */\n modelValue: { type: Number, default: undefined },\n /** Initial active step for uncontrolled usage. */\n defaultValue: { type: Number, default: 1 },\n /** Layout direction. */\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n /** Reading direction. Falls back to the ConfigManager's `dir` value when omitted. */\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n /** When `true`, steps must be completed in order — Reka blocks navigation past the next incomplete step. */\n linear: { type: Boolean, default: true },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperProps = ExtractPublicPropTypes<typeof stepperProps>;\n\nexport default defineComponent({\n name: 'VCStepper',\n inheritAttrs: false,\n props: stepperProps,\n emits: ['update:modelValue'],\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n // Propagate theme-class + theme-variant to descendant indicator /\n // title / description / separator / item / trigger parts so a single\n // `<VCStepper :theme-variant=\"{ size: 'sm' }\">` resizes the whole\n // stepper, and `:theme-class=\"{ indicator: 'ring-2' }\">` skins every\n // indicator. Children fall back to their own per-instance values\n // when the consumer wants to override them.\n provideStepperContext({\n themeClass: () => props.themeClass,\n themeVariant: () => props.themeVariant,\n });\n const theme = useComponentTheme('stepper', props, stepperThemeDefaults);\n return () => h(\n StepperRoot,\n mergeProps(attrs, {\n modelValue: props.modelValue,\n defaultValue: props.defaultValue,\n orientation: props.orientation,\n dir: props.dir,\n linear: props.linear,\n 'onUpdate:modelValue': (value: number | undefined) => emit('update:modelValue', value),\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperRoot } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, VariantValues } from '@vuecs/core';\nimport { provideStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperProps = {\n /** Active step (1-based). v-modeled. */\n modelValue: { type: Number, default: undefined },\n /** Initial active step for uncontrolled usage. */\n defaultValue: { type: Number, default: 1 },\n /** Layout direction. */\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n /** Reading direction. Falls back to the ConfigManager's `dir` value when omitted. */\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n /** When `true`, steps must be completed in order — Reka blocks navigation past the next incomplete step. */\n linear: { type: Boolean, default: true },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperProps = ExtractPublicPropTypes<typeof stepperProps>;\n\nexport default defineComponent({\n name: 'VCStepper',\n inheritAttrs: false,\n props: stepperProps,\n emits: ['update:modelValue'],\n setup(props, {\n attrs,\n slots,\n emit,\n }) {\n // Propagate theme-class + theme-variant to descendant indicator /\n // title / description / separator / item / trigger parts so a single\n // `<VCStepper :theme-variant=\"{ size: 'sm' }\">` resizes the whole\n // stepper, and `:theme-class=\"{ indicator: 'ring-2' }\">` skins every\n // indicator. Children fall back to their own per-instance values\n // when the consumer wants to override them.\n provideStepperContext({\n themeClass: () => props.themeClass,\n themeVariant: () => props.themeVariant,\n });\n const theme = useComponentTheme('stepper', props, stepperThemeDefaults);\n return () => h(\n StepperRoot,\n mergeProps(attrs, {\n modelValue: props.modelValue,\n defaultValue: props.defaultValue,\n orientation: props.orientation,\n dir: props.dir,\n linear: props.linear,\n 'onUpdate:modelValue': (value: number | undefined) => emit('update:modelValue', value),\n class: theme.value.root || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { StepperItem } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nexport type StepperItemSlotProps = {\n state: 'active' | 'completed' | 'inactive';\n};\n\nconst stepperItemProps = {\n /** 1-based step index. Required by Reka — used to determine completion / active state. */\n step: { type: Number, required: true },\n /** Block interaction with this step. */\n disabled: { type: Boolean, default: false },\n /** Force completion state. Reka derives this automatically when `false`. */\n completed: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperItemProps = ExtractPublicPropTypes<typeof stepperItemProps>;\n\nexport default defineComponent({\n name: 'VCStepperItem',\n inheritAttrs: false,\n props: stepperItemProps,\n slots: Object as SlotsType<{\n default: StepperItemSlotProps;\n }>,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperItem,\n // `step` is required on StepperItem; vue-tsc loses that\n // through `mergeProps`'s untyped `Data` return, so we pass\n // it as a direct prop (and merge attrs separately for\n // pass-through HTML attrs / data-* / class composition).\n // The `group` utility scopes child\n // `group-data-[state=...]:` selectors in theme-tailwind so\n // child indicators / titles can react to the parent step's\n // state without explicit attribute wiring on every child.\n {\n step: props.step,\n disabled: props.disabled,\n completed: props.completed,\n ...mergeProps(attrs, { class: ['group', theme.value.item || undefined] }),\n },\n { default: ({ state }: StepperItemSlotProps) => slots.default?.({ state }) },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { ExtractPublicPropTypes, PropType, SlotsType } from 'vue';\nimport { StepperItem } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nexport type StepperItemSlotProps = {\n state: 'active' | 'completed' | 'inactive';\n};\n\nconst stepperItemProps = {\n /** 1-based step index. Required by Reka — used to determine completion / active state. */\n step: { type: Number, required: true },\n /** Block interaction with this step. */\n disabled: { type: Boolean, default: false },\n /** Force completion state. Reka derives this automatically when `false`. */\n completed: { type: Boolean, default: false },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperItemProps = ExtractPublicPropTypes<typeof stepperItemProps>;\n\nexport default defineComponent({\n name: 'VCStepperItem',\n inheritAttrs: false,\n props: stepperItemProps,\n slots: Object as SlotsType<{\n default: StepperItemSlotProps;\n }>,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperItem,\n // `step` is required on StepperItem; vue-tsc loses that\n // through `mergeProps`'s untyped `Data` return, so we pass\n // it as a direct prop (and merge attrs separately for\n // pass-through HTML attrs / data-* / class composition).\n // The `group` utility scopes child\n // `group-data-[state=...]:` selectors in theme-tailwind so\n // child indicators / titles can react to the parent step's\n // state without explicit attribute wiring on every child.\n {\n step: props.step,\n disabled: props.disabled,\n completed: props.completed,\n ...mergeProps(attrs, { class: ['group', theme.value.item || undefined] }),\n },\n { default: ({ state }: StepperItemSlotProps) => slots.default?.({ state }) },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTrigger } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTriggerProps = {\n /** Render the consumer's slot child as the trigger root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'button' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTriggerProps = ExtractPublicPropTypes<typeof stepperTriggerProps>;\n\nexport default defineComponent({\n name: 'VCStepperTrigger',\n inheritAttrs: false,\n props: stepperTriggerProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTrigger,\n mergeProps(\n // Default to type=\"button\" only when rendering a real\n // <button>; otherwise it'd submit any wrapping <form>.\n // Consumer's `attrs` still wins because mergeProps gives\n // later objects precedence on `type`.\n props.as === 'button' ? { type: 'button' } : {},\n attrs,\n {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.trigger || undefined,\n },\n ),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTrigger } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTriggerProps = {\n /** Render the consumer's slot child as the trigger root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'button' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTriggerProps = ExtractPublicPropTypes<typeof stepperTriggerProps>;\n\nexport default defineComponent({\n name: 'VCStepperTrigger',\n inheritAttrs: false,\n props: stepperTriggerProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTrigger,\n mergeProps(\n // Default to type=\"button\" only when rendering a real\n // <button>; otherwise it'd submit any wrapping <form>.\n // Consumer's `attrs` still wins because mergeProps gives\n // later objects precedence on `type`.\n props.as === 'button' ? { type: 'button' } : {},\n attrs,\n {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.trigger || undefined,\n },\n ),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperIndicator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperIndicatorProps = {\n /** Render the consumer's slot child as the indicator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperIndicatorProps = ExtractPublicPropTypes<typeof stepperIndicatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperIndicator',\n inheritAttrs: false,\n props: stepperIndicatorProps,\n setup(props, { attrs, slots }) {\n // Inherit theme-variant (notably `size`) from the parent <VCStepper>\n // so the consumer doesn't have to repeat `:theme-variant` on every\n // indicator. Per-instance `props.themeVariant` still wins.\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperIndicator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.indicator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperIndicator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperIndicatorProps = {\n /** Render the consumer's slot child as the indicator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperIndicatorProps = ExtractPublicPropTypes<typeof stepperIndicatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperIndicator',\n inheritAttrs: false,\n props: stepperIndicatorProps,\n setup(props, { attrs, slots }) {\n // Inherit theme-variant (notably `size`) from the parent <VCStepper>\n // so the consumer doesn't have to repeat `:theme-variant` on every\n // indicator. Per-instance `props.themeVariant` still wins.\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperIndicator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.indicator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTitle } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTitleProps = {\n /** Render the consumer's slot child as the title root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'h4' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTitleProps = ExtractPublicPropTypes<typeof stepperTitleProps>;\n\nexport default defineComponent({\n name: 'VCStepperTitle',\n inheritAttrs: false,\n props: stepperTitleProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTitle,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.title || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperTitle } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperTitleProps = {\n /** Render the consumer's slot child as the title root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'h4' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperTitleProps = ExtractPublicPropTypes<typeof stepperTitleProps>;\n\nexport default defineComponent({\n name: 'VCStepperTitle',\n inheritAttrs: false,\n props: stepperTitleProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperTitle,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.title || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperDescription } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperDescriptionProps = {\n /** Render the consumer's slot child as the description root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'p' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperDescriptionProps = ExtractPublicPropTypes<typeof stepperDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCStepperDescription',\n inheritAttrs: false,\n props: stepperDescriptionProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperDescription,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.description || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperDescription } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperDescriptionProps = {\n /** Render the consumer's slot child as the description root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'p' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperDescriptionProps = ExtractPublicPropTypes<typeof stepperDescriptionProps>;\n\nexport default defineComponent({\n name: 'VCStepperDescription',\n inheritAttrs: false,\n props: stepperDescriptionProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperDescription,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.description || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperSeparator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperSeparatorProps = {\n /** Render the consumer's slot child as the separator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperSeparatorProps = ExtractPublicPropTypes<typeof stepperSeparatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperSeparator',\n inheritAttrs: false,\n props: stepperSeparatorProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperSeparator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.separator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent, h, mergeProps } from 'vue';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport { StepperSeparator } from 'reka-ui';\nimport { useComponentTheme } from '@vuecs/core';\nimport type { ThemeClassesOverride, UseComponentThemeProps, VariantValues } from '@vuecs/core';\nimport { useStepperContext } from './context';\nimport { stepperThemeDefaults } from './theme';\nimport type { StepperThemeClasses } from './types';\n\nconst stepperSeparatorProps = {\n /** Render the consumer's slot child as the separator root (Reka `asChild` pattern). */\n asChild: { type: Boolean, default: false },\n /** HTML tag to render. */\n as: { type: [String, Object, Function] as PropType<string | Component>, default: 'div' },\n /** Theme-class overrides for this component instance. */\n themeClass: { type: Object as PropType<ThemeClassesOverride<StepperThemeClasses>>, default: undefined },\n /** Theme-variant values for this component instance. */\n themeVariant: { type: Object as PropType<VariantValues>, default: undefined },\n};\n\nexport type StepperSeparatorProps = ExtractPublicPropTypes<typeof stepperSeparatorProps>;\n\nexport default defineComponent({\n name: 'VCStepperSeparator',\n inheritAttrs: false,\n props: stepperSeparatorProps,\n setup(props, { attrs, slots }) {\n const ctx = useStepperContext();\n const themeProps: UseComponentThemeProps<StepperThemeClasses> = {\n get themeClass() { return { ...(ctx?.themeClass() ?? {}), ...(props.themeClass ?? {}) }; },\n get themeVariant() {\n return { ...(ctx?.themeVariant() ?? {}), ...(props.themeVariant ?? {}) };\n },\n };\n const theme = useComponentTheme('stepper', themeProps, stepperThemeDefaults);\n return () => h(\n StepperSeparator,\n mergeProps(attrs, {\n as: props.as,\n asChild: props.asChild,\n class: theme.value.separator || undefined,\n }),\n { default: () => slots.default?.() },\n );\n },\n});\n</script>\n","import { installDefaultsManager, installThemeManager } from '@vuecs/core';\nimport type { App, Plugin } from 'vue';\n\nimport '../assets/index.css';\nimport './vue';\nimport { NavigationRegistry, provideNavigationRegistry } from './registry';\n\nimport {\n VCNavItem,\n VCNavItems,\n VCStepper,\n VCStepperDescription,\n VCStepperIndicator,\n VCStepperItem,\n VCStepperSeparator,\n VCStepperTitle,\n VCStepperTrigger,\n} from './components';\nimport type { Options } from './types';\n\nexport * from './components';\nexport * from './registry';\nexport * from './types';\n\nexport function install(instance: App, options: Options = {}): void {\n provideNavigationRegistry(new NavigationRegistry(), instance);\n\n installThemeManager(instance, options);\n installDefaultsManager(instance, options);\n\n Object.entries({\n VCNavItem,\n VCNavItems,\n VCStepper,\n VCStepperItem,\n VCStepperTrigger,\n VCStepperIndicator,\n VCStepperTitle,\n VCStepperDescription,\n VCStepperSeparator,\n }).forEach(([componentName, component]) => {\n instance.component(componentName, component);\n });\n}\n\nexport default { install } satisfies Plugin<[Options?]>;\n"],"mappings":";;;;;AAgBA,SAAS,mBAA4C;CAEjD,OAAO;EACH,OAFU,IAAgC,CAAC,CAEvC;EACJ,QAAQ,eAAe,CAAC,CAAC;EACzB,aAAa,eAAe,CAAC,CAAC;CAClC;AACJ;;;;;;;;;;;;AAeA,IAAa,qBAAb,MAAgC;CAC5B,MAAgB,gCACZ,IAAI,IAAsB,CAC9B;;;;;;;CAQA,0BAAoB,IAAI,IAAqC;;;;;;;;;CAU7D,SAAS,IAAY,OAAgE;EACjF,IAAI,KAAK,IAAI,IAAI,EAAE,GAEf,QAAQ,KAAK,mCAAmC,GAAG,gCAAgC;EAGvF,MAAM,QAAQ,OAAO,uBAAuB;EAE5C,KAAK,IAAI,IAAI,IAAI;GAAE;GAAO;EAAM,CAAC;EAEjC,aAAa;GACT,MAAM,WAAW,KAAK,IAAI,IAAI,EAAE;GAChC,IAAI,YAAY,SAAS,UAAU,OAC/B,KAAK,IAAI,OAAO,EAAE;EAE1B;CACJ;;CAGA,IAAgB,IAA2C;EACvD,MAAM,WAAW,KAAK,IAAI,IAAI,EAAE;EAChC,IAAI,UACA,OAAO,SAAS;EAGpB,IAAI,QAAQ,KAAK,QAAQ,IAAI,EAAE;EAC/B,IAAI,CAAC,OAAO;GACR,QAAQ,iBAAiB;GACzB,KAAK,QAAQ,IAAI,IAAI,KAAK;EAC9B;EAEA,OAAO;CACX;;CAGA,IAAI,IAAqB;EACrB,OAAO,KAAK,IAAI,IAAI,EAAE;CAC1B;AACJ;;;ACtFA,MAAM,MAAM,OAAO,IAAI,sBAAsB;AAE7C,SAAgB,4BAA4B,KAA2C;CACnF,OAAO,OAA2B,KAAK,GAAG;AAC9C;AAEA,SAAgB,yBAAyB,KAA+B;CACpE,MAAM,WAAW,4BAA4B,GAAG;CAChD,IAAI,CAAC,UACD,MAAM,IAAI,MAAM,8CAA8C;CAGlE,OAAO;AACX;AAEA,SAAgB,0BACZ,WAA+B,IAAI,mBAAmB,GACtD,KACkB;CAClB,QAAQ,KAAK,UAAU,GAAG;CAC1B,OAAO;AACX;;;ACtBA,SAAS,0BACL,MACA,aACF;CACE,IAAI,KAAK,QAAQ,KACb,OAAO;CAGX,IAAI,KAAK,aAAa;EAClB,IAAI,KAAK,gBAAgB,aACrB,OAAO;EACT,IAAI,YAAY,WAAW,KAAK,WAAW,GACzC,OAAO;CAEf;CAEA,IAAI,KAAK,KAAK;EACV,IAAI,KAAK,QAAQ,aACb,OAAO;EACT,IAAI,YAAY,WAAW,KAAK,GAAG,GACjC,OAAO;CAEf;CAEA,OAAO;AACX;AAEA,SAAS,kBACL,OACA,SACA,QACF;CACE,MAAM,SAGA,CAAC;CAEP,KAAK,MAAM,QAAQ,OAAO;EACtB,IAAI,EAAE,UAAU;EAEhB,IAAI,QAAQ,MACR,SAAS,0BAA0B,MAAM,QAAQ,IAAI;EAGzD,IAAI,KAAK,SACL,SAAS;EAGb,IAAI,KAAK,UAAU;GACf,MAAM,eAAe,kBAAkB,KAAK,UAAU,SAAS,EAAE,MAAM,CAAC;GAExE,OAAO,KAAK,GAAG,YAAY;EAC/B;EAEA,OAAO,KAAK;GAAE,MAAM;GAAM;EAAM,CAAC;CACrC;CAEA,OAAO,OAAO,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAClD;AAEA,SAAgB,oBACZ,OACA,UAAkC,CAAC,GACR;CAC3B,MAAM,SAAS,kBAAkB,OAAO,SAAS,EAAE,OAAO,EAAE,CAAC;CAC7D,MAAM,CAAC,SAAS;CAChB,IAAI,CAAC,OACD,OAAO,CAAC;CAGZ,OAAO,OACF,QAAQ,UAAU,MAAM,UAAU,MAAM,KAAK,CAAC,CAC9C,KAAK,UAAU,MAAM,IAAI;AAClC;;;AC1EA,SAAS,gBACL,MACA,OACyB;CACzB,MAAM,SAAoC;EACtC,GAAG;EACH,UAAU,CAAC;EACX,OAAO,CACH,GAAG,OACH,KAAK,IACT;EACA,MAAM,KAAK,QAAQ,CAAC;CACxB;CAEA,IAAI,CAAC,KAAK,UACN,OAAO;CAGX,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KACtC,OAAO,SAAS,KAAK,gBAAgB,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC;CAGxE,OAAO;AACX;AAEA,SAAgB,cACZ,MACyB;CACzB,OAAO,gBAAgB,MAAM,CAAC,CAAC;AACnC;AAEA,SAAgB,eACZ,OAC2B;CAC3B,OAAO,MAAM,KAAK,SAAS,cAAc,IAAI,CAAC;AAClD;;;ACrCA,SAAgB,aACZ,GACA,GACO;CACP,IAAI,EAAE,WAAW,EAAE,QACf,OAAO;CAGX,KAAK,MAAM,CAAC,GAAG,YAAY,EAAE,QAAQ,GACjC,IAAI,YAAY,EAAE,IACd,OAAO;CAIf,OAAO;AACX;AAEA,SAAgB,cAAc,MAAgB,QAAkB;CAC5D,KAAK,MAAM,CAAC,GAAG,YAAY,KAAK,QAAQ,GACpC,IAAI,OAAO,OAAO,SACd,OAAO;CAIf,OAAO;AACX;;;AC7BA,SAAS,oBACL,OACA,OACF;CACE,KAAK,MAAM,QAAQ,OAAO;EACtB,MAAM,UAAU,aAAa,KAAK,OAAO,KAAK;EAC9C,KAAK,SAAS;EACd,KAAK,UAAU;EAEf,IAAI,SAAS;GACT,KAAK,eAAe;GACpB,KAAK,kBAAkB;EAC3B,OAAO;GACH,MAAM,aAAa,cAAc,KAAK,OAAO,KAAK;GAClD,KAAK,eAAe;GACpB,KAAK,kBAAkB;EAC3B;EAEA,KAAK,WAAW,oBAAoB,KAAK,UAAU,KAAK;CAC5D;CAEA,OAAO;AACX;AAEA,SAAgB,kBACZ,OACA,OACF;CACE,OAAO,oBAAoB,OAAO,KAAK;AAC3C;;;;;;;;;ACbA,SAAgB,mBACZ,SACA,aACqB;CACrB,IAAI,YAAY,cAAc,YAAY,YACtC,OAAO;CAGX,OAAO,gBAAgB,eAAe,aAAa;AACvD;;;;;;;;ACdA,SAAgB,aACZ,OACA,OAC0B;CAC1B,MAAM,SAAqC,CAAC;CAE5C,IAAI,QAAQ;CACZ,KAAK,MAAM,QAAQ,OAAO;EACtB,MAAM,QAAQ,MAAM,MAAM,SAAS,KAAK,SAAS,IAAI;EACrD,IAAI,CAAC,OACD;EAGJ,OAAO,KAAK,KAAK;EACjB,QAAQ,MAAM;CAClB;CAEA,OAAO;AACX;;;;AAKA,SAAgB,aACZ,OACA,WAC0B;CAC1B,MAAM,SAAqC,CAAC;CAE5C,KAAK,MAAM,QAAQ,OAAO;EACtB,IAAI,UAAU,IAAI,GACd,OAAO,KAAK,IAAI;EAGpB,IAAI,KAAK,SAAS,SAAS,GACvB,OAAO,KAAK,GAAG,aAAa,KAAK,UAAU,SAAS,CAAC;CAE7D;CAEA,OAAO;AACX;;;ACtDA,SAAgB,cAAc,KAAsB;CAChD,OAAO,IAAI,UAAU,GAAG,CAAC,MAAM,aAC3B,IAAI,UAAU,GAAG,CAAC,MAAM;AAChC;;;;;;;;;ACMA,MAAa,0BAA4E;CACrF,SAAS;EACL,OAAO;EACP,MAAM;EACN,YAAY;EACZ,WAAW;EACX,MAAM;EACN,UAAU;EACV,UAAU;EACV,UAAU;EACV,SAAS;EACT,SAAS;EACT,UAAU;CACd;CACA,UAAU;EAKN,SAAS;GACL,MAAM,CAAC;GACP,OAAO;IACH,OAAO;IACP,MAAM;IACN,MAAM;GACV;EACJ;EACA,aAAa;GACT,YAAY,CAAC;GACb,UAAU,EAAE,OAAO,yBAAyB;EAChD;CACJ;CACA,iBAAiB;EACb,SAAS;EACT,aAAa;CACjB;AACJ;;;;;;;;;;;;;;;AC9BA,MAAa,uBAA8E,OAAO,qBAAqB;AAgBvH,MAAa,wBAA+D,OAAO,sBAAsB;ACuEzG,MAAa,YAAY,gBAAgB;CACrC,MAAM;CACN,OAAO;EAtDP,MAAM;GACF,MAAM;GACN,UAAU;EACd;EACA,SAAS;GACL,MAAM;GACN,SAAS,KAAA;EACb;EACA,aAAa;GACT,MAAM;GACN,SAAS,KAAA;EACb;;;;;;;EAOA,SAAS;GACL,MAAM;GACN,SAAS;EACb;;;;;;EAMA,IAAI;GACA,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAC/B,SAAS;EACb;;;;;;EAMA,SAAS;GACL,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAC/B,SAAS;EACb;EACA,YAAY;GACR,MAAM;GACN,SAAS,KAAA;EACb;EACA,cAAc;GACV,MAAM;GACN,SAAS,KAAA;EACb;CAOO;CACP,OAAO;CAOP,MAAM,OAAO,EAAE,SAAS;EACpB,MAAM,YAAY,iBAAiB,YAAY;EAc/C,MAAM,QAAQ,kBAAkB,cAAc;GAX1C,IAAI,aAAa;IACb,OAAO,MAAM;GACjB;GACA,IAAI,eAAe;IACf,OAAO;KACH,GAAI,MAAM,gBAAgB,CAAC;KAC3B,GAAI,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;IACpE;GACJ;EAGmD,GAAG,uBAAuB;EAEjF,MAAM,OAAO,MAAM,OAAO,MAAM;EAChC,MAAM,cAAc,eAAe,KAAK,MAAM,YAC1C,KAAK,MAAM,SAAS,SAAS,CAAC;EAMlC,UAAQ,sBAAsB,eAAe,KAAK,MAAM,QAAQ,CAAC;EAKjE,MAAM,OAAO,IAAI,CAAC,CAAC,KAAK,MAAM,eAAe;EAC7C,YAAY,KAAK,MAAM,kBAAkB,UAAU;GAC/C,KAAK,QAAQ,CAAC,CAAC;EACnB,CAAC;EAQD,MAAM,gBAAgBA,SAAO,uBAAuB,IAAI;EACxD,MAAM,eAAe;GACjB,eAAe,OAAO,KAAK,KAAK;EACpC;EAEA,MAAM,eAAe;GACjB,KAAK,QAAQ,CAAC,KAAK;EACvB;EAOA,MAAM,cAAc,SAA6B;GAC7C,IAAI,KAAK,SAAS,GAAG,GACjB,OAAO,EAAE,iBAAiB,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC;GAEvD,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,CAAC;EACjC;EAEA,MAAM,oBAAoB,aAAmD,CACzE,GAAI,KAAK,MAAM,OACX,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,YAAY,KAAA,EAAU,GAAG,CACjD,WAAW,KAAK,MAAM,IAAI,CAC9B,CAAC,CAAC,IACF,CAAC,GACL,EAAE,OAAO,EAAE,OAAO,SAAS,YAAY,KAAA,EAAU,GAAG,CAChD,KAAK,MAAM,IACf,CAAC,CACL;EAEA,MAAM,cAAc,aAAiD;GACjE,IAAI,kBAAA,QAAiC,KAAK,GACtC,OAAO,cAAA,QAA6B;IAChC,MAAM,KAAK;IACX;IACA,UAAU,KAAK,MAAM;GACzB,GAAG,KAAK;GAGZ,MAAM,YAA4B;IAC9B,QAAQ,KAAK,MAAM;IACnB,UAAU;IACV,UAAU;GACd;GAEA,IAAI,KAAK,MAAM,KACX,IACI,cAAc,KAAK,MAAM,GAAG,KAC5B,KAAK,MAAM,IAAI,WAAW,GAAG,GAC/B;IACE,UAAU,OAAO,KAAK,MAAM;IAC5B,IAAI,KAAK,MAAM,WACX,UAAU,SAAS,KAAK,MAAM;GAEtC,OACI,UAAU,KAAK,KAAK,MAAM;GAIlC,OAAO,EAAE,QAAQ;IACb,OAAO,CAAC,SAAS,IAAI;IACrB,2BAA2B;IAC3B,GAAG;IACH,WAAW;GACf,GAAG,EAAE,eAAe,iBAAiB,QAAQ,EAAE,CAAC;EACpD;EAEA,MAAM,uBAAmC;GACrC,IAAI,kBAAA,aAAsC,KAAK,GAC3C,OAAO,cAAA,aAAkC;IACrC,MAAM,KAAK;IACX;IACA;GACJ,CAAC;GAcL,OAAO,EAAE,WAAW;IAChB,SAAS,MAAM;IACf,aAAa,MAAM;IACnB,SAAS,MAAM,YAAY,aAAa,aAAa,MAAM;IAC3D,IAAI,MAAM;IACV,QAAQ,MAAM;IACd,YAAY,MAAM;IAClB,cAAc,MAAM;GACxB,CAAC;EACL;EAEA,aAAa;GACT,MAAM,WAAW,MAAM;GACvB,MAAM,aAAa,MAAM,YAAY;GACrC,MAAM,WAAW,KAAK,MAAM,UAAU,KAAK,MAAM;GAGjD,IAAI,KAAK,MAAM,SAAA,aAAgC;IAC3C,MAAM,OAAO,kBAAA,aAAsC,KAAK,IACpD,cAAA,aAAkC,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,IAC7D,EAAE,OAAO,EAAE,OAAO,SAAS,aAAa,KAAA,EAAU,GAAG,KAAK,MAAM,IAAI;IAExE,IAAI,YACA,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,eAAe,KAAK,CAAC;IAEpF,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;GACzD;GAGA,IAAI,CAAC,YAAY,OAAO;IACpB,MAAM,OAAO,WAAW,QAAQ;IAEhC,IAAI,YACA,OAAO,EAAE,oBAAoB;KACzB,OAAO,CAAC,SAAS,IAAI;KACrB,eAAe,KAAK,MAAM,SAAS,KAAK,KAAA;IAC5C,GAAG,EACC,eAAe,EAAE,oBAAoB;KACjC,QAAQ,KAAK,MAAM;KACnB,SAAS;IACb,GAAG,EAAE,eAAe,KAAK,CAAC,EAC9B,CAAC;IAGL,OAAO,EAAE,MAAM,IAAI;KACf,OAAO,CAAC,SAAS,MAAM,EAAE,QAAQ,KAAK,MAAM,OAAO,CAAC;KACpD,eAAe,KAAK,MAAM,SAAS,KAAK,KAAA;IAC5C,GAAG,CAAC,IAAI,CAAC;GACb;GAIA,IAAI,kBAAA,OAAgC,KAAK,GAAG;IACxC,MAAM,OAAO,cAAA,OAA4B;KACrC,MAAM,KAAK;KACX;KACA;IACJ,GAAG,KAAK;IAER,IAAI,YACA,OAAO,EAAE,oBAAoB;KACzB,OAAO,CAAC,SAAS,MAAM,SAAS,UAAU;KAC1C,eAAe,WAAW,KAAK,KAAA;IACnC,GAAG,EAAE,eAAe,KAAK,CAAC;IAE9B,OAAO,EAAE,MAAM,IAAI;KACf,OAAO;MAAC,SAAS;MAAM,SAAS;MAAY,EAAE,QAAQ,SAAS;KAAC;KAChE,eAAe,WAAW,KAAK,KAAA;IACnC,GAAG,CAAC,IAAI,CAAC;GACb;GAEA,MAAM,QAAQ,kBAAA,aAAsC,KAAK,IACrD,cAAA,aAAkC;IAC9B,MAAM,KAAK;IACX;IACA;GACJ,CAAC,IACD,iBAAiB,QAAQ;GAG7B,IAAI,YACA,OAAO,EAAE,oBAAoB;IACzB,OAAO,CAAC,SAAS,MAAM,SAAS,UAAU;IAC1C,eAAe,WAAW,KAAK,KAAA;GACnC,GAAG,EACC,eAAe,CACX,EAAE,uBAAuB;IACrB,OAAO,SAAS,WAAW,KAAA;IAC3B,2BAA2B;IAC3B,eAAe,WAAW,KAAK,KAAA;GACnC,GAAG,EAAE,eAAe,MAAM,CAAC,GAO3B,EAAE,uBAAuB,EAAE,OAAO,SAAS,WAAW,KAAA,EAAU,GAAG,EAAE,eAAe,eAAe,EAAE,CAAC,CAC1G,EACJ,CAAC;GAIL,OAAO,EAAE,iBAAiB;IACtB,IAAI,MAAM;IACV,OAAO;KACH,SAAS;KACT,SAAS;KACT,EAAE,QAAQ,KAAK,MAAM,UAAU,KAAK,MAAM;IAC9C;IACA,eAAe,WAAW,KAAK,KAAA;IAC/B,MAAM,KAAK;IACX,kBAAkB,UAAmB;KACjC,KAAK,QAAQ;IACjB;GACJ,GAAG,EACC,eAAe,CACX,EAAE,oBAAoB;IAClB,OAAO,SAAS,WAAW,KAAA;IAC3B,2BAA2B;IAC3B,eAAe,WAAW,KAAK,KAAA;GACnC,GAAG,EAAE,eAAe,MAAM,CAAC,GAC3B,EAAE,oBAAoB,EAAE,OAAO,SAAS,WAAW,KAAA,EAAU,GAAG,EAAE,eAAe,eAAe,EAAE,CAAC,CACvG,EACJ,CAAC;EACL;CACJ;AACJ,CAAC;AClQD,MAAa,aAAa,gBAAgB;CACtC,MAAM;CACN,OAAO;;;;;;;;;;;EAhDP,MAAM;GACF,MAAM,CAAC,OAAO,QAAQ;GACtB,SAAS,KAAA;EACb;;EAEA,UAAU;GAAE,MAAM;GAAS,SAAS;EAAM;;EAE1C,YAAY;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;;;;;;EAM/C,MAAM;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;;;;;;EAMzC,OAAO;GAAE,MAAM;GAAkC,SAAS,KAAA;EAAU;EACpE,SAAS;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EAC5C,aAAa;GAAE,MAAM;GAA2C,SAAS,KAAA;EAAU;;;;;EAKnF,SAAS;GAAE,MAAM;GAAuC,SAAS;EAAO;;;;;;;EAOxE,IAAI;GAAE,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAAmC,SAAS;EAAK;;;;;;EAMtF,QAAQ;GAAE,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAAmC,SAAS;EAAK;EAC1F,YAAY;GAAE,MAAM;GAAkE,SAAS,KAAA;EAAU;EACzG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAOrE;CACP,OAAO;CAGP,MAAM,OAAO,EAAE,OAAO,UAAU;EAiB5B,MAAM,QAAQ,kBAAkB,cAAc;GAZ1C,IAAI,aAAa;IACb,OAAO,MAAM;GACjB;GACA,IAAI,eAAe;IACf,OAAO;KACH,GAAI,MAAM,gBAAgB,CAAC;KAC3B,GAAI,MAAM,YAAY,KAAA,IAAY,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;KAChE,GAAI,MAAM,gBAAgB,KAAA,IAAY,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;IAChF;GACJ;EAGmD,GAAG,uBAAuB;EAEjF,MAAM,UAAU,IAA6B,IAAI;EAEjD,MAAM,aAAa,UAAyB;GACxC,mBACI,OACA,MAAM,QACN,QAAQ,OACR;IACI,iBAAiB;IACjB,OAAO;IACP,MAAM;GACV,CACJ;EACJ;EAIA,MAAM,WAAW,4BAA4B,KAAK,IAAI,mBAAmB;EAOzE,MAAM,UAAU,mBAAmB,CAAC,EAAE,WAAW,OAAO;EACxD,MAAM,cAAc,eAAmC;GACnD,IAAI,OAAO,MAAM,SAAS,aACtB,OAAO,MAAM;GAGjB,QADc,SAAS,OAAA,EACT;EAClB,CAAC;EAQD,MAAM,gBAAgBC,SAAO,sBAAsB,IAAI;EACvD,MAAM,WAAW,eAAe,OAAO,MAAM,SAAS,eAAe,kBAAkB,IAAI;EAQ3F,MAAM,gBAAgB,IAAqB,IAAI;EAC/C,IAAI,CAAC,SAAS,OAAO;GACjB,UAAQ,uBAAuB,EAC3B,SAAS,SAAS;IACd,cAAc,QAAQ,KAAK;GAC/B,EACJ,CAAC;GAGD,MAAM,mBAAmB;IACrB,cAAc,QAAQ;GAC1B,CAAC;EACL;EAGA,MAAM,MAAM,IAAsB,CAAC,CAAC;EAIpC,IAAI,WAAW;EAEf,eAAe,MAAM;GACjB,MAAM,QAAQ,EAAE;GAChB,MAAM,QAAQ,OAAO,MAAM,SAAS,aAChC,MAAM,KAAK;IACP,MAAM,YAAY;IAClB,WAAW,OAAe,SAAS,IAAI,EAAE;GAC7C,CAAC,IACA,MAAM,QAAQ,CAAC;GAEpB,IAAI,CAAC,UAAU,KAAK,GAAG;IACnB,IAAI,QAAQ,SAAS,CAAC;IACtB;GACJ;GAEA,IAAI;IACA,MAAM,UAAW,MAAM,SAAU,CAAC;IAClC,IAAI,UAAU,UACV,IAAI,QAAQ;GAEpB,SAAS,OAAO;IAGZ,IAAI,UAAU,UAEV,QAAQ,MAAM,2CAA2C,KAAK;GAEtE;EACJ;EAEA,IAAI,CAAC,SAAS,OAAO;GAEjB,YAAY,GAAG;GAEf,IAAI,MAAM,OACN,MAAM,MAAM,OAAO,GAAG;EAE9B;EAGA,OAAO,EAAE,SAAS,IAAI,CAAC;EAGvB,MAAM,WAAW,eAAuE;GACpF,IAAI,SAAS,SAAS,eAClB,OAAO;IAAE,OAAO,cAAc;IAAO,OAAO,CAAC;GAAE;GAGnD,MAAM,aAAa,eAAe,IAAI,KAAK;GAC3C,MAAM,CAAC,SAAS,oBAAoB,YAAY,EAAE,MAAM,YAAY,MAAM,CAAC;GAG3E,MAAM,QAAQ,cAAc,UAAU,QAAQ,MAAM,QAAQ,CAAC;GAE7D,kBAAkB,YAAY,KAAK;GACnC,OAAO;IAAE,OAAO;IAAY;GAAM;EACtC,CAAC;EAED,MAAM,OAAO,eAAe,SAAS,MAAM,KAAK;EAChD,MAAM,SAAS,eAAe,aAAa,KAAK,QAAQ,SAAS,CAAC,CAAC,KAAK,MAAM,CAAC;EAC/E,MAAM,cAAc,eAAe,aAAa,KAAK,OAAO,SAAS,MAAM,KAAK,CAAC;EAGjF,IAAI,MAAM,UAAU;GAChB,IAAI;GAEJ,MAAM,QAAQ;IACV,OAAO;IACP;IACA;GACJ;GAEA,gBAAgB;IACZ,IAAI,CAAC,MAAM,YAAY;KAEnB,QAAQ,KAAK,yDAAyD;KACtE;IACJ;IACA,gBAAgB,SAAS,SAAS,MAAM,YAAY,KAAK;GAC7D,CAAC;GACD,kBAAkB;IACd,IAAI,CAAC,MAAM,cAAc,CAAC,eACtB;IAGJ,cAAc;GAClB,CAAC;EACL;EAEA,MAAM,cAAc,eAAe,mBAAmB,MAAM,SAAS,MAAM,WAAW,CAAC;EAEvF,aAAa;GACT,MAAM,gBAAgB,MAAM;GAC5B,MAAM,SAA6B,CAAC;GAEpC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;IACxC,MAAM,OAAO,KAAK,MAAM;IACxB,IAAI,CAAC,KAAK,WAAW,CAAC,KAAK,iBACvB;IAGJ,IAAI;IACJ,IAAI,kBAAA,QAAiC,KAAK,GACtC,QAAQ,cAAA,QAA6B,EAAE,MAAM,KAAK,GAAG,KAAK;SAE1D,QAAQ,EACJ,WACA;KACI,KAAK,KAAK,MAAM,KAAK,GAAG,KAAK;KAC7B,MAAM;KACN,SAAS,MAAM;KACf,aAAa,MAAM;KACnB,SAAS,YAAY;KACrB,IAAI,MAAM;KACV,SAAS,MAAM;KACf,YAAY,MAAM;KAClB,cAAc,MAAM;IACxB,CACJ;IAGJ,OAAO,KAAK,KAAK;GACrB;GAMA,IAAI,YAAY,UAAU,YACtB,OAAO,EACH,oBACA,EAAE,aAAa,aAAa,GAC5B,EACI,eAAe,EACX,oBACA,EAAE,OAAO,cAAc,SAAS,KAAA,EAAU,GAC1C,EAAE,eAAe,OAAO,CAC5B,EACJ,CACJ;GAGJ,MAAM,SAAS,CAAC,SAAS;GAEzB,OAAO,EACH,MAAM,IACN;IACI,OAAO,cAAc,SAAS,KAAA;IAC9B,GAAI,SACA;KAAE,KAAK;KAAS,WAAW;IAAU,IACrC,CAAC;GACT,GACA,MACJ;EACJ;CACJ;AACJ,CAAC;;;ACpVD,MAAM,sBAAoD,OAAO,kBAAkB;AAEnF,SAAgB,sBAAsB,KAA2B;CAC7D,UAAQ,qBAAqB,GAAG;AACpC;AAEA,SAAgB,oBAA2C;CACvD,OAAOC,SAAO,qBAAqB,IAAI;AAC3C;;;ACzBA,MAAa,uBAAsE,EAC/E,SAAS;CACL,MAAM;CACN,MAAM;CACN,SAAS;CACT,WAAW;CACX,OAAO;CACP,aAAa;CACb,WAAW;AACf,EACJ;;;sBCgBe,gBAAgB;CAC3B,MAAM;CACN,cAAc;CACd,OAAO;;EApBP,YAAY;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;;EAE/C,cAAc;GAAE,MAAM;GAAQ,SAAS;EAAE;;EAEzC,aAAa;GAAE,MAAM;GAA+C,SAAS;EAAa;;EAE1F,KAAK;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;;EAEnE,QAAQ;GAAE,MAAM;GAAS,SAAS;EAAK;;EAEvC,YAAY;GAAE,MAAM;GAA+D,SAAS,KAAA;EAAU;;EAEtG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAQrE;CACP,OAAO,CAAC,mBAAmB;CAC3B,MAAM,OAAO,EACT,OACA,OACA,QACD;EAOC,sBAAsB;GAClB,kBAAkB,MAAM;GACxB,oBAAoB,MAAM;EAC9B,CAAC;EACD,MAAM,QAAQ,kBAAkB,WAAW,OAAO,oBAAoB;EACtE,aAAa,EACT,aACA,WAAW,OAAO;GACd,YAAY,MAAM;GAClB,cAAc,MAAM;GACpB,aAAa,MAAM;GACnB,KAAK,MAAM;GACX,QAAQ,MAAM;GACd,wBAAwB,UAA8B,KAAK,qBAAqB,KAAK;GACrF,OAAO,MAAM,MAAM,QAAQ,KAAA;EAC/B,CAAC,GACD,EAAE,eAAe,MAAM,UAAU,EAAE,CACvC;CACJ;AACJ;;;0BEnCe,gBAAgB;CAC3B,MAAM;CACN,cAAc;CACd,OAAO;;EAhBP,MAAM;GAAE,MAAM;GAAQ,UAAU;EAAK;;EAErC,UAAU;GAAE,MAAM;GAAS,SAAS;EAAM;;EAE1C,WAAW;GAAE,MAAM;GAAS,SAAS;EAAM;;EAE3C,YAAY;GAAE,MAAM;GAA+D,SAAS,KAAA;EAAU;;EAEtG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAQrE;CACP,OAAO;CAGP,MAAM,OAAO,EAAE,OAAO,SAAS;EAC3B,MAAM,MAAM,kBAAkB;EAO9B,MAAM,QAAQ,kBAAkB,WAAW;GALvC,IAAI,aAAa;IAAE,OAAO;KAAE,GAAI,KAAK,WAAW,KAAK,CAAC;KAAI,GAAI,MAAM,cAAc,CAAC;IAAG;GAAG;GACzF,IAAI,eAAe;IACf,OAAO;KAAE,GAAI,KAAK,aAAa,KAAK,CAAC;KAAI,GAAI,MAAM,gBAAgB,CAAC;IAAG;GAC3E;EAEgD,GAAG,oBAAoB;EAC3E,aAAa,EACT,aASA;GACI,MAAM,MAAM;GACZ,UAAU,MAAM;GAChB,WAAW,MAAM;GACjB,GAAG,WAAW,OAAO,EAAE,OAAO,CAAC,SAAS,MAAM,MAAM,QAAQ,KAAA,CAAS,EAAE,CAAC;EAC5E,GACA,EAAE,UAAU,EAAE,YAAkC,MAAM,UAAU,EAAE,MAAM,CAAC,EAAE,CAC/E;CACJ;AACJ;;;6BEzCe,gBAAgB;CAC3B,MAAM;CACN,cAAc;CACd,OAAO;;EAdP,SAAS;GAAE,MAAM;GAAS,SAAS;EAAM;;EAEzC,IAAI;GAAE,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAAmC,SAAS;EAAS;;EAE1F,YAAY;GAAE,MAAM;GAA+D,SAAS,KAAA;EAAU;;EAEtG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAQrE;CACP,MAAM,OAAO,EAAE,OAAO,SAAS;EAC3B,MAAM,MAAM,kBAAkB;EAO9B,MAAM,QAAQ,kBAAkB,WAAW;GALvC,IAAI,aAAa;IAAE,OAAO;KAAE,GAAI,KAAK,WAAW,KAAK,CAAC;KAAI,GAAI,MAAM,cAAc,CAAC;IAAG;GAAG;GACzF,IAAI,eAAe;IACf,OAAO;KAAE,GAAI,KAAK,aAAa,KAAK,CAAC;KAAI,GAAI,MAAM,gBAAgB,CAAC;IAAG;GAC3E;EAEgD,GAAG,oBAAoB;EAC3E,aAAa,EACT,gBACA,WAKI,MAAM,OAAO,WAAW,EAAE,MAAM,SAAS,IAAI,CAAC,GAC9C,OACA;GACI,IAAI,MAAM;GACV,SAAS,MAAM;GACf,OAAO,MAAM,MAAM,WAAW,KAAA;EAClC,CACJ,GACA,EAAE,eAAe,MAAM,UAAU,EAAE,CACvC;CACJ;AACJ;;;+BE/Be,gBAAgB;CAC3B,MAAM;CACN,cAAc;CACd,OAAO;;EAdP,SAAS;GAAE,MAAM;GAAS,SAAS;EAAM;;EAEzC,IAAI;GAAE,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAAmC,SAAS;EAAM;;EAEvF,YAAY;GAAE,MAAM;GAA+D,SAAS,KAAA;EAAU;;EAEtG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAQrE;CACP,MAAM,OAAO,EAAE,OAAO,SAAS;EAI3B,MAAM,MAAM,kBAAkB;EAO9B,MAAM,QAAQ,kBAAkB,WAAW;GALvC,IAAI,aAAa;IAAE,OAAO;KAAE,GAAI,KAAK,WAAW,KAAK,CAAC;KAAI,GAAI,MAAM,cAAc,CAAC;IAAG;GAAG;GACzF,IAAI,eAAe;IACf,OAAO;KAAE,GAAI,KAAK,aAAa,KAAK,CAAC;KAAI,GAAI,MAAM,gBAAgB,CAAC;IAAG;GAC3E;EAEgD,GAAG,oBAAoB;EAC3E,aAAa,EACT,kBACA,WAAW,OAAO;GACd,IAAI,MAAM;GACV,SAAS,MAAM;GACf,OAAO,MAAM,MAAM,aAAa,KAAA;EACpC,CAAC,GACD,EAAE,eAAe,MAAM,UAAU,EAAE,CACvC;CACJ;AACJ;;;2BE1Be,gBAAgB;CAC3B,MAAM;CACN,cAAc;CACd,OAAO;;EAdP,SAAS;GAAE,MAAM;GAAS,SAAS;EAAM;;EAEzC,IAAI;GAAE,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAAmC,SAAS;EAAK;;EAEtF,YAAY;GAAE,MAAM;GAA+D,SAAS,KAAA;EAAU;;EAEtG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAQrE;CACP,MAAM,OAAO,EAAE,OAAO,SAAS;EAC3B,MAAM,MAAM,kBAAkB;EAO9B,MAAM,QAAQ,kBAAkB,WAAW;GALvC,IAAI,aAAa;IAAE,OAAO;KAAE,GAAI,KAAK,WAAW,KAAK,CAAC;KAAI,GAAI,MAAM,cAAc,CAAC;IAAG;GAAG;GACzF,IAAI,eAAe;IACf,OAAO;KAAE,GAAI,KAAK,aAAa,KAAK,CAAC;KAAI,GAAI,MAAM,gBAAgB,CAAC;IAAG;GAC3E;EAEgD,GAAG,oBAAoB;EAC3E,aAAa,EACT,cACA,WAAW,OAAO;GACd,IAAI,MAAM;GACV,SAAS,MAAM;GACf,OAAO,MAAM,MAAM,SAAS,KAAA;EAChC,CAAC,GACD,EAAE,eAAe,MAAM,UAAU,EAAE,CACvC;CACJ;AACJ;;;iCEvBe,gBAAgB;CAC3B,MAAM;CACN,cAAc;CACd,OAAO;;EAdP,SAAS;GAAE,MAAM;GAAS,SAAS;EAAM;;EAEzC,IAAI;GAAE,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAAmC,SAAS;EAAI;;EAErF,YAAY;GAAE,MAAM;GAA+D,SAAS,KAAA;EAAU;;EAEtG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAQrE;CACP,MAAM,OAAO,EAAE,OAAO,SAAS;EAC3B,MAAM,MAAM,kBAAkB;EAO9B,MAAM,QAAQ,kBAAkB,WAAW;GALvC,IAAI,aAAa;IAAE,OAAO;KAAE,GAAI,KAAK,WAAW,KAAK,CAAC;KAAI,GAAI,MAAM,cAAc,CAAC;IAAG;GAAG;GACzF,IAAI,eAAe;IACf,OAAO;KAAE,GAAI,KAAK,aAAa,KAAK,CAAC;KAAI,GAAI,MAAM,gBAAgB,CAAC;IAAG;GAC3E;EAEgD,GAAG,oBAAoB;EAC3E,aAAa,EACT,oBACA,WAAW,OAAO;GACd,IAAI,MAAM;GACV,SAAS,MAAM;GACf,OAAO,MAAM,MAAM,eAAe,KAAA;EACtC,CAAC,GACD,EAAE,eAAe,MAAM,UAAU,EAAE,CACvC;CACJ;AACJ;;;+BEvBe,gBAAgB;CAC3B,MAAM;CACN,cAAc;CACd,OAAO;;EAdP,SAAS;GAAE,MAAM;GAAS,SAAS;EAAM;;EAEzC,IAAI;GAAE,MAAM;IAAC;IAAQ;IAAQ;GAAQ;GAAmC,SAAS;EAAM;;EAEvF,YAAY;GAAE,MAAM;GAA+D,SAAS,KAAA;EAAU;;EAEtG,cAAc;GAAE,MAAM;GAAmC,SAAS,KAAA;EAAU;CAQrE;CACP,MAAM,OAAO,EAAE,OAAO,SAAS;EAC3B,MAAM,MAAM,kBAAkB;EAO9B,MAAM,QAAQ,kBAAkB,WAAW;GALvC,IAAI,aAAa;IAAE,OAAO;KAAE,GAAI,KAAK,WAAW,KAAK,CAAC;KAAI,GAAI,MAAM,cAAc,CAAC;IAAG;GAAG;GACzF,IAAI,eAAe;IACf,OAAO;KAAE,GAAI,KAAK,aAAa,KAAK,CAAC;KAAI,GAAI,MAAM,gBAAgB,CAAC;IAAG;GAC3E;EAEgD,GAAG,oBAAoB;EAC3E,aAAa,EACT,kBACA,WAAW,OAAO;GACd,IAAI,MAAM;GACV,SAAS,MAAM;GACf,OAAO,MAAM,MAAM,aAAa,KAAA;EACpC,CAAC,GACD,EAAE,eAAe,MAAM,UAAU,EAAE,CACvC;CACJ;AACJ;;;AEtBA,SAAgB,QAAQ,UAAe,UAAmB,CAAC,GAAS;CAChE,0BAA0B,IAAI,mBAAmB,GAAG,QAAQ;CAE5D,oBAAoB,UAAU,OAAO;CACrC,uBAAuB,UAAU,OAAO;CAExC,OAAO,QAAQ;EACX;EACA;EACA,WAAA;EACA,eAAA;EACA,kBAAA;EACA,oBAAA;EACA,gBAAA;EACA,sBAAA;EACA,oBAAA;CACJ,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,eAAe;EACvC,SAAS,UAAU,eAAe,SAAS;CAC/C,CAAC;AACL;AAEA,IAAA,cAAe,EAAE,QAAQ"}
package/dist/vue.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { VCNavItem, VCNavItems, VCStepper, VCStepperDescription, VCStepperIndicator, VCStepperItem, VCStepperSeparator, VCStepperTitle, VCStepperTrigger } from './components';
2
- declare module '@vue/runtime-core' {
2
+ declare module 'vue' {
3
3
  interface GlobalComponents {
4
4
  VCNavItem: typeof VCNavItem;
5
5
  VCNavItems: typeof VCNavItems;
package/dist/vue.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../src/vue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,QAAQ,mBAAmB,CAAC;IAC/B,UAAiB,gBAAgB;QAC7B,SAAS,EAAE,OAAO,SAAS,CAAC;QAC5B,UAAU,EAAE,OAAO,UAAU,CAAC;QAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;QAC5B,aAAa,EAAE,OAAO,aAAa,CAAC;QACpC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;QAC1C,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;QAC9C,cAAc,EAAE,OAAO,cAAc,CAAC;QACtC,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;QAClD,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;KACjD;CACJ"}
1
+ {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../src/vue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,QAAQ,KAAK,CAAC;IACjB,UAAiB,gBAAgB;QAC7B,SAAS,EAAE,OAAO,SAAS,CAAC;QAC5B,UAAU,EAAE,OAAO,UAAU,CAAC;QAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;QAC5B,aAAa,EAAE,OAAO,aAAa,CAAC;QACpC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;QAC1C,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;QAC9C,cAAc,EAAE,OAAO,cAAc,CAAC;QACtC,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;QAClD,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;KACjD;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vuecs/navigation",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "type": "module",
5
5
  "description": "A package for multi level navigations.",
6
6
  "exports": {
@@ -49,19 +49,19 @@
49
49
  "test:coverage": "vitest --config test/vitest.config.ts --run --coverage"
50
50
  },
51
51
  "dependencies": {
52
- "reka-ui": "^2.9.9"
52
+ "reka-ui": "^2.10.0"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@vue/test-utils": "^2.4.11",
56
- "@vuecs/core": "^3.1.2",
57
- "@vuecs/link": "^2.0.1",
56
+ "@vuecs/core": "^3.2.1",
57
+ "@vuecs/link": "^2.0.2",
58
58
  "jsdom": "^29.1.1",
59
- "vue": "^3.5.35",
59
+ "vue": "^3.5.38",
60
60
  "vue-router": "^5.1.0"
61
61
  },
62
62
  "peerDependencies": {
63
- "@vuecs/core": "^3.1.2",
64
- "@vuecs/link": "^2.0.1",
63
+ "@vuecs/core": "^3.2.1",
64
+ "@vuecs/link": "^2.0.2",
65
65
  "vue": "^3.x",
66
66
  "vue-router": "^4.x || ^5.x"
67
67
  },