@data-slot/navigation-menu 0.2.157 → 0.2.159
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 +114 -49
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +11 -2
- package/dist/index.d.ts +11 -2
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -29,7 +29,13 @@ npm install @data-slot/navigation-menu
|
|
|
29
29
|
</li>
|
|
30
30
|
<div data-slot="navigation-menu-indicator"></div>
|
|
31
31
|
</ul>
|
|
32
|
-
<div data-slot="navigation-menu-
|
|
32
|
+
<div data-slot="navigation-menu-portal">
|
|
33
|
+
<div data-slot="navigation-menu-positioner">
|
|
34
|
+
<div data-slot="navigation-menu-popup">
|
|
35
|
+
<div data-slot="navigation-menu-viewport"></div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
33
39
|
</nav>
|
|
34
40
|
|
|
35
41
|
<script type="module">
|
|
@@ -39,6 +45,9 @@ npm install @data-slot/navigation-menu
|
|
|
39
45
|
</script>
|
|
40
46
|
```
|
|
41
47
|
|
|
48
|
+
Minimal markup that only authors `navigation-menu-viewport` still works. The runtime
|
|
49
|
+
generates the popup stack while the menu is open and restores the original DOM on close.
|
|
50
|
+
|
|
42
51
|
## API
|
|
43
52
|
|
|
44
53
|
### `create(scope?)`
|
|
@@ -76,7 +85,7 @@ const menu = createNavigationMenu(element, {
|
|
|
76
85
|
| `align` | `"start" \| "center" \| "end"` | `"start"` | Viewport alignment on cross-axis |
|
|
77
86
|
| `sideOffset` | `number` | `0` | Distance from trigger to viewport (px) |
|
|
78
87
|
| `alignOffset` | `number` | `0` | Cross-axis alignment offset (px) |
|
|
79
|
-
| `positionMethod` | `"absolute" \| "fixed"` | `"absolute"` | Positioning strategy for the shared
|
|
88
|
+
| `positionMethod` | `"absolute" \| "fixed"` | `"absolute"` | Positioning strategy for the shared popup positioner |
|
|
80
89
|
| `safeTriangle` | `boolean` | `false` | Enable hover safe-triangle switching guard |
|
|
81
90
|
| `onValueChange` | `(value: string \| null) => void` | `undefined` | Callback when active item changes |
|
|
82
91
|
| `debugSafeTriangle` | `boolean` | `false` | Show red hover safe-triangle debug overlay |
|
|
@@ -111,8 +120,9 @@ Can be set on:
|
|
|
111
120
|
2. `navigation-menu-item`
|
|
112
121
|
3. `navigation-menu` root (lowest priority, global default)
|
|
113
122
|
|
|
114
|
-
`navigation-menu-
|
|
115
|
-
|
|
123
|
+
`navigation-menu-positioner` is the canonical popup positioning slot. Its `data-side` /
|
|
124
|
+
`data-align` are mirrored output values and are not used as placement inputs.
|
|
125
|
+
`navigation-menu-viewport-positioner` is still accepted as a legacy alias.
|
|
116
126
|
|
|
117
127
|
```html
|
|
118
128
|
<!-- Faster hover response with focus auto-open opt-in -->
|
|
@@ -153,37 +163,59 @@ Their `data-side` / `data-align` are mirrored output values and are not used as
|
|
|
153
163
|
<!-- Optional hover indicator -->
|
|
154
164
|
<div data-slot="navigation-menu-indicator"></div>
|
|
155
165
|
</ul>
|
|
156
|
-
|
|
157
|
-
|
|
166
|
+
<div data-slot="navigation-menu-portal">
|
|
167
|
+
<div data-slot="navigation-menu-positioner">
|
|
168
|
+
<div data-slot="navigation-menu-popup">
|
|
169
|
+
<div data-slot="navigation-menu-viewport"></div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
158
173
|
</nav>
|
|
159
174
|
```
|
|
160
175
|
|
|
161
|
-
|
|
176
|
+
If you only author `navigation-menu-viewport`, the runtime synthesizes the missing
|
|
177
|
+
`navigation-menu-portal`, `navigation-menu-positioner`, and `navigation-menu-popup`
|
|
178
|
+
wrappers while the menu is open.
|
|
179
|
+
|
|
180
|
+
### Slots
|
|
162
181
|
|
|
163
182
|
- `navigation-menu-indicator` - Animated highlight that follows top-level hover/focus targets; when a submenu is open, it stays anchored to the active trigger
|
|
164
|
-
- `navigation-menu-
|
|
165
|
-
- `navigation-menu-
|
|
183
|
+
- `navigation-menu-portal` - Portal wrapper that is moved to `document.body` while the menu is open
|
|
184
|
+
- `navigation-menu-positioner` - Canonical popup positioning surface; receives resolved side/alignment output and sizing vars
|
|
185
|
+
- `navigation-menu-popup` - Canonical animated popup shell that wraps the viewport
|
|
186
|
+
- `navigation-menu-viewport` - Clipping viewport that holds the active content panel
|
|
187
|
+
- `navigation-menu-viewport-positioner` - Deprecated alias for `navigation-menu-positioner`
|
|
166
188
|
- `navigation-menu-bridge` - Hover safety shield (gap bridge + triangle corridor)
|
|
167
|
-
- `navigation-menu-portal` - Optional authored portal wrapper that can contain positioners
|
|
168
189
|
- `navigation-menu-safe-triangle` - Debug-only hover safety polygon (rendered when enabled)
|
|
169
190
|
|
|
191
|
+
### Output Attributes
|
|
192
|
+
|
|
193
|
+
| Surface | Attributes |
|
|
194
|
+
|---------|------------|
|
|
195
|
+
| root | `data-state="open\|closed"`, `data-open`, `data-closed` |
|
|
196
|
+
| positioner | `data-state="open\|closed"`, `data-open`, `data-closed`, `data-side`, `data-align`, `data-instant` |
|
|
197
|
+
| popup | `data-state="open\|closed"`, `data-open`, `data-closed`, `data-side`, `data-align`, `data-starting-style`, `data-ending-style`, `data-instant` |
|
|
198
|
+
| viewport | `data-state="open\|closed"`, `data-open`, `data-closed`, `data-side`, `data-align`, `data-starting-style`, `data-ending-style`, `data-instant` |
|
|
199
|
+
| content | `data-state="active\|inactive"`, `data-open`, `data-closed`, `data-side`, `data-align`, `data-starting-style`, `data-ending-style`, `data-activation-direction="left\|right"` |
|
|
200
|
+
|
|
201
|
+
`data-activation-direction` is only emitted while switching between open top-level panels.
|
|
202
|
+
A full close is intentionally non-directional.
|
|
203
|
+
|
|
170
204
|
## Styling
|
|
171
205
|
|
|
172
|
-
`navigation-menu-
|
|
173
|
-
`
|
|
174
|
-
|
|
175
|
-
at the navigation root so submenu layers are not clipped by local stacking contexts.
|
|
206
|
+
`navigation-menu-portal` is moved to `document.body` while open. If authored popup-stack slots
|
|
207
|
+
are present, they are reused. Otherwise, missing `portal` / `positioner` / `popup` wrappers are
|
|
208
|
+
generated while open and removed on close.
|
|
176
209
|
|
|
177
|
-
Runtime
|
|
178
|
-
|
|
210
|
+
Runtime geometry is owned by `navigation-menu-positioner`: `position`, `top`, `left`, `width`,
|
|
211
|
+
and `height` are written inline and reset on close. `navigation-menu-popup` is the canonical
|
|
212
|
+
animated shell. The active `navigation-menu-content` panel is mounted inside
|
|
213
|
+
`navigation-menu-viewport` while open and restored to its original markup location when inactive
|
|
214
|
+
or closed.
|
|
179
215
|
|
|
180
|
-
The runtime owns `position`, `top`, `left`, `width`, and `height` on the viewport positioner.
|
|
181
216
|
Use `positionMethod: "fixed"` or `data-position-method="fixed"` when the menu needs viewport-based
|
|
182
217
|
anchoring, such as inside sticky headers.
|
|
183
218
|
|
|
184
|
-
The active `navigation-menu-content` panel is mounted inside `navigation-menu-viewport` while open
|
|
185
|
-
and restored to its original markup location when inactive/closed.
|
|
186
|
-
|
|
187
219
|
### Basic Styling
|
|
188
220
|
|
|
189
221
|
```css
|
|
@@ -192,11 +224,12 @@ and restored to its original markup location when inactive/closed.
|
|
|
192
224
|
display: none;
|
|
193
225
|
}
|
|
194
226
|
|
|
195
|
-
[data-slot="navigation-menu-content"][data-
|
|
227
|
+
[data-slot="navigation-menu-content"][data-open] {
|
|
196
228
|
display: block;
|
|
197
229
|
}
|
|
198
230
|
|
|
199
231
|
/* Positioner owns placement geometry */
|
|
232
|
+
[data-slot="navigation-menu-positioner"],
|
|
200
233
|
[data-slot="navigation-menu-viewport-positioner"] {
|
|
201
234
|
top: 0;
|
|
202
235
|
left: 0;
|
|
@@ -204,18 +237,28 @@ and restored to its original markup location when inactive/closed.
|
|
|
204
237
|
}
|
|
205
238
|
|
|
206
239
|
/* Skip initial position animation */
|
|
240
|
+
[data-slot="navigation-menu-positioner"][data-instant],
|
|
207
241
|
[data-slot="navigation-menu-viewport-positioner"][data-instant] {
|
|
208
242
|
transition: none;
|
|
209
243
|
}
|
|
210
244
|
|
|
211
|
-
/*
|
|
212
|
-
[data-slot="navigation-menu-
|
|
213
|
-
top: 0;
|
|
214
|
-
left: 0;
|
|
245
|
+
/* Popup owns the main shell animation */
|
|
246
|
+
[data-slot="navigation-menu-popup"] {
|
|
215
247
|
transform-origin: var(--transform-origin);
|
|
248
|
+
width: var(--popup-width);
|
|
249
|
+
height: var(--popup-height);
|
|
250
|
+
transition: transform 0.3s, width 0.3s, height 0.3s, opacity 0.15s;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
[data-slot="navigation-menu-popup"][data-starting-style],
|
|
254
|
+
[data-slot="navigation-menu-popup"][data-ending-style] {
|
|
255
|
+
opacity: 0;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/* Viewport keeps backward-compatible sizing aliases */
|
|
259
|
+
[data-slot="navigation-menu-viewport"] {
|
|
216
260
|
width: var(--viewport-width);
|
|
217
261
|
height: var(--viewport-height);
|
|
218
|
-
transition: transform 0.3s, width 0.3s, height 0.3s;
|
|
219
262
|
}
|
|
220
263
|
|
|
221
264
|
/* Skip animation on initial open */
|
|
@@ -239,53 +282,75 @@ suppressing exit animations.
|
|
|
239
282
|
|
|
240
283
|
### Motion Animations
|
|
241
284
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
285
|
+
Use `data-starting-style` / `data-ending-style` on `navigation-menu-popup` for full popup
|
|
286
|
+
open/close animations, and on `navigation-menu-content` for panel presence.
|
|
287
|
+
Directional panel switching should key off `data-activation-direction="left|right"` on content.
|
|
288
|
+
The active panel stays in normal flow; mounted inactive/exiting panels are absolutely positioned
|
|
289
|
+
by the runtime so they do not affect popup measurement while they animate out.
|
|
245
290
|
|
|
246
291
|
For exit animations, avoid CSS that force-hides content immediately by `data-state`
|
|
247
292
|
(for example `display: none` on non-active panels), because that bypasses the presence lifecycle.
|
|
248
293
|
|
|
249
294
|
```css
|
|
250
|
-
|
|
251
|
-
[data-slot="navigation-menu-
|
|
252
|
-
|
|
295
|
+
[data-slot="navigation-menu-popup"][data-starting-style],
|
|
296
|
+
[data-slot="navigation-menu-popup"][data-ending-style] {
|
|
297
|
+
opacity: 0;
|
|
298
|
+
transform: scale(0.96);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
[data-slot="navigation-menu-content"][data-starting-style],
|
|
302
|
+
[data-slot="navigation-menu-content"][data-ending-style] {
|
|
303
|
+
opacity: 0;
|
|
253
304
|
}
|
|
254
305
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
animation: slideToLeft 0.2s;
|
|
306
|
+
[data-slot="navigation-menu-content"][data-starting-style][data-activation-direction="right"] {
|
|
307
|
+
transform: translateX(2rem);
|
|
258
308
|
}
|
|
259
309
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
[data-slot="navigation-menu-viewport"][data-ending-style] {
|
|
263
|
-
opacity: 0;
|
|
310
|
+
[data-slot="navigation-menu-content"][data-starting-style][data-activation-direction="left"] {
|
|
311
|
+
transform: translateX(-2rem);
|
|
264
312
|
}
|
|
265
313
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
to { transform: translateX(0); opacity: 1; }
|
|
314
|
+
[data-slot="navigation-menu-content"][data-ending-style][data-activation-direction="right"] {
|
|
315
|
+
transform: translateX(-2rem);
|
|
269
316
|
}
|
|
270
317
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
to { transform: translateX(-100%); opacity: 0; }
|
|
318
|
+
[data-slot="navigation-menu-content"][data-ending-style][data-activation-direction="left"] {
|
|
319
|
+
transform: translateX(2rem);
|
|
274
320
|
}
|
|
275
321
|
```
|
|
276
322
|
|
|
323
|
+
Legacy `data-motion` and `--motion-direction` are still emitted during panel switches for backward
|
|
324
|
+
compatibility. That includes both root-level and content-level `data-motion` output, but
|
|
325
|
+
`data-activation-direction` is the canonical directional hook.
|
|
326
|
+
|
|
327
|
+
`--popup-width` / `--popup-height` are the animated shell vars. They transition through fixed pixel
|
|
328
|
+
values and settle back to `auto` once the popup animation completes.
|
|
329
|
+
|
|
277
330
|
### CSS Variables
|
|
278
331
|
|
|
279
332
|
| Variable | Element | Description |
|
|
280
333
|
|----------|---------|-------------|
|
|
281
|
-
| `--
|
|
282
|
-
| `--
|
|
283
|
-
| `--
|
|
334
|
+
| `--popup-width` | popup | Popup width during size transitions; settles back to `auto` at rest |
|
|
335
|
+
| `--popup-height` | popup | Popup height during size transitions; settles back to `auto` at rest |
|
|
336
|
+
| `--positioner-width` | positioner | Measured width of the active panel |
|
|
337
|
+
| `--positioner-height` | positioner | Measured height of the active panel |
|
|
338
|
+
| `--available-width` | positioner | Available width between the active trigger and the viewport edge |
|
|
339
|
+
| `--available-height` | positioner | Available height between the active trigger and the viewport edge |
|
|
340
|
+
| `--transform-origin` | popup / viewport / content / positioner | Pixel origin anchored to trigger (`side` + `align`), scoped to each element's coordinate space |
|
|
341
|
+
| `--viewport-width` | viewport | Legacy alias for the active panel width |
|
|
342
|
+
| `--viewport-height` | viewport | Legacy alias for the active panel height |
|
|
284
343
|
| `--indicator-left` | indicator | Left offset from list |
|
|
285
344
|
| `--indicator-width` | indicator | Width of hovered trigger |
|
|
286
345
|
| `--indicator-top` | indicator | Top offset from list |
|
|
287
346
|
| `--indicator-height` | indicator | Height of hovered trigger |
|
|
288
|
-
| `--motion-direction` | viewport | `1` (right) or `-1` (left) |
|
|
347
|
+
| `--motion-direction` | viewport | Legacy switching direction output: `1` (right) or `-1` (left) |
|
|
348
|
+
|
|
349
|
+
### Deprecated Compatibility
|
|
350
|
+
|
|
351
|
+
- `navigation-menu-viewport-positioner` is a deprecated alias for `navigation-menu-positioner`.
|
|
352
|
+
- `--viewport-width`, `--viewport-height`, root/content `data-motion`, and `--motion-direction` are deprecated and planned for removal in the next major release.
|
|
353
|
+
- Content-wrapped `navigation-menu-portal` / `navigation-menu-positioner` shells are restore-only compatibility and are also planned for removal in the next major release.
|
|
289
354
|
|
|
290
355
|
## Keyboard Navigation
|
|
291
356
|
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`start`,`center`,`end`],n=[`top`,`right`,`bottom`,`left`],r=[`absolute`,`fixed`],i=(e,t)=>t===`start`?{x:e.left,y:e.top}:t===`end`?{x:e.right,y:e.bottom}:{x:e.left+e.width/2,y:e.top+e.height/2},a=(e,t,n)=>{let r=i(n,t);return e===`top`?{x:r.x,y:n.top}:e===`bottom`?{x:r.x,y:n.bottom}:e===`left`?{x:n.left,y:r.y}:{x:n.right,y:r.y}},o=`@data-slot/navigation-menu`;function s(i,s={}){let c=(0,e.reuseRootBinding)(i,o,`[@data-slot/navigation-menu] createNavigationMenu() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(c)return c;let l=s.delayOpen??(0,e.getDataNumber)(i,`delayOpen`)??0,u=s.delayClose??(0,e.getDataNumber)(i,`delayClose`)??0,ee=s.openOnFocus??(0,e.getDataBool)(i,`openOnFocus`)??!1,te=s.side??(0,e.getDataEnum)(i,`side`,n)??`bottom`,d=s.align??(0,e.getDataEnum)(i,`align`,t)??`start`,f=s.sideOffset??(0,e.getDataNumber)(i,`sideOffset`)??0,p=s.alignOffset??(0,e.getDataNumber)(i,`alignOffset`)??0,m=s.positionMethod??(0,e.getDataEnum)(i,`positionMethod`,r)??`absolute`,ne=s.safeTriangle??(0,e.getDataBool)(i,`safeTriangle`)??!1,re=s.debugSafeTriangle??(0,e.getDataBool)(i,`debugSafeTriangle`)??!1,ie=ne||re,ae=s.onValueChange,h=e=>e.replace(/[^a-z0-9\-_:.]/gi,`-`),g=(e,t)=>{`inert`in e&&(e.inert=t)},_=(0,e.getPart)(i,`navigation-menu-list`),v=(0,e.getParts)(i,`navigation-menu-item`),y=(0,e.getPart)(i,`navigation-menu-viewport`),b=(0,e.getPart)(i,`navigation-menu-indicator`),x=(e,t)=>{let n=e.parentElement;for(;n&&n!==i;){if(n.getAttribute(`data-slot`)===t)return n;n=n.parentElement}return null};if(!_||v.length===0)throw Error(`NavigationMenu requires navigation-menu-list and at least one navigation-menu-item`);let S=null,C=null,oe=-1,se=null,w=null,T=null,E=!1,D=null,O=null,k=!1,A=!1,j=null,M=null,N=null,P=0,F=0,I=!1,L=!1,R=[],z=new Map,B=new Map,ce=y?x(y,`navigation-menu-viewport-positioner`):null,le=y?x(y,`navigation-menu-positioner`):null,V=ce??le,ue=V?x(V,`navigation-menu-portal`):null,H=y?(0,e.createPortalLifecycle)({content:y,root:i,enabled:!0,wrapperSlot:V?void 0:`navigation-menu-viewport-positioner`,container:V??void 0,mountTarget:V?ue??V:void 0}):null,de=()=>{let e=H?.container;e instanceof HTMLElement&&(e.style.position=``,e.style.top=``,e.style.left=``,e.style.width=``,e.style.height=``,e.style.margin=``,e.style.willChange=``,e.style.pointerEvents=``,e.style.transform=``,e.style.removeProperty(`--transform-origin`))},fe=()=>{N!==null&&(cancelAnimationFrame(N),N=null)},pe=()=>{let e=I||L;y&&(e?y.setAttribute(`data-instant`,``):y.removeAttribute(`data-instant`));let t=H?.container;t instanceof HTMLElement&&(e?t.setAttribute(`data-instant`,``):t.removeAttribute(`data-instant`))},me=()=>{fe(),N=requestAnimationFrame(()=>{N=null,L=!1,pe()})},he=()=>{fe(),I=!1,L=!1,pe()},ge=y?(0,e.createPresenceLifecycle)({element:y,onExitComplete:()=>{A||(he(),de(),P=0,F=0,H?.restore(),y.hidden=!0,y.style.pointerEvents=`none`)}}):null,_e=e=>{if(!y)return;let t=B.get(e)??{originalParent:null,originalNextSibling:null,mountedInViewport:!1};t.mountedInViewport||(t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.mountedInViewport=!0,B.set(e,t)),e.parentNode!==y&&y.appendChild(e)},ve=e=>{let t=B.get(e);if(!t||!t.mountedInViewport)return;let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.mountedInViewport=!1,t.originalParent=null,t.originalNextSibling=null},ye=()=>{if(!y||!H)return;let e=H.container,t=i.ownerDocument.defaultView??window,n=i.getBoundingClientRect(),r=m===`fixed`,a=n.top+F+(r?0:t.scrollY),o=n.left+P+(r?0:t.scrollX);e.style.position=m,e.style.top=`${a}px`,e.style.left=`${o}px`,e.style.width=`${n.width}px`,e.style.height=`${n.height}px`,e.style.margin=`0`,e.style.willChange=`top,left`,e.style.pointerEvents=`none`},U=null,be=e=>{U?.disconnect(),U=null,!(!y||!e)&&(U=new ResizeObserver(()=>{let t=xe(e.item,e.content);ft(e.content,e.trigger,t)}),U.observe(e.content))};R.push(()=>U?.disconnect()),R.push(()=>{he(),z.forEach(e=>e.cleanup()),z.clear(),B.forEach((e,t)=>{ve(t),t.hidden=!0,t.style.pointerEvents=`none`}),B.clear(),de(),P=0,F=0,ge?.cleanup(),H?.cleanup()});let W=new Map,xe=(r,i)=>({side:s.side??(0,e.getDataEnum)(i,`side`,n)??(0,e.getDataEnum)(r,`side`,n)??te,align:s.align??(0,e.getDataEnum)(i,`align`,t)??(0,e.getDataEnum)(r,`align`,t)??d,sideOffset:s.sideOffset??(0,e.getDataNumber)(i,`sideOffset`)??(0,e.getDataNumber)(r,`sideOffset`)??f,alignOffset:s.alignOffset??(0,e.getDataNumber)(i,`alignOffset`)??(0,e.getDataNumber)(r,`alignOffset`)??p}),Se=0;v.forEach(t=>{let n=t.dataset.value;if(!n)return;let r=(0,e.getPart)(t,`navigation-menu-trigger`),i=(0,e.getPart)(t,`navigation-menu-content`);if(r&&i){W.set(n,{value:n,item:t,trigger:r,content:i,index:Se++}),z.set(i,(0,e.createPresenceLifecycle)({element:i,onExitComplete:()=>{A||(ve(i),i.hidden=!0,i.style.pointerEvents=`none`)}}));let a=h(n),o=(0,e.ensureId)(r,`nav-menu-trigger-${a}`),s=(0,e.ensureId)(i,`nav-menu-content-${a}`);r.setAttribute(`aria-haspopup`,`true`),r.setAttribute(`aria-controls`,s),i.setAttribute(`aria-labelledby`,o)}});let Ce=Array.from(W.values()).map(e=>e.trigger),we=`a[href], button:not([disabled]), [role="link"], [role="button"], [tabindex]:not([tabindex="-1"])`,Te=e=>{let t=e?.closest(`[data-slot="navigation-menu-item"]`);if(!t)return null;let n=t.dataset.value;if(!n)return null;let r=W.get(n);return!r||r.item!==t?null:r},Ee=e=>{if(e.matches(we))return e;let t=e.querySelectorAll(we);for(let n of t)if(e.contains(n)&&!n.closest(`[data-slot="navigation-menu-content"]`)&&!(n.hidden||n.closest(`[hidden]`)))return n;return null},G=[],De=new Map;v.forEach(e=>{let t=Te(e);if(t){let e={kind:`submenu`,element:t.trigger,item:t.item,value:t.value,trigger:t.trigger};G.push(e),De.set(e.element,e),De.set(e.item,e);return}let n=Ee(e);if(!n)return;let r={kind:`plain`,element:n};G.push(r),De.set(r.element,r)});let Oe=e=>{let t=e instanceof HTMLElement?e:null;if(!t)return null;let n=t;for(;n&&n!==_;){let e=De.get(n);if(e)return e;n=n.parentElement}return null},ke=e=>{let t=Oe(e);return t?.kind===`plain`?t:null},Ae=e=>{let t=Oe(e);return t?.kind===`submenu`?t:null},je=()=>{let e=i.ownerDocument.defaultView;if(!e?.matchMedia)return!0;try{return e.matchMedia(`(any-hover: hover)`).matches}catch{return!0}},Me=e=>{try{return e.matches(`:hover`)}catch{return!1}},Ne=()=>{for(let e of G){if(e.kind===`submenu`){if(Me(e.item)||Me(e.trigger))return e;continue}if(Me(e.element))return e}return null},Pe=(e,t={})=>{let n=i.ownerDocument,r=t.preserveOpenOnPlain??!1;return e.kind===`submenu`?(e.trigger.focus(),n.activeElement===e.trigger?(Z(e.trigger),!0):!1):(S!==null&&!r&&$(),e.element.focus(),n.activeElement===e.element?(S!==null&&r?Z():X(e.element),!0):!1)},Fe=(e,t,n={})=>{for(let r=e+t;r>=0&&r<G.length;r+=t){let e=G[r];if(e&&Pe(e,n))return!0}return!1},Ie=(e,t,n={})=>{let r=G.indexOf(e);return r===-1?!1:Fe(r,t,n)},Le=(e,t,n={})=>{let r=G.findIndex(t=>t.kind===`submenu`&&t.trigger===e);return r===-1?!1:Fe(r,t,n)},Re=e=>{if(!(e instanceof Node)||!_.contains(e))return!1;let t=e instanceof HTMLElement?e:e.parentElement;return!t||t.closest(`[data-slot="navigation-menu-indicator"]`)||Te(t)?!1:t.closest(`[data-slot="navigation-menu-item"]`)?!0:!!t.closest(`a[href], button, [role='link'], [role='button']`)},ze=`a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])`,Be=e=>Array.from(e.querySelectorAll(ze)).filter(e=>!e.hidden&&!e.closest(`[hidden]`)),Ve=e=>!e.isConnected||e.hidden||e.closest(`[hidden]`)||`disabled`in e&&e.disabled||e.getAttribute(`aria-hidden`)===`true`||e.getAttribute(`tabindex`)===`-1`?!1:e.matches(ze)?!0:e.tabIndex>=0,He=e=>{if(i.contains(e)||y?.contains(e))return!0;let t=H?.container;if(t instanceof HTMLElement&&t.contains(e))return!0;for(let{content:t}of W.values())if(t.contains(e))return!0;return!1},Ue=()=>{let e=i.ownerDocument,t=Array.from(e.querySelectorAll(`*`));for(let n of t)if(Ve(n)&&!He(n)&&(i.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)!==0&&(n.focus(),e.activeElement===n))return!0;return!1},We=e=>{requestAnimationFrame(()=>{if(S!==e)return;let t=W.get(e);if(!t)return;let n=Be(t.content)[0];n?n.focus():t.content.focus()})},K=()=>{se&&=(clearTimeout(se),null),w&&=(clearTimeout(w),null)},q=()=>{K(),C=null},Ge=()=>{D=null,O=null},Ke=()=>{M!==null&&(cancelAnimationFrame(M),M=null)},J=null,qe=()=>{if(!y)return null;let e=H?.container;return e instanceof HTMLElement?e:y.parentElement instanceof HTMLElement?y.parentElement:y},Je=()=>{let t=qe();return J||(J=document.createElement(`div`),J.setAttribute(`data-slot`,`navigation-menu-bridge`),J.style.cssText=`position: absolute; pointer-events: auto; z-index: 0; display: none;`,R.push((0,e.on)(J,`pointerenter`,()=>{K()}),(0,e.on)(J,`pointerleave`,t=>{if(E||S===null)return;let n=t.relatedTarget;ut(n)||n&&(0,e.containsWithPortals)(i,n)||(Q(null),X(null))}))),t&&J.parentElement!==t&&t.insertBefore(J,t.firstChild),J},Ye=()=>{J&&(J.style.height=`0`,J.style.width=`0`,J.style.top=`0px`,J.style.left=`0px`,J.style.right=`0px`,J.style.bottom=`auto`,J.style.transform=`none`,J.style.clipPath=`none`,J.style.display=`none`)},Xe=()=>{if(!re)return null;let e=i.ownerDocument.body;return e?(j||(j=i.ownerDocument.createElement(`div`),j.setAttribute(`data-slot`,`navigation-menu-safe-triangle`),j.style.cssText=[`position: fixed`,`pointer-events: none`,`display: none`,`z-index: 2147483647`,`background: rgba(255, 0, 0, 0.18)`,`border: 1px solid rgba(255, 0, 0, 0.45)`].join(`; `)),j.parentElement!==e&&e.appendChild(j),j):null},Ze=()=>{j&&(j.style.width=`0`,j.style.height=`0`,j.style.clipPath=`none`,j.style.display=`none`)},Y=()=>{re||Ze()},Qe=e=>{let t=Xe();if(!t)return;let n=e.apex.x,r=e.apex.y,i=e.edgeA.x,a=e.edgeA.y,o=e.edgeB.x,s=e.edgeB.y,c=Math.min(n,i,o),l=Math.min(r,a,s),u=Math.max(n,i,o),ee=Math.max(r,a,s),te=Math.max(1,u-c),d=Math.max(1,ee-l),f=(e,t)=>`${(e-c)/te*100}% ${(t-l)/d*100}%`;t.style.display=`block`,t.style.left=`${c}px`,t.style.top=`${l}px`,t.style.width=`${te}px`,t.style.height=`${d}px`,t.style.clipPath=`polygon(${f(n,r)}, ${f(i,a)}, ${f(o,s)})`},$e=(e,t,n)=>(e.x-n.x)*(t.y-n.y)-(t.x-n.x)*(e.y-n.y),et=(e,t,n,r)=>{let i=$e(e,t,n),a=$e(e,n,r),o=$e(e,r,t);return!((i<0||a<0||o<0)&&(i>0||a>0||o>0))},tt=(e,t,n)=>{let r=.5;if(n.top>=t.bottom-r)return[{x:n.left,y:n.top},{x:n.right,y:n.top}];if(n.bottom<=t.top+r)return[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}];if(n.left>=t.right-r)return[{x:n.left,y:n.top},{x:n.left,y:n.bottom}];if(n.right<=t.left+r)return[{x:n.right,y:n.top},{x:n.right,y:n.bottom}];let i=[[{x:n.left,y:n.top},{x:n.right,y:n.top}],[{x:n.right,y:n.top},{x:n.right,y:n.bottom}],[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}],[{x:n.left,y:n.top},{x:n.left,y:n.bottom}]],a=([t,n])=>t.y===n.y?Math.abs(e.y-t.y):Math.abs(e.x-t.x),o=i[0],s=a(o);for(let e=1;e<i.length;e++){let t=i[e],n=a(t);n<s&&(o=t,s=n)}return o},nt=()=>S?W.get(S)??null:null,rt=(e,t,n)=>{if(n.width<=0||n.height<=0)return null;let r={x:e.left+e.width/2,y:e.top+e.height*.62},[i,a]=tt(r,t,n);if(i.x===a.x){let e=Math.min(i.y,a.y),t=Math.max(i.y,a.y),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:i.x,y:e+r},a={x:a.x,y:t-r}}else{let e=Math.min(i.x,a.x),t=Math.max(i.x,a.x),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:e+r,y:i.y},a={x:t-r,y:a.y}}return{apex:r,edgeA:i,edgeB:a}},it=()=>{if(!ie||!y||S===null)return null;let e=nt();if(!e)return null;let t=i.getBoundingClientRect(),n=e.trigger.getBoundingClientRect(),r=y.getBoundingClientRect(),a=e.content.getBoundingClientRect();return rt(n,t,r.width>0&&r.height>0?r:a)},at=e=>{let t=it();return t?et({x:e.clientX,y:e.clientY},t.apex,t.edgeA,t.edgeB):!1},ot=(e,t)=>({x:e.x-t.left,y:e.y-t.top}),st=e=>{if(e.length<=1)return e.slice();let t=e=>`${e.x.toFixed(3)}:${e.y.toFixed(3)}`,n=new Map;for(let r of e)n.set(t(r),r);let r=Array.from(n.values()).sort((e,t)=>e.x===t.x?e.y-t.y:e.x-t.x);if(r.length<=2)return r;let i=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),a=[];for(let e of r){for(;a.length>=2&&i(a[a.length-2],a[a.length-1],e)<=0;)a.pop();a.push(e)}let o=[];for(let e=r.length-1;e>=0;e--){let t=r[e];for(;o.length>=2&&i(o[o.length-2],o[o.length-1],t)<=0;)o.pop();o.push(t)}return a.pop(),o.pop(),a.concat(o)},ct=e=>{if(e.length<3){Ye();return}let t=Je(),n=t.parentElement,r=st(n&&n===H?.container?e.map(e=>({x:e.x-P,y:e.y-F})):e);if(r.length<3){Ye();return}let i=Math.min(...r.map(e=>e.x)),a=Math.min(...r.map(e=>e.y)),o=Math.max(...r.map(e=>e.x)),s=Math.max(...r.map(e=>e.y)),c=Math.max(1,o-i),l=Math.max(1,s-a),u=e=>`${(e.x-i)/c*100}% ${(e.y-a)/l*100}%`;t.style.display=`block`,t.style.transform=`none`,t.style.bottom=`auto`,t.style.right=`auto`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.width=`${c}px`,t.style.height=`${l}px`,t.style.clipPath=`polygon(${r.map(u).join(`, `)})`},lt=()=>{if(!re)return;let e=it();if(!e){Ze();return}Qe(e)},ut=e=>{if(!e)return!1;if(nt()?.content.contains(e)||y?.contains(e)||J?.contains(e))return!0;let t=H?.container;return!!(t instanceof HTMLElement&&t.contains(e))};R.push(Y),R.push(Ke),R.push(Ye),R.push(()=>{Ze(),j?.parentElement&&j.parentElement.removeChild(j),j=null});let dt=(t,r,o)=>{if(!y||y.getAttribute(`data-state`)!==`open`||t.getAttribute(`data-state`)!==`active`)return;let s=t.firstElementChild,c=t.lastElementChild,l=s?getComputedStyle(s):null,u=c?getComputedStyle(c):null,ee=l&&parseFloat(l.marginTop)||0,te=u&&parseFloat(u.marginBottom)||0,d=(...e)=>{let t=0;for(let n of e)Number.isFinite(n)&&(t=Math.max(t,n));return t},f=t.getBoundingClientRect(),p=d(f.width,t.scrollWidth,t.offsetWidth,t.clientWidth),m=d(f.height,t.scrollHeight,t.offsetHeight,t.clientHeight)+ee+te,ne={top:f.top,left:f.left,width:p,height:m,right:f.left+p,bottom:f.top+m},re=getComputedStyle(y),ae=parseFloat(re.marginTop)||0;y.style.setProperty(`--viewport-width`,`${p}px`),y.style.setProperty(`--viewport-height`,`${m}px`);let h=i.getBoundingClientRect(),g=r.getBoundingClientRect(),_=(0,e.computeFloatingPosition)({anchorRect:g,contentRect:ne,side:o.side,align:o.align,sideOffset:o.sideOffset,alignOffset:o.alignOffset,avoidCollisions:!1,collisionPadding:0,allowedSides:n}),v=_.x-h.left,b=_.y-h.top;P=v,F=b;let x=a(_.side,_.align,g),S=x.x-(h.left+v),C=x.y-(h.top+b),oe=x.x-h.left,se=x.y-h.top,w=`${S}px ${C}px`,T=`${oe}px ${se}px`;y.style.top=`0px`,y.style.left=`0px`,y.style.willChange=`transform,width,height`,y.style.setProperty(`--transform-origin`,w),t.style.top=`0px`,t.style.left=`0px`,t.style.setProperty(`--transform-origin`,w),y.setAttribute(`data-side`,_.side),y.setAttribute(`data-align`,_.align),t.setAttribute(`data-side`,_.side),t.setAttribute(`data-align`,_.align);let E=H?.container;E&&E!==y&&(E.setAttribute(`data-side`,_.side),E.setAttribute(`data-align`,_.align),E.style.setProperty(`--transform-origin`,T)),ye();let D=y.getBoundingClientRect(),O=[],k=Math.max(0,D.top-h.bottom),A=Math.max(0,h.top-D.bottom),j=Math.max(0,D.left-h.right),M=Math.max(0,h.left-D.right),N=Math.max(0,ee+ae),I=Math.max(k,A,N),L=Math.max(j,M),R=ie?rt(g,h,D):null,z=(e,t,n,r)=>{n<=0||r<=0||O.push({x:e,y:t},{x:e+n,y:t},{x:e+n,y:t+r},{x:e,y:t+r})};if(I>=L&&I>0){let e=Math.max(k,A,N),t=v,n=A>k&&A>=N?b+m:b-e,r=p;if(R){let e=Math.min(R.edgeA.x,R.edgeB.x)-h.left,n=Math.max(R.edgeA.x,R.edgeB.x)-h.left;t=e-8,r=n-e+16}z(t,n,r,e)}else if(L>0){let e=Math.max(j,M),t=b,n=M>j?v+p:v-e,r=m;if(R){let e=Math.min(R.edgeA.y,R.edgeB.y)-h.top,n=Math.max(R.edgeA.y,R.edgeB.y)-h.top;t=e-8,r=n-e+16}z(n,t,e,r)}if(R){let e=ot(R.apex,h),t=ot(R.edgeA,h),n=ot(R.edgeB,h);O.push(e,t,n)}ct(O),lt()},ft=(e,t,n,r={})=>{if(!y)return;let i=()=>{dt(e,t,n)};if(r.defer===!1){i();return}requestAnimationFrame(()=>{y.getAttribute(`data-state`)!==`open`||e.getAttribute(`data-state`)!==`active`||i()})},pt=(e=nt(),t={})=>{if(!e)return;let n=xe(e.item,e.content);ft(e.content,e.trigger,n,t)},mt=(0,e.createPositionSync)({observedElements:[i,...Ce],isActive:()=>S!==null,ancestorScroll:!0,syncOnScroll:!0,ancestorResize:!0,elementResize:!0,layoutShift:!0,onUpdate:()=>{L=!0,pe(),pt(void 0,{defer:!1}),me()}});R.push(()=>mt.stop());let ht=e=>oe===-1||e>oe?`right`:`left`,X=e=>{if(!b)return;if(T=e,!e){Ke(),b.removeAttribute(`data-instant`),b.setAttribute(`data-state`,`hidden`);return}b.getAttribute(`data-state`)!==`visible`&&(Ke(),b.setAttribute(`data-instant`,``),M=requestAnimationFrame(()=>{M=requestAnimationFrame(()=>{b.removeAttribute(`data-instant`),M=null})}));let t=_.getBoundingClientRect(),n=e.getBoundingClientRect();b.style.setProperty(`--indicator-left`,`${n.left-t.left}px`),b.style.setProperty(`--indicator-width`,`${n.width}px`),b.style.setProperty(`--indicator-top`,`${n.top-t.top}px`);let r=(y&&parseFloat(getComputedStyle(y).marginTop)||0)<1?1:0;b.style.setProperty(`--indicator-height`,`${n.height-r}px`),b.setAttribute(`data-state`,`visible`)},gt=()=>S?W.get(S)?.trigger??null:null,Z=(e=null)=>{let t=gt();if(t){X(t);return}X(e)},Q=(t,n=!1)=>{if(Y(),t===S){t===null?q():K();return}if(!n&&t!==null&&t===C)return;K(),C=t===null?null:t;let r=()=>{let n=S,r=t?W.get(t):null,a=n!==null&&t!==null&&n!==t,o=a&&r?ht(r.index):null,s=document.activeElement;if(t===null&&s&&n){let t=W.get(n);t&&(0,e.containsWithPortals)(t.content,s)&&t.trigger.focus()}if(W.forEach(({trigger:r,content:i,item:a},s)=>{let c=s===t,l=s===n;if((0,e.setAria)(r,`expanded`,c),r.setAttribute(`data-state`,c?`open`:`closed`),a.setAttribute(`data-state`,c?`open`:`closed`),!c){let e=z.get(i);if(i.setAttribute(`data-state`,`inactive`),i.setAttribute(`aria-hidden`,`true`),g(i,!0),i.style.pointerEvents=`none`,l&&o){let e=o===`right`?`to-left`:`to-right`;i.setAttribute(`data-motion`,e)}else l&&i.removeAttribute(`data-motion`);l?e?.exit():e?.isExiting||(i.removeAttribute(`data-motion`),ve(i),i.hidden=!0)}}),r){if(H?.mount(),y&&(y.hidden=!1),n===null&&ge?.enter(),_e(r.content),z.get(r.content)?.enter(),mt.start(),o){let e=o===`right`?`from-right`:`from-left`;r.content.setAttribute(`data-motion`,e)}else r.content.removeAttribute(`data-motion`);r.content.setAttribute(`data-state`,`active`),r.content.removeAttribute(`aria-hidden`),g(r.content,!1),r.content.hidden=!1,r.content.style.pointerEvents=`auto`,oe=r.index,pt(r),be(r),X(r.trigger)}else mt.stop(),Ye(),Y(),ge?.exit(),be(null);let c=t!==null;i.setAttribute(`data-state`,c?`open`:`closed`),o?i.setAttribute(`data-motion`,o===`right`?`from-right`:`from-left`):i.removeAttribute(`data-motion`),y&&(y.setAttribute(`data-state`,c?`open`:`closed`),y.style.pointerEvents=c?`auto`:`none`,I=c&&!a,(!c||a)&&(fe(),L=!1),pe(),o&&y.style.setProperty(`--motion-direction`,o===`right`?`1`:`-1`)),S=t,C=null,t===null&&X(null),lt(),(0,e.emit)(i,`navigation-menu:change`,{value:t}),ae?.(t)};n?r():t!==null&&S===null?se=setTimeout(r,l):t!==null&&S!==null?r():w=setTimeout(r,u)};i.setAttribute(`data-state`,`closed`),y&&(y.setAttribute(`data-state`,`closed`),y.hidden=!0,y.style.pointerEvents=`none`),b&&b.setAttribute(`data-state`,`hidden`),W.forEach(({trigger:t,content:n,item:r})=>{t.tagName===`BUTTON`&&!t.hasAttribute(`type`)&&(t.type=`button`),(0,e.setAria)(t,`expanded`,!1),t.setAttribute(`data-state`,`closed`),t.tabIndex=0,r.setAttribute(`data-state`,`closed`),n.setAttribute(`data-state`,`inactive`),n.setAttribute(`aria-hidden`,`true`),n.tabIndex=-1,g(n,!0),n.hidden=!0,n.style.pointerEvents=`none`}),W.forEach(({item:t,trigger:n},r)=>{R.push((0,e.on)(n,`pointerenter`,e=>{if(!E){if(S!==r&&at(e))return;X(n)}})),R.push((0,e.on)(t,`pointerenter`,e=>{if(!E){if(S!==r&&at(e))return;Q(r)}})),R.push((0,e.on)(t,`pointerleave`,t=>{if(C===r&&S===null&&q(),S===r&&!E){let n=t.relatedTarget;if(ut(n))return;(!n||!(0,e.containsWithPortals)(i,n))&&(Q(null),X(null))}})),R.push((0,e.on)(n,`focus`,()=>{if(D===n){D=null;return}ee&&Q(r,!0),Z(n)})),R.push((0,e.on)(n,`pointerdown`,()=>{D=n,O=n}),(0,e.on)(n,`keydown`,()=>{O=null})),R.push((0,e.on)(n,`click`,()=>{let e=O===n;O=null,D=null,q(),S===r&&E?(E=!1,Q(null,!0),X(null)):S===r&&!E?(E=!0,X(n),e||We(r)):(E=!0,Q(r,!0),X(n),e||We(r))}))}),R.push((0,e.on)(_,`pointerover`,e=>{let t=e;if(t.pointerType===`touch`)return;let n=Ae(t.target);if(n){if(k=!0,E||S!==n.value&&at(t))return;X(n.trigger),Q(n.value);return}let r=ke(t.target);if(r){if(k=!0,S!==null){if(E)return;$()}X(r.element);return}S!==null&&(E||Re(t.target)&&$())}),(0,e.on)(_,`click`,e=>{S!==null&&Re(e.target)&&$()})),R.push((0,e.on)(_,`focusin`,e=>{let t=ke(e.target);if(t){if(S!==null){Z();return}X(t.element)}}),(0,e.on)(i,`pointerenter`,()=>{k=!0}),(0,e.on)(i,`pointerleave`,e=>{let t=e.relatedTarget;if(!ut(t)&&(k=!1,!E)){if(at(e)){K();return}Q(null),X(null)}}),(0,e.on)(i,`pointerdown`,()=>{Y(),q()}));let _t=()=>{if(!je()||S!==null||C!==null||E)return;let e=Ne();if(k=e!==null||i instanceof HTMLElement&&Me(i),e){if(e.kind===`submenu`){Q(e.value,!0);return}X(e.element)}};y&&R.push((0,e.on)(y,`pointerenter`,()=>{Y(),K()}),(0,e.on)(y,`transitionend`,e=>{if(e.target!==y)return;let t=S?W.get(S):null;if(t){let e=xe(t.item,t.content);ft(t.content,t.trigger,e)}})),W.forEach(({content:t})=>{R.push((0,e.on)(t,`pointerenter`,()=>{Y(),K()}),(0,e.on)(t,`pointerleave`,t=>{if(E)return;let n=t.relatedTarget;ut(n)||(0,e.containsWithPortals)(i,n)||(Q(null),X(null))}))}),R.push((0,e.on)(_,`keydown`,e=>{let t=Oe(e.target);if(!t)return;let n=G.indexOf(t);if(n===-1)return;let r=n;switch(e.key){case`Tab`:if(e.shiftKey||S===null)return;(Ie(t,1,{preserveOpenOnPlain:!0})||Ue())&&e.preventDefault();return;case`ArrowLeft`:r=n-1,r<0&&(r=G.length-1);break;case`ArrowRight`:r=n+1,r>=G.length&&(r=0);break;case`ArrowDown`:if(t.kind===`submenu`){e.preventDefault();let n=t.value;E=!0,Q(n,!0),We(n)}return;case`Home`:r=0;break;case`End`:r=G.length-1;break;case`Escape`:E=!1,Q(null,!0),X(null);return;default:return}e.preventDefault();let i=G[r];i&&Pe(i,{preserveOpenOnPlain:!0})})),W.forEach(({content:t,trigger:n})=>{R.push((0,e.on)(t,`keydown`,e=>{let r=e.target,i=Be(t),a=i.indexOf(r);if(a!==-1)switch(e.key){case`Tab`:if(!e.shiftKey&&a===i.length-1){(Le(n,1,{preserveOpenOnPlain:!0})||Ue())&&e.preventDefault();return}if(e.shiftKey&&a===0){e.preventDefault(),n.focus();return}return;case`ArrowDown`:case`ArrowRight`:{e.preventDefault();let t=a+1;t<i.length&&i[t]?.focus();break}case`ArrowUp`:case`ArrowLeft`:e.preventDefault(),a===0?n.focus():i[a-1]?.focus();break;case`Escape`:e.preventDefault(),E=!1,Q(null,!0),X(null),n.focus();break}}))});let vt=()=>(0,e.containsWithPortals)(i,document.activeElement)||k||E,$=()=>{Y(),q(),Ge(),E=!1,Q(null,!0),X(null),lt()};R.push((0,e.on)(document,`focusin`,t=>{let n=t.target;if(!(0,e.containsWithPortals)(i,n)){if(S!==null){$();return}X(null)}})),R.push((0,e.createDismissLayer)({root:i,isOpen:()=>S!==null&&vt(),onDismiss:$,closeOnClickOutside:!0,closeOnEscape:!0,preventEscapeDefault:!1,isInside:t=>!!t&&(0,e.containsWithPortals)(i,t)})),R.push((0,e.on)(window,`resize`,()=>{(S||T)&&requestAnimationFrame(()=>Z(T))}),(0,e.on)(_,`scroll`,()=>{(S||T)&&requestAnimationFrame(()=>Z(T))})),R.push((0,e.on)(i,`navigation-menu:set`,e=>{let t=e.detail;if(t?.value!==void 0){if(t.value===null)$();else if(W.has(t.value)){E=!0,Q(t.value,!0);let e=W.get(t.value);e&&X(e.trigger)}}}));let yt={get value(){return S},open:e=>Q(e,!0),close:()=>$(),destroy:()=>{A=!0,q(),Ge(),R.forEach(e=>e()),R.length=0,(0,e.clearRootBinding)(i,o,yt)}};return _t(),(0,e.setRootBinding)(i,o,yt),yt}function c(t=document){let n=[];for(let r of(0,e.getRoots)(t,`navigation-menu`))(0,e.hasRootBinding)(r,o)||n.push(s(r));return n}exports.create=c,exports.createNavigationMenu=s;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`start`,`center`,`end`],n=[`top`,`right`,`bottom`,`left`],r=[`absolute`,`fixed`],i=(e,t)=>t===`start`?{x:e.left,y:e.top}:t===`end`?{x:e.right,y:e.bottom}:{x:e.left+e.width/2,y:e.top+e.height/2},a=(e,t,n)=>{let r=i(n,t);return e===`top`?{x:r.x,y:n.top}:e===`bottom`?{x:r.x,y:n.bottom}:e===`left`?{x:n.left,y:r.y}:{x:n.right,y:r.y}},o=e=>{let t=e.trim();if(!t)return 0;if(t.endsWith(`ms`)){let e=Number(t.slice(0,-2).trim());return Number.isFinite(e)?e:0}if(t.endsWith(`s`)){let e=Number(t.slice(0,-1).trim());return Number.isFinite(e)?e*1e3:0}let n=Number(t);return Number.isFinite(n)?n:0},s=(e,t)=>{let n=e.split(`,`),r=t.split(`,`),i=Math.max(n.length,r.length),a=0;for(let e=0;e<i;e++){let t=o(n[e]??n[n.length-1]??`0`),i=o(r[e]??r[r.length-1]??`0`);a=Math.max(a,t+i)}return a},c=e=>{let t=getComputedStyle(e),n=s(t.transitionDuration,t.transitionDelay),r=s(t.animationDuration,t.animationDelay);return Math.max(n,r)},l=(e,t,n)=>{let r=e.ownerDocument.defaultView??window,i=()=>{a!==null&&(r.clearTimeout(a),a=null)},a=null;n?.addEventListener(`abort`,i,{once:!0});let o=c(e);if(o<=0){r.requestAnimationFrame(()=>{n?.aborted||t()});return}a=r.setTimeout(()=>{i(),!n?.aborted&&t()},Math.ceil(o)+50)},u=e=>{let t=getComputedStyle(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;if(e instanceof HTMLElement){let t=e.offsetWidth||n,i=e.offsetHeight||r;(Math.round(n)!==t||Math.round(r)!==i)&&(n=t,r=i)}return{width:n,height:r}},d=`@data-slot/navigation-menu`;function f(i,o={}){let s=(0,e.reuseRootBinding)(i,d,`[@data-slot/navigation-menu] createNavigationMenu() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(s)return s;let c=o.delayOpen??(0,e.getDataNumber)(i,`delayOpen`)??0,f=o.delayClose??(0,e.getDataNumber)(i,`delayClose`)??0,p=o.openOnFocus??(0,e.getDataBool)(i,`openOnFocus`)??!1,m=o.side??(0,e.getDataEnum)(i,`side`,n)??`bottom`,ee=o.align??(0,e.getDataEnum)(i,`align`,t)??`start`,te=o.sideOffset??(0,e.getDataNumber)(i,`sideOffset`)??0,ne=o.alignOffset??(0,e.getDataNumber)(i,`alignOffset`)??0,re=o.positionMethod??(0,e.getDataEnum)(i,`positionMethod`,r)??`absolute`,ie=o.safeTriangle??(0,e.getDataBool)(i,`safeTriangle`)??!1,h=o.debugSafeTriangle??(0,e.getDataBool)(i,`debugSafeTriangle`)??!1,ae=ie||h,oe=o.onValueChange,se=e=>e.replace(/[^a-z0-9\-_:.]/gi,`-`),g=(e,t)=>{`inert`in e&&(e.inert=t)},_=(0,e.getPart)(i,`navigation-menu-list`),v=(0,e.getParts)(i,`navigation-menu-item`),y=(0,e.getPart)(i,`navigation-menu-viewport`),b=(0,e.getPart)(i,`navigation-menu-indicator`);if(!_||v.length===0)throw Error(`NavigationMenu requires navigation-menu-list and at least one navigation-menu-item`);let x=null,S=null,ce=-1,C=null,le=null,w=null,T=!1,E=null,D=null,O=!1,ue=!1,k=null,A=null,de=null,fe=0,pe=0,me=!1,he=!1,j=[],M=new Map,N=new Map,P=new Map,ge=(e,t)=>{if(e){if(t){e.setAttribute(`data-open`,``),e.removeAttribute(`data-closed`);return}e.setAttribute(`data-closed`,``),e.removeAttribute(`data-open`)}},F=(e,t)=>{e&&(e.setAttribute(`data-state`,t?`open`:`closed`),ge(e,t))},I=(e,t)=>{e.setAttribute(`data-state`,t?`active`:`inactive`),ge(e,t)},L=(e,t)=>{if(t){e.setAttribute(`data-activation-direction`,t);return}e.removeAttribute(`data-activation-direction`)},_e=()=>{if(!y)return{popup:null,positioner:null,portal:null};let e=null,t=null,n=null,r=y.parentElement,a=`popup`;for(;r&&r!==i;){let i=r.getAttribute(`data-slot`);if(i===`navigation-menu-portal`){n=r;break}if(a===`popup`&&i===`navigation-menu-popup`){e=r,a=`positioner`,r=r.parentElement;continue}if((a===`popup`||a===`positioner`)&&(i===`navigation-menu-positioner`||i===`navigation-menu-viewport-positioner`)){t=r,a=`portal`,r=r.parentElement;continue}r=r.parentElement}return{popup:e,positioner:t,portal:n}},R=null,z=e=>{ue||R!==e||!e.isClosing||!e.popupExitComplete||!e.viewportExitComplete||ze()},B={width:0,height:0},V={width:0,height:0},ve=null,H=null,ye=e=>{e.width>0&&(B.width=e.width),e.height>0&&(B.height=e.height)},be=e=>{e.width>0&&(V.width=e.width),e.height>0&&(V.height=e.height)},xe=()=>{B={width:0,height:0},V={width:0,height:0}},Se=()=>{ve!==null&&(cancelAnimationFrame(ve),ve=null)},Ce=()=>{H?.abort(),H=null},we=()=>{Se(),Ce()},Te=(e,t,n)=>{e.style.setProperty(`--popup-width`,`${t}px`),e.style.setProperty(`--popup-height`,`${n}px`)},Ee=e=>{e.style.setProperty(`--popup-width`,`auto`),e.style.setProperty(`--popup-height`,`auto`)},De=(e,t)=>{y&&(y.style.setProperty(`--viewport-width`,`${e}px`),y.style.setProperty(`--viewport-height`,`${t}px`))},Oe=(e,t,n)=>{e.style.setProperty(`--positioner-width`,`${t}px`),e.style.setProperty(`--positioner-height`,`${n}px`)},ke=e=>{e.positioner.style.removeProperty(`--positioner-width`),e.positioner.style.removeProperty(`--positioner-height`),e.popup.style.removeProperty(`--popup-width`),e.popup.style.removeProperty(`--popup-height`),y?.style.removeProperty(`--viewport-width`),y?.style.removeProperty(`--viewport-height`)},Ae=()=>{let e=W();if(!e)return{...B};let t=e.style.getPropertyValue(`--popup-width`).trim(),n=e.style.getPropertyValue(`--popup-height`).trim(),r=t&&t!==`auto`&&n&&n!==`auto`?{width:e.offsetWidth||B.width,height:e.offsetHeight||B.height}:u(e),i={width:r.width||B.width,height:r.height||B.height};return ye(i),i},je=e=>{Ce(),H=new AbortController,l(e.popup,()=>{ue||R!==e||e.isClosing||(Ee(e.popup),H=null)},H.signal)},U=(e,t)=>{if(t){let t=N.get(e)??{applied:!1,left:``,position:``,top:``};t.applied||(t.position=e.style.position,t.top=e.style.top,t.left=e.style.left),t.applied=!0,N.set(e,t),e.style.position=`absolute`,e.style.top=`0px`,e.style.left=`0px`;return}let n=N.get(e);n?.applied&&(n.position?e.style.position=n.position:e.style.removeProperty(`position`),n.top?e.style.top=n.top:e.style.removeProperty(`top`),n.left?e.style.left=n.left:e.style.removeProperty(`left`),n.applied=!1)},W=()=>R?.popup??_e().popup,G=()=>R?.positioner??_e().positioner,Me=(e,t)=>{let n=(i.ownerDocument??document).createElement(`div`);n.setAttribute(`data-slot`,t),t===`navigation-menu-positioner`&&(n.style.isolation=`isolate`,n.style.zIndex=`50`);let r=e.parentNode;if(!r)throw Error(`NavigationMenu expected popup stack child to have a parent node`);return r.insertBefore(n,e),n.appendChild(e),n},Ne=e=>{let t=e.parentNode;if(t){for(;e.firstChild;)t.insertBefore(e.firstChild,e);e.remove()}},Pe=()=>{let e=G();e&&(e.style.position=``,e.style.top=``,e.style.left=``,e.style.margin=``,e.style.willChange=``,e.style.pointerEvents=``,e.style.transform=``,e.style.removeProperty(`--transform-origin`),e.style.removeProperty(`--positioner-width`),e.style.removeProperty(`--positioner-height`),e.style.removeProperty(`--available-width`),e.style.removeProperty(`--available-height`));let t=W();t&&(t.style.willChange=``,t.style.pointerEvents=``,t.style.removeProperty(`--transform-origin`),t.style.removeProperty(`--popup-width`),t.style.removeProperty(`--popup-height`)),y&&(y.style.top=``,y.style.left=``,y.style.willChange=``,y.style.removeProperty(`--transform-origin`),y.style.removeProperty(`--viewport-width`),y.style.removeProperty(`--viewport-height`))},Fe=()=>{de!==null&&(cancelAnimationFrame(de),de=null)},Ie=()=>{let e=me||he;y&&(e?y.setAttribute(`data-instant`,``):y.removeAttribute(`data-instant`));let t=W();t&&(e?t.setAttribute(`data-instant`,``):t.removeAttribute(`data-instant`));let n=G();n&&(e?n.setAttribute(`data-instant`,``):n.removeAttribute(`data-instant`))},Le=()=>{Fe(),de=requestAnimationFrame(()=>{de=null,he=!1,Ie()})},Re=()=>{Fe(),me=!1,he=!1,Ie()},ze=()=>{let e=R;!e||!y||(we(),Re(),Pe(),xe(),fe=0,pe=0,y.hidden=!0,y.style.pointerEvents=`none`,e.popup.hidden=!0,e.popup.style.pointerEvents=`none`,e.popupPortal.restore(),e.generatedPopup&&Ne(e.popup),e.generatedPositioner&&Ne(e.positioner),e.generatedPortal&&Ne(e.portal),e.popupPresence.cleanup(),e.viewportPresence.cleanup(),R=null)},Be=()=>{if(!y)return null;if(R)return R;let t=_e(),n=t.popup,r=t.positioner,a=t.portal,o=!1,s=!1,c=!1;(!n||!n.contains(y))&&(n=Me(y,`navigation-menu-popup`),o=!0),(!r||!r.contains(n))&&(r=Me(n,`navigation-menu-positioner`),s=!0),(!a||!a.contains(r))&&(a=Me(r,`navigation-menu-portal`),c=!0);let l=(0,e.createPortalLifecycle)({content:n,root:i,enabled:!0,container:r,mountTarget:a}),u={popup:n,positioner:r,portal:a,popupPortal:l,popupPresence:null,viewportPresence:null,generatedPopup:o,generatedPositioner:s,generatedPortal:c,isClosing:!1,popupExitComplete:!1,viewportExitComplete:!1},d=(0,e.createPresenceLifecycle)({element:y,onExitComplete:()=>{u.viewportExitComplete=!0,z(u)}});return u.popupPresence=(0,e.createPresenceLifecycle)({element:n,onExitComplete:()=>{u.popupExitComplete=!0,z(u)}}),u.viewportPresence=d,R=u,R},Ve=e=>{if(!y)return;let t=P.get(e)??{originalParent:null,originalNextSibling:null,mountedInViewport:!1};t.mountedInViewport||(t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.mountedInViewport=!0,P.set(e,t)),e.parentNode!==y&&y.appendChild(e)},He=e=>{let t=P.get(e);if(!t||!t.mountedInViewport)return;let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.mountedInViewport=!1,t.originalParent=null,t.originalNextSibling=null},Ue=()=>{if(!y)return;let e=G();if(!e)return;let t=i.ownerDocument.defaultView??window,n=i.getBoundingClientRect(),r=re===`fixed`,a=n.top+pe+(r?0:t.scrollY),o=n.left+fe+(r?0:t.scrollX);e.style.position=re,e.style.top=`${a}px`,e.style.left=`${o}px`,e.style.margin=`0`,e.style.willChange=`top,left`,e.style.pointerEvents=`none`},We=null,Ge=e=>{We?.disconnect(),We=null,!(!y||!e)&&(We=new ResizeObserver(()=>{let t=Ke(e.item,e.content);Vt(e.content,e.trigger,t,{baseline:Ae()})}),We.observe(e.content))};j.push(()=>We?.disconnect()),j.push(()=>{we(),Re(),M.forEach(e=>e.cleanup()),M.clear(),P.forEach((e,t)=>{He(t),U(t,!1),t.hidden=!0,t.style.pointerEvents=`none`}),N.clear(),P.clear(),ze()});let K=new Map,Ke=(r,i)=>({side:o.side??(0,e.getDataEnum)(i,`side`,n)??(0,e.getDataEnum)(r,`side`,n)??m,align:o.align??(0,e.getDataEnum)(i,`align`,t)??(0,e.getDataEnum)(r,`align`,t)??ee,sideOffset:o.sideOffset??(0,e.getDataNumber)(i,`sideOffset`)??(0,e.getDataNumber)(r,`sideOffset`)??te,alignOffset:o.alignOffset??(0,e.getDataNumber)(i,`alignOffset`)??(0,e.getDataNumber)(r,`alignOffset`)??ne}),qe=0;v.forEach(t=>{let n=t.dataset.value;if(!n)return;let r=(0,e.getPart)(t,`navigation-menu-trigger`),i=(0,e.getPart)(t,`navigation-menu-content`);if(r&&i){K.set(n,{value:n,item:t,trigger:r,content:i,index:qe++}),M.set(i,(0,e.createPresenceLifecycle)({element:i,onExitComplete:()=>{ue||(I(i,!1),L(i,null),i.removeAttribute(`data-motion`),U(i,!1),He(i),i.hidden=!0,i.style.pointerEvents=`none`)}}));let a=se(n),o=(0,e.ensureId)(r,`nav-menu-trigger-${a}`),s=(0,e.ensureId)(i,`nav-menu-content-${a}`);r.setAttribute(`aria-haspopup`,`true`),r.setAttribute(`aria-controls`,s),i.setAttribute(`aria-labelledby`,o)}});let Je=Array.from(K.values()).map(e=>e.trigger),Ye=`a[href], button:not([disabled]), [role="link"], [role="button"], [tabindex]:not([tabindex="-1"])`,Xe=e=>{let t=e?.closest(`[data-slot="navigation-menu-item"]`);if(!t)return null;let n=t.dataset.value;if(!n)return null;let r=K.get(n);return!r||r.item!==t?null:r},Ze=e=>{if(e.matches(Ye))return e;let t=e.querySelectorAll(Ye);for(let n of t)if(e.contains(n)&&!n.closest(`[data-slot="navigation-menu-content"]`)&&!(n.hidden||n.closest(`[hidden]`)))return n;return null},q=[],Qe=new Map;v.forEach(e=>{let t=Xe(e);if(t){let e={kind:`submenu`,element:t.trigger,item:t.item,value:t.value,trigger:t.trigger};q.push(e),Qe.set(e.element,e),Qe.set(e.item,e);return}let n=Ze(e);if(!n)return;let r={kind:`plain`,element:n};q.push(r),Qe.set(r.element,r)});let $e=e=>{let t=e instanceof HTMLElement?e:null;if(!t)return null;let n=t;for(;n&&n!==_;){let e=Qe.get(n);if(e)return e;n=n.parentElement}return null},et=e=>{let t=$e(e);return t?.kind===`plain`?t:null},tt=e=>{let t=$e(e);return t?.kind===`submenu`?t:null},nt=()=>{let e=i.ownerDocument.defaultView;if(!e?.matchMedia)return!0;try{return e.matchMedia(`(any-hover: hover)`).matches}catch{return!0}},rt=e=>{try{return e.matches(`:hover`)}catch{return!1}},it=()=>{for(let e of q){if(e.kind===`submenu`){if(rt(e.item)||rt(e.trigger))return e;continue}if(rt(e.element))return e}return null},at=(e,t={})=>{let n=i.ownerDocument,r=t.preserveOpenOnPlain??!1;return e.kind===`submenu`?(e.trigger.focus(),n.activeElement===e.trigger?(Kt(e.trigger),!0):!1):(x!==null&&!r&&$(),e.element.focus(),n.activeElement===e.element?(x!==null&&r?Kt():Z(e.element),!0):!1)},ot=(e,t,n={})=>{for(let r=e+t;r>=0&&r<q.length;r+=t){let e=q[r];if(e&&at(e,n))return!0}return!1},st=(e,t,n={})=>{let r=q.indexOf(e);return r===-1?!1:ot(r,t,n)},ct=(e,t,n={})=>{let r=q.findIndex(t=>t.kind===`submenu`&&t.trigger===e);return r===-1?!1:ot(r,t,n)},lt=e=>{if(!(e instanceof Node)||!_.contains(e))return!1;let t=e instanceof HTMLElement?e:e.parentElement;return!t||t.closest(`[data-slot="navigation-menu-indicator"]`)||Xe(t)?!1:t.closest(`[data-slot="navigation-menu-item"]`)?!0:!!t.closest(`a[href], button, [role='link'], [role='button']`)},ut=`a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])`,dt=e=>Array.from(e.querySelectorAll(ut)).filter(e=>!e.hidden&&!e.closest(`[hidden]`)),ft=e=>!e.isConnected||e.hidden||e.closest(`[hidden]`)||`disabled`in e&&e.disabled||e.getAttribute(`aria-hidden`)===`true`||e.getAttribute(`tabindex`)===`-1`?!1:e.matches(ut)?!0:e.tabIndex>=0,pt=e=>{if(i.contains(e)||y?.contains(e)||W()?.contains(e)||G()?.contains(e))return!0;for(let{content:t}of K.values())if(t.contains(e))return!0;return!1},mt=()=>{let e=i.ownerDocument,t=Array.from(e.querySelectorAll(`*`));for(let n of t)if(ft(n)&&!pt(n)&&(i.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)!==0&&(n.focus(),e.activeElement===n))return!0;return!1},ht=e=>{requestAnimationFrame(()=>{if(x!==e)return;let t=K.get(e);if(!t)return;let n=dt(t.content)[0];n?n.focus():t.content.focus()})},J=()=>{C&&=(clearTimeout(C),null),le&&=(clearTimeout(le),null)},gt=()=>{J(),S=null},_t=()=>{E=null,D=null},vt=()=>{A!==null&&(cancelAnimationFrame(A),A=null)},Y=null,yt=()=>y?G()||W()||(y.parentElement instanceof HTMLElement?y.parentElement:y):null,bt=()=>{let t=yt();return Y||(Y=document.createElement(`div`),Y.setAttribute(`data-slot`,`navigation-menu-bridge`),Y.style.cssText=`position: absolute; pointer-events: auto; z-index: 0; display: none;`,j.push((0,e.on)(Y,`pointerenter`,()=>{J()}),(0,e.on)(Y,`pointerleave`,t=>{if(T||x===null)return;let n=t.relatedTarget;It(n)||n&&(0,e.containsWithPortals)(i,n)||(Q(null),Z(null))}))),t&&Y.parentElement!==t&&t.insertBefore(Y,t.firstChild),Y},xt=()=>{Y&&(Y.style.height=`0`,Y.style.width=`0`,Y.style.top=`0px`,Y.style.left=`0px`,Y.style.right=`0px`,Y.style.bottom=`auto`,Y.style.transform=`none`,Y.style.clipPath=`none`,Y.style.display=`none`)},St=()=>{if(!h)return null;let e=i.ownerDocument.body;return e?(k||(k=i.ownerDocument.createElement(`div`),k.setAttribute(`data-slot`,`navigation-menu-safe-triangle`),k.style.cssText=[`position: fixed`,`pointer-events: none`,`display: none`,`z-index: 2147483647`,`background: rgba(255, 0, 0, 0.18)`,`border: 1px solid rgba(255, 0, 0, 0.45)`].join(`; `)),k.parentElement!==e&&e.appendChild(k),k):null},Ct=()=>{k&&(k.style.width=`0`,k.style.height=`0`,k.style.clipPath=`none`,k.style.display=`none`)},X=()=>{h||Ct()},wt=e=>{let t=St();if(!t)return;let n=e.apex.x,r=e.apex.y,i=e.edgeA.x,a=e.edgeA.y,o=e.edgeB.x,s=e.edgeB.y,c=Math.min(n,i,o),l=Math.min(r,a,s),u=Math.max(n,i,o),d=Math.max(r,a,s),f=Math.max(1,u-c),p=Math.max(1,d-l),m=(e,t)=>`${(e-c)/f*100}% ${(t-l)/p*100}%`;t.style.display=`block`,t.style.left=`${c}px`,t.style.top=`${l}px`,t.style.width=`${f}px`,t.style.height=`${p}px`,t.style.clipPath=`polygon(${m(n,r)}, ${m(i,a)}, ${m(o,s)})`},Tt=(e,t,n)=>(e.x-n.x)*(t.y-n.y)-(t.x-n.x)*(e.y-n.y),Et=(e,t,n,r)=>{let i=Tt(e,t,n),a=Tt(e,n,r),o=Tt(e,r,t);return!((i<0||a<0||o<0)&&(i>0||a>0||o>0))},Dt=(e,t,n)=>{let r=.5;if(n.top>=t.bottom-r)return[{x:n.left,y:n.top},{x:n.right,y:n.top}];if(n.bottom<=t.top+r)return[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}];if(n.left>=t.right-r)return[{x:n.left,y:n.top},{x:n.left,y:n.bottom}];if(n.right<=t.left+r)return[{x:n.right,y:n.top},{x:n.right,y:n.bottom}];let i=[[{x:n.left,y:n.top},{x:n.right,y:n.top}],[{x:n.right,y:n.top},{x:n.right,y:n.bottom}],[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}],[{x:n.left,y:n.top},{x:n.left,y:n.bottom}]],a=([t,n])=>t.y===n.y?Math.abs(e.y-t.y):Math.abs(e.x-t.x),o=i[0],s=a(o);for(let e=1;e<i.length;e++){let t=i[e],n=a(t);n<s&&(o=t,s=n)}return o},Ot=()=>x?K.get(x)??null:null,kt=(e,t,n)=>{if(n.width<=0||n.height<=0)return null;let r={x:e.left+e.width/2,y:e.top+e.height*.62},[i,a]=Dt(r,t,n);if(i.x===a.x){let e=Math.min(i.y,a.y),t=Math.max(i.y,a.y),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:i.x,y:e+r},a={x:a.x,y:t-r}}else{let e=Math.min(i.x,a.x),t=Math.max(i.x,a.x),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:e+r,y:i.y},a={x:t-r,y:a.y}}return{apex:r,edgeA:i,edgeB:a}},At=()=>{if(!ae||!y||x===null)return null;let e=Ot();if(!e)return null;let t=i.getBoundingClientRect(),n=e.trigger.getBoundingClientRect(),r=y.getBoundingClientRect(),a=e.content.getBoundingClientRect();return kt(n,t,r.width>0&&r.height>0?r:a)},jt=e=>{let t=At();return t?Et({x:e.clientX,y:e.clientY},t.apex,t.edgeA,t.edgeB):!1},Mt=(e,t)=>({x:e.x-t.left,y:e.y-t.top}),Nt=e=>{if(e.length<=1)return e.slice();let t=e=>`${e.x.toFixed(3)}:${e.y.toFixed(3)}`,n=new Map;for(let r of e)n.set(t(r),r);let r=Array.from(n.values()).sort((e,t)=>e.x===t.x?e.y-t.y:e.x-t.x);if(r.length<=2)return r;let i=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),a=[];for(let e of r){for(;a.length>=2&&i(a[a.length-2],a[a.length-1],e)<=0;)a.pop();a.push(e)}let o=[];for(let e=r.length-1;e>=0;e--){let t=r[e];for(;o.length>=2&&i(o[o.length-2],o[o.length-1],t)<=0;)o.pop();o.push(t)}return a.pop(),o.pop(),a.concat(o)},Pt=e=>{if(e.length<3){xt();return}let t=bt(),n=t.parentElement,r=Nt(n&&n===G()?e.map(e=>({x:e.x-fe,y:e.y-pe})):e);if(r.length<3){xt();return}let i=Math.min(...r.map(e=>e.x)),a=Math.min(...r.map(e=>e.y)),o=Math.max(...r.map(e=>e.x)),s=Math.max(...r.map(e=>e.y)),c=Math.max(1,o-i),l=Math.max(1,s-a),u=e=>`${(e.x-i)/c*100}% ${(e.y-a)/l*100}%`;t.style.display=`block`,t.style.transform=`none`,t.style.bottom=`auto`,t.style.right=`auto`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.width=`${c}px`,t.style.height=`${l}px`,t.style.clipPath=`polygon(${r.map(u).join(`, `)})`},Ft=()=>{if(!h)return;let e=At();if(!e){Ct();return}wt(e)},It=e=>e?!!(Ot()?.content.contains(e)||y?.contains(e)||W()?.contains(e)||Y?.contains(e)||G()?.contains(e)):!1;j.push(X),j.push(vt),j.push(xt),j.push(()=>{Ct(),k?.parentElement&&k.parentElement.removeChild(k),k=null});let Lt=(e,t,n,r,a,o)=>{let s=i.ownerDocument.defaultView??window,c=s.visualViewport,l=c?.offsetLeft??0,u=c?.offsetTop??0,d=c?.width??s.innerWidth,f=c?.height??s.innerHeight,p=n===`left`?Math.max(0,t.left-l-r):n===`right`?Math.max(0,l+d-t.right-r):Math.max(0,d),m=n===`top`?Math.max(0,t.top-u-r):n===`bottom`?Math.max(0,u+f-t.bottom-r):Math.max(0,f);Oe(e,a,o),e.style.setProperty(`--available-width`,`${p}px`),e.style.setProperty(`--available-height`,`${m}px`)},Rt=(e,t=B)=>{let n=u(e),r={width:n.width||t.width||B.width,height:n.height||t.height||B.height};return ye(r),r},zt=e=>(ke(e),u(e.popup)),Bt=(t,r,o,s={})=>{let c=Be();if(!y||!c)return;let{popup:l,positioner:u}=c,d=s.mode??`measure-target`;if(y.getAttribute(`data-state`)!==`open`||t.getAttribute(`data-state`)!==`active`)return;U(t,!1);let f=d===`measure-target`?{popupWidth:l.style.getPropertyValue(`--popup-width`),popupHeight:l.style.getPropertyValue(`--popup-height`),positionerWidth:u.style.getPropertyValue(`--positioner-width`),positionerHeight:u.style.getPropertyValue(`--positioner-height`),viewportWidth:y.style.getPropertyValue(`--viewport-width`),viewportHeight:y.style.getPropertyValue(`--viewport-height`)}:null;d===`measure-target`&&we();let p=t.firstElementChild,m=t.lastElementChild,ee=p?getComputedStyle(p):null,te=m?getComputedStyle(m):null,ne=ee&&parseFloat(ee.marginTop)||0,re=te&&parseFloat(te.marginBottom)||0,ie=(...e)=>{let t=0;for(let n of e)Number.isFinite(n)&&(t=Math.max(t,n));return t},h=t.getBoundingClientRect(),oe={width:ie(h.width,t.scrollWidth,t.offsetWidth,t.clientWidth),height:ie(h.height,t.scrollHeight,t.offsetHeight,t.clientHeight)+ne+re},se=s.baseline??B,g=d===`measure-target`?zt(c):Rt(l,se),_={width:d===`sync-current`?V.width||g.width||oe.width:g.width||oe.width,height:d===`sync-current`?V.height||g.height||oe.height:g.height||oe.height};ye(g.width>0&&g.height>0?g:_),(d===`measure-target`||V.width<=0||V.height<=0)&&be(_);let v=_.width,b=_.height;if(v<=0||b<=0){if(f){let e=(e,t,n)=>{n?e.style.setProperty(t,n):e.style.removeProperty(t)};e(l,`--popup-width`,f.popupWidth),e(l,`--popup-height`,f.popupHeight),e(u,`--positioner-width`,f.positionerWidth),e(u,`--positioner-height`,f.positionerHeight),e(y,`--viewport-width`,f.viewportWidth),e(y,`--viewport-height`,f.viewportHeight)}return}let x={top:h.top,left:h.left,width:v,height:b,right:h.left+v,bottom:h.top+b},S=getComputedStyle(y),ce=parseFloat(S.marginTop)||0;De(v,b);let C=i.getBoundingClientRect(),le=r.getBoundingClientRect(),w=(0,e.computeFloatingPosition)({anchorRect:le,contentRect:x,side:o.side,align:o.align,sideOffset:o.sideOffset,alignOffset:o.alignOffset,avoidCollisions:!1,collisionPadding:0,allowedSides:n}),T=w.x-C.left,E=w.y-C.top;fe=T,pe=E;let D=a(w.side,w.align,le),O=D.x-(C.left+T),k=D.y-(C.top+E),A=D.x-C.left,de=D.y-C.top,me=`${O}px ${k}px`,he=`${A}px ${de}px`;if(l.style.willChange=`width,height`,l.style.pointerEvents=`auto`,l.style.setProperty(`--transform-origin`,me),y.style.top=`0px`,y.style.left=`0px`,y.style.willChange=`transform,width,height`,y.style.setProperty(`--transform-origin`,me),t.style.setProperty(`--transform-origin`,me),l.setAttribute(`data-side`,w.side),l.setAttribute(`data-align`,w.align),y.setAttribute(`data-side`,w.side),y.setAttribute(`data-align`,w.align),t.setAttribute(`data-side`,w.side),t.setAttribute(`data-align`,w.align),u.setAttribute(`data-side`,w.side),u.setAttribute(`data-align`,w.align),u.style.setProperty(`--transform-origin`,he),Lt(u,le,w.side,o.sideOffset,v,b),Ue(),d===`measure-target`){let e={width:se.width||v,height:se.height||b};Te(l,e.width,e.height),ve=requestAnimationFrame(()=>{ve=null,!(ue||R!==c||c.isClosing||y.getAttribute(`data-state`)!==`open`||t.getAttribute(`data-state`)!==`active`)&&(Te(l,v,b),je(c))})}let j=y.getBoundingClientRect(),M=[],N=Math.max(0,j.top-C.bottom),P=Math.max(0,C.top-j.bottom),ge=Math.max(0,j.left-C.right),F=Math.max(0,C.left-j.right),I=Math.max(0,ce),L=Math.max(N,P,I),_e=Math.max(ge,F),z=ae?kt(le,C,j):null,H=(e,t,n,r)=>{n<=0||r<=0||M.push({x:e,y:t},{x:e+n,y:t},{x:e+n,y:t+r},{x:e,y:t+r})};if(L>=_e&&L>0){let e=Math.max(N,P,I),t=T,n=P>N&&P>=I?E+b:E-e,r=v;if(z){let e=Math.min(z.edgeA.x,z.edgeB.x)-C.left,n=Math.max(z.edgeA.x,z.edgeB.x)-C.left;t=e-8,r=n-e+16}H(t,n,r,e)}else if(_e>0){let e=Math.max(ge,F),t=E,n=F>ge?T+v:T-e,r=b;if(z){let e=Math.min(z.edgeA.y,z.edgeB.y)-C.top,n=Math.max(z.edgeA.y,z.edgeB.y)-C.top;t=e-8,r=n-e+16}H(n,t,e,r)}if(z){let e=Mt(z.apex,C),t=Mt(z.edgeA,C),n=Mt(z.edgeB,C);M.push(e,t,n)}Pt(M),Ft()},Vt=(e,t,n,r={})=>{if(!y)return;let i=()=>{Bt(e,t,n,r)};if(r.defer===!1){i();return}requestAnimationFrame(()=>{y.getAttribute(`data-state`)!==`open`||e.getAttribute(`data-state`)!==`active`||i()})},Ht=(e=Ot(),t={})=>{if(!e)return;let n=Ke(e.item,e.content);Vt(e.content,e.trigger,n,t)},Ut=(0,e.createPositionSync)({observedElements:[i,...Je],isActive:()=>x!==null,ancestorScroll:!0,syncOnScroll:!0,ancestorResize:!0,elementResize:!0,layoutShift:!0,onUpdate:()=>{he=!0,Ie(),Ht(void 0,{defer:!1,mode:`sync-current`}),Le()}});j.push(()=>Ut.stop());let Wt=e=>ce===-1||e>ce?`right`:`left`,Z=e=>{if(!b)return;if(w=e,!e){vt(),b.removeAttribute(`data-instant`),b.setAttribute(`data-state`,`hidden`);return}b.getAttribute(`data-state`)!==`visible`&&(vt(),b.setAttribute(`data-instant`,``),A=requestAnimationFrame(()=>{A=requestAnimationFrame(()=>{b.removeAttribute(`data-instant`),A=null})}));let t=_.getBoundingClientRect(),n=e.getBoundingClientRect();b.style.setProperty(`--indicator-left`,`${n.left-t.left}px`),b.style.setProperty(`--indicator-width`,`${n.width}px`),b.style.setProperty(`--indicator-top`,`${n.top-t.top}px`);let r=(y&&parseFloat(getComputedStyle(y).marginTop)||0)<1?1:0;b.style.setProperty(`--indicator-height`,`${n.height-r}px`),b.setAttribute(`data-state`,`visible`)},Gt=()=>x?K.get(x)?.trigger??null:null,Kt=(e=null)=>{let t=Gt();if(t){Z(t);return}Z(e)},Q=(t,n=!1)=>{if(X(),t===x){t===null?gt():J();return}if(!n&&t!==null&&t===S)return;J(),S=t===null?null:t;let r=()=>{let n=x,r=t?K.get(t):null,a=Ae(),o=n!==null&&t!==null&&n!==t,s=o&&r?Wt(r.index):null,c=document.activeElement;if(t===null&&c&&n){let t=K.get(n);t&&(0,e.containsWithPortals)(t.content,c)&&t.trigger.focus()}if(K.forEach(({trigger:r,content:i,item:a},o)=>{let c=o===t,l=o===n;if((0,e.setAria)(r,`expanded`,c),r.setAttribute(`data-state`,c?`open`:`closed`),a.setAttribute(`data-state`,c?`open`:`closed`),!c){let e=M.get(i);if(I(i,!1),i.setAttribute(`aria-hidden`,`true`),g(i,!0),i.style.pointerEvents=`none`,t===null)l&&(L(i,null),i.removeAttribute(`data-motion`));else if(l&&s){L(i,s);let e=s===`right`?`to-left`:`to-right`;i.setAttribute(`data-motion`,e)}else l&&(L(i,null),i.removeAttribute(`data-motion`));l?(U(i,!0),e?.exit()):e?.isExiting||(L(i,null),i.removeAttribute(`data-motion`),U(i,!1),He(i),i.hidden=!0)}}),r){let e=Be();if(e?.popupPortal.mount(),e&&(e.isClosing=!1,e.popupExitComplete=!1,e.viewportExitComplete=!1),e?.popup&&(e.popup.hidden=!1,e.popup.style.pointerEvents=`auto`),y&&(y.hidden=!1),n===null&&(e?.popupPresence.enter(),e?.viewportPresence.enter()),Ve(r.content),M.get(r.content)?.enter(),Ut.start(),s){L(r.content,s);let e=s===`right`?`from-right`:`from-left`;r.content.setAttribute(`data-motion`,e)}else L(r.content,null),r.content.removeAttribute(`data-motion`);I(r.content,!0),U(r.content,!1),r.content.removeAttribute(`aria-hidden`),g(r.content,!1),r.content.hidden=!1,r.content.style.pointerEvents=`auto`,ce=r.index,Ht(r,{baseline:a}),Ge(r),Z(r.trigger)}else Ut.stop(),xt(),X(),R&&(we(),a.width>0&&a.height>0&&(Te(R.popup,a.width,a.height),Oe(R.positioner,a.width,a.height),De(a.width,a.height)),R.isClosing=!0,R.popupExitComplete=!1,R.viewportExitComplete=!1,R.popupPresence.exit(),R.viewportPresence.exit()),Ge(null);let l=t!==null;if(F(i,l),s?i.setAttribute(`data-motion`,s===`right`?`from-right`:`from-left`):i.removeAttribute(`data-motion`),y){let e=W();F(G(),l),F(e,l),F(y,l),y.style.pointerEvents=l?`auto`:`none`,me=l&&!o,(!l||o)&&(Fe(),he=!1),Ie(),s?y.style.setProperty(`--motion-direction`,s===`right`?`1`:`-1`):y.style.removeProperty(`--motion-direction`)}x=t,S=null,t===null&&Z(null),Ft(),(0,e.emit)(i,`navigation-menu:change`,{value:t}),oe?.(t)};n?r():t!==null&&x===null?C=setTimeout(r,c):t!==null&&x!==null?r():le=setTimeout(r,f)},qt=_e();F(i,!1),y&&(F(qt.positioner,!1),F(qt.popup,!1),F(y,!1),y.hidden=!0,y.style.pointerEvents=`none`,qt.popup&&(qt.popup.hidden=!0,qt.popup.style.pointerEvents=`none`)),b&&b.setAttribute(`data-state`,`hidden`),K.forEach(({trigger:t,content:n,item:r})=>{t.tagName===`BUTTON`&&!t.hasAttribute(`type`)&&(t.type=`button`),(0,e.setAria)(t,`expanded`,!1),t.setAttribute(`data-state`,`closed`),t.tabIndex=0,r.setAttribute(`data-state`,`closed`),I(n,!1),n.setAttribute(`aria-hidden`,`true`),n.tabIndex=-1,g(n,!0),n.hidden=!0,U(n,!1),n.style.pointerEvents=`none`}),K.forEach(({item:t,trigger:n},r)=>{j.push((0,e.on)(n,`pointerenter`,e=>{if(!T){if(x!==r&&jt(e))return;Z(n)}})),j.push((0,e.on)(t,`pointerenter`,e=>{if(!T){if(x!==r&&jt(e))return;Q(r)}})),j.push((0,e.on)(t,`pointerleave`,t=>{if(S===r&&x===null&>(),x===r&&!T){let n=t.relatedTarget;if(It(n))return;(!n||!(0,e.containsWithPortals)(i,n))&&(Q(null),Z(null))}})),j.push((0,e.on)(n,`focus`,()=>{if(E===n){E=null;return}p&&Q(r,!0),Kt(n)})),j.push((0,e.on)(n,`pointerdown`,()=>{E=n,D=n}),(0,e.on)(n,`keydown`,()=>{D=null})),j.push((0,e.on)(n,`click`,()=>{let e=D===n;D=null,E=null,gt(),x===r&&T?(T=!1,Q(null,!0),Z(null)):x===r&&!T?(T=!0,Z(n),e||ht(r)):(T=!0,Q(r,!0),Z(n),e||ht(r))}))}),j.push((0,e.on)(_,`pointerover`,e=>{let t=e;if(t.pointerType===`touch`)return;let n=tt(t.target);if(n){if(O=!0,T||x!==n.value&&jt(t))return;Z(n.trigger),Q(n.value);return}let r=et(t.target);if(r){if(O=!0,x!==null){if(T)return;$()}Z(r.element);return}x!==null&&(T||lt(t.target)&&$())}),(0,e.on)(_,`click`,e=>{x!==null&<(e.target)&&$()})),j.push((0,e.on)(_,`focusin`,e=>{let t=et(e.target);if(t){if(x!==null){Kt();return}Z(t.element)}}),(0,e.on)(i,`pointerenter`,()=>{O=!0}),(0,e.on)(i,`pointerleave`,e=>{let t=e.relatedTarget;if(!It(t)&&(O=!1,!T)){if(jt(e)){J();return}Q(null),Z(null)}}),(0,e.on)(i,`pointerdown`,()=>{X(),gt()}));let Jt=()=>{if(!nt()||x!==null||S!==null||T)return;let e=it();if(O=e!==null||i instanceof HTMLElement&&rt(i),e){if(e.kind===`submenu`){Q(e.value,!0);return}Z(e.element)}};y&&j.push((0,e.on)(y,`pointerenter`,()=>{X(),J()}),(0,e.on)(y,`transitionend`,e=>{if(e.target!==y)return;let t=x?K.get(x):null;t&&Ht(t,{defer:!1,mode:`sync-current`})})),K.forEach(({content:t})=>{j.push((0,e.on)(t,`pointerenter`,()=>{X(),J()}),(0,e.on)(t,`pointerleave`,t=>{if(T)return;let n=t.relatedTarget;It(n)||(0,e.containsWithPortals)(i,n)||(Q(null),Z(null))}))}),j.push((0,e.on)(_,`keydown`,e=>{let t=$e(e.target);if(!t)return;let n=q.indexOf(t);if(n===-1)return;let r=n;switch(e.key){case`Tab`:if(e.shiftKey||x===null)return;(st(t,1,{preserveOpenOnPlain:!0})||mt())&&e.preventDefault();return;case`ArrowLeft`:r=n-1,r<0&&(r=q.length-1);break;case`ArrowRight`:r=n+1,r>=q.length&&(r=0);break;case`ArrowDown`:if(t.kind===`submenu`){e.preventDefault();let n=t.value;T=!0,Q(n,!0),ht(n)}return;case`Home`:r=0;break;case`End`:r=q.length-1;break;case`Escape`:T=!1,Q(null,!0),Z(null);return;default:return}e.preventDefault();let i=q[r];i&&at(i,{preserveOpenOnPlain:!0})})),K.forEach(({content:t,trigger:n})=>{j.push((0,e.on)(t,`keydown`,e=>{let r=e.target,i=dt(t),a=i.indexOf(r);if(a!==-1)switch(e.key){case`Tab`:if(!e.shiftKey&&a===i.length-1){(ct(n,1,{preserveOpenOnPlain:!0})||mt())&&e.preventDefault();return}if(e.shiftKey&&a===0){e.preventDefault(),n.focus();return}return;case`ArrowDown`:case`ArrowRight`:{e.preventDefault();let t=a+1;t<i.length&&i[t]?.focus();break}case`ArrowUp`:case`ArrowLeft`:e.preventDefault(),a===0?n.focus():i[a-1]?.focus();break;case`Escape`:e.preventDefault(),T=!1,Q(null,!0),Z(null),n.focus();break}}))});let Yt=()=>(0,e.containsWithPortals)(i,document.activeElement)||O||T,$=()=>{X(),gt(),_t(),T=!1,Q(null,!0),Z(null),Ft()};j.push((0,e.on)(document,`focusin`,t=>{let n=t.target;if(!(0,e.containsWithPortals)(i,n)){if(x!==null){$();return}Z(null)}})),j.push((0,e.createDismissLayer)({root:i,isOpen:()=>x!==null&&Yt(),onDismiss:$,closeOnClickOutside:!0,closeOnEscape:!0,preventEscapeDefault:!1,isInside:t=>!!t&&(0,e.containsWithPortals)(i,t)})),j.push((0,e.on)(window,`resize`,()=>{(x||w)&&requestAnimationFrame(()=>Kt(w))}),(0,e.on)(_,`scroll`,()=>{(x||w)&&requestAnimationFrame(()=>Kt(w))})),j.push((0,e.on)(i,`navigation-menu:set`,e=>{let t=e.detail;if(t?.value!==void 0){if(t.value===null)$();else if(K.has(t.value)){T=!0,Q(t.value,!0);let e=K.get(t.value);e&&Z(e.trigger)}}}));let Xt={get value(){return x},open:e=>Q(e,!0),close:()=>$(),destroy:()=>{ue=!0,gt(),_t(),j.forEach(e=>e()),j.length=0,(0,e.clearRootBinding)(i,d,Xt)}};return Jt(),(0,e.setRootBinding)(i,d,Xt),Xt}function p(t=document){let n=[];for(let r of(0,e.getRoots)(t,`navigation-menu`))(0,e.hasRootBinding)(r,d)||n.push(f(r));return n}exports.create=p,exports.createNavigationMenu=f;
|
package/dist/index.d.cts
CHANGED
|
@@ -41,7 +41,7 @@ interface NavigationMenuController {
|
|
|
41
41
|
/**
|
|
42
42
|
* Create a navigation menu controller for a root element
|
|
43
43
|
*
|
|
44
|
-
*
|
|
44
|
+
* Canonical popup-stack markup:
|
|
45
45
|
* ```html
|
|
46
46
|
* <nav data-slot="navigation-menu">
|
|
47
47
|
* <ul data-slot="navigation-menu-list">
|
|
@@ -52,9 +52,18 @@ interface NavigationMenuController {
|
|
|
52
52
|
* <!-- Optional hover indicator -->
|
|
53
53
|
* <div data-slot="navigation-menu-indicator"></div>
|
|
54
54
|
* </ul>
|
|
55
|
-
* <div data-slot="navigation-menu-
|
|
55
|
+
* <div data-slot="navigation-menu-portal">
|
|
56
|
+
* <div data-slot="navigation-menu-positioner">
|
|
57
|
+
* <div data-slot="navigation-menu-popup">
|
|
58
|
+
* <div data-slot="navigation-menu-viewport"></div>
|
|
59
|
+
* </div>
|
|
60
|
+
* </div>
|
|
61
|
+
* </div>
|
|
56
62
|
* </nav>
|
|
57
63
|
* ```
|
|
64
|
+
*
|
|
65
|
+
* Minimal markup that only authors `navigation-menu-viewport` still works; the
|
|
66
|
+
* popup stack is synthesized while open and restored on close.
|
|
58
67
|
*/
|
|
59
68
|
declare function createNavigationMenu(root: Element, options?: NavigationMenuOptions): NavigationMenuController;
|
|
60
69
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ interface NavigationMenuController {
|
|
|
41
41
|
/**
|
|
42
42
|
* Create a navigation menu controller for a root element
|
|
43
43
|
*
|
|
44
|
-
*
|
|
44
|
+
* Canonical popup-stack markup:
|
|
45
45
|
* ```html
|
|
46
46
|
* <nav data-slot="navigation-menu">
|
|
47
47
|
* <ul data-slot="navigation-menu-list">
|
|
@@ -52,9 +52,18 @@ interface NavigationMenuController {
|
|
|
52
52
|
* <!-- Optional hover indicator -->
|
|
53
53
|
* <div data-slot="navigation-menu-indicator"></div>
|
|
54
54
|
* </ul>
|
|
55
|
-
* <div data-slot="navigation-menu-
|
|
55
|
+
* <div data-slot="navigation-menu-portal">
|
|
56
|
+
* <div data-slot="navigation-menu-positioner">
|
|
57
|
+
* <div data-slot="navigation-menu-popup">
|
|
58
|
+
* <div data-slot="navigation-menu-viewport"></div>
|
|
59
|
+
* </div>
|
|
60
|
+
* </div>
|
|
61
|
+
* </div>
|
|
56
62
|
* </nav>
|
|
57
63
|
* ```
|
|
64
|
+
*
|
|
65
|
+
* Minimal markup that only authors `navigation-menu-viewport` still works; the
|
|
66
|
+
* popup stack is synthesized while open and restored on close.
|
|
58
67
|
*/
|
|
59
68
|
declare function createNavigationMenu(root: Element, options?: NavigationMenuOptions): NavigationMenuController;
|
|
60
69
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{clearRootBinding as e,computeFloatingPosition as t,containsWithPortals as n,createDismissLayer as r,createPortalLifecycle as i,createPositionSync as a,createPresenceLifecycle as o,emit as s,ensureId as c,getDataBool as l,getDataEnum as u,getDataNumber as d,getPart as f,getParts as p,getRoots as m,hasRootBinding as h,on as g,reuseRootBinding as ee,setAria as _,setRootBinding as te}from"@data-slot/core";const v=[`start`,`center`,`end`],ne=[`top`,`right`,`bottom`,`left`],y=[`absolute`,`fixed`],b=(e,t)=>t===`start`?{x:e.left,y:e.top}:t===`end`?{x:e.right,y:e.bottom}:{x:e.left+e.width/2,y:e.top+e.height/2},re=(e,t,n)=>{let r=b(n,t);return e===`top`?{x:r.x,y:n.top}:e===`bottom`?{x:r.x,y:n.bottom}:e===`left`?{x:n.left,y:r.y}:{x:n.right,y:r.y}},x=`@data-slot/navigation-menu`;function ie(m,h={}){let b=ee(m,x,`[@data-slot/navigation-menu] createNavigationMenu() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(b)return b;let ie=h.delayOpen??d(m,`delayOpen`)??0,ae=h.delayClose??d(m,`delayClose`)??0,oe=h.openOnFocus??l(m,`openOnFocus`)??!1,se=h.side??u(m,`side`,ne)??`bottom`,ce=h.align??u(m,`align`,v)??`start`,le=h.sideOffset??d(m,`sideOffset`)??0,S=h.alignOffset??d(m,`alignOffset`)??0,C=h.positionMethod??u(m,`positionMethod`,y)??`absolute`,ue=h.safeTriangle??l(m,`safeTriangle`)??!1,w=h.debugSafeTriangle??l(m,`debugSafeTriangle`)??!1,de=ue||w,fe=h.onValueChange,pe=e=>e.replace(/[^a-z0-9\-_:.]/gi,`-`),T=(e,t)=>{`inert`in e&&(e.inert=t)},E=f(m,`navigation-menu-list`),me=p(m,`navigation-menu-item`),D=f(m,`navigation-menu-viewport`),O=f(m,`navigation-menu-indicator`),k=(e,t)=>{let n=e.parentElement;for(;n&&n!==m;){if(n.getAttribute(`data-slot`)===t)return n;n=n.parentElement}return null};if(!E||me.length===0)throw Error(`NavigationMenu requires navigation-menu-list and at least one navigation-menu-item`);let A=null,j=null,he=-1,ge=null,_e=null,ve=null,M=!1,ye=null,be=null,N=!1,xe=!1,P=null,F=null,Se=null,I=0,L=0,Ce=!1,R=!1,z=[],B=new Map,V=new Map,we=D?k(D,`navigation-menu-viewport-positioner`):null,Te=D?k(D,`navigation-menu-positioner`):null,H=we??Te,Ee=H?k(H,`navigation-menu-portal`):null,U=D?i({content:D,root:m,enabled:!0,wrapperSlot:H?void 0:`navigation-menu-viewport-positioner`,container:H??void 0,mountTarget:H?Ee??H:void 0}):null,De=()=>{let e=U?.container;e instanceof HTMLElement&&(e.style.position=``,e.style.top=``,e.style.left=``,e.style.width=``,e.style.height=``,e.style.margin=``,e.style.willChange=``,e.style.pointerEvents=``,e.style.transform=``,e.style.removeProperty(`--transform-origin`))},Oe=()=>{Se!==null&&(cancelAnimationFrame(Se),Se=null)},ke=()=>{let e=Ce||R;D&&(e?D.setAttribute(`data-instant`,``):D.removeAttribute(`data-instant`));let t=U?.container;t instanceof HTMLElement&&(e?t.setAttribute(`data-instant`,``):t.removeAttribute(`data-instant`))},Ae=()=>{Oe(),Se=requestAnimationFrame(()=>{Se=null,R=!1,ke()})},je=()=>{Oe(),Ce=!1,R=!1,ke()},Me=D?o({element:D,onExitComplete:()=>{xe||(je(),De(),I=0,L=0,U?.restore(),D.hidden=!0,D.style.pointerEvents=`none`)}}):null,Ne=e=>{if(!D)return;let t=V.get(e)??{originalParent:null,originalNextSibling:null,mountedInViewport:!1};t.mountedInViewport||(t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.mountedInViewport=!0,V.set(e,t)),e.parentNode!==D&&D.appendChild(e)},Pe=e=>{let t=V.get(e);if(!t||!t.mountedInViewport)return;let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.mountedInViewport=!1,t.originalParent=null,t.originalNextSibling=null},Fe=()=>{if(!D||!U)return;let e=U.container,t=m.ownerDocument.defaultView??window,n=m.getBoundingClientRect(),r=C===`fixed`,i=n.top+L+(r?0:t.scrollY),a=n.left+I+(r?0:t.scrollX);e.style.position=C,e.style.top=`${i}px`,e.style.left=`${a}px`,e.style.width=`${n.width}px`,e.style.height=`${n.height}px`,e.style.margin=`0`,e.style.willChange=`top,left`,e.style.pointerEvents=`none`},Ie=null,Le=e=>{Ie?.disconnect(),Ie=null,!(!D||!e)&&(Ie=new ResizeObserver(()=>{let t=Re(e.item,e.content);kt(e.content,e.trigger,t)}),Ie.observe(e.content))};z.push(()=>Ie?.disconnect()),z.push(()=>{je(),B.forEach(e=>e.cleanup()),B.clear(),V.forEach((e,t)=>{Pe(t),t.hidden=!0,t.style.pointerEvents=`none`}),V.clear(),De(),I=0,L=0,Me?.cleanup(),U?.cleanup()});let W=new Map,Re=(e,t)=>({side:h.side??u(t,`side`,ne)??u(e,`side`,ne)??se,align:h.align??u(t,`align`,v)??u(e,`align`,v)??ce,sideOffset:h.sideOffset??d(t,`sideOffset`)??d(e,`sideOffset`)??le,alignOffset:h.alignOffset??d(t,`alignOffset`)??d(e,`alignOffset`)??S}),ze=0;me.forEach(e=>{let t=e.dataset.value;if(!t)return;let n=f(e,`navigation-menu-trigger`),r=f(e,`navigation-menu-content`);if(n&&r){W.set(t,{value:t,item:e,trigger:n,content:r,index:ze++}),B.set(r,o({element:r,onExitComplete:()=>{xe||(Pe(r),r.hidden=!0,r.style.pointerEvents=`none`)}}));let i=pe(t),a=c(n,`nav-menu-trigger-${i}`),s=c(r,`nav-menu-content-${i}`);n.setAttribute(`aria-haspopup`,`true`),n.setAttribute(`aria-controls`,s),r.setAttribute(`aria-labelledby`,a)}});let Be=Array.from(W.values()).map(e=>e.trigger),Ve=`a[href], button:not([disabled]), [role="link"], [role="button"], [tabindex]:not([tabindex="-1"])`,He=e=>{let t=e?.closest(`[data-slot="navigation-menu-item"]`);if(!t)return null;let n=t.dataset.value;if(!n)return null;let r=W.get(n);return!r||r.item!==t?null:r},Ue=e=>{if(e.matches(Ve))return e;let t=e.querySelectorAll(Ve);for(let n of t)if(e.contains(n)&&!n.closest(`[data-slot="navigation-menu-content"]`)&&!(n.hidden||n.closest(`[hidden]`)))return n;return null},G=[],We=new Map;me.forEach(e=>{let t=He(e);if(t){let e={kind:`submenu`,element:t.trigger,item:t.item,value:t.value,trigger:t.trigger};G.push(e),We.set(e.element,e),We.set(e.item,e);return}let n=Ue(e);if(!n)return;let r={kind:`plain`,element:n};G.push(r),We.set(r.element,r)});let Ge=e=>{let t=e instanceof HTMLElement?e:null;if(!t)return null;let n=t;for(;n&&n!==E;){let e=We.get(n);if(e)return e;n=n.parentElement}return null},Ke=e=>{let t=Ge(e);return t?.kind===`plain`?t:null},qe=e=>{let t=Ge(e);return t?.kind===`submenu`?t:null},Je=()=>{let e=m.ownerDocument.defaultView;if(!e?.matchMedia)return!0;try{return e.matchMedia(`(any-hover: hover)`).matches}catch{return!0}},Ye=e=>{try{return e.matches(`:hover`)}catch{return!1}},Xe=()=>{for(let e of G){if(e.kind===`submenu`){if(Ye(e.item)||Ye(e.trigger))return e;continue}if(Ye(e.element))return e}return null},Ze=(e,t={})=>{let n=m.ownerDocument,r=t.preserveOpenOnPlain??!1;return e.kind===`submenu`?(e.trigger.focus(),n.activeElement===e.trigger?(Z(e.trigger),!0):!1):(A!==null&&!r&&$(),e.element.focus(),n.activeElement===e.element?(A!==null&&r?Z():X(e.element),!0):!1)},Qe=(e,t,n={})=>{for(let r=e+t;r>=0&&r<G.length;r+=t){let e=G[r];if(e&&Ze(e,n))return!0}return!1},$e=(e,t,n={})=>{let r=G.indexOf(e);return r===-1?!1:Qe(r,t,n)},et=(e,t,n={})=>{let r=G.findIndex(t=>t.kind===`submenu`&&t.trigger===e);return r===-1?!1:Qe(r,t,n)},tt=e=>{if(!(e instanceof Node)||!E.contains(e))return!1;let t=e instanceof HTMLElement?e:e.parentElement;return!t||t.closest(`[data-slot="navigation-menu-indicator"]`)||He(t)?!1:t.closest(`[data-slot="navigation-menu-item"]`)?!0:!!t.closest(`a[href], button, [role='link'], [role='button']`)},nt=`a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])`,rt=e=>Array.from(e.querySelectorAll(nt)).filter(e=>!e.hidden&&!e.closest(`[hidden]`)),it=e=>!e.isConnected||e.hidden||e.closest(`[hidden]`)||`disabled`in e&&e.disabled||e.getAttribute(`aria-hidden`)===`true`||e.getAttribute(`tabindex`)===`-1`?!1:e.matches(nt)?!0:e.tabIndex>=0,at=e=>{if(m.contains(e)||D?.contains(e))return!0;let t=U?.container;if(t instanceof HTMLElement&&t.contains(e))return!0;for(let{content:t}of W.values())if(t.contains(e))return!0;return!1},ot=()=>{let e=m.ownerDocument,t=Array.from(e.querySelectorAll(`*`));for(let n of t)if(it(n)&&!at(n)&&(m.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)!==0&&(n.focus(),e.activeElement===n))return!0;return!1},st=e=>{requestAnimationFrame(()=>{if(A!==e)return;let t=W.get(e);if(!t)return;let n=rt(t.content)[0];n?n.focus():t.content.focus()})},K=()=>{ge&&=(clearTimeout(ge),null),_e&&=(clearTimeout(_e),null)},q=()=>{K(),j=null},ct=()=>{ye=null,be=null},lt=()=>{F!==null&&(cancelAnimationFrame(F),F=null)},J=null,ut=()=>{if(!D)return null;let e=U?.container;return e instanceof HTMLElement?e:D.parentElement instanceof HTMLElement?D.parentElement:D},dt=()=>{let e=ut();return J||(J=document.createElement(`div`),J.setAttribute(`data-slot`,`navigation-menu-bridge`),J.style.cssText=`position: absolute; pointer-events: auto; z-index: 0; display: none;`,z.push(g(J,`pointerenter`,()=>{K()}),g(J,`pointerleave`,e=>{if(M||A===null)return;let t=e.relatedTarget;Dt(t)||t&&n(m,t)||(Q(null),X(null))}))),e&&J.parentElement!==e&&e.insertBefore(J,e.firstChild),J},ft=()=>{J&&(J.style.height=`0`,J.style.width=`0`,J.style.top=`0px`,J.style.left=`0px`,J.style.right=`0px`,J.style.bottom=`auto`,J.style.transform=`none`,J.style.clipPath=`none`,J.style.display=`none`)},pt=()=>{if(!w)return null;let e=m.ownerDocument.body;return e?(P||(P=m.ownerDocument.createElement(`div`),P.setAttribute(`data-slot`,`navigation-menu-safe-triangle`),P.style.cssText=[`position: fixed`,`pointer-events: none`,`display: none`,`z-index: 2147483647`,`background: rgba(255, 0, 0, 0.18)`,`border: 1px solid rgba(255, 0, 0, 0.45)`].join(`; `)),P.parentElement!==e&&e.appendChild(P),P):null},mt=()=>{P&&(P.style.width=`0`,P.style.height=`0`,P.style.clipPath=`none`,P.style.display=`none`)},Y=()=>{w||mt()},ht=e=>{let t=pt();if(!t)return;let n=e.apex.x,r=e.apex.y,i=e.edgeA.x,a=e.edgeA.y,o=e.edgeB.x,s=e.edgeB.y,c=Math.min(n,i,o),l=Math.min(r,a,s),u=Math.max(n,i,o),d=Math.max(r,a,s),f=Math.max(1,u-c),p=Math.max(1,d-l),m=(e,t)=>`${(e-c)/f*100}% ${(t-l)/p*100}%`;t.style.display=`block`,t.style.left=`${c}px`,t.style.top=`${l}px`,t.style.width=`${f}px`,t.style.height=`${p}px`,t.style.clipPath=`polygon(${m(n,r)}, ${m(i,a)}, ${m(o,s)})`},gt=(e,t,n)=>(e.x-n.x)*(t.y-n.y)-(t.x-n.x)*(e.y-n.y),_t=(e,t,n,r)=>{let i=gt(e,t,n),a=gt(e,n,r),o=gt(e,r,t);return!((i<0||a<0||o<0)&&(i>0||a>0||o>0))},vt=(e,t,n)=>{let r=.5;if(n.top>=t.bottom-r)return[{x:n.left,y:n.top},{x:n.right,y:n.top}];if(n.bottom<=t.top+r)return[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}];if(n.left>=t.right-r)return[{x:n.left,y:n.top},{x:n.left,y:n.bottom}];if(n.right<=t.left+r)return[{x:n.right,y:n.top},{x:n.right,y:n.bottom}];let i=[[{x:n.left,y:n.top},{x:n.right,y:n.top}],[{x:n.right,y:n.top},{x:n.right,y:n.bottom}],[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}],[{x:n.left,y:n.top},{x:n.left,y:n.bottom}]],a=([t,n])=>t.y===n.y?Math.abs(e.y-t.y):Math.abs(e.x-t.x),o=i[0],s=a(o);for(let e=1;e<i.length;e++){let t=i[e],n=a(t);n<s&&(o=t,s=n)}return o},yt=()=>A?W.get(A)??null:null,bt=(e,t,n)=>{if(n.width<=0||n.height<=0)return null;let r={x:e.left+e.width/2,y:e.top+e.height*.62},[i,a]=vt(r,t,n);if(i.x===a.x){let e=Math.min(i.y,a.y),t=Math.max(i.y,a.y),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:i.x,y:e+r},a={x:a.x,y:t-r}}else{let e=Math.min(i.x,a.x),t=Math.max(i.x,a.x),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:e+r,y:i.y},a={x:t-r,y:a.y}}return{apex:r,edgeA:i,edgeB:a}},xt=()=>{if(!de||!D||A===null)return null;let e=yt();if(!e)return null;let t=m.getBoundingClientRect(),n=e.trigger.getBoundingClientRect(),r=D.getBoundingClientRect(),i=e.content.getBoundingClientRect();return bt(n,t,r.width>0&&r.height>0?r:i)},St=e=>{let t=xt();return t?_t({x:e.clientX,y:e.clientY},t.apex,t.edgeA,t.edgeB):!1},Ct=(e,t)=>({x:e.x-t.left,y:e.y-t.top}),wt=e=>{if(e.length<=1)return e.slice();let t=e=>`${e.x.toFixed(3)}:${e.y.toFixed(3)}`,n=new Map;for(let r of e)n.set(t(r),r);let r=Array.from(n.values()).sort((e,t)=>e.x===t.x?e.y-t.y:e.x-t.x);if(r.length<=2)return r;let i=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),a=[];for(let e of r){for(;a.length>=2&&i(a[a.length-2],a[a.length-1],e)<=0;)a.pop();a.push(e)}let o=[];for(let e=r.length-1;e>=0;e--){let t=r[e];for(;o.length>=2&&i(o[o.length-2],o[o.length-1],t)<=0;)o.pop();o.push(t)}return a.pop(),o.pop(),a.concat(o)},Tt=e=>{if(e.length<3){ft();return}let t=dt(),n=t.parentElement,r=wt(n&&n===U?.container?e.map(e=>({x:e.x-I,y:e.y-L})):e);if(r.length<3){ft();return}let i=Math.min(...r.map(e=>e.x)),a=Math.min(...r.map(e=>e.y)),o=Math.max(...r.map(e=>e.x)),s=Math.max(...r.map(e=>e.y)),c=Math.max(1,o-i),l=Math.max(1,s-a),u=e=>`${(e.x-i)/c*100}% ${(e.y-a)/l*100}%`;t.style.display=`block`,t.style.transform=`none`,t.style.bottom=`auto`,t.style.right=`auto`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.width=`${c}px`,t.style.height=`${l}px`,t.style.clipPath=`polygon(${r.map(u).join(`, `)})`},Et=()=>{if(!w)return;let e=xt();if(!e){mt();return}ht(e)},Dt=e=>{if(!e)return!1;if(yt()?.content.contains(e)||D?.contains(e)||J?.contains(e))return!0;let t=U?.container;return!!(t instanceof HTMLElement&&t.contains(e))};z.push(Y),z.push(lt),z.push(ft),z.push(()=>{mt(),P?.parentElement&&P.parentElement.removeChild(P),P=null});let Ot=(e,n,r)=>{if(!D||D.getAttribute(`data-state`)!==`open`||e.getAttribute(`data-state`)!==`active`)return;let i=e.firstElementChild,a=e.lastElementChild,o=i?getComputedStyle(i):null,s=a?getComputedStyle(a):null,c=o&&parseFloat(o.marginTop)||0,l=s&&parseFloat(s.marginBottom)||0,u=(...e)=>{let t=0;for(let n of e)Number.isFinite(n)&&(t=Math.max(t,n));return t},d=e.getBoundingClientRect(),f=u(d.width,e.scrollWidth,e.offsetWidth,e.clientWidth),p=u(d.height,e.scrollHeight,e.offsetHeight,e.clientHeight)+c+l,h={top:d.top,left:d.left,width:f,height:p,right:d.left+f,bottom:d.top+p},g=getComputedStyle(D),ee=parseFloat(g.marginTop)||0;D.style.setProperty(`--viewport-width`,`${f}px`),D.style.setProperty(`--viewport-height`,`${p}px`);let _=m.getBoundingClientRect(),te=n.getBoundingClientRect(),v=t({anchorRect:te,contentRect:h,side:r.side,align:r.align,sideOffset:r.sideOffset,alignOffset:r.alignOffset,avoidCollisions:!1,collisionPadding:0,allowedSides:ne}),y=v.x-_.left,b=v.y-_.top;I=y,L=b;let x=re(v.side,v.align,te),ie=x.x-(_.left+y),ae=x.y-(_.top+b),oe=x.x-_.left,se=x.y-_.top,ce=`${ie}px ${ae}px`,le=`${oe}px ${se}px`;D.style.top=`0px`,D.style.left=`0px`,D.style.willChange=`transform,width,height`,D.style.setProperty(`--transform-origin`,ce),e.style.top=`0px`,e.style.left=`0px`,e.style.setProperty(`--transform-origin`,ce),D.setAttribute(`data-side`,v.side),D.setAttribute(`data-align`,v.align),e.setAttribute(`data-side`,v.side),e.setAttribute(`data-align`,v.align);let S=U?.container;S&&S!==D&&(S.setAttribute(`data-side`,v.side),S.setAttribute(`data-align`,v.align),S.style.setProperty(`--transform-origin`,le)),Fe();let C=D.getBoundingClientRect(),ue=[],w=Math.max(0,C.top-_.bottom),fe=Math.max(0,_.top-C.bottom),pe=Math.max(0,C.left-_.right),T=Math.max(0,_.left-C.right),E=Math.max(0,c+ee),me=Math.max(w,fe,E),O=Math.max(pe,T),k=de?bt(te,_,C):null,A=(e,t,n,r)=>{n<=0||r<=0||ue.push({x:e,y:t},{x:e+n,y:t},{x:e+n,y:t+r},{x:e,y:t+r})};if(me>=O&&me>0){let e=Math.max(w,fe,E),t=y,n=fe>w&&fe>=E?b+p:b-e,r=f;if(k){let e=Math.min(k.edgeA.x,k.edgeB.x)-_.left,n=Math.max(k.edgeA.x,k.edgeB.x)-_.left;t=e-8,r=n-e+16}A(t,n,r,e)}else if(O>0){let e=Math.max(pe,T),t=b,n=T>pe?y+f:y-e,r=p;if(k){let e=Math.min(k.edgeA.y,k.edgeB.y)-_.top,n=Math.max(k.edgeA.y,k.edgeB.y)-_.top;t=e-8,r=n-e+16}A(n,t,e,r)}if(k){let e=Ct(k.apex,_),t=Ct(k.edgeA,_),n=Ct(k.edgeB,_);ue.push(e,t,n)}Tt(ue),Et()},kt=(e,t,n,r={})=>{if(!D)return;let i=()=>{Ot(e,t,n)};if(r.defer===!1){i();return}requestAnimationFrame(()=>{D.getAttribute(`data-state`)!==`open`||e.getAttribute(`data-state`)!==`active`||i()})},At=(e=yt(),t={})=>{if(!e)return;let n=Re(e.item,e.content);kt(e.content,e.trigger,n,t)},jt=a({observedElements:[m,...Be],isActive:()=>A!==null,ancestorScroll:!0,syncOnScroll:!0,ancestorResize:!0,elementResize:!0,layoutShift:!0,onUpdate:()=>{R=!0,ke(),At(void 0,{defer:!1}),Ae()}});z.push(()=>jt.stop());let Mt=e=>he===-1||e>he?`right`:`left`,X=e=>{if(!O)return;if(ve=e,!e){lt(),O.removeAttribute(`data-instant`),O.setAttribute(`data-state`,`hidden`);return}O.getAttribute(`data-state`)!==`visible`&&(lt(),O.setAttribute(`data-instant`,``),F=requestAnimationFrame(()=>{F=requestAnimationFrame(()=>{O.removeAttribute(`data-instant`),F=null})}));let t=E.getBoundingClientRect(),n=e.getBoundingClientRect();O.style.setProperty(`--indicator-left`,`${n.left-t.left}px`),O.style.setProperty(`--indicator-width`,`${n.width}px`),O.style.setProperty(`--indicator-top`,`${n.top-t.top}px`);let r=(D&&parseFloat(getComputedStyle(D).marginTop)||0)<1?1:0;O.style.setProperty(`--indicator-height`,`${n.height-r}px`),O.setAttribute(`data-state`,`visible`)},Nt=()=>A?W.get(A)?.trigger??null:null,Z=(e=null)=>{let t=Nt();if(t){X(t);return}X(e)},Q=(e,t=!1)=>{if(Y(),e===A){e===null?q():K();return}if(!t&&e!==null&&e===j)return;K(),j=e===null?null:e;let r=()=>{let t=A,r=e?W.get(e):null,i=t!==null&&e!==null&&t!==e,a=i&&r?Mt(r.index):null,o=document.activeElement;if(e===null&&o&&t){let e=W.get(t);e&&n(e.content,o)&&e.trigger.focus()}if(W.forEach(({trigger:n,content:r,item:i},o)=>{let s=o===e,c=o===t;if(_(n,`expanded`,s),n.setAttribute(`data-state`,s?`open`:`closed`),i.setAttribute(`data-state`,s?`open`:`closed`),!s){let e=B.get(r);if(r.setAttribute(`data-state`,`inactive`),r.setAttribute(`aria-hidden`,`true`),T(r,!0),r.style.pointerEvents=`none`,c&&a){let e=a===`right`?`to-left`:`to-right`;r.setAttribute(`data-motion`,e)}else c&&r.removeAttribute(`data-motion`);c?e?.exit():e?.isExiting||(r.removeAttribute(`data-motion`),Pe(r),r.hidden=!0)}}),r){if(U?.mount(),D&&(D.hidden=!1),t===null&&Me?.enter(),Ne(r.content),B.get(r.content)?.enter(),jt.start(),a){let e=a===`right`?`from-right`:`from-left`;r.content.setAttribute(`data-motion`,e)}else r.content.removeAttribute(`data-motion`);r.content.setAttribute(`data-state`,`active`),r.content.removeAttribute(`aria-hidden`),T(r.content,!1),r.content.hidden=!1,r.content.style.pointerEvents=`auto`,he=r.index,At(r),Le(r),X(r.trigger)}else jt.stop(),ft(),Y(),Me?.exit(),Le(null);let c=e!==null;m.setAttribute(`data-state`,c?`open`:`closed`),a?m.setAttribute(`data-motion`,a===`right`?`from-right`:`from-left`):m.removeAttribute(`data-motion`),D&&(D.setAttribute(`data-state`,c?`open`:`closed`),D.style.pointerEvents=c?`auto`:`none`,Ce=c&&!i,(!c||i)&&(Oe(),R=!1),ke(),a&&D.style.setProperty(`--motion-direction`,a===`right`?`1`:`-1`)),A=e,j=null,e===null&&X(null),Et(),s(m,`navigation-menu:change`,{value:e}),fe?.(e)};t?r():e!==null&&A===null?ge=setTimeout(r,ie):e!==null&&A!==null?r():_e=setTimeout(r,ae)};m.setAttribute(`data-state`,`closed`),D&&(D.setAttribute(`data-state`,`closed`),D.hidden=!0,D.style.pointerEvents=`none`),O&&O.setAttribute(`data-state`,`hidden`),W.forEach(({trigger:e,content:t,item:n})=>{e.tagName===`BUTTON`&&!e.hasAttribute(`type`)&&(e.type=`button`),_(e,`expanded`,!1),e.setAttribute(`data-state`,`closed`),e.tabIndex=0,n.setAttribute(`data-state`,`closed`),t.setAttribute(`data-state`,`inactive`),t.setAttribute(`aria-hidden`,`true`),t.tabIndex=-1,T(t,!0),t.hidden=!0,t.style.pointerEvents=`none`}),W.forEach(({item:e,trigger:t},r)=>{z.push(g(t,`pointerenter`,e=>{if(!M){if(A!==r&&St(e))return;X(t)}})),z.push(g(e,`pointerenter`,e=>{if(!M){if(A!==r&&St(e))return;Q(r)}})),z.push(g(e,`pointerleave`,e=>{if(j===r&&A===null&&q(),A===r&&!M){let t=e.relatedTarget;if(Dt(t))return;(!t||!n(m,t))&&(Q(null),X(null))}})),z.push(g(t,`focus`,()=>{if(ye===t){ye=null;return}oe&&Q(r,!0),Z(t)})),z.push(g(t,`pointerdown`,()=>{ye=t,be=t}),g(t,`keydown`,()=>{be=null})),z.push(g(t,`click`,()=>{let e=be===t;be=null,ye=null,q(),A===r&&M?(M=!1,Q(null,!0),X(null)):A===r&&!M?(M=!0,X(t),e||st(r)):(M=!0,Q(r,!0),X(t),e||st(r))}))}),z.push(g(E,`pointerover`,e=>{let t=e;if(t.pointerType===`touch`)return;let n=qe(t.target);if(n){if(N=!0,M||A!==n.value&&St(t))return;X(n.trigger),Q(n.value);return}let r=Ke(t.target);if(r){if(N=!0,A!==null){if(M)return;$()}X(r.element);return}A!==null&&(M||tt(t.target)&&$())}),g(E,`click`,e=>{A!==null&&tt(e.target)&&$()})),z.push(g(E,`focusin`,e=>{let t=Ke(e.target);if(t){if(A!==null){Z();return}X(t.element)}}),g(m,`pointerenter`,()=>{N=!0}),g(m,`pointerleave`,e=>{let t=e.relatedTarget;if(!Dt(t)&&(N=!1,!M)){if(St(e)){K();return}Q(null),X(null)}}),g(m,`pointerdown`,()=>{Y(),q()}));let Pt=()=>{if(!Je()||A!==null||j!==null||M)return;let e=Xe();if(N=e!==null||m instanceof HTMLElement&&Ye(m),e){if(e.kind===`submenu`){Q(e.value,!0);return}X(e.element)}};D&&z.push(g(D,`pointerenter`,()=>{Y(),K()}),g(D,`transitionend`,e=>{if(e.target!==D)return;let t=A?W.get(A):null;if(t){let e=Re(t.item,t.content);kt(t.content,t.trigger,e)}})),W.forEach(({content:e})=>{z.push(g(e,`pointerenter`,()=>{Y(),K()}),g(e,`pointerleave`,e=>{if(M)return;let t=e.relatedTarget;Dt(t)||n(m,t)||(Q(null),X(null))}))}),z.push(g(E,`keydown`,e=>{let t=Ge(e.target);if(!t)return;let n=G.indexOf(t);if(n===-1)return;let r=n;switch(e.key){case`Tab`:if(e.shiftKey||A===null)return;($e(t,1,{preserveOpenOnPlain:!0})||ot())&&e.preventDefault();return;case`ArrowLeft`:r=n-1,r<0&&(r=G.length-1);break;case`ArrowRight`:r=n+1,r>=G.length&&(r=0);break;case`ArrowDown`:if(t.kind===`submenu`){e.preventDefault();let n=t.value;M=!0,Q(n,!0),st(n)}return;case`Home`:r=0;break;case`End`:r=G.length-1;break;case`Escape`:M=!1,Q(null,!0),X(null);return;default:return}e.preventDefault();let i=G[r];i&&Ze(i,{preserveOpenOnPlain:!0})})),W.forEach(({content:e,trigger:t})=>{z.push(g(e,`keydown`,n=>{let r=n.target,i=rt(e),a=i.indexOf(r);if(a!==-1)switch(n.key){case`Tab`:if(!n.shiftKey&&a===i.length-1){(et(t,1,{preserveOpenOnPlain:!0})||ot())&&n.preventDefault();return}if(n.shiftKey&&a===0){n.preventDefault(),t.focus();return}return;case`ArrowDown`:case`ArrowRight`:{n.preventDefault();let e=a+1;e<i.length&&i[e]?.focus();break}case`ArrowUp`:case`ArrowLeft`:n.preventDefault(),a===0?t.focus():i[a-1]?.focus();break;case`Escape`:n.preventDefault(),M=!1,Q(null,!0),X(null),t.focus();break}}))});let Ft=()=>n(m,document.activeElement)||N||M,$=()=>{Y(),q(),ct(),M=!1,Q(null,!0),X(null),Et()};z.push(g(document,`focusin`,e=>{let t=e.target;if(!n(m,t)){if(A!==null){$();return}X(null)}})),z.push(r({root:m,isOpen:()=>A!==null&&Ft(),onDismiss:$,closeOnClickOutside:!0,closeOnEscape:!0,preventEscapeDefault:!1,isInside:e=>!!e&&n(m,e)})),z.push(g(window,`resize`,()=>{(A||ve)&&requestAnimationFrame(()=>Z(ve))}),g(E,`scroll`,()=>{(A||ve)&&requestAnimationFrame(()=>Z(ve))})),z.push(g(m,`navigation-menu:set`,e=>{let t=e.detail;if(t?.value!==void 0){if(t.value===null)$();else if(W.has(t.value)){M=!0,Q(t.value,!0);let e=W.get(t.value);e&&X(e.trigger)}}}));let It={get value(){return A},open:e=>Q(e,!0),close:()=>$(),destroy:()=>{xe=!0,q(),ct(),z.forEach(e=>e()),z.length=0,e(m,x,It)}};return Pt(),te(m,x,It),It}function ae(e=document){let t=[];for(let n of m(e,`navigation-menu`))h(n,x)||t.push(ie(n));return t}export{ae as create,ie as createNavigationMenu};
|
|
1
|
+
import{clearRootBinding as e,computeFloatingPosition as t,containsWithPortals as n,createDismissLayer as r,createPortalLifecycle as i,createPositionSync as a,createPresenceLifecycle as o,emit as s,ensureId as c,getDataBool as l,getDataEnum as u,getDataNumber as d,getPart as f,getParts as ee,getRoots as p,hasRootBinding as m,on as h,reuseRootBinding as te,setAria as g,setRootBinding as ne}from"@data-slot/core";const re=[`start`,`center`,`end`],ie=[`top`,`right`,`bottom`,`left`],_=[`absolute`,`fixed`],v=(e,t)=>t===`start`?{x:e.left,y:e.top}:t===`end`?{x:e.right,y:e.bottom}:{x:e.left+e.width/2,y:e.top+e.height/2},ae=(e,t,n)=>{let r=v(n,t);return e===`top`?{x:r.x,y:n.top}:e===`bottom`?{x:r.x,y:n.bottom}:e===`left`?{x:n.left,y:r.y}:{x:n.right,y:r.y}},y=e=>{let t=e.trim();if(!t)return 0;if(t.endsWith(`ms`)){let e=Number(t.slice(0,-2).trim());return Number.isFinite(e)?e:0}if(t.endsWith(`s`)){let e=Number(t.slice(0,-1).trim());return Number.isFinite(e)?e*1e3:0}let n=Number(t);return Number.isFinite(n)?n:0},b=(e,t)=>{let n=e.split(`,`),r=t.split(`,`),i=Math.max(n.length,r.length),a=0;for(let e=0;e<i;e++){let t=y(n[e]??n[n.length-1]??`0`),i=y(r[e]??r[r.length-1]??`0`);a=Math.max(a,t+i)}return a},oe=e=>{let t=getComputedStyle(e),n=b(t.transitionDuration,t.transitionDelay),r=b(t.animationDuration,t.animationDelay);return Math.max(n,r)},se=(e,t,n)=>{let r=e.ownerDocument.defaultView??window,i=()=>{a!==null&&(r.clearTimeout(a),a=null)},a=null;n?.addEventListener(`abort`,i,{once:!0});let o=oe(e);if(o<=0){r.requestAnimationFrame(()=>{n?.aborted||t()});return}a=r.setTimeout(()=>{i(),!n?.aborted&&t()},Math.ceil(o)+50)},ce=e=>{let t=getComputedStyle(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;if(e instanceof HTMLElement){let t=e.offsetWidth||n,i=e.offsetHeight||r;(Math.round(n)!==t||Math.round(r)!==i)&&(n=t,r=i)}return{width:n,height:r}},x=`@data-slot/navigation-menu`;function S(p,m={}){let v=te(p,x,`[@data-slot/navigation-menu] createNavigationMenu() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(v)return v;let y=m.delayOpen??d(p,`delayOpen`)??0,b=m.delayClose??d(p,`delayClose`)??0,oe=m.openOnFocus??l(p,`openOnFocus`)??!1,S=m.side??u(p,`side`,ie)??`bottom`,C=m.align??u(p,`align`,re)??`start`,le=m.sideOffset??d(p,`sideOffset`)??0,ue=m.alignOffset??d(p,`alignOffset`)??0,de=m.positionMethod??u(p,`positionMethod`,_)??`absolute`,fe=m.safeTriangle??l(p,`safeTriangle`)??!1,pe=m.debugSafeTriangle??l(p,`debugSafeTriangle`)??!1,me=fe||pe,he=m.onValueChange,ge=e=>e.replace(/[^a-z0-9\-_:.]/gi,`-`),_e=(e,t)=>{`inert`in e&&(e.inert=t)},w=f(p,`navigation-menu-list`),T=ee(p,`navigation-menu-item`),E=f(p,`navigation-menu-viewport`),D=f(p,`navigation-menu-indicator`);if(!w||T.length===0)throw Error(`NavigationMenu requires navigation-menu-list and at least one navigation-menu-item`);let O=null,k=null,ve=-1,ye=null,be=null,A=null,j=!1,M=null,N=null,P=!1,xe=!1,F=null,I=null,Se=null,Ce=0,we=0,Te=!1,Ee=!1,L=[],De=new Map,Oe=new Map,ke=new Map,Ae=(e,t)=>{if(e){if(t){e.setAttribute(`data-open`,``),e.removeAttribute(`data-closed`);return}e.setAttribute(`data-closed`,``),e.removeAttribute(`data-open`)}},R=(e,t)=>{e&&(e.setAttribute(`data-state`,t?`open`:`closed`),Ae(e,t))},je=(e,t)=>{e.setAttribute(`data-state`,t?`active`:`inactive`),Ae(e,t)},z=(e,t)=>{if(t){e.setAttribute(`data-activation-direction`,t);return}e.removeAttribute(`data-activation-direction`)},Me=()=>{if(!E)return{popup:null,positioner:null,portal:null};let e=null,t=null,n=null,r=E.parentElement,i=`popup`;for(;r&&r!==p;){let a=r.getAttribute(`data-slot`);if(a===`navigation-menu-portal`){n=r;break}if(i===`popup`&&a===`navigation-menu-popup`){e=r,i=`positioner`,r=r.parentElement;continue}if((i===`popup`||i===`positioner`)&&(a===`navigation-menu-positioner`||a===`navigation-menu-viewport-positioner`)){t=r,i=`portal`,r=r.parentElement;continue}r=r.parentElement}return{popup:e,positioner:t,portal:n}},B=null,Ne=e=>{xe||B!==e||!e.isClosing||!e.popupExitComplete||!e.viewportExitComplete||nt()},V={width:0,height:0},H={width:0,height:0},Pe=null,Fe=null,Ie=e=>{e.width>0&&(V.width=e.width),e.height>0&&(V.height=e.height)},Le=e=>{e.width>0&&(H.width=e.width),e.height>0&&(H.height=e.height)},Re=()=>{V={width:0,height:0},H={width:0,height:0}},ze=()=>{Pe!==null&&(cancelAnimationFrame(Pe),Pe=null)},Be=()=>{Fe?.abort(),Fe=null},Ve=()=>{ze(),Be()},He=(e,t,n)=>{e.style.setProperty(`--popup-width`,`${t}px`),e.style.setProperty(`--popup-height`,`${n}px`)},Ue=e=>{e.style.setProperty(`--popup-width`,`auto`),e.style.setProperty(`--popup-height`,`auto`)},We=(e,t)=>{E&&(E.style.setProperty(`--viewport-width`,`${e}px`),E.style.setProperty(`--viewport-height`,`${t}px`))},Ge=(e,t,n)=>{e.style.setProperty(`--positioner-width`,`${t}px`),e.style.setProperty(`--positioner-height`,`${n}px`)},Ke=e=>{e.positioner.style.removeProperty(`--positioner-width`),e.positioner.style.removeProperty(`--positioner-height`),e.popup.style.removeProperty(`--popup-width`),e.popup.style.removeProperty(`--popup-height`),E?.style.removeProperty(`--viewport-width`),E?.style.removeProperty(`--viewport-height`)},qe=()=>{let e=W();if(!e)return{...V};let t=e.style.getPropertyValue(`--popup-width`).trim(),n=e.style.getPropertyValue(`--popup-height`).trim(),r=t&&t!==`auto`&&n&&n!==`auto`?{width:e.offsetWidth||V.width,height:e.offsetHeight||V.height}:ce(e),i={width:r.width||V.width,height:r.height||V.height};return Ie(i),i},Je=e=>{Be(),Fe=new AbortController,se(e.popup,()=>{xe||B!==e||e.isClosing||(Ue(e.popup),Fe=null)},Fe.signal)},U=(e,t)=>{if(t){let t=Oe.get(e)??{applied:!1,left:``,position:``,top:``};t.applied||(t.position=e.style.position,t.top=e.style.top,t.left=e.style.left),t.applied=!0,Oe.set(e,t),e.style.position=`absolute`,e.style.top=`0px`,e.style.left=`0px`;return}let n=Oe.get(e);n?.applied&&(n.position?e.style.position=n.position:e.style.removeProperty(`position`),n.top?e.style.top=n.top:e.style.removeProperty(`top`),n.left?e.style.left=n.left:e.style.removeProperty(`left`),n.applied=!1)},W=()=>B?.popup??Me().popup,G=()=>B?.positioner??Me().positioner,Ye=(e,t)=>{let n=(p.ownerDocument??document).createElement(`div`);n.setAttribute(`data-slot`,t),t===`navigation-menu-positioner`&&(n.style.isolation=`isolate`,n.style.zIndex=`50`);let r=e.parentNode;if(!r)throw Error(`NavigationMenu expected popup stack child to have a parent node`);return r.insertBefore(n,e),n.appendChild(e),n},Xe=e=>{let t=e.parentNode;if(t){for(;e.firstChild;)t.insertBefore(e.firstChild,e);e.remove()}},Ze=()=>{let e=G();e&&(e.style.position=``,e.style.top=``,e.style.left=``,e.style.margin=``,e.style.willChange=``,e.style.pointerEvents=``,e.style.transform=``,e.style.removeProperty(`--transform-origin`),e.style.removeProperty(`--positioner-width`),e.style.removeProperty(`--positioner-height`),e.style.removeProperty(`--available-width`),e.style.removeProperty(`--available-height`));let t=W();t&&(t.style.willChange=``,t.style.pointerEvents=``,t.style.removeProperty(`--transform-origin`),t.style.removeProperty(`--popup-width`),t.style.removeProperty(`--popup-height`)),E&&(E.style.top=``,E.style.left=``,E.style.willChange=``,E.style.removeProperty(`--transform-origin`),E.style.removeProperty(`--viewport-width`),E.style.removeProperty(`--viewport-height`))},Qe=()=>{Se!==null&&(cancelAnimationFrame(Se),Se=null)},$e=()=>{let e=Te||Ee;E&&(e?E.setAttribute(`data-instant`,``):E.removeAttribute(`data-instant`));let t=W();t&&(e?t.setAttribute(`data-instant`,``):t.removeAttribute(`data-instant`));let n=G();n&&(e?n.setAttribute(`data-instant`,``):n.removeAttribute(`data-instant`))},et=()=>{Qe(),Se=requestAnimationFrame(()=>{Se=null,Ee=!1,$e()})},tt=()=>{Qe(),Te=!1,Ee=!1,$e()},nt=()=>{let e=B;!e||!E||(Ve(),tt(),Ze(),Re(),Ce=0,we=0,E.hidden=!0,E.style.pointerEvents=`none`,e.popup.hidden=!0,e.popup.style.pointerEvents=`none`,e.popupPortal.restore(),e.generatedPopup&&Xe(e.popup),e.generatedPositioner&&Xe(e.positioner),e.generatedPortal&&Xe(e.portal),e.popupPresence.cleanup(),e.viewportPresence.cleanup(),B=null)},rt=()=>{if(!E)return null;if(B)return B;let e=Me(),t=e.popup,n=e.positioner,r=e.portal,a=!1,s=!1,c=!1;(!t||!t.contains(E))&&(t=Ye(E,`navigation-menu-popup`),a=!0),(!n||!n.contains(t))&&(n=Ye(t,`navigation-menu-positioner`),s=!0),(!r||!r.contains(n))&&(r=Ye(n,`navigation-menu-portal`),c=!0);let l=i({content:t,root:p,enabled:!0,container:n,mountTarget:r}),u={popup:t,positioner:n,portal:r,popupPortal:l,popupPresence:null,viewportPresence:null,generatedPopup:a,generatedPositioner:s,generatedPortal:c,isClosing:!1,popupExitComplete:!1,viewportExitComplete:!1},d=o({element:E,onExitComplete:()=>{u.viewportExitComplete=!0,Ne(u)}});return u.popupPresence=o({element:t,onExitComplete:()=>{u.popupExitComplete=!0,Ne(u)}}),u.viewportPresence=d,B=u,B},it=e=>{if(!E)return;let t=ke.get(e)??{originalParent:null,originalNextSibling:null,mountedInViewport:!1};t.mountedInViewport||(t.originalParent=e.parentNode,t.originalNextSibling=e.nextSibling,t.mountedInViewport=!0,ke.set(e,t)),e.parentNode!==E&&E.appendChild(e)},at=e=>{let t=ke.get(e);if(!t||!t.mountedInViewport)return;let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.mountedInViewport=!1,t.originalParent=null,t.originalNextSibling=null},ot=()=>{if(!E)return;let e=G();if(!e)return;let t=p.ownerDocument.defaultView??window,n=p.getBoundingClientRect(),r=de===`fixed`,i=n.top+we+(r?0:t.scrollY),a=n.left+Ce+(r?0:t.scrollX);e.style.position=de,e.style.top=`${i}px`,e.style.left=`${a}px`,e.style.margin=`0`,e.style.willChange=`top,left`,e.style.pointerEvents=`none`},st=null,ct=e=>{st?.disconnect(),st=null,!(!E||!e)&&(st=new ResizeObserver(()=>{let t=lt(e.item,e.content);an(e.content,e.trigger,t,{baseline:qe()})}),st.observe(e.content))};L.push(()=>st?.disconnect()),L.push(()=>{Ve(),tt(),De.forEach(e=>e.cleanup()),De.clear(),ke.forEach((e,t)=>{at(t),U(t,!1),t.hidden=!0,t.style.pointerEvents=`none`}),Oe.clear(),ke.clear(),nt()});let K=new Map,lt=(e,t)=>({side:m.side??u(t,`side`,ie)??u(e,`side`,ie)??S,align:m.align??u(t,`align`,re)??u(e,`align`,re)??C,sideOffset:m.sideOffset??d(t,`sideOffset`)??d(e,`sideOffset`)??le,alignOffset:m.alignOffset??d(t,`alignOffset`)??d(e,`alignOffset`)??ue}),ut=0;T.forEach(e=>{let t=e.dataset.value;if(!t)return;let n=f(e,`navigation-menu-trigger`),r=f(e,`navigation-menu-content`);if(n&&r){K.set(t,{value:t,item:e,trigger:n,content:r,index:ut++}),De.set(r,o({element:r,onExitComplete:()=>{xe||(je(r,!1),z(r,null),r.removeAttribute(`data-motion`),U(r,!1),at(r),r.hidden=!0,r.style.pointerEvents=`none`)}}));let i=ge(t),a=c(n,`nav-menu-trigger-${i}`),s=c(r,`nav-menu-content-${i}`);n.setAttribute(`aria-haspopup`,`true`),n.setAttribute(`aria-controls`,s),r.setAttribute(`aria-labelledby`,a)}});let dt=Array.from(K.values()).map(e=>e.trigger),ft=`a[href], button:not([disabled]), [role="link"], [role="button"], [tabindex]:not([tabindex="-1"])`,pt=e=>{let t=e?.closest(`[data-slot="navigation-menu-item"]`);if(!t)return null;let n=t.dataset.value;if(!n)return null;let r=K.get(n);return!r||r.item!==t?null:r},mt=e=>{if(e.matches(ft))return e;let t=e.querySelectorAll(ft);for(let n of t)if(e.contains(n)&&!n.closest(`[data-slot="navigation-menu-content"]`)&&!(n.hidden||n.closest(`[hidden]`)))return n;return null},q=[],ht=new Map;T.forEach(e=>{let t=pt(e);if(t){let e={kind:`submenu`,element:t.trigger,item:t.item,value:t.value,trigger:t.trigger};q.push(e),ht.set(e.element,e),ht.set(e.item,e);return}let n=mt(e);if(!n)return;let r={kind:`plain`,element:n};q.push(r),ht.set(r.element,r)});let gt=e=>{let t=e instanceof HTMLElement?e:null;if(!t)return null;let n=t;for(;n&&n!==w;){let e=ht.get(n);if(e)return e;n=n.parentElement}return null},_t=e=>{let t=gt(e);return t?.kind===`plain`?t:null},vt=e=>{let t=gt(e);return t?.kind===`submenu`?t:null},yt=()=>{let e=p.ownerDocument.defaultView;if(!e?.matchMedia)return!0;try{return e.matchMedia(`(any-hover: hover)`).matches}catch{return!0}},bt=e=>{try{return e.matches(`:hover`)}catch{return!1}},xt=()=>{for(let e of q){if(e.kind===`submenu`){if(bt(e.item)||bt(e.trigger))return e;continue}if(bt(e.element))return e}return null},St=(e,t={})=>{let n=p.ownerDocument,r=t.preserveOpenOnPlain??!1;return e.kind===`submenu`?(e.trigger.focus(),n.activeElement===e.trigger?(un(e.trigger),!0):!1):(O!==null&&!r&&$(),e.element.focus(),n.activeElement===e.element?(O!==null&&r?un():Z(e.element),!0):!1)},Ct=(e,t,n={})=>{for(let r=e+t;r>=0&&r<q.length;r+=t){let e=q[r];if(e&&St(e,n))return!0}return!1},wt=(e,t,n={})=>{let r=q.indexOf(e);return r===-1?!1:Ct(r,t,n)},Tt=(e,t,n={})=>{let r=q.findIndex(t=>t.kind===`submenu`&&t.trigger===e);return r===-1?!1:Ct(r,t,n)},Et=e=>{if(!(e instanceof Node)||!w.contains(e))return!1;let t=e instanceof HTMLElement?e:e.parentElement;return!t||t.closest(`[data-slot="navigation-menu-indicator"]`)||pt(t)?!1:t.closest(`[data-slot="navigation-menu-item"]`)?!0:!!t.closest(`a[href], button, [role='link'], [role='button']`)},Dt=`a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])`,Ot=e=>Array.from(e.querySelectorAll(Dt)).filter(e=>!e.hidden&&!e.closest(`[hidden]`)),kt=e=>!e.isConnected||e.hidden||e.closest(`[hidden]`)||`disabled`in e&&e.disabled||e.getAttribute(`aria-hidden`)===`true`||e.getAttribute(`tabindex`)===`-1`?!1:e.matches(Dt)?!0:e.tabIndex>=0,At=e=>{if(p.contains(e)||E?.contains(e)||W()?.contains(e)||G()?.contains(e))return!0;for(let{content:t}of K.values())if(t.contains(e))return!0;return!1},jt=()=>{let e=p.ownerDocument,t=Array.from(e.querySelectorAll(`*`));for(let n of t)if(kt(n)&&!At(n)&&(p.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)!==0&&(n.focus(),e.activeElement===n))return!0;return!1},Mt=e=>{requestAnimationFrame(()=>{if(O!==e)return;let t=K.get(e);if(!t)return;let n=Ot(t.content)[0];n?n.focus():t.content.focus()})},J=()=>{ye&&=(clearTimeout(ye),null),be&&=(clearTimeout(be),null)},Nt=()=>{J(),k=null},Pt=()=>{M=null,N=null},Ft=()=>{I!==null&&(cancelAnimationFrame(I),I=null)},Y=null,It=()=>E?G()||W()||(E.parentElement instanceof HTMLElement?E.parentElement:E):null,Lt=()=>{let e=It();return Y||(Y=document.createElement(`div`),Y.setAttribute(`data-slot`,`navigation-menu-bridge`),Y.style.cssText=`position: absolute; pointer-events: auto; z-index: 0; display: none;`,L.push(h(Y,`pointerenter`,()=>{J()}),h(Y,`pointerleave`,e=>{if(j||O===null)return;let t=e.relatedTarget;$t(t)||t&&n(p,t)||(Q(null),Z(null))}))),e&&Y.parentElement!==e&&e.insertBefore(Y,e.firstChild),Y},Rt=()=>{Y&&(Y.style.height=`0`,Y.style.width=`0`,Y.style.top=`0px`,Y.style.left=`0px`,Y.style.right=`0px`,Y.style.bottom=`auto`,Y.style.transform=`none`,Y.style.clipPath=`none`,Y.style.display=`none`)},zt=()=>{if(!pe)return null;let e=p.ownerDocument.body;return e?(F||(F=p.ownerDocument.createElement(`div`),F.setAttribute(`data-slot`,`navigation-menu-safe-triangle`),F.style.cssText=[`position: fixed`,`pointer-events: none`,`display: none`,`z-index: 2147483647`,`background: rgba(255, 0, 0, 0.18)`,`border: 1px solid rgba(255, 0, 0, 0.45)`].join(`; `)),F.parentElement!==e&&e.appendChild(F),F):null},Bt=()=>{F&&(F.style.width=`0`,F.style.height=`0`,F.style.clipPath=`none`,F.style.display=`none`)},X=()=>{pe||Bt()},Vt=e=>{let t=zt();if(!t)return;let n=e.apex.x,r=e.apex.y,i=e.edgeA.x,a=e.edgeA.y,o=e.edgeB.x,s=e.edgeB.y,c=Math.min(n,i,o),l=Math.min(r,a,s),u=Math.max(n,i,o),d=Math.max(r,a,s),f=Math.max(1,u-c),ee=Math.max(1,d-l),p=(e,t)=>`${(e-c)/f*100}% ${(t-l)/ee*100}%`;t.style.display=`block`,t.style.left=`${c}px`,t.style.top=`${l}px`,t.style.width=`${f}px`,t.style.height=`${ee}px`,t.style.clipPath=`polygon(${p(n,r)}, ${p(i,a)}, ${p(o,s)})`},Ht=(e,t,n)=>(e.x-n.x)*(t.y-n.y)-(t.x-n.x)*(e.y-n.y),Ut=(e,t,n,r)=>{let i=Ht(e,t,n),a=Ht(e,n,r),o=Ht(e,r,t);return!((i<0||a<0||o<0)&&(i>0||a>0||o>0))},Wt=(e,t,n)=>{let r=.5;if(n.top>=t.bottom-r)return[{x:n.left,y:n.top},{x:n.right,y:n.top}];if(n.bottom<=t.top+r)return[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}];if(n.left>=t.right-r)return[{x:n.left,y:n.top},{x:n.left,y:n.bottom}];if(n.right<=t.left+r)return[{x:n.right,y:n.top},{x:n.right,y:n.bottom}];let i=[[{x:n.left,y:n.top},{x:n.right,y:n.top}],[{x:n.right,y:n.top},{x:n.right,y:n.bottom}],[{x:n.left,y:n.bottom},{x:n.right,y:n.bottom}],[{x:n.left,y:n.top},{x:n.left,y:n.bottom}]],a=([t,n])=>t.y===n.y?Math.abs(e.y-t.y):Math.abs(e.x-t.x),o=i[0],s=a(o);for(let e=1;e<i.length;e++){let t=i[e],n=a(t);n<s&&(o=t,s=n)}return o},Gt=()=>O?K.get(O)??null:null,Kt=(e,t,n)=>{if(n.width<=0||n.height<=0)return null;let r={x:e.left+e.width/2,y:e.top+e.height*.62},[i,a]=Wt(r,t,n);if(i.x===a.x){let e=Math.min(i.y,a.y),t=Math.max(i.y,a.y),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:i.x,y:e+r},a={x:a.x,y:t-r}}else{let e=Math.min(i.x,a.x),t=Math.max(i.x,a.x),n=t-e,r=n<=28?0:Math.min(10,(n-28)/2);i={x:e+r,y:i.y},a={x:t-r,y:a.y}}return{apex:r,edgeA:i,edgeB:a}},qt=()=>{if(!me||!E||O===null)return null;let e=Gt();if(!e)return null;let t=p.getBoundingClientRect(),n=e.trigger.getBoundingClientRect(),r=E.getBoundingClientRect(),i=e.content.getBoundingClientRect();return Kt(n,t,r.width>0&&r.height>0?r:i)},Jt=e=>{let t=qt();return t?Ut({x:e.clientX,y:e.clientY},t.apex,t.edgeA,t.edgeB):!1},Yt=(e,t)=>({x:e.x-t.left,y:e.y-t.top}),Xt=e=>{if(e.length<=1)return e.slice();let t=e=>`${e.x.toFixed(3)}:${e.y.toFixed(3)}`,n=new Map;for(let r of e)n.set(t(r),r);let r=Array.from(n.values()).sort((e,t)=>e.x===t.x?e.y-t.y:e.x-t.x);if(r.length<=2)return r;let i=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),a=[];for(let e of r){for(;a.length>=2&&i(a[a.length-2],a[a.length-1],e)<=0;)a.pop();a.push(e)}let o=[];for(let e=r.length-1;e>=0;e--){let t=r[e];for(;o.length>=2&&i(o[o.length-2],o[o.length-1],t)<=0;)o.pop();o.push(t)}return a.pop(),o.pop(),a.concat(o)},Zt=e=>{if(e.length<3){Rt();return}let t=Lt(),n=t.parentElement,r=Xt(n&&n===G()?e.map(e=>({x:e.x-Ce,y:e.y-we})):e);if(r.length<3){Rt();return}let i=Math.min(...r.map(e=>e.x)),a=Math.min(...r.map(e=>e.y)),o=Math.max(...r.map(e=>e.x)),s=Math.max(...r.map(e=>e.y)),c=Math.max(1,o-i),l=Math.max(1,s-a),u=e=>`${(e.x-i)/c*100}% ${(e.y-a)/l*100}%`;t.style.display=`block`,t.style.transform=`none`,t.style.bottom=`auto`,t.style.right=`auto`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.width=`${c}px`,t.style.height=`${l}px`,t.style.clipPath=`polygon(${r.map(u).join(`, `)})`},Qt=()=>{if(!pe)return;let e=qt();if(!e){Bt();return}Vt(e)},$t=e=>e?!!(Gt()?.content.contains(e)||E?.contains(e)||W()?.contains(e)||Y?.contains(e)||G()?.contains(e)):!1;L.push(X),L.push(Ft),L.push(Rt),L.push(()=>{Bt(),F?.parentElement&&F.parentElement.removeChild(F),F=null});let en=(e,t,n,r,i,a)=>{let o=p.ownerDocument.defaultView??window,s=o.visualViewport,c=s?.offsetLeft??0,l=s?.offsetTop??0,u=s?.width??o.innerWidth,d=s?.height??o.innerHeight,f=n===`left`?Math.max(0,t.left-c-r):n===`right`?Math.max(0,c+u-t.right-r):Math.max(0,u),ee=n===`top`?Math.max(0,t.top-l-r):n===`bottom`?Math.max(0,l+d-t.bottom-r):Math.max(0,d);Ge(e,i,a),e.style.setProperty(`--available-width`,`${f}px`),e.style.setProperty(`--available-height`,`${ee}px`)},tn=(e,t=V)=>{let n=ce(e),r={width:n.width||t.width||V.width,height:n.height||t.height||V.height};return Ie(r),r},nn=e=>(Ke(e),ce(e.popup)),rn=(e,n,r,i={})=>{let a=rt();if(!E||!a)return;let{popup:o,positioner:s}=a,c=i.mode??`measure-target`;if(E.getAttribute(`data-state`)!==`open`||e.getAttribute(`data-state`)!==`active`)return;U(e,!1);let l=c===`measure-target`?{popupWidth:o.style.getPropertyValue(`--popup-width`),popupHeight:o.style.getPropertyValue(`--popup-height`),positionerWidth:s.style.getPropertyValue(`--positioner-width`),positionerHeight:s.style.getPropertyValue(`--positioner-height`),viewportWidth:E.style.getPropertyValue(`--viewport-width`),viewportHeight:E.style.getPropertyValue(`--viewport-height`)}:null;c===`measure-target`&&Ve();let u=e.firstElementChild,d=e.lastElementChild,f=u?getComputedStyle(u):null,ee=d?getComputedStyle(d):null,m=f&&parseFloat(f.marginTop)||0,h=ee&&parseFloat(ee.marginBottom)||0,te=(...e)=>{let t=0;for(let n of e)Number.isFinite(n)&&(t=Math.max(t,n));return t},g=e.getBoundingClientRect(),ne={width:te(g.width,e.scrollWidth,e.offsetWidth,e.clientWidth),height:te(g.height,e.scrollHeight,e.offsetHeight,e.clientHeight)+m+h},re=i.baseline??V,_=c===`measure-target`?nn(a):tn(o,re),v={width:c===`sync-current`?H.width||_.width||ne.width:_.width||ne.width,height:c===`sync-current`?H.height||_.height||ne.height:_.height||ne.height};Ie(_.width>0&&_.height>0?_:v),(c===`measure-target`||H.width<=0||H.height<=0)&&Le(v);let y=v.width,b=v.height;if(y<=0||b<=0){if(l){let e=(e,t,n)=>{n?e.style.setProperty(t,n):e.style.removeProperty(t)};e(o,`--popup-width`,l.popupWidth),e(o,`--popup-height`,l.popupHeight),e(s,`--positioner-width`,l.positionerWidth),e(s,`--positioner-height`,l.positionerHeight),e(E,`--viewport-width`,l.viewportWidth),e(E,`--viewport-height`,l.viewportHeight)}return}let oe={top:g.top,left:g.left,width:y,height:b,right:g.left+y,bottom:g.top+b},se=getComputedStyle(E),ce=parseFloat(se.marginTop)||0;We(y,b);let x=p.getBoundingClientRect(),S=n.getBoundingClientRect(),C=t({anchorRect:S,contentRect:oe,side:r.side,align:r.align,sideOffset:r.sideOffset,alignOffset:r.alignOffset,avoidCollisions:!1,collisionPadding:0,allowedSides:ie}),le=C.x-x.left,ue=C.y-x.top;Ce=le,we=ue;let de=ae(C.side,C.align,S),fe=de.x-(x.left+le),pe=de.y-(x.top+ue),he=de.x-x.left,ge=de.y-x.top,_e=`${fe}px ${pe}px`,w=`${he}px ${ge}px`;if(o.style.willChange=`width,height`,o.style.pointerEvents=`auto`,o.style.setProperty(`--transform-origin`,_e),E.style.top=`0px`,E.style.left=`0px`,E.style.willChange=`transform,width,height`,E.style.setProperty(`--transform-origin`,_e),e.style.setProperty(`--transform-origin`,_e),o.setAttribute(`data-side`,C.side),o.setAttribute(`data-align`,C.align),E.setAttribute(`data-side`,C.side),E.setAttribute(`data-align`,C.align),e.setAttribute(`data-side`,C.side),e.setAttribute(`data-align`,C.align),s.setAttribute(`data-side`,C.side),s.setAttribute(`data-align`,C.align),s.style.setProperty(`--transform-origin`,w),en(s,S,C.side,r.sideOffset,y,b),ot(),c===`measure-target`){let t={width:re.width||y,height:re.height||b};He(o,t.width,t.height),Pe=requestAnimationFrame(()=>{Pe=null,!(xe||B!==a||a.isClosing||E.getAttribute(`data-state`)!==`open`||e.getAttribute(`data-state`)!==`active`)&&(He(o,y,b),Je(a))})}let T=E.getBoundingClientRect(),D=[],O=Math.max(0,T.top-x.bottom),k=Math.max(0,x.top-T.bottom),ve=Math.max(0,T.left-x.right),ye=Math.max(0,x.left-T.right),be=Math.max(0,ce),A=Math.max(O,k,be),j=Math.max(ve,ye),M=me?Kt(S,x,T):null,N=(e,t,n,r)=>{n<=0||r<=0||D.push({x:e,y:t},{x:e+n,y:t},{x:e+n,y:t+r},{x:e,y:t+r})};if(A>=j&&A>0){let e=Math.max(O,k,be),t=le,n=k>O&&k>=be?ue+b:ue-e,r=y;if(M){let e=Math.min(M.edgeA.x,M.edgeB.x)-x.left,n=Math.max(M.edgeA.x,M.edgeB.x)-x.left;t=e-8,r=n-e+16}N(t,n,r,e)}else if(j>0){let e=Math.max(ve,ye),t=ue,n=ye>ve?le+y:le-e,r=b;if(M){let e=Math.min(M.edgeA.y,M.edgeB.y)-x.top,n=Math.max(M.edgeA.y,M.edgeB.y)-x.top;t=e-8,r=n-e+16}N(n,t,e,r)}if(M){let e=Yt(M.apex,x),t=Yt(M.edgeA,x),n=Yt(M.edgeB,x);D.push(e,t,n)}Zt(D),Qt()},an=(e,t,n,r={})=>{if(!E)return;let i=()=>{rn(e,t,n,r)};if(r.defer===!1){i();return}requestAnimationFrame(()=>{E.getAttribute(`data-state`)!==`open`||e.getAttribute(`data-state`)!==`active`||i()})},on=(e=Gt(),t={})=>{if(!e)return;let n=lt(e.item,e.content);an(e.content,e.trigger,n,t)},sn=a({observedElements:[p,...dt],isActive:()=>O!==null,ancestorScroll:!0,syncOnScroll:!0,ancestorResize:!0,elementResize:!0,layoutShift:!0,onUpdate:()=>{Ee=!0,$e(),on(void 0,{defer:!1,mode:`sync-current`}),et()}});L.push(()=>sn.stop());let cn=e=>ve===-1||e>ve?`right`:`left`,Z=e=>{if(!D)return;if(A=e,!e){Ft(),D.removeAttribute(`data-instant`),D.setAttribute(`data-state`,`hidden`);return}D.getAttribute(`data-state`)!==`visible`&&(Ft(),D.setAttribute(`data-instant`,``),I=requestAnimationFrame(()=>{I=requestAnimationFrame(()=>{D.removeAttribute(`data-instant`),I=null})}));let t=w.getBoundingClientRect(),n=e.getBoundingClientRect();D.style.setProperty(`--indicator-left`,`${n.left-t.left}px`),D.style.setProperty(`--indicator-width`,`${n.width}px`),D.style.setProperty(`--indicator-top`,`${n.top-t.top}px`);let r=(E&&parseFloat(getComputedStyle(E).marginTop)||0)<1?1:0;D.style.setProperty(`--indicator-height`,`${n.height-r}px`),D.setAttribute(`data-state`,`visible`)},ln=()=>O?K.get(O)?.trigger??null:null,un=(e=null)=>{let t=ln();if(t){Z(t);return}Z(e)},Q=(e,t=!1)=>{if(X(),e===O){e===null?Nt():J();return}if(!t&&e!==null&&e===k)return;J(),k=e===null?null:e;let r=()=>{let t=O,r=e?K.get(e):null,i=qe(),a=t!==null&&e!==null&&t!==e,o=a&&r?cn(r.index):null,c=document.activeElement;if(e===null&&c&&t){let e=K.get(t);e&&n(e.content,c)&&e.trigger.focus()}if(K.forEach(({trigger:n,content:r,item:i},a)=>{let s=a===e,c=a===t;if(g(n,`expanded`,s),n.setAttribute(`data-state`,s?`open`:`closed`),i.setAttribute(`data-state`,s?`open`:`closed`),!s){let t=De.get(r);if(je(r,!1),r.setAttribute(`aria-hidden`,`true`),_e(r,!0),r.style.pointerEvents=`none`,e===null)c&&(z(r,null),r.removeAttribute(`data-motion`));else if(c&&o){z(r,o);let e=o===`right`?`to-left`:`to-right`;r.setAttribute(`data-motion`,e)}else c&&(z(r,null),r.removeAttribute(`data-motion`));c?(U(r,!0),t?.exit()):t?.isExiting||(z(r,null),r.removeAttribute(`data-motion`),U(r,!1),at(r),r.hidden=!0)}}),r){let e=rt();if(e?.popupPortal.mount(),e&&(e.isClosing=!1,e.popupExitComplete=!1,e.viewportExitComplete=!1),e?.popup&&(e.popup.hidden=!1,e.popup.style.pointerEvents=`auto`),E&&(E.hidden=!1),t===null&&(e?.popupPresence.enter(),e?.viewportPresence.enter()),it(r.content),De.get(r.content)?.enter(),sn.start(),o){z(r.content,o);let e=o===`right`?`from-right`:`from-left`;r.content.setAttribute(`data-motion`,e)}else z(r.content,null),r.content.removeAttribute(`data-motion`);je(r.content,!0),U(r.content,!1),r.content.removeAttribute(`aria-hidden`),_e(r.content,!1),r.content.hidden=!1,r.content.style.pointerEvents=`auto`,ve=r.index,on(r,{baseline:i}),ct(r),Z(r.trigger)}else sn.stop(),Rt(),X(),B&&(Ve(),i.width>0&&i.height>0&&(He(B.popup,i.width,i.height),Ge(B.positioner,i.width,i.height),We(i.width,i.height)),B.isClosing=!0,B.popupExitComplete=!1,B.viewportExitComplete=!1,B.popupPresence.exit(),B.viewportPresence.exit()),ct(null);let l=e!==null;if(R(p,l),o?p.setAttribute(`data-motion`,o===`right`?`from-right`:`from-left`):p.removeAttribute(`data-motion`),E){let e=W();R(G(),l),R(e,l),R(E,l),E.style.pointerEvents=l?`auto`:`none`,Te=l&&!a,(!l||a)&&(Qe(),Ee=!1),$e(),o?E.style.setProperty(`--motion-direction`,o===`right`?`1`:`-1`):E.style.removeProperty(`--motion-direction`)}O=e,k=null,e===null&&Z(null),Qt(),s(p,`navigation-menu:change`,{value:e}),he?.(e)};t?r():e!==null&&O===null?ye=setTimeout(r,y):e!==null&&O!==null?r():be=setTimeout(r,b)},dn=Me();R(p,!1),E&&(R(dn.positioner,!1),R(dn.popup,!1),R(E,!1),E.hidden=!0,E.style.pointerEvents=`none`,dn.popup&&(dn.popup.hidden=!0,dn.popup.style.pointerEvents=`none`)),D&&D.setAttribute(`data-state`,`hidden`),K.forEach(({trigger:e,content:t,item:n})=>{e.tagName===`BUTTON`&&!e.hasAttribute(`type`)&&(e.type=`button`),g(e,`expanded`,!1),e.setAttribute(`data-state`,`closed`),e.tabIndex=0,n.setAttribute(`data-state`,`closed`),je(t,!1),t.setAttribute(`aria-hidden`,`true`),t.tabIndex=-1,_e(t,!0),t.hidden=!0,U(t,!1),t.style.pointerEvents=`none`}),K.forEach(({item:e,trigger:t},r)=>{L.push(h(t,`pointerenter`,e=>{if(!j){if(O!==r&&Jt(e))return;Z(t)}})),L.push(h(e,`pointerenter`,e=>{if(!j){if(O!==r&&Jt(e))return;Q(r)}})),L.push(h(e,`pointerleave`,e=>{if(k===r&&O===null&&Nt(),O===r&&!j){let t=e.relatedTarget;if($t(t))return;(!t||!n(p,t))&&(Q(null),Z(null))}})),L.push(h(t,`focus`,()=>{if(M===t){M=null;return}oe&&Q(r,!0),un(t)})),L.push(h(t,`pointerdown`,()=>{M=t,N=t}),h(t,`keydown`,()=>{N=null})),L.push(h(t,`click`,()=>{let e=N===t;N=null,M=null,Nt(),O===r&&j?(j=!1,Q(null,!0),Z(null)):O===r&&!j?(j=!0,Z(t),e||Mt(r)):(j=!0,Q(r,!0),Z(t),e||Mt(r))}))}),L.push(h(w,`pointerover`,e=>{let t=e;if(t.pointerType===`touch`)return;let n=vt(t.target);if(n){if(P=!0,j||O!==n.value&&Jt(t))return;Z(n.trigger),Q(n.value);return}let r=_t(t.target);if(r){if(P=!0,O!==null){if(j)return;$()}Z(r.element);return}O!==null&&(j||Et(t.target)&&$())}),h(w,`click`,e=>{O!==null&&Et(e.target)&&$()})),L.push(h(w,`focusin`,e=>{let t=_t(e.target);if(t){if(O!==null){un();return}Z(t.element)}}),h(p,`pointerenter`,()=>{P=!0}),h(p,`pointerleave`,e=>{let t=e.relatedTarget;if(!$t(t)&&(P=!1,!j)){if(Jt(e)){J();return}Q(null),Z(null)}}),h(p,`pointerdown`,()=>{X(),Nt()}));let fn=()=>{if(!yt()||O!==null||k!==null||j)return;let e=xt();if(P=e!==null||p instanceof HTMLElement&&bt(p),e){if(e.kind===`submenu`){Q(e.value,!0);return}Z(e.element)}};E&&L.push(h(E,`pointerenter`,()=>{X(),J()}),h(E,`transitionend`,e=>{if(e.target!==E)return;let t=O?K.get(O):null;t&&on(t,{defer:!1,mode:`sync-current`})})),K.forEach(({content:e})=>{L.push(h(e,`pointerenter`,()=>{X(),J()}),h(e,`pointerleave`,e=>{if(j)return;let t=e.relatedTarget;$t(t)||n(p,t)||(Q(null),Z(null))}))}),L.push(h(w,`keydown`,e=>{let t=gt(e.target);if(!t)return;let n=q.indexOf(t);if(n===-1)return;let r=n;switch(e.key){case`Tab`:if(e.shiftKey||O===null)return;(wt(t,1,{preserveOpenOnPlain:!0})||jt())&&e.preventDefault();return;case`ArrowLeft`:r=n-1,r<0&&(r=q.length-1);break;case`ArrowRight`:r=n+1,r>=q.length&&(r=0);break;case`ArrowDown`:if(t.kind===`submenu`){e.preventDefault();let n=t.value;j=!0,Q(n,!0),Mt(n)}return;case`Home`:r=0;break;case`End`:r=q.length-1;break;case`Escape`:j=!1,Q(null,!0),Z(null);return;default:return}e.preventDefault();let i=q[r];i&&St(i,{preserveOpenOnPlain:!0})})),K.forEach(({content:e,trigger:t})=>{L.push(h(e,`keydown`,n=>{let r=n.target,i=Ot(e),a=i.indexOf(r);if(a!==-1)switch(n.key){case`Tab`:if(!n.shiftKey&&a===i.length-1){(Tt(t,1,{preserveOpenOnPlain:!0})||jt())&&n.preventDefault();return}if(n.shiftKey&&a===0){n.preventDefault(),t.focus();return}return;case`ArrowDown`:case`ArrowRight`:{n.preventDefault();let e=a+1;e<i.length&&i[e]?.focus();break}case`ArrowUp`:case`ArrowLeft`:n.preventDefault(),a===0?t.focus():i[a-1]?.focus();break;case`Escape`:n.preventDefault(),j=!1,Q(null,!0),Z(null),t.focus();break}}))});let pn=()=>n(p,document.activeElement)||P||j,$=()=>{X(),Nt(),Pt(),j=!1,Q(null,!0),Z(null),Qt()};L.push(h(document,`focusin`,e=>{let t=e.target;if(!n(p,t)){if(O!==null){$();return}Z(null)}})),L.push(r({root:p,isOpen:()=>O!==null&&pn(),onDismiss:$,closeOnClickOutside:!0,closeOnEscape:!0,preventEscapeDefault:!1,isInside:e=>!!e&&n(p,e)})),L.push(h(window,`resize`,()=>{(O||A)&&requestAnimationFrame(()=>un(A))}),h(w,`scroll`,()=>{(O||A)&&requestAnimationFrame(()=>un(A))})),L.push(h(p,`navigation-menu:set`,e=>{let t=e.detail;if(t?.value!==void 0){if(t.value===null)$();else if(K.has(t.value)){j=!0,Q(t.value,!0);let e=K.get(t.value);e&&Z(e.trigger)}}}));let mn={get value(){return O},open:e=>Q(e,!0),close:()=>$(),destroy:()=>{xe=!0,Nt(),Pt(),L.forEach(e=>e()),L.length=0,e(p,x,mn)}};return fn(),ne(p,x,mn),mn}function C(e=document){let t=[];for(let n of p(e,`navigation-menu`))m(n,x)||t.push(S(n));return t}export{C as create,S as createNavigationMenu};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-slot/navigation-menu",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.159",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -35,6 +35,6 @@
|
|
|
35
35
|
],
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@data-slot/core": "0.2.
|
|
38
|
+
"@data-slot/core": "0.2.159"
|
|
39
39
|
}
|
|
40
40
|
}
|