@solostylist/ui-kit 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/s-animated-gradient-text/index.d.ts +2 -0
- package/dist/s-animated-gradient-text/index.js +2 -0
- package/dist/s-animated-gradient-text/s-animated-gradient-text.d.ts +64 -0
- package/dist/s-animated-gradient-text/s-animated-gradient-text.js +92 -0
- package/dist/s-announcement-bar/index.d.ts +2 -0
- package/dist/s-announcement-bar/index.js +2 -0
- package/dist/s-announcement-bar/s-announcement-bar.d.ts +113 -0
- package/dist/s-announcement-bar/s-announcement-bar.js +272 -0
- package/dist/s-carousel/s-carousel.d.ts +2 -0
- package/dist/s-carousel/s-carousel.js +52 -50
- package/dist/s-date-picker/s-date-picker.js +1 -1
- package/dist/s-datetime-picker/s-datetime-picker.js +1 -1
- package/dist/s-drawer/index.d.ts +3 -0
- package/dist/s-drawer/index.js +2 -0
- package/dist/s-drawer/s-drawer.d.ts +70 -0
- package/dist/s-drawer/s-drawer.js +139 -0
- package/dist/s-gradient-blob-pulse/index.d.ts +2 -0
- package/dist/s-gradient-blob-pulse/index.js +2 -0
- package/dist/s-gradient-blob-pulse/s-gradient-blob-pulse.d.ts +62 -0
- package/dist/s-gradient-blob-pulse/s-gradient-blob-pulse.js +236 -0
- package/dist/s-gradient-icon/index.d.ts +1 -1
- package/dist/s-gradient-icon/s-gradient-icon.d.ts +4 -4
- package/dist/s-gradient-icon/s-gradient-icon.js +2 -2
- package/dist/s-icon-button/s-icon-button.d.ts +6 -2
- package/dist/s-interactive-card/index.d.ts +3 -0
- package/dist/s-interactive-card/index.js +2 -0
- package/dist/s-interactive-card/s-interactive-card.d.ts +57 -0
- package/dist/s-interactive-card/s-interactive-card.js +150 -0
- package/dist/s-language-switcher/s-language-switcher.js +66 -71
- package/dist/s-list-action-item/index.d.ts +2 -0
- package/dist/s-list-action-item/index.js +2 -0
- package/dist/s-list-action-item/s-list-action-item.d.ts +89 -0
- package/dist/s-list-action-item/s-list-action-item.js +149 -0
- package/dist/s-mega-menu/index.d.ts +3 -0
- package/dist/s-mega-menu/index.js +2 -0
- package/dist/s-mega-menu/mega-menu-panel.d.ts +38 -0
- package/dist/s-mega-menu/mega-menu-panel.js +251 -0
- package/dist/s-mega-menu/mega-menu-slots.d.ts +65 -0
- package/dist/s-mega-menu/mega-menu-slots.js +232 -0
- package/dist/s-mega-menu/mega-menu-trigger.d.ts +35 -0
- package/dist/s-mega-menu/mega-menu-trigger.js +49 -0
- package/dist/s-mega-menu/s-mega-menu.d.ts +23 -0
- package/dist/s-mega-menu/s-mega-menu.js +225 -0
- package/dist/s-mega-menu/types.d.ts +188 -0
- package/dist/s-mega-menu/types.js +0 -0
- package/dist/s-mega-menu/utils.d.ts +51 -0
- package/dist/s-mega-menu/utils.js +51 -0
- package/dist/s-mobile-dock/index.d.ts +3 -0
- package/dist/s-mobile-dock/index.js +2 -0
- package/dist/s-mobile-dock/s-mobile-dock.d.ts +96 -0
- package/dist/s-mobile-dock/s-mobile-dock.js +145 -0
- package/dist/s-nav-item/index.d.ts +1 -1
- package/dist/s-nav-item/s-nav-item.d.ts +35 -16
- package/dist/s-nav-item/s-nav-item.js +55 -77
- package/dist/s-nav-items/s-nav-items.js +68 -112
- package/dist/s-number-range/index.d.ts +3 -0
- package/dist/s-number-range/index.js +2 -0
- package/dist/s-number-range/s-number-range.d.ts +109 -0
- package/dist/s-number-range/s-number-range.js +250 -0
- package/dist/s-popover/index.d.ts +5 -0
- package/dist/s-popover/index.js +3 -0
- package/dist/s-popover/placement.d.ts +14 -0
- package/dist/s-popover/placement.js +65 -0
- package/dist/s-popover/s-popover-content.d.ts +22 -0
- package/dist/s-popover/s-popover-content.js +21 -0
- package/dist/s-popover/s-popover.d.ts +59 -0
- package/dist/s-popover/s-popover.js +66 -0
- package/dist/s-product-card/index.d.ts +3 -0
- package/dist/s-product-card/index.js +2 -0
- package/dist/s-product-card/s-product-card.d.ts +216 -0
- package/dist/s-product-card/s-product-card.js +499 -0
- package/dist/s-product-gallery/index.d.ts +3 -0
- package/dist/s-product-gallery/index.js +2 -0
- package/dist/s-product-gallery/s-product-gallery.d.ts +116 -0
- package/dist/s-product-gallery/s-product-gallery.js +427 -0
- package/dist/s-scroll-to-top/s-scroll-to-top.d.ts +1 -1
- package/dist/s-segmented-control/index.d.ts +3 -0
- package/dist/s-segmented-control/index.js +2 -0
- package/dist/s-segmented-control/s-segmented-control.d.ts +94 -0
- package/dist/s-segmented-control/s-segmented-control.js +298 -0
- package/dist/s-stepper/index.d.ts +3 -0
- package/dist/s-stepper/index.js +2 -0
- package/dist/s-stepper/s-stepper.d.ts +90 -0
- package/dist/s-stepper/s-stepper.js +102 -0
- package/dist/s-swatch/index.d.ts +3 -0
- package/dist/s-swatch/index.js +2 -0
- package/dist/s-swatch/s-swatch.d.ts +235 -0
- package/dist/s-swatch/s-swatch.js +218 -0
- package/dist/s-text-editor/s-text-editor-toolbar.js +105 -108
- package/dist/s-tool-item/s-tool-item.d.ts +10 -6
- package/dist/s-tool-item/s-tool-item.js +12 -12
- package/dist/theme/component-augmentation.d.ts +65 -1
- package/dist/theme/components/drawer.d.ts +1 -0
- package/dist/theme/components/drawer.js +4 -1
- package/dist/theme/components/slider.js +18 -1
- package/dist/theme/components/step-connector.d.ts +0 -3
- package/dist/theme/components/step-connector.js +1 -6
- package/dist/theme/components/step-icon.d.ts +3 -12
- package/dist/theme/components/step-icon.js +3 -14
- package/package.json +7 -2
- package/dist/theme/components/components.d.ts +0 -2
- package/dist/theme/components/slider.d.ts +0 -34
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { toSxArray as e } from "../utils/sx.js";
|
|
2
|
+
import { resolveOwnerStateSlotProps as t } from "../utils/slots.js";
|
|
3
|
+
import { LIST_ATTRIBUTE as n, NODE_ATTRIBUTE as r, PANEL_ATTRIBUTE as i, ROW_ATTRIBUTE as a, focusAdjacentList as o, focusRowByOffset as s, getFirstRow as c, getSiblingRows as l, hasNestedChildren as u, resolveLayout as d, resolveSubmenuSide as f } from "./utils.js";
|
|
4
|
+
import { SMegaMenuColumn as p, SMegaMenuHeading as m, SMegaMenuItemRoot as h, SMegaMenuPanel as g, SMegaMenuSubmenu as _, SMegaMenuSubmenuNode as v } from "./mega-menu-slots.js";
|
|
5
|
+
import * as y from "react";
|
|
6
|
+
import { jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
7
|
+
import { mergeSlotProps as S, useEventCallback as C, useForkRef as w } from "@mui/material/utils";
|
|
8
|
+
import T from "@mui/utils/appendOwnerState";
|
|
9
|
+
import E from "@mui/icons-material/ChevronRight";
|
|
10
|
+
//#region lib/s-mega-menu/mega-menu-panel.tsx
|
|
11
|
+
function D(e, t, n) {
|
|
12
|
+
return {
|
|
13
|
+
...e.ownerState,
|
|
14
|
+
active: e.getIsActive(t),
|
|
15
|
+
hasChildren: !!t.children?.length,
|
|
16
|
+
item: t,
|
|
17
|
+
...n
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function O({ closeParent: e, ctx: n, depth: r, item: i, onOpenSubmenu: c, onRowClick: u, open: d = !1, resolvedLayout: f, rowRef: p, side: m = "right", submenuId: g, triggerId: _ }) {
|
|
21
|
+
let v = D(n, i, {
|
|
22
|
+
depth: r,
|
|
23
|
+
heading: !1,
|
|
24
|
+
open: d,
|
|
25
|
+
resolvedLayout: f,
|
|
26
|
+
side: m
|
|
27
|
+
}), y = n.slots?.item ?? h, x = v.hasChildren, O = C((t) => {
|
|
28
|
+
let r = t.currentTarget;
|
|
29
|
+
switch (t.key) {
|
|
30
|
+
case "ArrowDown":
|
|
31
|
+
t.preventDefault(), s(l(r), r, 1);
|
|
32
|
+
break;
|
|
33
|
+
case "ArrowUp":
|
|
34
|
+
t.preventDefault(), s(l(r), r, -1);
|
|
35
|
+
break;
|
|
36
|
+
case "Home":
|
|
37
|
+
t.preventDefault(), l(r)[0]?.focus();
|
|
38
|
+
break;
|
|
39
|
+
case "End": {
|
|
40
|
+
t.preventDefault();
|
|
41
|
+
let e = l(r);
|
|
42
|
+
e[e.length - 1]?.focus();
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case "ArrowRight":
|
|
46
|
+
t.preventDefault(), c ? c() : o(r, 1);
|
|
47
|
+
break;
|
|
48
|
+
case "ArrowLeft":
|
|
49
|
+
t.preventDefault(), e ? e() : o(r, -1) || n.closeMenu({
|
|
50
|
+
event: t,
|
|
51
|
+
focusTrigger: !0,
|
|
52
|
+
reason: "triggerKeyDown"
|
|
53
|
+
});
|
|
54
|
+
break;
|
|
55
|
+
case "Escape":
|
|
56
|
+
t.preventDefault(), n.closeMenu({
|
|
57
|
+
event: t,
|
|
58
|
+
focusTrigger: !0,
|
|
59
|
+
reason: "escapeKeyDown"
|
|
60
|
+
});
|
|
61
|
+
break;
|
|
62
|
+
default: break;
|
|
63
|
+
}
|
|
64
|
+
}), k = x ? void 0 : i.component ?? (i.href ? n.linkComponent : void 0), A = x ? void 0 : i.href, { slotProps: j, ...M } = t(n.slotProps?.item, v) ?? {}, { ref: N, ...P } = T(y, S(M, {
|
|
65
|
+
[a]: "",
|
|
66
|
+
"aria-controls": x ? g : void 0,
|
|
67
|
+
"aria-current": v.active && A ? "page" : void 0,
|
|
68
|
+
"aria-expanded": x ? d : void 0,
|
|
69
|
+
component: k,
|
|
70
|
+
description: i.description,
|
|
71
|
+
disabled: i.disabled,
|
|
72
|
+
href: A,
|
|
73
|
+
icon: i.icon,
|
|
74
|
+
onClick: u,
|
|
75
|
+
onKeyDown: O,
|
|
76
|
+
rel: A ? i.rel : void 0,
|
|
77
|
+
selected: v.active,
|
|
78
|
+
slotProps: {
|
|
79
|
+
...j,
|
|
80
|
+
label: S(j?.label, { variant: r === 0 ? "body1" : "body2" }),
|
|
81
|
+
trailing: S(j?.trailing, { sx: { color: "inherit" } })
|
|
82
|
+
},
|
|
83
|
+
target: A ? i.target : void 0,
|
|
84
|
+
trailing: x ? /* @__PURE__ */ b(E, { fontSize: "small" }) : void 0,
|
|
85
|
+
id: _,
|
|
86
|
+
variant: f === "columns" ? "plain" : "inset"
|
|
87
|
+
}), v), F = w(N, p);
|
|
88
|
+
return /* @__PURE__ */ b(y, {
|
|
89
|
+
...P,
|
|
90
|
+
ref: F,
|
|
91
|
+
label: n.renderItem ? n.renderItem(i, v) : i.label
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function k({ closeParent: n, ctx: i, depth: a, item: o, onSubmenuOpenChange: s, open: l = !1, resolvedLayout: u }) {
|
|
95
|
+
let d = y.useRef(null), p = y.useRef(null), m = y.useRef(null), h = y.useRef(void 0), g = y.useRef(!1), [E, k] = y.useState("right"), A = y.useId(), M = `${A}-submenu`, N = `${A}-trigger`, P = o.children ?? [], F = y.useCallback(() => {
|
|
96
|
+
h.current &&= (clearTimeout(h.current), void 0);
|
|
97
|
+
}, []);
|
|
98
|
+
y.useEffect(() => F, [F]);
|
|
99
|
+
let I = C(() => {
|
|
100
|
+
k(f(d.current, p.current));
|
|
101
|
+
});
|
|
102
|
+
y.useLayoutEffect(() => {
|
|
103
|
+
l && (I(), g.current && (g.current = !1, c(p.current)?.focus()));
|
|
104
|
+
}, [l, I]);
|
|
105
|
+
let L = C(() => {
|
|
106
|
+
F(), !o.disabled && (I(), s?.(!0));
|
|
107
|
+
}), R = C(() => {
|
|
108
|
+
F(), h.current = setTimeout(() => s?.(!1), i.ownerState.closeDelay);
|
|
109
|
+
}), z = C((e) => {
|
|
110
|
+
F(), s?.(!1), e && m.current?.focus();
|
|
111
|
+
}), B = C(() => {
|
|
112
|
+
if (l) {
|
|
113
|
+
c(p.current)?.focus();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
g.current = !0, L();
|
|
117
|
+
}), V = C(() => {
|
|
118
|
+
if (!l) {
|
|
119
|
+
L();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
z(!1);
|
|
123
|
+
}), H = D(i, o, {
|
|
124
|
+
depth: a,
|
|
125
|
+
heading: !1,
|
|
126
|
+
open: l,
|
|
127
|
+
resolvedLayout: u,
|
|
128
|
+
side: E
|
|
129
|
+
}), U = i.slots?.submenuNode ?? v, W = i.slots?.submenu ?? _, G = C((e) => {
|
|
130
|
+
let t = e.relatedTarget;
|
|
131
|
+
!t || e.currentTarget.contains(t) || z(!1);
|
|
132
|
+
}), { ref: K, ...q } = T(U, S(t(i.slotProps?.submenuNode, H), {
|
|
133
|
+
[r]: "",
|
|
134
|
+
"data-side": E,
|
|
135
|
+
onBlurCapture: G,
|
|
136
|
+
onFocus: I,
|
|
137
|
+
onPointerEnter: (e) => {
|
|
138
|
+
!o.disabled && e.pointerType !== "touch" && L();
|
|
139
|
+
},
|
|
140
|
+
onPointerLeave: (e) => {
|
|
141
|
+
e.pointerType !== "touch" && R();
|
|
142
|
+
}
|
|
143
|
+
}), H), J = w(K, d), { ref: Y, sx: X, ...Z } = T(W, S(t(i.slotProps?.submenu, H), {
|
|
144
|
+
"aria-hidden": l ? void 0 : !0,
|
|
145
|
+
"aria-labelledby": N,
|
|
146
|
+
id: M,
|
|
147
|
+
role: "region"
|
|
148
|
+
}), H), Q = w(Y, p);
|
|
149
|
+
return /* @__PURE__ */ x(U, {
|
|
150
|
+
...q,
|
|
151
|
+
ref: J,
|
|
152
|
+
children: [/* @__PURE__ */ b(O, {
|
|
153
|
+
closeParent: n,
|
|
154
|
+
ctx: i,
|
|
155
|
+
depth: a,
|
|
156
|
+
item: o,
|
|
157
|
+
onOpenSubmenu: B,
|
|
158
|
+
onRowClick: V,
|
|
159
|
+
open: l,
|
|
160
|
+
resolvedLayout: u,
|
|
161
|
+
rowRef: m,
|
|
162
|
+
side: E,
|
|
163
|
+
submenuId: M,
|
|
164
|
+
triggerId: N
|
|
165
|
+
}), /* @__PURE__ */ b(W, {
|
|
166
|
+
...Z,
|
|
167
|
+
ref: Q,
|
|
168
|
+
sx: [...e(X)],
|
|
169
|
+
children: l || i.keepMounted ? /* @__PURE__ */ b(j, {
|
|
170
|
+
closeParent: () => z(!0),
|
|
171
|
+
ctx: i,
|
|
172
|
+
depth: a + 1,
|
|
173
|
+
items: P
|
|
174
|
+
}) : null
|
|
175
|
+
})]
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function A({ closeParent: e, ctx: r, depth: i, item: a }) {
|
|
179
|
+
let o = D(r, a, {
|
|
180
|
+
depth: i,
|
|
181
|
+
heading: !0,
|
|
182
|
+
open: !1,
|
|
183
|
+
resolvedLayout: "columns",
|
|
184
|
+
side: "right"
|
|
185
|
+
}), s = `${y.useId()}-heading`, c = r.slots?.column ?? p, l = r.slots?.heading ?? m, u = T(c, S(t(r.slotProps?.column, o), {
|
|
186
|
+
[n]: "",
|
|
187
|
+
"aria-labelledby": s
|
|
188
|
+
}), o), d = T(l, S(t(r.slotProps?.heading, o), {
|
|
189
|
+
component: "h3",
|
|
190
|
+
id: s
|
|
191
|
+
}), o);
|
|
192
|
+
return /* @__PURE__ */ x(c, {
|
|
193
|
+
...u,
|
|
194
|
+
children: [/* @__PURE__ */ b(l, {
|
|
195
|
+
...d,
|
|
196
|
+
children: r.renderItem ? r.renderItem(a, o) : a.label
|
|
197
|
+
}), (a.children ?? []).map((t) => /* @__PURE__ */ b(O, {
|
|
198
|
+
closeParent: e,
|
|
199
|
+
ctx: r,
|
|
200
|
+
depth: i + 1,
|
|
201
|
+
item: t,
|
|
202
|
+
onRowClick: (e) => r.closeMenu({
|
|
203
|
+
event: e,
|
|
204
|
+
reason: "itemClick"
|
|
205
|
+
}),
|
|
206
|
+
resolvedLayout: "columns"
|
|
207
|
+
}, t.id))]
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
function j({ closeParent: r, ctx: a, depth: o, items: s }) {
|
|
211
|
+
let c = d(s, a.ownerState.layout), [l, f] = y.useState(null), p = c === "columns" || !u(s), m = {
|
|
212
|
+
...a.ownerState,
|
|
213
|
+
depth: o,
|
|
214
|
+
resolvedLayout: c,
|
|
215
|
+
scrollable: p
|
|
216
|
+
}, h = a.slots?.panel ?? g, { sx: _, ...v } = T(h, S(t(a.slotProps?.panel, m), {
|
|
217
|
+
[i]: "",
|
|
218
|
+
...c === "list" ? { [n]: "" } : {}
|
|
219
|
+
}), m);
|
|
220
|
+
return /* @__PURE__ */ b(h, {
|
|
221
|
+
...v,
|
|
222
|
+
sx: [...e(_)],
|
|
223
|
+
children: c === "columns" ? s.map((e) => /* @__PURE__ */ b(A, {
|
|
224
|
+
closeParent: r,
|
|
225
|
+
ctx: a,
|
|
226
|
+
depth: o,
|
|
227
|
+
item: e,
|
|
228
|
+
resolvedLayout: c
|
|
229
|
+
}, e.id)) : s.map((e) => e.children?.length ? /* @__PURE__ */ b(k, {
|
|
230
|
+
closeParent: r,
|
|
231
|
+
ctx: a,
|
|
232
|
+
depth: o,
|
|
233
|
+
item: e,
|
|
234
|
+
onSubmenuOpenChange: (t) => f((n) => t ? e.id : n === e.id ? null : n),
|
|
235
|
+
open: l === e.id,
|
|
236
|
+
resolvedLayout: c
|
|
237
|
+
}, e.id) : /* @__PURE__ */ b(O, {
|
|
238
|
+
closeParent: r,
|
|
239
|
+
ctx: a,
|
|
240
|
+
depth: o,
|
|
241
|
+
item: e,
|
|
242
|
+
onRowClick: (e) => a.closeMenu({
|
|
243
|
+
event: e,
|
|
244
|
+
reason: "itemClick"
|
|
245
|
+
}),
|
|
246
|
+
resolvedLayout: c
|
|
247
|
+
}, e.id))
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
//#endregion
|
|
251
|
+
export { j as MegaMenuPanelContent };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { SMegaMenuItemState, SMegaMenuOwnerState, SMegaMenuPanelState, SMegaMenuTriggerState } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Navigation root. Semantic `nav` markup is fixed by the default slot; consumers
|
|
4
|
+
* can replace the slot when their application needs a custom navigation root.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SMegaMenuRoot: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
7
|
+
ownerState: SMegaMenuOwnerState;
|
|
8
|
+
}, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, {}>;
|
|
9
|
+
/**
|
|
10
|
+
* Top-level trigger.
|
|
11
|
+
*
|
|
12
|
+
* While its panel is open an invisible `::after` bridge extends past the bottom
|
|
13
|
+
* edge so the pointer never leaves a hoverable element on its way down to the
|
|
14
|
+
* panel surface. See the close-intent explanation in `s-mega-menu.tsx`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SMegaMenuTrigger: import('@emotion/styled').StyledComponent<import('@mui/material').ButtonBaseOwnProps & Omit<import('@mui/material').ButtonBaseOwnProps, keyof import('@mui/material').ButtonBaseOwnProps> & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "className" | "style" | "classes" | "children" | "sx" | "disabled" | "tabIndex" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "nativeButton" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "type"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
17
|
+
ownerState: SMegaMenuTriggerState;
|
|
18
|
+
}, {}, {}>;
|
|
19
|
+
/** Chevron rendered by the default trigger content, rotated while the panel is open. */
|
|
20
|
+
export declare const SMegaMenuTriggerArrow: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
21
|
+
ownerState: SMegaMenuTriggerState;
|
|
22
|
+
}, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
|
|
23
|
+
/**
|
|
24
|
+
* Popover hosting the top-level panel.
|
|
25
|
+
*
|
|
26
|
+
* `pointerEvents: 'none'` on the popover root plus `pointerEvents: 'auto'` on the
|
|
27
|
+
* surface keeps the page underneath interactive — the non-modal pattern
|
|
28
|
+
* documented in the SPopover `hover-preview` example. Without it the modal root
|
|
29
|
+
* would swallow every pointer event outside the surface.
|
|
30
|
+
*/
|
|
31
|
+
export declare const SMegaMenuPopover: import('@emotion/styled').StyledComponent<Omit<import('../s-popover').SPopoverProps, "ref"> & import('react').RefAttributes<HTMLDivElement> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
32
|
+
ownerState?: SMegaMenuOwnerState;
|
|
33
|
+
}, {}, {}>;
|
|
34
|
+
/** Content container inside a panel surface. Also used for every flyout submenu. */
|
|
35
|
+
export declare const SMegaMenuPanel: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
36
|
+
ownerState: SMegaMenuPanelState;
|
|
37
|
+
}, {}, {}>;
|
|
38
|
+
/** Column wrapper in the `columns` layout. */
|
|
39
|
+
export declare const SMegaMenuColumn: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
40
|
+
ownerState: SMegaMenuItemState;
|
|
41
|
+
}, {}, {}>;
|
|
42
|
+
/** Non-interactive label of one column group. */
|
|
43
|
+
export declare const SMegaMenuHeading: import('@emotion/styled').StyledComponent<import('@mui/material').TypographyOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "color" | "className" | "style" | "classes" | "children" | "sx" | "variant" | "align" | "gutterBottom" | "noWrap" | "variantMapping"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
44
|
+
ownerState: SMegaMenuItemState;
|
|
45
|
+
}, {}, {}>;
|
|
46
|
+
/** Panel row. */
|
|
47
|
+
export declare const SMegaMenuItemRoot: import('@emotion/styled').StyledComponent<Omit<import('../s-list-action-item').SListActionItemProps, "ref"> & import('react').RefAttributes<HTMLElement> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
48
|
+
ownerState: SMegaMenuItemState;
|
|
49
|
+
}, {}, {}>;
|
|
50
|
+
/**
|
|
51
|
+
* Positioned wrapper around a row plus its flyout submenu.
|
|
52
|
+
*
|
|
53
|
+
* While open, an invisible `::after` bridge spans the horizontal gap between the
|
|
54
|
+
* row and the submenu, flipped to the other side when collision detection moved
|
|
55
|
+
* the submenu left. Because the submenu is a DOM descendant of this wrapper, the
|
|
56
|
+
* pointer never leaves the wrapper on its way across — `pointerleave` simply
|
|
57
|
+
* does not fire.
|
|
58
|
+
*/
|
|
59
|
+
export declare const SMegaMenuSubmenuNode: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
60
|
+
ownerState: SMegaMenuItemState;
|
|
61
|
+
}, {}, {}>;
|
|
62
|
+
/** Flyout submenu surface rendered next to a nested row. */
|
|
63
|
+
export declare const SMegaMenuSubmenu: import('@emotion/styled').StyledComponent<import('@mui/material').PaperOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "className" | "style" | "classes" | "children" | "elevation" | "square" | "sx" | "variant"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
|
|
64
|
+
ownerState: SMegaMenuItemState;
|
|
65
|
+
}, {}, {}>;
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { actionHoverMedia as e, getFocusVisibleStyle as t, reducedMotionMedia as n } from "../theme/components/action-styles.js";
|
|
2
|
+
import { SListActionItem as r } from "../s-list-action-item/s-list-action-item.js";
|
|
3
|
+
import { SPopover as i } from "../s-popover/s-popover.js";
|
|
4
|
+
import { Box as a, ButtonBase as o, Paper as s, Typography as c, styled as l } from "@mui/material";
|
|
5
|
+
//#region lib/s-mega-menu/mega-menu-slots.tsx
|
|
6
|
+
var u = 44, d = .75, f = l("nav", {
|
|
7
|
+
name: "SMegaMenu",
|
|
8
|
+
slot: "Root",
|
|
9
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
10
|
+
})(({ theme: e }) => ({
|
|
11
|
+
alignItems: "center",
|
|
12
|
+
display: "flex",
|
|
13
|
+
flexWrap: "nowrap",
|
|
14
|
+
gap: e.spacing(1.25),
|
|
15
|
+
minWidth: 0,
|
|
16
|
+
[e.breakpoints.down("lg")]: { gap: e.spacing(.75) }
|
|
17
|
+
})), p = l(o, {
|
|
18
|
+
name: "SMegaMenu",
|
|
19
|
+
slot: "Trigger",
|
|
20
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
21
|
+
})(({ theme: r }) => ({
|
|
22
|
+
...r.typography.body1,
|
|
23
|
+
alignItems: "center",
|
|
24
|
+
backgroundColor: "transparent",
|
|
25
|
+
border: "1px solid transparent",
|
|
26
|
+
borderRadius: r.radius.md,
|
|
27
|
+
color: (r.vars ?? r).palette.text.primary,
|
|
28
|
+
display: "inline-flex",
|
|
29
|
+
gap: r.spacing(1.25),
|
|
30
|
+
minHeight: u,
|
|
31
|
+
minWidth: 0,
|
|
32
|
+
padding: r.spacing(.75, 1.5),
|
|
33
|
+
position: "relative",
|
|
34
|
+
textDecoration: "none",
|
|
35
|
+
transition: r.transitions.create([
|
|
36
|
+
"background-color",
|
|
37
|
+
"border-color",
|
|
38
|
+
"color"
|
|
39
|
+
], { duration: r.transitions.duration.shorter }),
|
|
40
|
+
whiteSpace: "nowrap",
|
|
41
|
+
[e]: { "&:hover": { backgroundColor: (r.vars ?? r).palette.action.hover } },
|
|
42
|
+
"&.Mui-focusVisible": {
|
|
43
|
+
backgroundColor: (r.vars ?? r).palette.action.focus,
|
|
44
|
+
...t(r)
|
|
45
|
+
},
|
|
46
|
+
"&.Mui-disabled": { color: (r.vars ?? r).palette.text.disabled },
|
|
47
|
+
[r.breakpoints.down("lg")]: { padding: r.spacing(.75, 1) },
|
|
48
|
+
[n]: { transition: "none" },
|
|
49
|
+
variants: [{
|
|
50
|
+
props: ({ ownerState: e }) => e.open,
|
|
51
|
+
style: {
|
|
52
|
+
backgroundColor: (r.vars ?? r).palette.action.selected,
|
|
53
|
+
"&::after": {
|
|
54
|
+
content: "\"\"",
|
|
55
|
+
height: r.spacing(2.5),
|
|
56
|
+
left: 0,
|
|
57
|
+
position: "absolute",
|
|
58
|
+
top: "100%",
|
|
59
|
+
width: "100%"
|
|
60
|
+
},
|
|
61
|
+
[e]: { "&:hover": { backgroundColor: (r.vars ?? r).palette.action.selected } }
|
|
62
|
+
}
|
|
63
|
+
}, {
|
|
64
|
+
props: ({ ownerState: e }) => e.active,
|
|
65
|
+
style: {
|
|
66
|
+
backgroundColor: (r.vars ?? r).palette.action.selected,
|
|
67
|
+
color: (r.vars ?? r).palette.text.primary,
|
|
68
|
+
fontWeight: r.typography.fontWeightMedium,
|
|
69
|
+
[e]: { "&:hover": { backgroundColor: (r.vars ?? r).palette.action.selected } }
|
|
70
|
+
}
|
|
71
|
+
}]
|
|
72
|
+
})), m = l("span", {
|
|
73
|
+
name: "SMegaMenu",
|
|
74
|
+
slot: "TriggerArrow",
|
|
75
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
76
|
+
})(({ theme: e }) => ({
|
|
77
|
+
alignItems: "center",
|
|
78
|
+
color: "inherit",
|
|
79
|
+
display: "inline-flex",
|
|
80
|
+
flexShrink: 0,
|
|
81
|
+
transition: e.transitions.create(["transform"], { duration: e.transitions.duration.shorter }),
|
|
82
|
+
[n]: { transition: "none" },
|
|
83
|
+
variants: [{
|
|
84
|
+
props: ({ ownerState: e }) => e.open,
|
|
85
|
+
style: { transform: "rotate(180deg)" }
|
|
86
|
+
}]
|
|
87
|
+
})), h = l(i, {
|
|
88
|
+
name: "SMegaMenu",
|
|
89
|
+
slot: "Popover",
|
|
90
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
91
|
+
})({ pointerEvents: "none" }), g = l(a, {
|
|
92
|
+
name: "SMegaMenu",
|
|
93
|
+
slot: "Panel",
|
|
94
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
95
|
+
})(({ theme: e }) => ({
|
|
96
|
+
minWidth: 0,
|
|
97
|
+
variants: [
|
|
98
|
+
{
|
|
99
|
+
props: ({ ownerState: e }) => e.resolvedLayout === "list",
|
|
100
|
+
style: {
|
|
101
|
+
display: "block",
|
|
102
|
+
paddingBlock: e.spacing(d)
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
props: ({ ownerState: e }) => e.resolvedLayout === "columns",
|
|
107
|
+
style: {
|
|
108
|
+
alignItems: "start",
|
|
109
|
+
columnGap: e.spacing(5),
|
|
110
|
+
display: "grid",
|
|
111
|
+
gridAutoColumns: "1fr",
|
|
112
|
+
gridAutoFlow: "column",
|
|
113
|
+
padding: e.spacing(d)
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
props: ({ ownerState: e }) => e.scrollable,
|
|
118
|
+
style: {
|
|
119
|
+
maxHeight: "min(70vh, 620px)",
|
|
120
|
+
overflowY: "auto"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
})), _ = l(a, {
|
|
125
|
+
name: "SMegaMenu",
|
|
126
|
+
slot: "Column",
|
|
127
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
128
|
+
})(({ theme: e }) => ({
|
|
129
|
+
display: "flex",
|
|
130
|
+
flexDirection: "column",
|
|
131
|
+
gap: e.spacing(d),
|
|
132
|
+
minWidth: 0
|
|
133
|
+
})), v = l(c, {
|
|
134
|
+
name: "SMegaMenu",
|
|
135
|
+
slot: "Heading",
|
|
136
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
137
|
+
})(({ theme: e }) => ({
|
|
138
|
+
...e.typography.subtitle1,
|
|
139
|
+
color: (e.vars ?? e).palette.text.primary,
|
|
140
|
+
margin: 0,
|
|
141
|
+
padding: e.spacing(1, 1.5, .5),
|
|
142
|
+
whiteSpace: "nowrap"
|
|
143
|
+
})), y = l(r, {
|
|
144
|
+
name: "SMegaMenu",
|
|
145
|
+
slot: "Item",
|
|
146
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
147
|
+
})(({ theme: e }) => ({
|
|
148
|
+
borderRadius: e.radius.md,
|
|
149
|
+
flex: "0 0 auto",
|
|
150
|
+
paddingInline: e.spacing(1.5),
|
|
151
|
+
whiteSpace: "nowrap",
|
|
152
|
+
variants: [{
|
|
153
|
+
props: ({ ownerState: e }) => e.resolvedLayout === "list",
|
|
154
|
+
style: {
|
|
155
|
+
marginInline: e.spacing(d),
|
|
156
|
+
width: `calc(100% - ${e.spacing(d * 2)})`
|
|
157
|
+
}
|
|
158
|
+
}]
|
|
159
|
+
})), b = l(a, {
|
|
160
|
+
name: "SMegaMenu",
|
|
161
|
+
slot: "SubmenuNode",
|
|
162
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
163
|
+
})(({ theme: e }) => ({
|
|
164
|
+
minWidth: 0,
|
|
165
|
+
position: "relative",
|
|
166
|
+
variants: [{
|
|
167
|
+
props: ({ ownerState: e }) => e.open,
|
|
168
|
+
style: { "&::after": {
|
|
169
|
+
content: "\"\"",
|
|
170
|
+
height: "100%",
|
|
171
|
+
left: "100%",
|
|
172
|
+
position: "absolute",
|
|
173
|
+
top: 0,
|
|
174
|
+
width: e.spacing(1.5)
|
|
175
|
+
} }
|
|
176
|
+
}, {
|
|
177
|
+
props: ({ ownerState: e }) => e.open && e.side === "left",
|
|
178
|
+
style: { "&::after": {
|
|
179
|
+
left: "auto",
|
|
180
|
+
right: "100%"
|
|
181
|
+
} }
|
|
182
|
+
}]
|
|
183
|
+
})), x = l(s, {
|
|
184
|
+
name: "SMegaMenu",
|
|
185
|
+
slot: "Submenu",
|
|
186
|
+
shouldForwardProp: (e) => e !== "ownerState"
|
|
187
|
+
})(({ theme: e }) => ({
|
|
188
|
+
backgroundColor: (e.vars ?? e).palette.background.paper,
|
|
189
|
+
backgroundImage: "none",
|
|
190
|
+
border: "1px solid",
|
|
191
|
+
borderColor: (e.vars ?? e).palette.divider,
|
|
192
|
+
borderRadius: e.radius.md,
|
|
193
|
+
left: `calc(100% + ${e.spacing(1.5)})`,
|
|
194
|
+
minWidth: e.spacing(25),
|
|
195
|
+
opacity: 0,
|
|
196
|
+
overflow: "visible",
|
|
197
|
+
pointerEvents: "none",
|
|
198
|
+
position: "absolute",
|
|
199
|
+
top: 0,
|
|
200
|
+
transform: `translateX(${e.spacing(1)})`,
|
|
201
|
+
transition: e.transitions.create([
|
|
202
|
+
"opacity",
|
|
203
|
+
"transform",
|
|
204
|
+
"visibility"
|
|
205
|
+
], { duration: e.transitions.duration.shorter }),
|
|
206
|
+
visibility: "hidden",
|
|
207
|
+
width: "max-content",
|
|
208
|
+
zIndex: 1,
|
|
209
|
+
[n]: {
|
|
210
|
+
transform: "none",
|
|
211
|
+
transition: "none"
|
|
212
|
+
},
|
|
213
|
+
variants: [{
|
|
214
|
+
props: ({ ownerState: e }) => e.side === "left",
|
|
215
|
+
style: {
|
|
216
|
+
left: "auto",
|
|
217
|
+
right: `calc(100% + ${e.spacing(1.5)})`,
|
|
218
|
+
transform: `translateX(-${e.spacing(1)})`
|
|
219
|
+
}
|
|
220
|
+
}, {
|
|
221
|
+
props: ({ ownerState: e }) => e.open,
|
|
222
|
+
style: {
|
|
223
|
+
opacity: 1,
|
|
224
|
+
pointerEvents: "auto",
|
|
225
|
+
transform: "translateX(0)",
|
|
226
|
+
visibility: "visible",
|
|
227
|
+
zIndex: 2
|
|
228
|
+
}
|
|
229
|
+
}]
|
|
230
|
+
}));
|
|
231
|
+
//#endregion
|
|
232
|
+
export { _ as SMegaMenuColumn, v as SMegaMenuHeading, y as SMegaMenuItemRoot, g as SMegaMenuPanel, h as SMegaMenuPopover, f as SMegaMenuRoot, x as SMegaMenuSubmenu, b as SMegaMenuSubmenuNode, p as SMegaMenuTrigger, m as SMegaMenuTriggerArrow };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { SMegaMenuItem, SMegaMenuOwnerState, SMegaMenuSlotProps, SMegaMenuSlots, SMegaMenuTriggerState } from './types';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface MegaMenuTriggerButtonProps<T = unknown> {
|
|
4
|
+
/** The trigger points at the active `href`. */
|
|
5
|
+
active: boolean;
|
|
6
|
+
/** The item has children, so the trigger owns a panel. */
|
|
7
|
+
hasPanel: boolean;
|
|
8
|
+
item: SMegaMenuItem<T>;
|
|
9
|
+
/** Default element used when the item has an `href`. */
|
|
10
|
+
linkComponent?: React.ElementType;
|
|
11
|
+
onClick: React.MouseEventHandler<HTMLElement>;
|
|
12
|
+
onFocus: React.FocusEventHandler<HTMLElement>;
|
|
13
|
+
onKeyDown: React.KeyboardEventHandler<HTMLElement>;
|
|
14
|
+
onPointerEnter: React.PointerEventHandler<HTMLElement>;
|
|
15
|
+
onPointerLeave: React.PointerEventHandler<HTMLElement>;
|
|
16
|
+
/** The trigger's panel is open. */
|
|
17
|
+
open: boolean;
|
|
18
|
+
ownerState: SMegaMenuOwnerState<T>;
|
|
19
|
+
/** `id` of the panel surface, referenced by `aria-controls` while open. */
|
|
20
|
+
panelId: string;
|
|
21
|
+
/** Registers the rendered element so the menu can anchor to it and restore focus. */
|
|
22
|
+
registerRef: (id: string, node: HTMLElement | null) => void;
|
|
23
|
+
renderTrigger?: (item: SMegaMenuItem<T>, state: SMegaMenuTriggerState<T>) => React.ReactNode;
|
|
24
|
+
slotProps?: SMegaMenuSlotProps<T>;
|
|
25
|
+
slots?: SMegaMenuSlots;
|
|
26
|
+
/** Stable accessible relationship target for the panel's `aria-labelledby`. */
|
|
27
|
+
triggerId: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A single top-level trigger.
|
|
31
|
+
*
|
|
32
|
+
* Extracted from `SMegaMenu` so the per-item `useForkRef` stays a top-level hook
|
|
33
|
+
* instead of being called inside a render loop.
|
|
34
|
+
*/
|
|
35
|
+
export declare function MegaMenuTriggerButton<T>({ active, hasPanel, item, linkComponent, onClick, onFocus, onKeyDown, onPointerEnter, onPointerLeave, open, ownerState, panelId, registerRef, renderTrigger, slotProps, slots, triggerId, }: Readonly<MegaMenuTriggerButtonProps<T>>): React.JSX.Element;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { resolveOwnerStateSlotProps as e } from "../utils/slots.js";
|
|
2
|
+
import { TRIGGER_ATTRIBUTE as t } from "./utils.js";
|
|
3
|
+
import { SMegaMenuTrigger as n, SMegaMenuTriggerArrow as r } from "./mega-menu-slots.js";
|
|
4
|
+
import * as i from "react";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
|
+
import { mergeSlotProps as s, useForkRef as c } from "@mui/material/utils";
|
|
7
|
+
import l from "@mui/utils/appendOwnerState";
|
|
8
|
+
import u from "@mui/icons-material/KeyboardArrowDown";
|
|
9
|
+
//#region lib/s-mega-menu/mega-menu-trigger.tsx
|
|
10
|
+
function d({ active: d, hasPanel: f, item: p, linkComponent: m, onClick: h, onFocus: g, onKeyDown: _, onPointerEnter: v, onPointerLeave: y, open: b, ownerState: x, panelId: S, registerRef: C, renderTrigger: w, slotProps: T, slots: E, triggerId: D }) {
|
|
11
|
+
let O = {
|
|
12
|
+
...x,
|
|
13
|
+
active: d,
|
|
14
|
+
hasPanel: f,
|
|
15
|
+
item: p,
|
|
16
|
+
open: b
|
|
17
|
+
}, k = E?.trigger ?? n, A = E?.triggerArrow ?? r, j = f || !p.href ? "button" : p.component ?? m ?? "a", { ref: M, ...N } = l(k, s(e(T?.trigger, O), {
|
|
18
|
+
[t]: "",
|
|
19
|
+
"aria-controls": b ? S : void 0,
|
|
20
|
+
"aria-current": d && !f ? "page" : void 0,
|
|
21
|
+
"aria-expanded": f ? b : void 0,
|
|
22
|
+
component: j,
|
|
23
|
+
disabled: p.disabled,
|
|
24
|
+
href: f ? void 0 : p.href,
|
|
25
|
+
id: D,
|
|
26
|
+
nativeButton: j === "button",
|
|
27
|
+
onClick: h,
|
|
28
|
+
onFocus: g,
|
|
29
|
+
onKeyDown: _,
|
|
30
|
+
onPointerEnter: v,
|
|
31
|
+
onPointerLeave: y,
|
|
32
|
+
rel: p.rel,
|
|
33
|
+
target: p.target
|
|
34
|
+
}), O), P = l(A, e(T?.triggerArrow, O) ?? {}, O), F = c(M, i.useCallback((e) => C(p.id, e), [p.id, C]));
|
|
35
|
+
return /* @__PURE__ */ a(k, {
|
|
36
|
+
...N,
|
|
37
|
+
ref: F,
|
|
38
|
+
children: w ? w(p, O) : /* @__PURE__ */ o(i.Fragment, { children: [
|
|
39
|
+
p.icon,
|
|
40
|
+
/* @__PURE__ */ a("span", { children: p.label }),
|
|
41
|
+
f ? /* @__PURE__ */ a(A, {
|
|
42
|
+
...P,
|
|
43
|
+
children: /* @__PURE__ */ a(u, { fontSize: "small" })
|
|
44
|
+
}) : null
|
|
45
|
+
] })
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { d as MegaMenuTriggerButton };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SMegaMenuProps } from './types';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
interface SMegaMenuComponent {
|
|
4
|
+
<T = unknown>(props: SMegaMenuProps<T> & React.RefAttributes<HTMLElement>): React.JSX.Element;
|
|
5
|
+
displayName?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Multi-level navigation mega menu built on `SPopover`.
|
|
9
|
+
*
|
|
10
|
+
* The panel opens on hover, click/tap and keyboard, and — the point of
|
|
11
|
+
* the component — never closes while the pointer or focus travels between the
|
|
12
|
+
* trigger and the panel content:
|
|
13
|
+
*
|
|
14
|
+
* 1. An invisible `::after` bridge under an open trigger covers the vertical gap,
|
|
15
|
+
* and a second bridge on every submenu wrapper covers the horizontal gap, so
|
|
16
|
+
* `pointerleave` usually does not fire at all while crossing.
|
|
17
|
+
* 2. Any `pointerleave` that does fire only *schedules* a close after
|
|
18
|
+
* `closeDelay`; entering the panel surface cancels the pending close.
|
|
19
|
+
* 3. Focus never closes the panel unless `relatedTarget` is outside both the
|
|
20
|
+
* navigation root and the panel surface.
|
|
21
|
+
*/
|
|
22
|
+
export declare const SMegaMenu: SMegaMenuComponent;
|
|
23
|
+
export default SMegaMenu;
|