@sankhyatronics/sankhya-cms 0.1.18 → 0.3.0
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/custom-elements.json +11634 -3153
- package/dist/attention-panel/index.js +2 -2
- package/dist/bar-chart/index.js +2 -2
- package/dist/bento-grid/index.d.ts +33 -1
- package/dist/bento-grid/index.js +4 -3
- package/dist/booking/index.d.ts +309 -0
- package/dist/booking/index.js +20 -0
- package/dist/booking/index.js.map +1 -0
- package/dist/card/index.d.ts +3 -4
- package/dist/card/index.js +2 -2
- package/dist/carousel/index.d.ts +20 -6
- package/dist/carousel/index.js +3 -3
- package/dist/chip/index.js +2 -2
- package/dist/{chunk-JQY2G4QK.js → chunk-2GTR37PU.js} +2 -2
- package/dist/chunk-2GTR37PU.js.map +1 -0
- package/dist/{chunk-FLY7TNRT.js → chunk-2HMOX253.js} +128 -25
- package/dist/chunk-2HMOX253.js.map +1 -0
- package/dist/{chunk-DH53HZPB.js → chunk-37KFBKPD.js} +32 -4
- package/dist/chunk-37KFBKPD.js.map +1 -0
- package/dist/{chunk-ALI26WOB.js → chunk-4XPKKYVZ.js} +54 -15
- package/dist/chunk-4XPKKYVZ.js.map +1 -0
- package/dist/chunk-535QAZ6A.js +236 -0
- package/dist/chunk-535QAZ6A.js.map +1 -0
- package/dist/{chunk-AKJQ345O.js → chunk-5AWGZQWU.js} +2 -2
- package/dist/chunk-6OZKZG5J.js +300 -0
- package/dist/chunk-6OZKZG5J.js.map +1 -0
- package/dist/chunk-AYNT7G3J.js +805 -0
- package/dist/chunk-AYNT7G3J.js.map +1 -0
- package/dist/chunk-BEWX3E6P.js +32 -0
- package/dist/chunk-BEWX3E6P.js.map +1 -0
- package/dist/chunk-CZUGPKXV.js +275 -0
- package/dist/chunk-CZUGPKXV.js.map +1 -0
- package/dist/{chunk-LEXZKGQX.js → chunk-DJFWZOZM.js} +107 -11
- package/dist/chunk-DJFWZOZM.js.map +1 -0
- package/dist/chunk-DPANTC3O.js +1714 -0
- package/dist/chunk-DPANTC3O.js.map +1 -0
- package/dist/chunk-EKZFFY45.js +426 -0
- package/dist/chunk-EKZFFY45.js.map +1 -0
- package/dist/chunk-ER7MCPDV.js +7 -0
- package/dist/chunk-ER7MCPDV.js.map +1 -0
- package/dist/chunk-EW2RK5Y6.js +383 -0
- package/dist/chunk-EW2RK5Y6.js.map +1 -0
- package/dist/{chunk-BLQV2YMO.js → chunk-EZOKT7NJ.js} +2 -2
- package/dist/chunk-FF2LWEF3.js +386 -0
- package/dist/chunk-FF2LWEF3.js.map +1 -0
- package/dist/chunk-FOUK3NHR.js +7 -0
- package/dist/chunk-FOUK3NHR.js.map +1 -0
- package/dist/chunk-GB4NGCZI.js +181 -0
- package/dist/chunk-GB4NGCZI.js.map +1 -0
- package/dist/{chunk-7NLZND6Q.js → chunk-GOFSMD6W.js} +35 -11
- package/dist/chunk-GOFSMD6W.js.map +1 -0
- package/dist/{chunk-6D6ROU7X.js → chunk-IGMVF3KK.js} +2 -2
- package/dist/{chunk-INMSEYT6.js → chunk-IVPVYVWG.js} +2 -2
- package/dist/chunk-JURCF4OD.js +381 -0
- package/dist/chunk-JURCF4OD.js.map +1 -0
- package/dist/{chunk-FZ36KL73.js → chunk-KZ7PMFWS.js} +11 -1
- package/dist/chunk-KZ7PMFWS.js.map +1 -0
- package/dist/{chunk-EMCQBT3S.js → chunk-LO6TZBGD.js} +129 -35
- package/dist/chunk-LO6TZBGD.js.map +1 -0
- package/dist/chunk-MFRGAT6D.js +860 -0
- package/dist/chunk-MFRGAT6D.js.map +1 -0
- package/dist/chunk-MIBVQXRU.js +1098 -0
- package/dist/chunk-MIBVQXRU.js.map +1 -0
- package/dist/{chunk-35TX3AOA.js → chunk-NABSRUXG.js} +2 -2
- package/dist/{chunk-R5G6KFTJ.js → chunk-NXKDZWS7.js} +44 -6
- package/dist/chunk-NXKDZWS7.js.map +1 -0
- package/dist/{chunk-KMU6ABQF.js → chunk-NXUS2CH7.js} +14 -1
- package/dist/chunk-NXUS2CH7.js.map +1 -0
- package/dist/{chunk-GJO3RGOB.js → chunk-OCPGOLVF.js} +56 -11
- package/dist/chunk-OCPGOLVF.js.map +1 -0
- package/dist/chunk-OEOE6IFY.js +628 -0
- package/dist/chunk-OEOE6IFY.js.map +1 -0
- package/dist/{chunk-SMLR736E.js → chunk-PV6OCXXN.js} +2 -2
- package/dist/chunk-PV6OCXXN.js.map +1 -0
- package/dist/chunk-Q66CJO3P.js +534 -0
- package/dist/chunk-Q66CJO3P.js.map +1 -0
- package/dist/{chunk-MG2VTZA4.js → chunk-QS3ANOWN.js} +2 -2
- package/dist/{chunk-ZN4LIKVG.js → chunk-QSJ543V2.js} +2 -2
- package/dist/chunk-QSJ543V2.js.map +1 -0
- package/dist/{chunk-FML6AG2V.js → chunk-RANC3OI6.js} +2 -2
- package/dist/chunk-T4BIN37Q.js +32 -0
- package/dist/chunk-T4BIN37Q.js.map +1 -0
- package/dist/{chunk-YVTFQHVY.js → chunk-TEAZZPDQ.js} +2 -2
- package/dist/chunk-TJK55CJ2.js +49 -0
- package/dist/chunk-TJK55CJ2.js.map +1 -0
- package/dist/chunk-UKIVLF7S.js +32 -0
- package/dist/chunk-UKIVLF7S.js.map +1 -0
- package/dist/chunk-V4R7PYP5.js +905 -0
- package/dist/chunk-V4R7PYP5.js.map +1 -0
- package/dist/{chunk-AG2COC64.js → chunk-VVYQ2DDS.js} +2 -2
- package/dist/chunk-WAMOAAMN.js +16 -0
- package/dist/chunk-WAMOAAMN.js.map +1 -0
- package/dist/chunk-WAYHHL4J.js +1234 -0
- package/dist/chunk-WAYHHL4J.js.map +1 -0
- package/dist/{chunk-YQ42EBK5.js → chunk-WH6HE6SY.js} +10 -4
- package/dist/chunk-WH6HE6SY.js.map +1 -0
- package/dist/chunk-XP6DI3VY.js +180 -0
- package/dist/chunk-XP6DI3VY.js.map +1 -0
- package/dist/{chunk-5EBWMPJS.js → chunk-XS6LNTSH.js} +76 -14
- package/dist/chunk-XS6LNTSH.js.map +1 -0
- package/dist/{chunk-WT4OATGP.js → chunk-ZKFCDVB4.js} +16 -7
- package/dist/chunk-ZKFCDVB4.js.map +1 -0
- package/dist/cms-theme.css +29 -0
- package/dist/contact-form/index.d.ts +220 -0
- package/dist/contact-form/index.js +16 -0
- package/dist/contact-form/index.js.map +1 -0
- package/dist/content-block/index.d.ts +39 -4
- package/dist/content-block/index.js +8 -4
- package/dist/cookie-consent/index.d.ts +60 -12
- package/dist/cookie-consent/index.js +3 -2
- package/dist/date-tile/index.js +2 -2
- package/dist/dropdown/index.d.ts +29 -11
- package/dist/dropdown/index.js +4 -2
- package/dist/feature-split/index.d.ts +6 -1
- package/dist/feature-split/index.js +5 -4
- package/dist/features-section/index.d.ts +53 -9
- package/dist/features-section/index.js +6 -5
- package/dist/flow/index.d.ts +35 -0
- package/dist/flow/index.js +9 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/footer/index.d.ts +13 -0
- package/dist/footer/index.js +2 -2
- package/dist/header/index.d.ts +135 -16
- package/dist/header/index.js +3 -2
- package/dist/hero/index.d.ts +92 -8
- package/dist/hero/index.js +6 -3
- package/dist/icon-button/index.d.ts +7 -7
- package/dist/icon-button/index.js +2 -2
- package/dist/index.d.ts +12 -3
- package/dist/index.js +121 -47
- package/dist/items-accordion/index.d.ts +9 -0
- package/dist/items-accordion/index.js +4 -3
- package/dist/kpi-card/index.js +2 -2
- package/dist/markdown/index.d.ts +19 -2
- package/dist/markdown/index.js +3 -2
- package/dist/mega-menu/index.d.ts +95 -7
- package/dist/mega-menu/index.js +7 -2
- package/dist/menu-grid/index.d.ts +2 -3
- package/dist/menu-grid/index.js +2 -2
- package/dist/menu-grid-item/index.d.ts +6 -8
- package/dist/menu-grid-item/index.js +2 -2
- package/dist/menu-item/index.d.ts +11 -7
- package/dist/menu-item/index.js +3 -2
- package/dist/plan-cards/index.d.ts +69 -0
- package/dist/plan-cards/index.js +13 -0
- package/dist/plan-cards/index.js.map +1 -0
- package/dist/product-nav/index.d.ts +127 -0
- package/dist/product-nav/index.js +11 -0
- package/dist/product-nav/index.js.map +1 -0
- package/dist/promo-banner/index.d.ts +42 -4
- package/dist/promo-banner/index.js +6 -3
- package/dist/quote-dialog/index.d.ts +174 -0
- package/dist/quote-dialog/index.js +22 -0
- package/dist/quote-dialog/index.js.map +1 -0
- package/dist/schema/index.d.ts +11 -0
- package/dist/schema/index.js +9 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/screenshot-tour/index.d.ts +54 -0
- package/dist/screenshot-tour/index.js +9 -0
- package/dist/screenshot-tour/index.js.map +1 -0
- package/dist/section/index.d.ts +3 -0
- package/dist/section/index.js +3 -3
- package/dist/segmented-control/index.js +2 -2
- package/dist/select/index.js +2 -2
- package/dist/shared/styles.d.ts +7 -1
- package/dist/shared/styles.js +3 -1
- package/dist/stats/index.js +2 -2
- package/dist/steps/index.d.ts +45 -0
- package/dist/steps/index.js +11 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/tag-strip/index.d.ts +33 -0
- package/dist/tag-strip/index.js +9 -0
- package/dist/tag-strip/index.js.map +1 -0
- package/dist/testimonials/index.d.ts +9 -1
- package/dist/testimonials/index.js +3 -3
- package/dist/tooltip/index.js +2 -2
- package/package.json +38 -2
- package/dist/chunk-5EBWMPJS.js.map +0 -1
- package/dist/chunk-76AVBQUA.js +0 -252
- package/dist/chunk-76AVBQUA.js.map +0 -1
- package/dist/chunk-7NLZND6Q.js.map +0 -1
- package/dist/chunk-ALI26WOB.js.map +0 -1
- package/dist/chunk-BMHMNXIA.js +0 -158
- package/dist/chunk-BMHMNXIA.js.map +0 -1
- package/dist/chunk-DH53HZPB.js.map +0 -1
- package/dist/chunk-EMCQBT3S.js.map +0 -1
- package/dist/chunk-FLY7TNRT.js.map +0 -1
- package/dist/chunk-FZ36KL73.js.map +0 -1
- package/dist/chunk-GJO3RGOB.js.map +0 -1
- package/dist/chunk-J6EO4R73.js +0 -633
- package/dist/chunk-J6EO4R73.js.map +0 -1
- package/dist/chunk-JKBWZLG4.js +0 -348
- package/dist/chunk-JKBWZLG4.js.map +0 -1
- package/dist/chunk-JQY2G4QK.js.map +0 -1
- package/dist/chunk-KMU6ABQF.js.map +0 -1
- package/dist/chunk-LEXZKGQX.js.map +0 -1
- package/dist/chunk-MSSH3HFK.js +0 -205
- package/dist/chunk-MSSH3HFK.js.map +0 -1
- package/dist/chunk-R5G6KFTJ.js.map +0 -1
- package/dist/chunk-SMLR736E.js.map +0 -1
- package/dist/chunk-VWS53WY4.js +0 -157
- package/dist/chunk-VWS53WY4.js.map +0 -1
- package/dist/chunk-WT4OATGP.js.map +0 -1
- package/dist/chunk-XWB4CKDU.js +0 -708
- package/dist/chunk-XWB4CKDU.js.map +0 -1
- package/dist/chunk-YQ42EBK5.js.map +0 -1
- package/dist/chunk-ZN4LIKVG.js.map +0 -1
- /package/dist/{chunk-AKJQ345O.js.map → chunk-5AWGZQWU.js.map} +0 -0
- /package/dist/{chunk-BLQV2YMO.js.map → chunk-EZOKT7NJ.js.map} +0 -0
- /package/dist/{chunk-6D6ROU7X.js.map → chunk-IGMVF3KK.js.map} +0 -0
- /package/dist/{chunk-INMSEYT6.js.map → chunk-IVPVYVWG.js.map} +0 -0
- /package/dist/{chunk-35TX3AOA.js.map → chunk-NABSRUXG.js.map} +0 -0
- /package/dist/{chunk-MG2VTZA4.js.map → chunk-QS3ANOWN.js.map} +0 -0
- /package/dist/{chunk-FML6AG2V.js.map → chunk-RANC3OI6.js.map} +0 -0
- /package/dist/{chunk-YVTFQHVY.js.map → chunk-TEAZZPDQ.js.map} +0 -0
- /package/dist/{chunk-AG2COC64.js.map → chunk-VVYQ2DDS.js.map} +0 -0
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MEGA_MENU_LAYOUT_EVENT
|
|
3
|
+
} from "./chunk-ER7MCPDV.js";
|
|
4
|
+
import {
|
|
5
|
+
hasCurrentLink,
|
|
6
|
+
isCurrentPath
|
|
7
|
+
} from "./chunk-UKIVLF7S.js";
|
|
1
8
|
import {
|
|
2
9
|
chevronIcon
|
|
3
10
|
} from "./chunk-WTD2YIAA.js";
|
|
@@ -5,7 +12,7 @@ import {
|
|
|
5
12
|
buttonResetStyles,
|
|
6
13
|
controlBaseStyles,
|
|
7
14
|
fontFamilyStyles
|
|
8
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-NXUS2CH7.js";
|
|
9
16
|
import {
|
|
10
17
|
__decorateClass
|
|
11
18
|
} from "./chunk-EUXUH3YW.js";
|
|
@@ -13,6 +20,8 @@ import {
|
|
|
13
20
|
// src/dropdown/Dropdown.ts
|
|
14
21
|
import { LitElement, css, html, nothing } from "lit";
|
|
15
22
|
import { customElement, property, state } from "lit/decorators.js";
|
|
23
|
+
var PANEL_NAV_SELECTOR = "st-menu-item, st-mega-menu-column, st-mega-menu-feature";
|
|
24
|
+
var PANEL_SHORTCUT_SLOTS = '[slot="intro"], [slot="featured"]';
|
|
16
25
|
var Dropdown = class extends LitElement {
|
|
17
26
|
constructor() {
|
|
18
27
|
super(...arguments);
|
|
@@ -28,16 +37,23 @@ var Dropdown = class extends LitElement {
|
|
|
28
37
|
this.itemClassName = "";
|
|
29
38
|
this.disabled = false;
|
|
30
39
|
this.active = false;
|
|
40
|
+
this.currentPath = "";
|
|
41
|
+
this.current = false;
|
|
31
42
|
this.inline = false;
|
|
32
43
|
this.open = false;
|
|
33
44
|
this.mega = false;
|
|
34
45
|
this.bar = false;
|
|
46
|
+
this.triggerStyle = "default";
|
|
35
47
|
this.openOnHover = false;
|
|
36
48
|
this.backLabel = "Back";
|
|
37
49
|
this.hoverTimer = 0;
|
|
38
50
|
/** When hover last opened the panel — a click right after that keeps it open instead of toggling it shut. */
|
|
39
51
|
this.hoverOpenedAt = 0;
|
|
40
52
|
this.hasContent = false;
|
|
53
|
+
this.megaTracks = 0;
|
|
54
|
+
this.onMegaLayout = (event) => {
|
|
55
|
+
this.megaTracks = event.detail.tracks;
|
|
56
|
+
};
|
|
41
57
|
this.hasIcon = false;
|
|
42
58
|
/** Short delays so a pointer crossing the gap between trigger and panel doesn't close it. */
|
|
43
59
|
this.onPointerEnter = (event) => {
|
|
@@ -130,18 +146,23 @@ var Dropdown = class extends LitElement {
|
|
|
130
146
|
super.connectedCallback();
|
|
131
147
|
document.addEventListener("mousedown", this.closeOnOutsideMouseDown);
|
|
132
148
|
window.addEventListener("keydown", this.closeOnEscape);
|
|
149
|
+
this.addEventListener(MEGA_MENU_LAYOUT_EVENT, this.onMegaLayout);
|
|
133
150
|
this.addEventListener("pointerenter", this.onPointerEnter);
|
|
134
151
|
this.addEventListener("pointerleave", this.onPointerLeave);
|
|
135
152
|
}
|
|
136
153
|
disconnectedCallback() {
|
|
137
154
|
document.removeEventListener("mousedown", this.closeOnOutsideMouseDown);
|
|
138
155
|
window.removeEventListener("keydown", this.closeOnEscape);
|
|
156
|
+
this.removeEventListener(MEGA_MENU_LAYOUT_EVENT, this.onMegaLayout);
|
|
139
157
|
this.removeEventListener("pointerenter", this.onPointerEnter);
|
|
140
158
|
this.removeEventListener("pointerleave", this.onPointerLeave);
|
|
141
159
|
clearTimeout(this.hoverTimer);
|
|
142
160
|
if (Dropdown.openDropdown === this) Dropdown.openDropdown = null;
|
|
143
161
|
super.disconnectedCallback();
|
|
144
162
|
}
|
|
163
|
+
willUpdate() {
|
|
164
|
+
this.current = isCurrentPath(this.href, this.currentPath) || hasCurrentLink(this, PANEL_NAV_SELECTOR, this.currentPath, PANEL_SHORTCUT_SLOTS);
|
|
165
|
+
}
|
|
145
166
|
updated(changed) {
|
|
146
167
|
if (!changed.has("open")) return;
|
|
147
168
|
if (this.open) {
|
|
@@ -191,7 +212,7 @@ var Dropdown = class extends LitElement {
|
|
|
191
212
|
const titleContent = html`
|
|
192
213
|
${this.iconPosition === "left" ? icon : nothing} ${this.label ? html`<span part="label">${this.label}</span>` : nothing}
|
|
193
214
|
${this.iconPosition === "right" ? icon : nothing}
|
|
194
|
-
${this.hasContent ? html`<span class="arrow" part="caret" aria-hidden="true"
|
|
215
|
+
${this.hasContent ? html`<span class="arrow" part="caret" aria-hidden="true">${this.triggerStyle === "item" ? chevronIcon("down", 14) : "\u25BC"}</span>` : nothing}
|
|
195
216
|
`;
|
|
196
217
|
const titleClass = `menu-title ${this.triggerClassName} ${this.open ? "active" : ""}`;
|
|
197
218
|
return html`
|
|
@@ -228,6 +249,7 @@ var Dropdown = class extends LitElement {
|
|
|
228
249
|
part="panel"
|
|
229
250
|
class="menu-dropdown align-${this.align} ${this.itemGroupClassName} ${this.open ? "show" : ""}"
|
|
230
251
|
role="menu"
|
|
252
|
+
style=${this.mega && this.megaTracks > 0 ? `--st-mega-menu-tracks:${this.megaTracks}` : nothing}
|
|
231
253
|
@click=${this.onPanelClick}
|
|
232
254
|
@keydown=${this.onPanelKeyDown}
|
|
233
255
|
>
|
|
@@ -282,9 +304,11 @@ Dropdown.styles = css`
|
|
|
282
304
|
color: var(--st-nav-color, var(--st-color-text-strong));
|
|
283
305
|
}
|
|
284
306
|
|
|
285
|
-
:
|
|
286
|
-
|
|
287
|
-
|
|
307
|
+
/* The current section: an accent underline, the header's one indicator, rather than a filled pill. */
|
|
308
|
+
:host([active]) .menu-title,
|
|
309
|
+
:host([current]) .menu-title {
|
|
310
|
+
color: var(--st-nav-color, var(--st-color-accent-text));
|
|
311
|
+
box-shadow: inset 0 -2px 0 var(--st-nav-active-line, var(--st-color-accent));
|
|
288
312
|
}
|
|
289
313
|
|
|
290
314
|
:host([disabled]) .menu-title {
|
|
@@ -333,11 +357,11 @@ Dropdown.styles = css`
|
|
|
333
357
|
visibility: hidden;
|
|
334
358
|
transform: translateY(-10px);
|
|
335
359
|
/* visibility flips at once on open (so keyboard focus can move into the panel on the same
|
|
336
|
-
frame) and only after the 0.
|
|
360
|
+
frame) and only after the 0.15s fade on close. */
|
|
337
361
|
transition:
|
|
338
|
-
opacity 0.
|
|
339
|
-
transform 0.
|
|
340
|
-
visibility 0s linear 0.
|
|
362
|
+
opacity 0.15s ease,
|
|
363
|
+
transform 0.15s ease,
|
|
364
|
+
visibility 0s linear 0.15s;
|
|
341
365
|
pointer-events: none;
|
|
342
366
|
}
|
|
343
367
|
|
|
@@ -389,6 +413,12 @@ Dropdown.styles = css`
|
|
|
389
413
|
pointer-events: auto;
|
|
390
414
|
}
|
|
391
415
|
|
|
416
|
+
/* Read by the st-mega-menu-column product cards in the panel: no hover lift or decoration shift in the hamburger layout. */
|
|
417
|
+
:host([inline]) {
|
|
418
|
+
--st-mega-menu-column-lift: 0px;
|
|
419
|
+
--st-mega-menu-column-deco-transform: none;
|
|
420
|
+
}
|
|
421
|
+
|
|
392
422
|
/* Mega (okta.com): the panel is a large rounded card floating under the whole bar, centred on
|
|
393
423
|
the nearest positioned ancestor (st-header) instead of hanging off the trigger — the host
|
|
394
424
|
stops being the panel's containing block. */
|
|
@@ -400,7 +430,15 @@ Dropdown.styles = css`
|
|
|
400
430
|
top: calc(100% + var(--st-mega-menu-gap, 12px));
|
|
401
431
|
left: var(--st-mega-menu-inset, 1rem);
|
|
402
432
|
right: var(--st-mega-menu-inset, 1rem);
|
|
403
|
-
|
|
433
|
+
/* A panel with few columns is not stretched to the full width: each grid track (intro, link column, featured)
|
|
434
|
+
gets up to --st-mega-menu-track-width (default 420px), plus the gaps and padding of st-mega-menu. */
|
|
435
|
+
max-width: min(
|
|
436
|
+
var(--st-mega-menu-max-width, 1400px),
|
|
437
|
+
calc(
|
|
438
|
+
var(--st-mega-menu-tracks, 99) * var(--st-mega-menu-track-width, 420px) + (var(--st-mega-menu-tracks, 99) - 1) * 3rem +
|
|
439
|
+
7rem
|
|
440
|
+
)
|
|
441
|
+
);
|
|
404
442
|
margin: 0 auto;
|
|
405
443
|
padding: 0;
|
|
406
444
|
max-height: calc(100dvh - var(--st-mega-menu-offset, 96px));
|
|
@@ -408,6 +446,16 @@ Dropdown.styles = css`
|
|
|
408
446
|
border: 0;
|
|
409
447
|
border-radius: var(--st-mega-menu-radius, 24px);
|
|
410
448
|
box-shadow: 0 24px 48px var(--st-shadow-color-md);
|
|
449
|
+
/* No opacity fade here: the surface is opaque from the first frame, so the page behind (e.g. a hero's text)
|
|
450
|
+
never shows through the panel while it opens. It slides in over 0.15s instead. */
|
|
451
|
+
opacity: 1;
|
|
452
|
+
transition:
|
|
453
|
+
transform 0.15s ease,
|
|
454
|
+
visibility 0s linear 0.15s;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
:host([mega]:not([inline])) .menu-dropdown.show {
|
|
458
|
+
transition-delay: 0s;
|
|
411
459
|
}
|
|
412
460
|
|
|
413
461
|
/* The open section's trigger becomes an accent pill — also for a plain dropdown marked \`bar\`,
|
|
@@ -423,6 +471,42 @@ Dropdown.styles = css`
|
|
|
423
471
|
color: var(--st-color-on-solid);
|
|
424
472
|
}
|
|
425
473
|
|
|
474
|
+
/* trigger-style="item" (desktop bar): the trigger is laid out like st-menu-item's row, so it
|
|
475
|
+
lines up with the Home item beside it. Colours stay on the base rules (so the --st-nav-*
|
|
476
|
+
variables and the disabled state still apply). The hover nudge is left out: it would widen
|
|
477
|
+
the fit-content trigger and push its neighbours. The rules below come after the mega/bar
|
|
478
|
+
pill rules and match their specificity or beat it, so they win. */
|
|
479
|
+
:host([trigger-style='item']:not([inline])) .menu-title {
|
|
480
|
+
min-height: 0;
|
|
481
|
+
padding: 12px 16px;
|
|
482
|
+
border-radius: 6px;
|
|
483
|
+
font-size: 0.875rem;
|
|
484
|
+
font-weight: 400;
|
|
485
|
+
gap: 6px;
|
|
486
|
+
transition-property: background-color, color, border-color;
|
|
487
|
+
transition-duration: 0.15s;
|
|
488
|
+
transition-timing-function: ease;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
:host([trigger-style='item']:not([inline])) .arrow {
|
|
492
|
+
display: inline-flex;
|
|
493
|
+
margin-left: 0;
|
|
494
|
+
color: currentColor;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/* Open shows the hover fill, not the solid accent pill. */
|
|
498
|
+
:host([trigger-style='item']:not([inline])) .menu-title[aria-expanded='true'] {
|
|
499
|
+
background: var(--st-nav-hover-bg, var(--st-color-hover));
|
|
500
|
+
color: var(--st-nav-color, var(--st-color-text-strong));
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/* The current page: the same accent underline as st-menu-item.active (no fill, no side bar). */
|
|
504
|
+
:host([trigger-style='item'][active]:not([inline])) .menu-title,
|
|
505
|
+
:host([trigger-style='item'][current]:not([inline])) .menu-title {
|
|
506
|
+
color: var(--st-nav-color, var(--st-color-accent-text));
|
|
507
|
+
box-shadow: inset 0 -2px 0 var(--st-nav-active-line, var(--st-color-accent));
|
|
508
|
+
}
|
|
509
|
+
|
|
426
510
|
.mega-back-bar,
|
|
427
511
|
.mega-heading {
|
|
428
512
|
display: none;
|
|
@@ -540,6 +624,12 @@ __decorateClass([
|
|
|
540
624
|
__decorateClass([
|
|
541
625
|
property({ type: Boolean, reflect: true })
|
|
542
626
|
], Dropdown.prototype, "active", 2);
|
|
627
|
+
__decorateClass([
|
|
628
|
+
property({ attribute: false })
|
|
629
|
+
], Dropdown.prototype, "currentPath", 2);
|
|
630
|
+
__decorateClass([
|
|
631
|
+
property({ type: Boolean, reflect: true })
|
|
632
|
+
], Dropdown.prototype, "current", 2);
|
|
543
633
|
__decorateClass([
|
|
544
634
|
property({ type: Boolean, reflect: true })
|
|
545
635
|
], Dropdown.prototype, "inline", 2);
|
|
@@ -552,6 +642,9 @@ __decorateClass([
|
|
|
552
642
|
__decorateClass([
|
|
553
643
|
property({ type: Boolean, reflect: true })
|
|
554
644
|
], Dropdown.prototype, "bar", 2);
|
|
645
|
+
__decorateClass([
|
|
646
|
+
property({ type: String, attribute: "trigger-style", reflect: true })
|
|
647
|
+
], Dropdown.prototype, "triggerStyle", 2);
|
|
555
648
|
__decorateClass([
|
|
556
649
|
property({ type: Boolean, attribute: "open-on-hover" })
|
|
557
650
|
], Dropdown.prototype, "openOnHover", 2);
|
|
@@ -561,6 +654,9 @@ __decorateClass([
|
|
|
561
654
|
__decorateClass([
|
|
562
655
|
state()
|
|
563
656
|
], Dropdown.prototype, "hasContent", 2);
|
|
657
|
+
__decorateClass([
|
|
658
|
+
state()
|
|
659
|
+
], Dropdown.prototype, "megaTracks", 2);
|
|
564
660
|
__decorateClass([
|
|
565
661
|
state()
|
|
566
662
|
], Dropdown.prototype, "hasIcon", 2);
|
|
@@ -571,4 +667,4 @@ Dropdown = __decorateClass([
|
|
|
571
667
|
export {
|
|
572
668
|
Dropdown
|
|
573
669
|
};
|
|
574
|
-
//# sourceMappingURL=chunk-
|
|
670
|
+
//# sourceMappingURL=chunk-DJFWZOZM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dropdown/Dropdown.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { chevronIcon } from '../shared/icons';\nimport { buttonResetStyles, controlBaseStyles, fontFamilyStyles } from '../shared/styles';\nimport { hasCurrentLink, isCurrentPath } from '../shared/nav-path';\nimport type { DropdownToggleEventDetail } from './DropdownEvents';\nimport { MEGA_MENU_LAYOUT_EVENT, type MegaMenuLayoutEventDetail } from '../mega-menu/MegaMenuEvents';\n\n/** The nav links a dropdown's panel can hold that can be the current page. */\nconst PANEL_NAV_SELECTOR = 'st-menu-item, st-mega-menu-column, st-mega-menu-feature';\n\n/** A mega menu's intro and featured slots hold shortcuts (e.g. \"Talk to an expert\" → /contact-us)\n * that belong to other sections, so they never make this dropdown the current one. */\nconst PANEL_SHORTCUT_SLOTS = '[slot=\"intro\"], [slot=\"featured\"]';\n\n/**\n * A labeled trigger + slotted dropdown panel — nav menus (typically holding an `st-menu-grid`),\n * action menus, anything \"click a trigger, show content under it\". Markup\n * (`.menu` > `.menu-title` + `.menu-dropdown`), sizes, 0.3s slide/fade, and behavior —\n *\n * - only one dropdown is open at a time (a shared provider is built in, so no provider element\n * is needed);\n * - a mousedown outside, Escape, or a click inside the panel closes it;\n * - an `href` trigger toggles the panel when it has content, and is a plain link when it doesn't;\n * - `inline` opens the panel in the flow, the source's `.touch-device` layout.\n *\n * Colors and the panel's surface come from the suite theme. The panel is never 100vw wide at\n * <=768px (it would overflow the screen from wherever the trigger sits; use `inline` in headers\n * instead), and slotted children are not clipped with `overflow: hidden` (that would cut off their\n * focus rings). Other attributes: `align`, `active`, `disabled`, `inline`, the `dropdown-toggle`\n * event, `trigger-style` (`item` for a desktop-bar trigger that matches `st-menu-item`), and `mega`\n * plus `open-on-hover` for a mega menu (see `st-mega-menu`).\n *\n * `current` is set when the trigger's own `href` or a nav item inside the panel is the current page\n * (see `st-header`'s `current-path`); the trigger then shows as active, like `active`.\n *\n * @cssprop --st-mega-menu-max-width - Maximum width of a `mega` panel (default `1400px`).\n * @cssprop --st-mega-menu-inset - Minimum space between a `mega` panel and the header's sides (default `1rem`).\n * @cssprop --st-mega-menu-gap - Space between the header and a `mega` panel (default `12px`).\n * @cssprop --st-mega-menu-radius - Corner radius of a `mega` panel (default `24px`).\n */\n@customElement('st-dropdown')\nexport class Dropdown extends LitElement {\n /** The open dropdown, if any — the source's `DropdownContext.activeDropdown`. */\n private static openDropdown: Dropdown | null = null;\n\n static styles = css`\n ${controlBaseStyles}\n\n :host {\n display: inline-block;\n position: relative;\n ${fontFamilyStyles}\n }\n\n .menu-title {\n ${buttonResetStyles}\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-height: 40px;\n padding: 12px;\n gap: 8px;\n text-align: center;\n width: fit-content;\n border-radius: var(--st-radius-sm);\n /* --st-nav-*: set by a host bar (st-header's transparent state) to recolour its nav items. */\n color: var(--st-nav-color, var(--st-color-text));\n font-size: 0.875rem;\n text-decoration: none;\n white-space: nowrap;\n transition: background-color 0.3s ease;\n }\n\n .menu-title:hover,\n .menu-title[aria-expanded='true'] {\n background: var(--st-nav-hover-bg, var(--st-color-hover));\n color: var(--st-nav-color, var(--st-color-text-strong));\n }\n\n /* The current section: an accent underline, the header's one indicator, rather than a filled pill. */\n :host([active]) .menu-title,\n :host([current]) .menu-title {\n color: var(--st-nav-color, var(--st-color-accent-text));\n box-shadow: inset 0 -2px 0 var(--st-nav-active-line, var(--st-color-accent));\n }\n\n :host([disabled]) .menu-title {\n color: var(--st-color-text-muted);\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .icon {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n }\n\n .icon[hidden] {\n display: none;\n }\n\n .arrow {\n display: inline-block;\n margin-left: 8px;\n font-size: 0.75rem;\n transition: transform 0.3s ease;\n }\n\n .menu-title[aria-expanded='true'] .arrow {\n transform: rotate(180deg);\n }\n\n .menu-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 100;\n padding: 16px;\n background: var(--st-color-surface);\n color: var(--st-color-text);\n /* The panel has its own surface: items in it never take the bar's nav colours. */\n --st-nav-color: initial;\n --st-nav-hover-bg: initial;\n border: 1px solid var(--st-color-border);\n border-radius: var(--st-radius-sm);\n box-shadow: 0 4px 16px var(--st-shadow-color-sm);\n opacity: 0;\n visibility: hidden;\n transform: translateY(-10px);\n /* visibility flips at once on open (so keyboard focus can move into the panel on the same\n frame) and only after the 0.15s fade on close. */\n transition:\n opacity 0.15s ease,\n transform 0.15s ease,\n visibility 0s linear 0.15s;\n pointer-events: none;\n }\n\n .menu-dropdown.align-right {\n left: auto;\n right: 0;\n }\n\n .menu-dropdown.show {\n opacity: 1;\n visibility: visible;\n transform: translateY(0);\n pointer-events: auto;\n transition-delay: 0s;\n }\n\n /* Inline: the panel opens in the flow under its trigger and pushes what follows down, instead\n of floating — the source's .touch-device layout. st-header turns this on for its menu while\n the hamburger panel is showing. */\n :host([inline]) {\n display: block;\n }\n\n :host([inline]) .menu-title {\n width: 100%;\n justify-content: flex-start;\n }\n\n :host([inline]) .arrow {\n margin-left: auto;\n }\n\n :host([inline]) .menu-dropdown {\n display: none;\n position: relative;\n top: auto;\n left: auto;\n right: auto;\n width: 100%;\n box-sizing: border-box;\n box-shadow: none;\n opacity: 1;\n visibility: visible;\n transform: none;\n }\n\n :host([inline]) .menu-dropdown.show {\n display: block;\n pointer-events: auto;\n }\n\n /* Read by the st-mega-menu-column product cards in the panel: no hover lift or decoration shift in the hamburger layout. */\n :host([inline]) {\n --st-mega-menu-column-lift: 0px;\n --st-mega-menu-column-deco-transform: none;\n }\n\n /* Mega (okta.com): the panel is a large rounded card floating under the whole bar, centred on\n the nearest positioned ancestor (st-header) instead of hanging off the trigger — the host\n stops being the panel's containing block. */\n :host([mega]:not([inline])) {\n position: static;\n }\n\n :host([mega]:not([inline])) .menu-dropdown {\n top: calc(100% + var(--st-mega-menu-gap, 12px));\n left: var(--st-mega-menu-inset, 1rem);\n right: var(--st-mega-menu-inset, 1rem);\n /* A panel with few columns is not stretched to the full width: each grid track (intro, link column, featured)\n gets up to --st-mega-menu-track-width (default 420px), plus the gaps and padding of st-mega-menu. */\n max-width: min(\n var(--st-mega-menu-max-width, 1400px),\n calc(\n var(--st-mega-menu-tracks, 99) * var(--st-mega-menu-track-width, 420px) + (var(--st-mega-menu-tracks, 99) - 1) * 3rem +\n 7rem\n )\n );\n margin: 0 auto;\n padding: 0;\n max-height: calc(100dvh - var(--st-mega-menu-offset, 96px));\n overflow-y: auto;\n border: 0;\n border-radius: var(--st-mega-menu-radius, 24px);\n box-shadow: 0 24px 48px var(--st-shadow-color-md);\n /* No opacity fade here: the surface is opaque from the first frame, so the page behind (e.g. a hero's text)\n never shows through the panel while it opens. It slides in over 0.15s instead. */\n opacity: 1;\n transition:\n transform 0.15s ease,\n visibility 0s linear 0.15s;\n }\n\n :host([mega]:not([inline])) .menu-dropdown.show {\n transition-delay: 0s;\n }\n\n /* The open section's trigger becomes an accent pill — also for a plain dropdown marked \\`bar\\`,\n so it matches the mega triggers (and st-menu-item variant=\"bar\") beside it. */\n :host([mega]:not([inline])) .menu-title,\n :host([bar]:not([inline])) .menu-title {\n border-radius: 9999px;\n }\n\n :host([mega]:not([inline])) .menu-title[aria-expanded='true'],\n :host([bar]:not([inline])) .menu-title[aria-expanded='true'] {\n background: var(--st-color-accent);\n color: var(--st-color-on-solid);\n }\n\n /* trigger-style=\"item\" (desktop bar): the trigger is laid out like st-menu-item's row, so it\n lines up with the Home item beside it. Colours stay on the base rules (so the --st-nav-*\n variables and the disabled state still apply). The hover nudge is left out: it would widen\n the fit-content trigger and push its neighbours. The rules below come after the mega/bar\n pill rules and match their specificity or beat it, so they win. */\n :host([trigger-style='item']:not([inline])) .menu-title {\n min-height: 0;\n padding: 12px 16px;\n border-radius: 6px;\n font-size: 0.875rem;\n font-weight: 400;\n gap: 6px;\n transition-property: background-color, color, border-color;\n transition-duration: 0.15s;\n transition-timing-function: ease;\n }\n\n :host([trigger-style='item']:not([inline])) .arrow {\n display: inline-flex;\n margin-left: 0;\n color: currentColor;\n }\n\n /* Open shows the hover fill, not the solid accent pill. */\n :host([trigger-style='item']:not([inline])) .menu-title[aria-expanded='true'] {\n background: var(--st-nav-hover-bg, var(--st-color-hover));\n color: var(--st-nav-color, var(--st-color-text-strong));\n }\n\n /* The current page: the same accent underline as st-menu-item.active (no fill, no side bar). */\n :host([trigger-style='item'][active]:not([inline])) .menu-title,\n :host([trigger-style='item'][current]:not([inline])) .menu-title {\n color: var(--st-nav-color, var(--st-color-accent-text));\n box-shadow: inset 0 -2px 0 var(--st-nav-active-line, var(--st-color-accent));\n }\n\n .mega-back-bar,\n .mega-heading {\n display: none;\n }\n\n /* Mega in st-header's hamburger panel: rather than an accordion, the panel slides in over the\n whole screen with a Back button (okta.com's phone menu). Fixed to the viewport, stacked\n inside the header's own full-screen layer, so the header's close toggle stays on top. */\n :host([mega][inline]) .menu-dropdown {\n display: block;\n position: fixed;\n inset: 0;\n z-index: 1;\n padding: 0 1.5rem 2rem;\n overflow-y: auto;\n border: 0;\n border-radius: 0;\n visibility: hidden;\n transform: translateX(100%);\n transition:\n transform 0.3s ease,\n visibility 0s linear 0.3s;\n }\n\n :host([mega][inline]) .menu-dropdown.show {\n visibility: visible;\n transform: none;\n transition-delay: 0s;\n }\n\n :host([mega][inline]) .mega-back-bar {\n display: flex;\n align-items: center;\n position: sticky;\n top: 0;\n z-index: 1;\n height: 64px;\n margin: 0 -1.5rem;\n padding: 0 1rem;\n background: inherit;\n border-bottom: 1px solid var(--st-color-border);\n }\n\n .mega-back {\n ${buttonResetStyles}\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 40px;\n padding: 0 12px 0 6px;\n border-radius: var(--st-radius-sm);\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--st-color-text-strong);\n }\n\n .mega-back:hover {\n background: var(--st-color-hover);\n }\n\n :host([mega][inline]) .mega-heading {\n display: block;\n margin: 1.25rem 0 0.75rem;\n font-size: 1.375rem;\n font-weight: 600;\n color: var(--st-color-text-strong);\n }\n\n /* The drill-down replaces the trigger's open state, so the caret points the way it goes. */\n :host([mega][inline]) .arrow {\n transform: rotate(-90deg);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .menu-dropdown,\n .arrow,\n :host([mega][inline]) .menu-dropdown {\n transition: none;\n }\n }\n `;\n\n /** Trigger label text (source: `title`, renamed because `title` is the native tooltip\n * attribute). Leave empty to show only `slot=\"icon\"`. */\n @property({ type: String })\n label = '';\n\n /** Renders the trigger as an `<a href>`. With panel content the click toggles the panel (as in\n * the source); with none it navigates. */\n @property({ type: String })\n href = '';\n\n @property({ type: String, attribute: 'icon-position' })\n iconPosition: 'left' | 'right' = 'left';\n\n /** Inline `width`/`height` of the `slot=\"icon\"` wrapper (source: `iconSize`, default `1.2rem`). */\n @property({ type: String, attribute: 'icon-size' })\n iconSize = '1.2rem';\n\n /** Inline `color` of the `slot=\"icon\"` wrapper (source: `iconColor`). */\n @property({ type: String, attribute: 'icon-color' })\n iconColor = 'currentColor';\n\n /** Which edge of the trigger the panel lines up with. */\n @property({ type: String })\n align: 'left' | 'right' = 'left';\n\n /** `target` of an `href` trigger (source default `_self`). */\n @property({ type: String })\n target = '_self';\n\n /** Extra class(es) on the trigger (source: `className`; a `class` on `st-dropdown` styles the host). */\n @property({ type: String, attribute: 'trigger-class-name' })\n triggerClassName = '';\n\n /** Extra class(es) on the panel (source: `itemGroupClassName`). */\n @property({ type: String, attribute: 'item-group-class-name' })\n itemGroupClassName = '';\n\n /** Unused, as in the source (`itemClassName` is never read there); kept for prop parity. */\n @property({ type: String, attribute: 'item-class-name' })\n itemClassName = '';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Highlights the trigger as the current section (e.g. the current page is one of its items). */\n @property({ type: Boolean, reflect: true })\n active = false;\n\n /** Page path the header is showing; set by `st-header`. */\n @property({ attribute: false })\n currentPath = '';\n\n /** Computed from `href` and the nav items in the panel against `currentPath`; reflected for styling. */\n @property({ type: Boolean, reflect: true })\n current = false;\n\n /** Opens the panel in the flow under the trigger instead of floating over the page (see the\n * styles). `st-header` sets this on its own menu's dropdowns while its hamburger panel shows. */\n @property({ type: Boolean, reflect: true })\n inline = false;\n\n /** Whether the panel is showing. Follows user toggles; may also be set from outside. */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /**\n * Mega-menu panel (okta.com style), typically holding an `st-mega-menu`: the panel spans the\n * full width of the nearest positioned ancestor — `st-header` — right under it, instead of\n * hanging off the trigger. In `st-header`'s hamburger layout (`inline`) it slides in over the\n * screen with a Back button rather than opening as an accordion. A click inside the panel only\n * closes it when it lands on a link.\n */\n @property({ type: Boolean, reflect: true })\n mega = false;\n\n /** Styles a non-`mega` trigger like a mega one — a pill that turns solid accent while open — so\n * a plain dropdown (e.g. \"+ New\") lines up with mega triggers in the same header bar. */\n @property({ type: Boolean, reflect: true })\n bar = false;\n\n /**\n * `default` keeps the trigger as it has always looked. `item` lays it out like an `st-menu-item`\n * row, so it matches a Home-style link beside it in `st-header`'s desktop bar: the same padding,\n * type and 6px corners, the hover fill, the current-page look with the accent left bar, and a\n * chevron caret in place of the ▼ glyph. Open shows the hover fill, not the solid accent pill.\n * The item look applies only while not `inline` (the hamburger layout keeps its own look).\n * Set it from JSON as `triggerStyle`.\n */\n @property({ type: String, attribute: 'trigger-style', reflect: true })\n triggerStyle: 'default' | 'item' = 'default';\n\n /** Opens the panel while a mouse hovers the trigger or panel (touch and keyboard still click). Off while `inline`. */\n @property({ type: Boolean, attribute: 'open-on-hover' })\n openOnHover = false;\n\n /** Text of the Back button in the `mega` + `inline` drill-down panel. */\n @property({ type: String, attribute: 'back-label' })\n backLabel = 'Back';\n\n private hoverTimer = 0;\n\n /** When hover last opened the panel — a click right after that keeps it open instead of toggling it shut. */\n private hoverOpenedAt = 0;\n\n /** Whether the default slot has content — the source's `children` check. */\n @state() private hasContent = false;\n /** Grid tracks of the `st-mega-menu` inside the panel, as it reports them; 0 until it does. */\n @state() private megaTracks = 0;\n\n private onMegaLayout = (event: Event): void => {\n this.megaTracks = (event as CustomEvent<MegaMenuLayoutEventDetail>).detail.tracks;\n };\n\n /** Whether `slot=\"icon\"` has content. */\n @state() private hasIcon = false;\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.closeOnOutsideMouseDown);\n window.addEventListener('keydown', this.closeOnEscape);\n this.addEventListener(MEGA_MENU_LAYOUT_EVENT, this.onMegaLayout);\n this.addEventListener('pointerenter', this.onPointerEnter);\n this.addEventListener('pointerleave', this.onPointerLeave);\n }\n\n disconnectedCallback(): void {\n document.removeEventListener('mousedown', this.closeOnOutsideMouseDown);\n window.removeEventListener('keydown', this.closeOnEscape);\n this.removeEventListener(MEGA_MENU_LAYOUT_EVENT, this.onMegaLayout);\n this.removeEventListener('pointerenter', this.onPointerEnter);\n this.removeEventListener('pointerleave', this.onPointerLeave);\n clearTimeout(this.hoverTimer);\n if (Dropdown.openDropdown === this) Dropdown.openDropdown = null;\n super.disconnectedCallback();\n }\n\n protected willUpdate(): void {\n this.current = isCurrentPath(this.href, this.currentPath) || hasCurrentLink(this, PANEL_NAV_SELECTOR, this.currentPath, PANEL_SHORTCUT_SLOTS);\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (!changed.has('open')) return;\n if (this.open) {\n const previous = Dropdown.openDropdown;\n Dropdown.openDropdown = this;\n if (previous && previous !== this) previous.setOpen(false);\n } else if (Dropdown.openDropdown === this) {\n Dropdown.openDropdown = null;\n }\n }\n\n private setOpen(open: boolean): void {\n if (this.open === open) return;\n this.open = open;\n this.dispatchEvent(new CustomEvent<DropdownToggleEventDetail>('dropdown-toggle', { detail: { open }, bubbles: true, composed: true }));\n }\n\n private hovers(event: PointerEvent): boolean {\n return this.openOnHover && !this.inline && !this.disabled && this.hasContent && event.pointerType === 'mouse';\n }\n\n /** Short delays so a pointer crossing the gap between trigger and panel doesn't close it. */\n private onPointerEnter = (event: PointerEvent): void => {\n if (!this.hovers(event)) return;\n clearTimeout(this.hoverTimer);\n this.hoverTimer = window.setTimeout(() => {\n if (!this.open) this.hoverOpenedAt = Date.now();\n this.setOpen(true);\n }, 80);\n };\n\n private onPointerLeave = (event: PointerEvent): void => {\n if (!this.hovers(event)) return;\n clearTimeout(this.hoverTimer);\n this.hoverTimer = window.setTimeout(() => this.setOpen(false), 200);\n };\n\n private onBackClick = (event: Event): void => {\n event.stopPropagation();\n this.setOpen(false);\n this.trigger()?.focus();\n };\n\n private closeOnOutsideMouseDown = (event: Event): void => {\n if (this.open && !event.composedPath().includes(this)) this.setOpen(false);\n };\n\n private closeOnEscape = (event: KeyboardEvent): void => {\n if (!this.open || event.key !== 'Escape') return;\n const focusWasInside = event.composedPath().includes(this);\n this.setOpen(false);\n if (focusWasInside) this.trigger()?.focus();\n };\n\n private trigger(): HTMLElement | null {\n return this.renderRoot.querySelector<HTMLElement>('.menu-title');\n }\n\n /** Keyboard-reachable entries in the panel, in order: menu items (they delegate focus to their\n * own link) plus any plain links/buttons/tabbable elements a caller slots in. */\n private panelItems(): HTMLElement[] {\n const slot = this.renderRoot.querySelector<HTMLSlotElement>('.menu-dropdown slot');\n if (!slot) return [];\n const selector =\n 'st-menu-item, st-menu-grid-item, st-mega-menu-feature, a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const items: HTMLElement[] = [];\n for (const el of slot.assignedElements({ flatten: true })) {\n if (el.matches(selector)) items.push(el as HTMLElement);\n items.push(...Array.from(el.querySelectorAll<HTMLElement>(selector)));\n }\n return items;\n }\n\n /** Moves focus into the panel once it has become visible (it is `visibility: hidden` until the\n * `show` class lands, and hidden elements can't take focus). */\n private focusItem(pick: (items: HTMLElement[]) => HTMLElement | undefined): void {\n void this.updateComplete.then(() => pick(this.panelItems())?.focus());\n }\n\n /** Enter/Space/ArrowDown open the panel and focus its first entry; ArrowUp its last. */\n private onTitleKeyDown = (event: KeyboardEvent): void => {\n if (!this.hasContent || this.disabled) return;\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n this.setOpen(true);\n this.focusItem((items) => items[0]);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n this.setOpen(true);\n this.focusItem((items) => items[items.length - 1]);\n }\n };\n\n /** Arrow keys/Home/End move between the panel's entries; Tab closes the panel and moves on. */\n private onPanelKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Tab') {\n this.setOpen(false);\n return;\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n const items = this.panelItems();\n if (items.length === 0) return;\n event.preventDefault();\n event.stopPropagation();\n const path = event.composedPath();\n const current = items.findIndex((item) => path.includes(item));\n const last = items.length - 1;\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? last\n : event.key === 'ArrowDown'\n ? current < 0 || current === last ? 0 : current + 1\n : current <= 0 ? last : current - 1;\n items[next].focus();\n };\n\n private onTitleClick = (event: Event): void => {\n event.stopPropagation();\n if (!this.hasContent) return;\n event.preventDefault();\n clearTimeout(this.hoverTimer);\n if (this.open && Date.now() - this.hoverOpenedAt < 400) return;\n this.setOpen(!this.open);\n };\n\n /** A click anywhere inside the panel closes it, as in the source — for `mega`, only a click on a\n * link: a big panel has headings and gaps, and a click there shouldn't also close st-header's\n * hamburger layer. */\n private onPanelClick = (event: Event): void => {\n if (this.mega && !event.composedPath().some((node) => node instanceof HTMLAnchorElement)) {\n event.stopPropagation();\n return;\n }\n this.setOpen(false);\n };\n\n private onContentSlotChange = (event: Event): void => {\n this.hasContent = (event.target as HTMLSlotElement).assignedNodes({ flatten: true }).some(\n (node) => node.nodeType === Node.ELEMENT_NODE || !!node.textContent?.trim()\n );\n };\n\n private onIconSlotChange = (event: Event): void => {\n this.hasIcon = (event.target as HTMLSlotElement).assignedNodes({ flatten: true }).length > 0;\n };\n\n render() {\n const icon = html`<span\n class=\"icon ${this.iconPosition === 'left' ? 'icon-left' : 'icon-right'}\"\n ?hidden=${!this.hasIcon}\n style=\"width:${this.iconSize};height:${this.iconSize};color:${this.iconColor}\"\n ><slot name=\"icon\" @slotchange=${this.onIconSlotChange}></slot\n ></span>`;\n const titleContent = html`\n ${this.iconPosition === 'left' ? icon : nothing} ${this.label ? html`<span part=\"label\">${this.label}</span>` : nothing}\n ${this.iconPosition === 'right' ? icon : nothing}\n ${this.hasContent\n ? html`<span class=\"arrow\" part=\"caret\" aria-hidden=\"true\">${this.triggerStyle === 'item' ? chevronIcon('down', 14) : '▼'}</span>`\n : nothing}\n `;\n const titleClass = `menu-title ${this.triggerClassName} ${this.open ? 'active' : ''}`;\n\n return html`\n <div class=\"menu\" part=\"menu\">\n ${this.href\n ? html`\n <a\n part=\"trigger\"\n class=${titleClass}\n href=${this.href}\n target=${this.target}\n aria-haspopup=${this.hasContent ? 'true' : 'false'}\n aria-expanded=${this.open}\n aria-disabled=${this.disabled ? 'true' : nothing}\n @click=${this.onTitleClick}\n @keydown=${this.onTitleKeyDown}\n >\n ${titleContent}\n </a>\n `\n : html`\n <button\n part=\"trigger\"\n class=${titleClass}\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded=${this.open}\n ?disabled=${this.disabled}\n @click=${this.onTitleClick}\n @keydown=${this.onTitleKeyDown}\n >\n ${titleContent}\n </button>\n `}\n <div\n part=\"panel\"\n class=\"menu-dropdown align-${this.align} ${this.itemGroupClassName} ${this.open ? 'show' : ''}\"\n role=\"menu\"\n style=${this.mega && this.megaTracks > 0 ? `--st-mega-menu-tracks:${this.megaTracks}` : nothing}\n @click=${this.onPanelClick}\n @keydown=${this.onPanelKeyDown}\n >\n ${this.mega\n ? html`\n <div class=\"mega-back-bar\" part=\"back-bar\">\n <button type=\"button\" class=\"mega-back\" part=\"back\" @click=${this.onBackClick}>\n ${chevronIcon('left', 16)} ${this.backLabel}\n </button>\n </div>\n ${this.label ? html`<p class=\"mega-heading\" part=\"mobile-heading\">${this.label}</p>` : nothing}\n `\n : nothing}\n <slot @slotchange=${this.onContentSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY,KAAK,MAAM,eAAe;AAC/C,SAAS,eAAe,UAAU,aAAa;AAS/C,IAAM,qBAAqB;AAI3B,IAAM,uBAAuB;AA6BtB,IAAM,WAAN,cAAuB,WAAW;AAAA,EAAlC;AAAA;AAuUL,iBAAQ;AAKR,gBAAO;AAGP,wBAAiC;AAIjC,oBAAW;AAIX,qBAAY;AAIZ,iBAA0B;AAI1B,kBAAS;AAIT,4BAAmB;AAInB,8BAAqB;AAIrB,yBAAgB;AAGhB,oBAAW;AAIX,kBAAS;AAIT,uBAAc;AAId,mBAAU;AAKV,kBAAS;AAIT,gBAAO;AAUP,gBAAO;AAKP,eAAM;AAWN,wBAAmC;AAInC,uBAAc;AAId,qBAAY;AAEZ,SAAQ,aAAa;AAGrB;AAAA,SAAQ,gBAAgB;AAGf,SAAQ,aAAa;AAErB,SAAQ,aAAa;AAE9B,SAAQ,eAAe,CAAC,UAAuB;AAC7C,WAAK,aAAc,MAAiD,OAAO;AAAA,IAC7E;AAGS,SAAQ,UAAU;AAgD3B;AAAA,SAAQ,iBAAiB,CAAC,UAA8B;AACtD,UAAI,CAAC,KAAK,OAAO,KAAK,EAAG;AACzB,mBAAa,KAAK,UAAU;AAC5B,WAAK,aAAa,OAAO,WAAW,MAAM;AACxC,YAAI,CAAC,KAAK,KAAM,MAAK,gBAAgB,KAAK,IAAI;AAC9C,aAAK,QAAQ,IAAI;AAAA,MACnB,GAAG,EAAE;AAAA,IACP;AAEA,SAAQ,iBAAiB,CAAC,UAA8B;AACtD,UAAI,CAAC,KAAK,OAAO,KAAK,EAAG;AACzB,mBAAa,KAAK,UAAU;AAC5B,WAAK,aAAa,OAAO,WAAW,MAAM,KAAK,QAAQ,KAAK,GAAG,GAAG;AAAA,IACpE;AAEA,SAAQ,cAAc,CAAC,UAAuB;AAC5C,YAAM,gBAAgB;AACtB,WAAK,QAAQ,KAAK;AAClB,WAAK,QAAQ,GAAG,MAAM;AAAA,IACxB;AAEA,SAAQ,0BAA0B,CAAC,UAAuB;AACxD,UAAI,KAAK,QAAQ,CAAC,MAAM,aAAa,EAAE,SAAS,IAAI,EAAG,MAAK,QAAQ,KAAK;AAAA,IAC3E;AAEA,SAAQ,gBAAgB,CAAC,UAA+B;AACtD,UAAI,CAAC,KAAK,QAAQ,MAAM,QAAQ,SAAU;AAC1C,YAAM,iBAAiB,MAAM,aAAa,EAAE,SAAS,IAAI;AACzD,WAAK,QAAQ,KAAK;AAClB,UAAI,eAAgB,MAAK,QAAQ,GAAG,MAAM;AAAA,IAC5C;AA4BA;AAAA,SAAQ,iBAAiB,CAAC,UAA+B;AACvD,UAAI,CAAC,KAAK,cAAc,KAAK,SAAU;AACvC,UAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC3E,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,aAAK,QAAQ,IAAI;AACjB,aAAK,UAAU,CAAC,UAAU,MAAM,CAAC,CAAC;AAAA,MACpC,WAAW,MAAM,QAAQ,WAAW;AAClC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,aAAK,QAAQ,IAAI;AACjB,aAAK,UAAU,CAAC,UAAU,MAAM,MAAM,SAAS,CAAC,CAAC;AAAA,MACnD;AAAA,IACF;AAGA;AAAA,SAAQ,iBAAiB,CAAC,UAA+B;AACvD,UAAI,MAAM,QAAQ,OAAO;AACvB,aAAK,QAAQ,KAAK;AAClB;AAAA,MACF;AACA,UAAI,CAAC,CAAC,aAAa,WAAW,QAAQ,KAAK,EAAE,SAAS,MAAM,GAAG,EAAG;AAClE,YAAM,QAAQ,KAAK,WAAW;AAC9B,UAAI,MAAM,WAAW,EAAG;AACxB,YAAM,eAAe;AACrB,YAAM,gBAAgB;AACtB,YAAM,OAAO,MAAM,aAAa;AAChC,YAAM,UAAU,MAAM,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC;AAC7D,YAAM,OAAO,MAAM,SAAS;AAC5B,YAAM,OACJ,MAAM,QAAQ,SACV,IACA,MAAM,QAAQ,QACZ,OACA,MAAM,QAAQ,cACZ,UAAU,KAAK,YAAY,OAAO,IAAI,UAAU,IAChD,WAAW,IAAI,OAAO,UAAU;AAC1C,YAAM,IAAI,EAAE,MAAM;AAAA,IACpB;AAEA,SAAQ,eAAe,CAAC,UAAuB;AAC7C,YAAM,gBAAgB;AACtB,UAAI,CAAC,KAAK,WAAY;AACtB,YAAM,eAAe;AACrB,mBAAa,KAAK,UAAU;AAC5B,UAAI,KAAK,QAAQ,KAAK,IAAI,IAAI,KAAK,gBAAgB,IAAK;AACxD,WAAK,QAAQ,CAAC,KAAK,IAAI;AAAA,IACzB;AAKA;AAAA;AAAA;AAAA,SAAQ,eAAe,CAAC,UAAuB;AAC7C,UAAI,KAAK,QAAQ,CAAC,MAAM,aAAa,EAAE,KAAK,CAAC,SAAS,gBAAgB,iBAAiB,GAAG;AACxF,cAAM,gBAAgB;AACtB;AAAA,MACF;AACA,WAAK,QAAQ,KAAK;AAAA,IACpB;AAEA,SAAQ,sBAAsB,CAAC,UAAuB;AACpD,WAAK,aAAc,MAAM,OAA2B,cAAc,EAAE,SAAS,KAAK,CAAC,EAAE;AAAA,QACnF,CAAC,SAAS,KAAK,aAAa,KAAK,gBAAgB,CAAC,CAAC,KAAK,aAAa,KAAK;AAAA,MAC5E;AAAA,IACF;AAEA,SAAQ,mBAAmB,CAAC,UAAuB;AACjD,WAAK,UAAW,MAAM,OAA2B,cAAc,EAAE,SAAS,KAAK,CAAC,EAAE,SAAS;AAAA,IAC7F;AAAA;AAAA,EA5KA,oBAA0B;AACxB,UAAM,kBAAkB;AACxB,aAAS,iBAAiB,aAAa,KAAK,uBAAuB;AACnE,WAAO,iBAAiB,WAAW,KAAK,aAAa;AACrD,SAAK,iBAAiB,wBAAwB,KAAK,YAAY;AAC/D,SAAK,iBAAiB,gBAAgB,KAAK,cAAc;AACzD,SAAK,iBAAiB,gBAAgB,KAAK,cAAc;AAAA,EAC3D;AAAA,EAEA,uBAA6B;AAC3B,aAAS,oBAAoB,aAAa,KAAK,uBAAuB;AACtE,WAAO,oBAAoB,WAAW,KAAK,aAAa;AACxD,SAAK,oBAAoB,wBAAwB,KAAK,YAAY;AAClE,SAAK,oBAAoB,gBAAgB,KAAK,cAAc;AAC5D,SAAK,oBAAoB,gBAAgB,KAAK,cAAc;AAC5D,iBAAa,KAAK,UAAU;AAC5B,QAAI,SAAS,iBAAiB,KAAM,UAAS,eAAe;AAC5D,UAAM,qBAAqB;AAAA,EAC7B;AAAA,EAEU,aAAmB;AAC3B,SAAK,UAAU,cAAc,KAAK,MAAM,KAAK,WAAW,KAAK,eAAe,MAAM,oBAAoB,KAAK,aAAa,oBAAoB;AAAA,EAC9I;AAAA,EAEU,QAAQ,SAAqC;AACrD,QAAI,CAAC,QAAQ,IAAI,MAAM,EAAG;AAC1B,QAAI,KAAK,MAAM;AACb,YAAM,WAAW,SAAS;AAC1B,eAAS,eAAe;AACxB,UAAI,YAAY,aAAa,KAAM,UAAS,QAAQ,KAAK;AAAA,IAC3D,WAAW,SAAS,iBAAiB,MAAM;AACzC,eAAS,eAAe;AAAA,IAC1B;AAAA,EACF;AAAA,EAEQ,QAAQ,MAAqB;AACnC,QAAI,KAAK,SAAS,KAAM;AACxB,SAAK,OAAO;AACZ,SAAK,cAAc,IAAI,YAAuC,mBAAmB,EAAE,QAAQ,EAAE,KAAK,GAAG,SAAS,MAAM,UAAU,KAAK,CAAC,CAAC;AAAA,EACvI;AAAA,EAEQ,OAAO,OAA8B;AAC3C,WAAO,KAAK,eAAe,CAAC,KAAK,UAAU,CAAC,KAAK,YAAY,KAAK,cAAc,MAAM,gBAAgB;AAAA,EACxG;AAAA,EAmCQ,UAA8B;AACpC,WAAO,KAAK,WAAW,cAA2B,aAAa;AAAA,EACjE;AAAA;AAAA;AAAA,EAIQ,aAA4B;AAClC,UAAM,OAAO,KAAK,WAAW,cAA+B,qBAAqB;AACjF,QAAI,CAAC,KAAM,QAAO,CAAC;AACnB,UAAM,WACJ;AACF,UAAM,QAAuB,CAAC;AAC9B,eAAW,MAAM,KAAK,iBAAiB,EAAE,SAAS,KAAK,CAAC,GAAG;AACzD,UAAI,GAAG,QAAQ,QAAQ,EAAG,OAAM,KAAK,EAAiB;AACtD,YAAM,KAAK,GAAG,MAAM,KAAK,GAAG,iBAA8B,QAAQ,CAAC,CAAC;AAAA,IACtE;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA,EAIQ,UAAU,MAA+D;AAC/E,SAAK,KAAK,eAAe,KAAK,MAAM,KAAK,KAAK,WAAW,CAAC,GAAG,MAAM,CAAC;AAAA,EACtE;AAAA,EAyEA,SAAS;AACP,UAAM,OAAO;AAAA,oBACG,KAAK,iBAAiB,SAAS,cAAc,YAAY;AAAA,gBAC7D,CAAC,KAAK,OAAO;AAAA,qBACR,KAAK,QAAQ,WAAW,KAAK,QAAQ,UAAU,KAAK,SAAS;AAAA,uCAC3C,KAAK,gBAAgB;AAAA;AAExD,UAAM,eAAe;AAAA,QACjB,KAAK,iBAAiB,SAAS,OAAO,OAAO,IAAI,KAAK,QAAQ,0BAA0B,KAAK,KAAK,YAAY,OAAO;AAAA,QACrH,KAAK,iBAAiB,UAAU,OAAO,OAAO;AAAA,QAC9C,KAAK,aACH,2DAA2D,KAAK,iBAAiB,SAAS,YAAY,QAAQ,EAAE,IAAI,QAAG,YACvH,OAAO;AAAA;AAEb,UAAM,aAAa,cAAc,KAAK,gBAAgB,IAAI,KAAK,OAAO,WAAW,EAAE;AAEnF,WAAO;AAAA;AAAA,UAED,KAAK,OACH;AAAA;AAAA;AAAA,wBAGY,UAAU;AAAA,uBACX,KAAK,IAAI;AAAA,yBACP,KAAK,MAAM;AAAA,gCACJ,KAAK,aAAa,SAAS,OAAO;AAAA,gCAClC,KAAK,IAAI;AAAA,gCACT,KAAK,WAAW,SAAS,OAAO;AAAA,yBACvC,KAAK,YAAY;AAAA,2BACf,KAAK,cAAc;AAAA;AAAA,kBAE5B,YAAY;AAAA;AAAA,gBAGlB;AAAA;AAAA;AAAA,wBAGY,UAAU;AAAA;AAAA;AAAA,gCAGF,KAAK,IAAI;AAAA,4BACb,KAAK,QAAQ;AAAA,yBAChB,KAAK,YAAY;AAAA,2BACf,KAAK,cAAc;AAAA;AAAA,kBAE5B,YAAY;AAAA;AAAA,aAEjB;AAAA;AAAA;AAAA,uCAG0B,KAAK,KAAK,IAAI,KAAK,kBAAkB,IAAI,KAAK,OAAO,SAAS,EAAE;AAAA;AAAA,kBAErF,KAAK,QAAQ,KAAK,aAAa,IAAI,yBAAyB,KAAK,UAAU,KAAK,OAAO;AAAA,mBACtF,KAAK,YAAY;AAAA,qBACf,KAAK,cAAc;AAAA;AAAA,YAE5B,KAAK,OACH;AAAA;AAAA,+EAEiE,KAAK,WAAW;AAAA,sBACzE,YAAY,QAAQ,EAAE,CAAC,IAAI,KAAK,SAAS;AAAA;AAAA;AAAA,kBAG7C,KAAK,QAAQ,qDAAqD,KAAK,KAAK,SAAS,OAAO;AAAA,kBAEhG,OAAO;AAAA,8BACS,KAAK,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAIpD;AACF;AAAA;AA7qBa,SAEI,eAAgC;AAFpC,SAIJ,SAAS;AAAA,MACZ,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,QAKf,gBAAgB;AAAA;AAAA;AAAA;AAAA,QAIhB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAgRjB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCvB;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAtUf,SAuUX;AAKA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA3Uf,SA4UX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,gBAAgB,CAAC;AAAA,GA9U3C,SA+UX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,YAAY,CAAC;AAAA,GAlVvC,SAmVX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,aAAa,CAAC;AAAA,GAtVxC,SAuVX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA1Vf,SA2VX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA9Vf,SA+VX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,qBAAqB,CAAC;AAAA,GAlWhD,SAmWX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,wBAAwB,CAAC;AAAA,GAtWnD,SAuWX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,kBAAkB,CAAC;AAAA,GA1W7C,SA2WX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GA7W/B,SA8WX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAjX/B,SAkXX;AAIA;AAAA,EADC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GArXnB,SAsXX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAzX/B,SA0XX;AAKA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GA9X/B,SA+XX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAlY/B,SAmYX;AAUA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GA5Y/B,SA6YX;AAKA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAjZ/B,SAkZX;AAWA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,iBAAiB,SAAS,KAAK,CAAC;AAAA,GA5Z1D,SA6ZX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,WAAW,gBAAgB,CAAC;AAAA,GAha5C,SAiaX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,aAAa,CAAC;AAAA,GApaxC,SAqaX;AAQiB;AAAA,EAAhB,MAAM;AAAA,GA7aI,SA6aM;AAEA;AAAA,EAAhB,MAAM;AAAA,GA/aI,SA+aM;AAOA;AAAA,EAAhB,MAAM;AAAA,GAtbI,SAsbM;AAtbN,WAAN;AAAA,EADN,cAAc,aAAa;AAAA,GACf;","names":[]}
|