@ledgerhq/lumen-ui-react 0.1.34 → 0.1.36
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/index.js +187 -182
- package/dist/lib/Components/AmountDisplay/AmountDisplay.d.ts +1 -1
- package/dist/lib/Components/AmountDisplay/AmountDisplay.d.ts.map +1 -1
- package/dist/lib/Components/AmountDisplay/AmountDisplay.js +117 -78
- package/dist/lib/Components/AmountDisplay/index.d.ts +1 -1
- package/dist/lib/Components/AmountDisplay/index.d.ts.map +1 -1
- package/dist/lib/Components/AmountDisplay/types.d.ts +16 -3
- package/dist/lib/Components/AmountDisplay/types.d.ts.map +1 -1
- package/dist/lib/Components/Card/types.d.ts +1 -1
- package/dist/lib/Components/DescriptionItem/DescriptionItem.d.ts +45 -0
- package/dist/lib/Components/DescriptionItem/DescriptionItem.d.ts.map +1 -0
- package/dist/lib/Components/DescriptionItem/DescriptionItem.js +98 -0
- package/dist/lib/Components/DescriptionItem/index.d.ts +3 -0
- package/dist/lib/Components/DescriptionItem/index.d.ts.map +1 -0
- package/dist/lib/Components/DescriptionItem/types.d.ts +58 -0
- package/dist/lib/Components/DescriptionItem/types.d.ts.map +1 -0
- package/dist/lib/Components/DotIcon/DotIcon.d.ts +1 -1
- package/dist/lib/Components/DotIcon/DotIcon.d.ts.map +1 -1
- package/dist/lib/Components/DotIcon/DotIcon.js +48 -37
- package/dist/lib/Components/DotIcon/types.d.ts +6 -0
- package/dist/lib/Components/DotIcon/types.d.ts.map +1 -1
- package/dist/lib/Components/DotSymbol/DotSymbol.d.ts +1 -1
- package/dist/lib/Components/DotSymbol/DotSymbol.d.ts.map +1 -1
- package/dist/lib/Components/DotSymbol/DotSymbol.js +42 -31
- package/dist/lib/Components/DotSymbol/types.d.ts +6 -0
- package/dist/lib/Components/DotSymbol/types.d.ts.map +1 -1
- package/dist/lib/Components/MediaButton/MediaButton.d.ts +3 -3
- package/dist/lib/Components/MediaButton/MediaButton.d.ts.map +1 -1
- package/dist/lib/Components/MediaButton/MediaButton.js +42 -40
- package/dist/lib/Components/MediaButton/types.d.ts +5 -5
- package/dist/lib/Components/MediaButton/types.d.ts.map +1 -1
- package/dist/lib/Components/MediaImage/MediaImage.d.ts +1 -1
- package/dist/lib/Components/MediaImage/MediaImage.d.ts.map +1 -1
- package/dist/lib/Components/MediaImage/MediaImage.js +40 -29
- package/dist/lib/Components/MediaImage/types.d.ts +6 -0
- package/dist/lib/Components/MediaImage/types.d.ts.map +1 -1
- package/dist/lib/Components/Menu/Menu.d.ts +11 -16
- package/dist/lib/Components/Menu/Menu.d.ts.map +1 -1
- package/dist/lib/Components/Menu/Menu.js +186 -125
- package/dist/lib/Components/Menu/types.d.ts +50 -145
- package/dist/lib/Components/Menu/types.d.ts.map +1 -1
- package/dist/lib/Components/NavBar/CoinCapsule.d.ts +2 -2
- package/dist/lib/Components/NavBar/CoinCapsule.d.ts.map +1 -1
- package/dist/lib/Components/NavBar/CoinCapsule.js +4 -4
- package/dist/lib/Components/NavBar/NavBar.d.ts +4 -4
- package/dist/lib/Components/NavBar/NavBar.d.ts.map +1 -1
- package/dist/lib/Components/NavBar/NavBar.js +10 -2
- package/dist/lib/Components/NavBar/types.d.ts +2 -2
- package/dist/lib/Components/NavBar/types.d.ts.map +1 -1
- package/dist/lib/Components/Popover/Popover.d.ts +2 -2
- package/dist/lib/Components/Popover/types.d.ts +6 -3
- package/dist/lib/Components/Popover/types.d.ts.map +1 -1
- package/dist/lib/Components/index.d.ts +2 -1
- package/dist/lib/Components/index.d.ts.map +1 -1
- package/dist/node_modules/@base-ui/react/esm/composite/item/CompositeItem.js +30 -0
- package/dist/node_modules/@base-ui/react/esm/composite/item/useCompositeItem.js +34 -0
- package/dist/node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRootContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js +10 -10
- package/dist/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFocus.js +97 -0
- package/dist/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js +10 -10
- package/dist/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js +2 -2
- package/dist/node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js +31 -20
- package/dist/node_modules/@base-ui/react/esm/menu/checkbox-item/MenuCheckboxItem.js +78 -0
- package/dist/node_modules/@base-ui/react/esm/menu/checkbox-item/MenuCheckboxItemContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/menu/checkbox-item/MenuCheckboxItemDataAttributes.js +6 -0
- package/dist/node_modules/@base-ui/react/esm/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.js +44 -0
- package/dist/node_modules/@base-ui/react/esm/menu/group/MenuGroup.js +28 -0
- package/dist/node_modules/@base-ui/react/esm/menu/group/MenuGroupContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/menu/group-label/MenuGroupLabel.js +29 -0
- package/dist/node_modules/@base-ui/react/esm/menu/item/MenuItem.js +47 -0
- package/dist/node_modules/@base-ui/react/esm/menu/item/useMenuItem.js +50 -0
- package/dist/node_modules/@base-ui/react/esm/menu/item/useMenuItemCommonProps.js +49 -0
- package/dist/node_modules/@base-ui/react/esm/menu/popup/MenuPopup.js +89 -0
- package/dist/node_modules/@base-ui/react/esm/menu/portal/MenuPortal.js +24 -0
- package/dist/node_modules/@base-ui/react/esm/menu/portal/MenuPortalContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/menu/positioner/MenuPositioner.js +174 -0
- package/dist/node_modules/@base-ui/react/esm/menu/positioner/MenuPositionerContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/menu/radio-group/MenuRadioGroup.js +45 -0
- package/dist/node_modules/@base-ui/react/esm/menu/radio-group/MenuRadioGroupContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/menu/radio-item/MenuRadioItem.js +75 -0
- package/dist/node_modules/@base-ui/react/esm/menu/radio-item/MenuRadioItemContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/menu/radio-item-indicator/MenuRadioItemIndicator.js +44 -0
- package/dist/node_modules/@base-ui/react/esm/menu/root/MenuRoot.js +271 -0
- package/dist/node_modules/@base-ui/react/esm/menu/root/MenuRootContext.js +14 -0
- package/dist/node_modules/@base-ui/react/esm/menu/store/MenuStore.js +109 -0
- package/dist/node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRoot.js +21 -0
- package/dist/node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRootContext.js +10 -0
- package/dist/node_modules/@base-ui/react/esm/menu/submenu-trigger/MenuSubmenuTrigger.js +101 -0
- package/dist/node_modules/@base-ui/react/esm/menu/trigger/MenuTrigger.js +207 -0
- package/dist/node_modules/@base-ui/react/esm/menu/utils/findRootOwnerId.js +10 -0
- package/dist/node_modules/@base-ui/react/esm/menu/utils/stateAttributesMapping.js +15 -0
- package/dist/node_modules/@base-ui/react/esm/menubar/MenubarContext.js +10 -0
- package/dist/node_modules/@base-ui/react/esm/popover/root/PopoverRoot.js +11 -11
- package/dist/node_modules/@base-ui/react/esm/popover/store/PopoverStore.js +7 -7
- package/dist/node_modules/@base-ui/react/esm/popover/trigger/PopoverTrigger.js +11 -11
- package/dist/node_modules/@base-ui/react/esm/utils/constants.js +11 -10
- package/dist/node_modules/@base-ui/react/esm/utils/reason-parts.js +11 -8
- package/dist/node_modules/@base-ui/react/esm/utils/useMixedToggleClickHandler.js +25 -0
- package/dist/node_modules/@base-ui/utils/esm/detectBrowser.js +7 -8
- package/dist/node_modules/@base-ui/utils/esm/fastHooks.js +43 -0
- package/dist/node_modules/@base-ui/utils/esm/store/useStore.js +54 -13
- package/dist/package.json +2 -3
- package/package.json +4 -5
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import * as r from "react";
|
|
2
|
+
import { useTimeout as Q } from "../../../../utils/esm/useTimeout.js";
|
|
3
|
+
import { useStableCallback as ke } from "../../../../utils/esm/useStableCallback.js";
|
|
4
|
+
import { useId as we } from "../../../../utils/esm/useId.js";
|
|
5
|
+
import { useIsoLayoutEffect as W } from "../../../../utils/esm/useIsoLayoutEffect.js";
|
|
6
|
+
import { useOnFirstRender as Fe } from "../../../../utils/esm/useOnFirstRender.js";
|
|
7
|
+
import { useScrollLock as Ae } from "../../../../utils/esm/useScrollLock.js";
|
|
8
|
+
import { EMPTY_ARRAY as He } from "../../../../utils/esm/empty.js";
|
|
9
|
+
import { fastComponent as Ue } from "../../../../utils/esm/fastHooks.js";
|
|
10
|
+
import { useMenuRootContext as Ke, MenuRootContext as _e } from "./MenuRootContext.js";
|
|
11
|
+
import { useMenubarContext as Le } from "../../menubar/MenubarContext.js";
|
|
12
|
+
import { TYPEAHEAD_RESET_MS as Ve } from "../../utils/constants.js";
|
|
13
|
+
import { useDirection as De } from "../../direction-provider/DirectionContext.js";
|
|
14
|
+
import { useOpenInteractionType as Ye } from "../../utils/useOpenInteractionType.js";
|
|
15
|
+
import { createChangeEventDetails as je } from "../../utils/createBaseUIEventDetails.js";
|
|
16
|
+
import { useContextMenuRootContext as qe } from "../../context-menu/root/ContextMenuRootContext.js";
|
|
17
|
+
import { MenuStore as Be } from "../store/MenuStore.js";
|
|
18
|
+
import { useMenuSubmenuRootContext as $e } from "../submenu-root/MenuSubmenuRootContext.js";
|
|
19
|
+
import { jsx as X } from "react/jsx-runtime";
|
|
20
|
+
import { useFloatingNodeId as ze, useFloatingParentNodeId as Ge, FloatingTree as Je } from "../../floating-ui-react/components/FloatingTree.js";
|
|
21
|
+
import { useImplicitActiveTrigger as Qe, useOpenStateTransitions as We } from "../../utils/popups/popupStoreUtils.js";
|
|
22
|
+
import { useSyncedFloatingRootContext as Xe } from "../../floating-ui-react/hooks/useSyncedFloatingRootContext.js";
|
|
23
|
+
import { useDismiss as Ze } from "../../floating-ui-react/hooks/useDismiss.js";
|
|
24
|
+
import { useRole as et } from "../../floating-ui-react/hooks/useRole.js";
|
|
25
|
+
import { useListNavigation as tt } from "../../floating-ui-react/hooks/useListNavigation.js";
|
|
26
|
+
import { useTypeahead as ot } from "../../floating-ui-react/hooks/useTypeahead.js";
|
|
27
|
+
import { useInteractions as nt } from "../../floating-ui-react/hooks/useInteractions.js";
|
|
28
|
+
import { triggerHover as Z, triggerFocus as ee, focusOut as rt, listNavigation as st, siblingOpen as it, triggerPress as at, itemPress as ut, escapeKey as ct, imperativeAction as lt } from "../../utils/reason-parts.js";
|
|
29
|
+
import { mergeProps as te } from "../../merge-props/mergeProps.js";
|
|
30
|
+
const pt = Ue(function(oe) {
|
|
31
|
+
const {
|
|
32
|
+
children: v,
|
|
33
|
+
open: C,
|
|
34
|
+
onOpenChange: ne,
|
|
35
|
+
onOpenChangeComplete: re,
|
|
36
|
+
defaultOpen: N = !1,
|
|
37
|
+
disabled: se = !1,
|
|
38
|
+
modal: k,
|
|
39
|
+
loopFocus: ie = !0,
|
|
40
|
+
orientation: ae = "vertical",
|
|
41
|
+
actionsRef: ue,
|
|
42
|
+
closeParentOnEsc: ce = !1,
|
|
43
|
+
handle: le,
|
|
44
|
+
triggerId: w,
|
|
45
|
+
defaultTriggerId: F = null,
|
|
46
|
+
highlightItemOnHover: pe = !0
|
|
47
|
+
} = oe, u = qe(!0), a = Ke(!0), I = Le(), A = $e(), T = r.useMemo(() => A && a ? {
|
|
48
|
+
type: "menu",
|
|
49
|
+
store: a.store
|
|
50
|
+
} : I ? {
|
|
51
|
+
type: "menubar",
|
|
52
|
+
context: I
|
|
53
|
+
} : u && !a ? {
|
|
54
|
+
type: "context-menu",
|
|
55
|
+
context: u
|
|
56
|
+
} : {
|
|
57
|
+
type: void 0
|
|
58
|
+
}, [u, a, I, A]), e = Be.useStore(le?.store, {
|
|
59
|
+
open: N,
|
|
60
|
+
openProp: C,
|
|
61
|
+
activeTriggerId: F,
|
|
62
|
+
triggerIdProp: w,
|
|
63
|
+
parent: T
|
|
64
|
+
});
|
|
65
|
+
Fe(() => {
|
|
66
|
+
C === void 0 && e.state.open === !1 && N === !0 && e.update({
|
|
67
|
+
open: !0,
|
|
68
|
+
activeTriggerId: F
|
|
69
|
+
});
|
|
70
|
+
}), e.useControlledProp("openProp", C), e.useControlledProp("triggerIdProp", w), e.useContextCallback("onOpenChangeComplete", re);
|
|
71
|
+
const m = e.useState("floatingTreeRoot"), x = ze(m), P = Ge();
|
|
72
|
+
W(() => {
|
|
73
|
+
u && !a ? e.update({
|
|
74
|
+
parent: {
|
|
75
|
+
type: "context-menu",
|
|
76
|
+
context: u
|
|
77
|
+
},
|
|
78
|
+
floatingNodeId: x,
|
|
79
|
+
floatingParentNodeId: P
|
|
80
|
+
}) : a && e.update({
|
|
81
|
+
floatingNodeId: x,
|
|
82
|
+
floatingParentNodeId: P
|
|
83
|
+
});
|
|
84
|
+
}, [u, a, x, P, e]);
|
|
85
|
+
const i = e.useState("open"), H = e.useState("activeTriggerElement"), b = e.useState("positionerElement"), U = e.useState("hoverEnabled"), de = e.useState("modal"), K = e.useState("disabled"), _ = e.useState("lastOpenChangeReason"), n = e.useState("parent"), l = e.useState("activeIndex"), me = e.useState("payload"), fe = e.useState("floatingParentNodeId"), E = r.useRef(null), R = fe != null;
|
|
86
|
+
let p;
|
|
87
|
+
process.env.NODE_ENV !== "production" && n.type !== void 0 && k !== void 0 && console.warn("Base UI: The `modal` prop is not supported on nested menus. It will be ignored."), e.useSyncedValues({
|
|
88
|
+
disabled: se,
|
|
89
|
+
modal: n.type === void 0 ? k : void 0,
|
|
90
|
+
rootId: we()
|
|
91
|
+
});
|
|
92
|
+
const {
|
|
93
|
+
openMethod: ge,
|
|
94
|
+
triggerProps: f
|
|
95
|
+
} = Ye(i);
|
|
96
|
+
Qe(e);
|
|
97
|
+
const {
|
|
98
|
+
forceUnmount: L
|
|
99
|
+
} = We(i, e, () => {
|
|
100
|
+
e.update({
|
|
101
|
+
allowMouseEnter: !1,
|
|
102
|
+
stickIfOpen: !0
|
|
103
|
+
});
|
|
104
|
+
}), h = r.useRef(n.type !== "context-menu"), M = Q();
|
|
105
|
+
r.useEffect(() => {
|
|
106
|
+
if (i || (E.current = null), n.type === "context-menu") {
|
|
107
|
+
if (!i) {
|
|
108
|
+
M.clear(), h.current = !1;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
M.start(500, () => {
|
|
112
|
+
h.current = !0;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}, [M, i, n.type]), Ae(i && de && _ !== Z && ge !== "touch", b), W(() => {
|
|
116
|
+
!i && !U && e.set("hoverEnabled", !0);
|
|
117
|
+
}, [i, U, e]);
|
|
118
|
+
const g = r.useRef(!0), V = Q(), d = ke((t, o) => {
|
|
119
|
+
const s = o.reason;
|
|
120
|
+
if (i === t && o.trigger === H && _ === s || (o.preventUnmountOnClose = () => {
|
|
121
|
+
e.set("preventUnmountingOnClose", !0);
|
|
122
|
+
}, !t && o.trigger == null && (o.trigger = H ?? void 0), ne?.(t, o), o.isCanceled))
|
|
123
|
+
return;
|
|
124
|
+
const Se = {
|
|
125
|
+
open: t,
|
|
126
|
+
nativeEvent: o.event,
|
|
127
|
+
reason: o.reason,
|
|
128
|
+
nested: R
|
|
129
|
+
};
|
|
130
|
+
p?.emit("openchange", Se);
|
|
131
|
+
const y = o.event;
|
|
132
|
+
if (t === !1 && y?.type === "click" && y.pointerType === "touch" && !g.current)
|
|
133
|
+
return;
|
|
134
|
+
if (!t && l !== null) {
|
|
135
|
+
const Ne = e.context.itemDomElements.current[l];
|
|
136
|
+
queueMicrotask(() => {
|
|
137
|
+
Ne?.setAttribute("tabindex", "-1");
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
t && s === ee ? (g.current = !1, V.start(300, () => {
|
|
141
|
+
g.current = !0;
|
|
142
|
+
})) : (g.current = !0, V.clear());
|
|
143
|
+
const G = (s === at || s === ut) && y.detail === 0 && y?.isTrusted, Oe = !t && (s === ct || s == null), O = {
|
|
144
|
+
open: t,
|
|
145
|
+
openChangeReason: s
|
|
146
|
+
};
|
|
147
|
+
E.current = o.event ?? null;
|
|
148
|
+
const J = o.trigger?.id ?? null;
|
|
149
|
+
(J || t) && (O.activeTriggerId = J, O.activeTriggerElement = o.trigger ?? null), e.update(O), n.type === "menubar" && (s === ee || s === rt || s === Z || s === st || s === it) ? e.set("instantType", "group") : G || Oe ? e.set("instantType", G ? "click" : "dismiss") : e.set("instantType", void 0);
|
|
150
|
+
}), D = r.useCallback((t) => {
|
|
151
|
+
const o = je(t);
|
|
152
|
+
return o.preventUnmountOnClose = () => {
|
|
153
|
+
e.set("preventUnmountingOnClose", !0);
|
|
154
|
+
}, o;
|
|
155
|
+
}, [e]), Y = r.useCallback(() => {
|
|
156
|
+
e.setOpen(!1, D(lt));
|
|
157
|
+
}, [e, D]);
|
|
158
|
+
r.useImperativeHandle(ue, () => ({
|
|
159
|
+
unmount: L,
|
|
160
|
+
close: Y
|
|
161
|
+
}), [L, Y]);
|
|
162
|
+
let S;
|
|
163
|
+
n.type === "context-menu" && (S = n.context), r.useImperativeHandle(S?.positionerRef, () => b, [b]), r.useImperativeHandle(S?.actionsRef, () => ({
|
|
164
|
+
setOpen: d
|
|
165
|
+
}), [d]);
|
|
166
|
+
const c = Xe({
|
|
167
|
+
popupStore: e,
|
|
168
|
+
onOpenChange: d
|
|
169
|
+
});
|
|
170
|
+
p = c.context.events, r.useEffect(() => {
|
|
171
|
+
const t = ({
|
|
172
|
+
open: o,
|
|
173
|
+
eventDetails: s
|
|
174
|
+
}) => d(o, s);
|
|
175
|
+
return p.on("setOpen", t), () => {
|
|
176
|
+
p?.off("setOpen", t);
|
|
177
|
+
};
|
|
178
|
+
}, [p, d]);
|
|
179
|
+
const ye = Ze(c, {
|
|
180
|
+
enabled: !K,
|
|
181
|
+
bubbles: {
|
|
182
|
+
escapeKey: ce && n.type === "menu"
|
|
183
|
+
},
|
|
184
|
+
outsidePress() {
|
|
185
|
+
return n.type !== "context-menu" || E.current?.type === "contextmenu" ? !0 : h.current;
|
|
186
|
+
},
|
|
187
|
+
externalTree: R ? m : void 0
|
|
188
|
+
}), ve = et(c, {
|
|
189
|
+
role: "menu"
|
|
190
|
+
}), Ce = De(), Ie = r.useCallback((t) => {
|
|
191
|
+
e.select("activeIndex") !== t && e.set("activeIndex", t);
|
|
192
|
+
}, [e]), Te = tt(c, {
|
|
193
|
+
enabled: !K,
|
|
194
|
+
listRef: e.context.itemDomElements,
|
|
195
|
+
activeIndex: l,
|
|
196
|
+
nested: n.type !== void 0,
|
|
197
|
+
loopFocus: ie,
|
|
198
|
+
orientation: ae,
|
|
199
|
+
parentOrientation: n.type === "menubar" ? n.context.orientation : void 0,
|
|
200
|
+
rtl: Ce === "rtl",
|
|
201
|
+
disabledIndices: He,
|
|
202
|
+
onNavigate: Ie,
|
|
203
|
+
openOnArrowKeyDown: n.type !== "context-menu",
|
|
204
|
+
externalTree: R ? m : void 0,
|
|
205
|
+
focusItemOnHover: pe
|
|
206
|
+
}), xe = r.useCallback((t) => {
|
|
207
|
+
e.context.typingRef.current = t;
|
|
208
|
+
}, [e]), Pe = ot(c, {
|
|
209
|
+
listRef: e.context.itemLabels,
|
|
210
|
+
elementsRef: e.context.itemDomElements,
|
|
211
|
+
activeIndex: l,
|
|
212
|
+
resetMs: Ve,
|
|
213
|
+
onMatch: (t) => {
|
|
214
|
+
i && t !== l && e.set("activeIndex", t);
|
|
215
|
+
},
|
|
216
|
+
onTypingChange: xe
|
|
217
|
+
}), {
|
|
218
|
+
getReferenceProps: j,
|
|
219
|
+
getFloatingProps: q,
|
|
220
|
+
getItemProps: B,
|
|
221
|
+
getTriggerProps: $
|
|
222
|
+
} = nt([ye, ve, Te, Pe]), be = r.useMemo(() => {
|
|
223
|
+
const t = te(j(), {
|
|
224
|
+
onMouseMove() {
|
|
225
|
+
e.set("allowMouseEnter", !0);
|
|
226
|
+
}
|
|
227
|
+
}, f);
|
|
228
|
+
return delete t.role, t;
|
|
229
|
+
}, [j, e, f]), Ee = r.useMemo(() => {
|
|
230
|
+
const t = $();
|
|
231
|
+
if (!t)
|
|
232
|
+
return t;
|
|
233
|
+
const o = te(t, f);
|
|
234
|
+
return delete o.role, delete o["aria-controls"], o;
|
|
235
|
+
}, [$, f]), Re = r.useMemo(() => q({
|
|
236
|
+
onMouseMove() {
|
|
237
|
+
e.set("allowMouseEnter", !0), n.type === "menu" && e.set("hoverEnabled", !1);
|
|
238
|
+
},
|
|
239
|
+
onClick() {
|
|
240
|
+
e.select("hoverEnabled") && e.set("hoverEnabled", !1);
|
|
241
|
+
},
|
|
242
|
+
onKeyDown(t) {
|
|
243
|
+
const o = e.select("keyboardEventRelay");
|
|
244
|
+
o && !t.isPropagationStopped() && o(t);
|
|
245
|
+
}
|
|
246
|
+
}), [q, n.type, e]), he = r.useMemo(() => B(), [B]);
|
|
247
|
+
e.useSyncedValues({
|
|
248
|
+
floatingRootContext: c,
|
|
249
|
+
activeTriggerProps: be,
|
|
250
|
+
inactiveTriggerProps: Ee,
|
|
251
|
+
popupProps: Re,
|
|
252
|
+
itemProps: he
|
|
253
|
+
});
|
|
254
|
+
const Me = r.useMemo(() => ({
|
|
255
|
+
store: e,
|
|
256
|
+
parent: T
|
|
257
|
+
}), [e, T]), z = /* @__PURE__ */ X(_e.Provider, {
|
|
258
|
+
value: Me,
|
|
259
|
+
children: typeof v == "function" ? v({
|
|
260
|
+
payload: me
|
|
261
|
+
}) : v
|
|
262
|
+
});
|
|
263
|
+
return n.type === void 0 || n.type === "context-menu" ? /* @__PURE__ */ X(Je, {
|
|
264
|
+
externalTree: m,
|
|
265
|
+
children: z
|
|
266
|
+
}) : z;
|
|
267
|
+
});
|
|
268
|
+
process.env.NODE_ENV !== "production" && (pt.displayName = "MenuRoot");
|
|
269
|
+
export {
|
|
270
|
+
pt as MenuRoot
|
|
271
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import r from "../../../../utils/esm/formatErrorMessage.js";
|
|
2
|
+
import * as o from "react";
|
|
3
|
+
const t = /* @__PURE__ */ o.createContext(void 0);
|
|
4
|
+
process.env.NODE_ENV !== "production" && (t.displayName = "MenuRootContext");
|
|
5
|
+
function i(n) {
|
|
6
|
+
const e = o.useContext(t);
|
|
7
|
+
if (e === void 0 && !n)
|
|
8
|
+
throw new Error(process.env.NODE_ENV !== "production" ? "Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>." : r(36));
|
|
9
|
+
return e;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
t as MenuRootContext,
|
|
13
|
+
i as useMenuRootContext
|
|
14
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import * as i from "react";
|
|
2
|
+
import { EMPTY_OBJECT as c } from "../../../../utils/esm/empty.js";
|
|
3
|
+
import { useRefWithInit as p } from "../../../../utils/esm/useRefWithInit.js";
|
|
4
|
+
import { FloatingTreeStore as R } from "../../floating-ui-react/components/FloatingTreeStore.js";
|
|
5
|
+
import { popupStoreSelectors as g, createInitialPopupStoreState as y } from "../../utils/popups/store.js";
|
|
6
|
+
import { ReactStore as m } from "../../../../utils/esm/store/ReactStore.js";
|
|
7
|
+
import { PopupTriggerMap as b } from "../../utils/popups/popupTriggerMap.js";
|
|
8
|
+
import { createSelector as t } from "../../../../utils/esm/store/createSelector.js";
|
|
9
|
+
const I = {
|
|
10
|
+
...g,
|
|
11
|
+
disabled: t((e) => e.parent.type === "menubar" && e.parent.context.disabled || e.disabled),
|
|
12
|
+
modal: t((e) => (e.parent.type === void 0 || e.parent.type === "context-menu") && (e.modal ?? !0)),
|
|
13
|
+
allowMouseEnter: t((e) => e.allowMouseEnter),
|
|
14
|
+
stickIfOpen: t((e) => e.stickIfOpen),
|
|
15
|
+
parent: t((e) => e.parent),
|
|
16
|
+
rootId: t((e) => e.parent.type === "menu" ? e.parent.store.select("rootId") : e.parent.type !== void 0 ? e.parent.context.rootId : e.rootId),
|
|
17
|
+
activeIndex: t((e) => e.activeIndex),
|
|
18
|
+
isActive: t((e, r) => e.activeIndex === r),
|
|
19
|
+
hoverEnabled: t((e) => e.hoverEnabled),
|
|
20
|
+
instantType: t((e) => e.instantType),
|
|
21
|
+
lastOpenChangeReason: t((e) => e.openChangeReason),
|
|
22
|
+
floatingTreeRoot: t((e) => e.parent.type === "menu" ? e.parent.store.select("floatingTreeRoot") : e.floatingTreeRoot),
|
|
23
|
+
floatingNodeId: t((e) => e.floatingNodeId),
|
|
24
|
+
floatingParentNodeId: t((e) => e.floatingParentNodeId),
|
|
25
|
+
itemProps: t((e) => e.itemProps),
|
|
26
|
+
closeDelay: t((e) => e.closeDelay),
|
|
27
|
+
hasViewport: t((e) => e.hasViewport),
|
|
28
|
+
keyboardEventRelay: t((e) => {
|
|
29
|
+
if (e.keyboardEventRelay)
|
|
30
|
+
return e.keyboardEventRelay;
|
|
31
|
+
if (e.parent.type === "menu")
|
|
32
|
+
return e.parent.store.select("keyboardEventRelay");
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
class f extends m {
|
|
36
|
+
constructor(r) {
|
|
37
|
+
super({
|
|
38
|
+
...T(),
|
|
39
|
+
...r
|
|
40
|
+
}, {
|
|
41
|
+
positionerRef: /* @__PURE__ */ i.createRef(),
|
|
42
|
+
popupRef: /* @__PURE__ */ i.createRef(),
|
|
43
|
+
typingRef: {
|
|
44
|
+
current: !1
|
|
45
|
+
},
|
|
46
|
+
itemDomElements: {
|
|
47
|
+
current: []
|
|
48
|
+
},
|
|
49
|
+
itemLabels: {
|
|
50
|
+
current: []
|
|
51
|
+
},
|
|
52
|
+
allowMouseUpTriggerRef: {
|
|
53
|
+
current: !1
|
|
54
|
+
},
|
|
55
|
+
triggerFocusTargetRef: /* @__PURE__ */ i.createRef(),
|
|
56
|
+
beforeContentFocusGuardRef: /* @__PURE__ */ i.createRef(),
|
|
57
|
+
onOpenChangeComplete: void 0,
|
|
58
|
+
triggerElements: new b()
|
|
59
|
+
}, I), this.unsubscribeParentListener = this.observe("parent", (o) => {
|
|
60
|
+
if (this.unsubscribeParentListener?.(), o.type === "menu") {
|
|
61
|
+
let n = o.store.select("rootId"), a = o.store.select("floatingTreeRoot"), l = o.store.select("keyboardEventRelay");
|
|
62
|
+
this.unsubscribeParentListener = o.store.subscribe(() => {
|
|
63
|
+
const s = o.store.select("rootId"), u = o.store.select("floatingTreeRoot"), d = o.store.select("keyboardEventRelay");
|
|
64
|
+
n === s && a === u && l === d || (n = s, a = u, l = d, this.notifyAll());
|
|
65
|
+
}), this.context.allowMouseUpTriggerRef = o.store.context.allowMouseUpTriggerRef;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
o.type !== void 0 && (this.context.allowMouseUpTriggerRef = o.context.allowMouseUpTriggerRef), this.unsubscribeParentListener = null;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
setOpen(r, o) {
|
|
72
|
+
this.state.floatingRootContext.context.events.emit("setOpen", {
|
|
73
|
+
open: r,
|
|
74
|
+
eventDetails: o
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
static useStore(r, o) {
|
|
78
|
+
const n = p(() => new f(o)).current;
|
|
79
|
+
return r ?? n;
|
|
80
|
+
}
|
|
81
|
+
unsubscribeParentListener = null;
|
|
82
|
+
}
|
|
83
|
+
function T() {
|
|
84
|
+
return {
|
|
85
|
+
...y(),
|
|
86
|
+
disabled: !1,
|
|
87
|
+
modal: !0,
|
|
88
|
+
allowMouseEnter: !1,
|
|
89
|
+
stickIfOpen: !0,
|
|
90
|
+
parent: {
|
|
91
|
+
type: void 0
|
|
92
|
+
},
|
|
93
|
+
rootId: void 0,
|
|
94
|
+
activeIndex: null,
|
|
95
|
+
hoverEnabled: !0,
|
|
96
|
+
instantType: void 0,
|
|
97
|
+
openChangeReason: null,
|
|
98
|
+
floatingTreeRoot: new R(),
|
|
99
|
+
floatingNodeId: void 0,
|
|
100
|
+
floatingParentNodeId: null,
|
|
101
|
+
itemProps: c,
|
|
102
|
+
keyboardEventRelay: void 0,
|
|
103
|
+
closeDelay: 0,
|
|
104
|
+
hasViewport: !1
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
f as MenuStore
|
|
109
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as r from "react";
|
|
2
|
+
import { MenuRoot as u } from "../root/MenuRoot.js";
|
|
3
|
+
import { useMenuRootContext as m } from "../root/MenuRootContext.js";
|
|
4
|
+
import { MenuSubmenuRootContext as i } from "./MenuSubmenuRootContext.js";
|
|
5
|
+
import { useMenuSubmenuRootContext as a } from "./MenuSubmenuRootContext.js";
|
|
6
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
7
|
+
function M(t) {
|
|
8
|
+
const o = m().store, n = r.useMemo(() => ({
|
|
9
|
+
parentMenu: o
|
|
10
|
+
}), [o]);
|
|
11
|
+
return /* @__PURE__ */ e(i.Provider, {
|
|
12
|
+
value: n,
|
|
13
|
+
children: /* @__PURE__ */ e(u, {
|
|
14
|
+
...t
|
|
15
|
+
})
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
M as MenuSubmenuRoot,
|
|
20
|
+
a as useMenuSubmenuRootContext
|
|
21
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as e from "react";
|
|
2
|
+
const t = /* @__PURE__ */ e.createContext(void 0);
|
|
3
|
+
process.env.NODE_ENV !== "production" && (t.displayName = "MenuSubmenuRootContext");
|
|
4
|
+
function n() {
|
|
5
|
+
return e.useContext(t);
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
t as MenuSubmenuRootContext,
|
|
9
|
+
n as useMenuSubmenuRootContext
|
|
10
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import U from "../../../../utils/esm/formatErrorMessage.js";
|
|
2
|
+
import * as r from "react";
|
|
3
|
+
import { useMenuRootContext as _ } from "../root/MenuRootContext.js";
|
|
4
|
+
import { useBaseUiId as L } from "../../utils/useBaseUiId.js";
|
|
5
|
+
import { triggerOpenStateMapping as j } from "../../utils/popupStateMapping.js";
|
|
6
|
+
import { useCompositeListItem as q } from "../../composite/list/useCompositeListItem.js";
|
|
7
|
+
import { useMenuItem as z } from "../item/useMenuItem.js";
|
|
8
|
+
import { useRenderElement as F } from "../../utils/useRenderElement.js";
|
|
9
|
+
import { useMenuPositionerContext as G } from "../positioner/MenuPositionerContext.js";
|
|
10
|
+
import { useMenuSubmenuRootContext as J } from "../submenu-root/MenuSubmenuRootContext.js";
|
|
11
|
+
import { useTriggerRegistration as K } from "../../utils/popups/popupStoreUtils.js";
|
|
12
|
+
import { useHoverReferenceInteraction as Q } from "../../floating-ui-react/hooks/useHoverReferenceInteraction.js";
|
|
13
|
+
import { safePolygon as W } from "../../floating-ui-react/safePolygon.js";
|
|
14
|
+
import { useClick as X } from "../../floating-ui-react/hooks/useClick.js";
|
|
15
|
+
import { useInteractions as Y } from "../../floating-ui-react/hooks/useInteractions.js";
|
|
16
|
+
const Z = /* @__PURE__ */ r.forwardRef(function(c, v) {
|
|
17
|
+
const {
|
|
18
|
+
render: ee,
|
|
19
|
+
className: te,
|
|
20
|
+
label: oe,
|
|
21
|
+
id: M,
|
|
22
|
+
nativeButton: I = !1,
|
|
23
|
+
openOnHover: l = !0,
|
|
24
|
+
delay: m = 100,
|
|
25
|
+
closeDelay: n = 0,
|
|
26
|
+
disabled: S = !1,
|
|
27
|
+
...T
|
|
28
|
+
} = c, s = q(), x = G(), {
|
|
29
|
+
store: e
|
|
30
|
+
} = _(), i = L(M), g = e.useState("open"), p = e.useState("floatingRootContext"), E = e.useState("floatingTreeRoot"), d = K(i, e), C = r.useCallback((o) => {
|
|
31
|
+
const H = d(o);
|
|
32
|
+
return o !== null && e.select("open") && e.select("activeTriggerId") == null && e.update({
|
|
33
|
+
activeTriggerId: i,
|
|
34
|
+
activeTriggerElement: o,
|
|
35
|
+
closeDelay: n
|
|
36
|
+
}), H;
|
|
37
|
+
}, [d, n, e, i]), f = r.useRef(null), P = r.useCallback((o) => {
|
|
38
|
+
f.current = o, e.set("activeTriggerElement", o);
|
|
39
|
+
}, [e]), b = J();
|
|
40
|
+
if (!b?.parentMenu)
|
|
41
|
+
throw new Error(process.env.NODE_ENV !== "production" ? "Base UI: <Menu.SubmenuTrigger> must be placed in <Menu.SubmenuRoot>." : U(37));
|
|
42
|
+
e.useSyncedValue("closeDelay", n);
|
|
43
|
+
const t = b.parentMenu, y = t.useState("itemProps"), a = t.useState("isActive", s.index), h = r.useMemo(() => ({
|
|
44
|
+
type: "submenu-trigger",
|
|
45
|
+
setActive() {
|
|
46
|
+
t.set("activeIndex", s.index);
|
|
47
|
+
}
|
|
48
|
+
}), [t, s.index]), k = e.useState("disabled"), u = S || k, {
|
|
49
|
+
getItemProps: O,
|
|
50
|
+
itemRef: w
|
|
51
|
+
} = z({
|
|
52
|
+
closeOnClick: !1,
|
|
53
|
+
disabled: u,
|
|
54
|
+
highlighted: a,
|
|
55
|
+
id: i,
|
|
56
|
+
store: e,
|
|
57
|
+
typingRef: t.context.typingRef,
|
|
58
|
+
nativeButton: I,
|
|
59
|
+
itemMetadata: h,
|
|
60
|
+
nodeId: x?.nodeId
|
|
61
|
+
}), N = e.useState("hoverEnabled"), D = t.useState("allowMouseEnter"), B = Q(p, {
|
|
62
|
+
enabled: N && l && !u,
|
|
63
|
+
handleClose: W({
|
|
64
|
+
blockPointerEvents: !0
|
|
65
|
+
}),
|
|
66
|
+
mouseOnly: !0,
|
|
67
|
+
move: !0,
|
|
68
|
+
restMs: m,
|
|
69
|
+
delay: D ? {
|
|
70
|
+
open: m,
|
|
71
|
+
close: n
|
|
72
|
+
} : 0,
|
|
73
|
+
triggerElementRef: f,
|
|
74
|
+
externalTree: E
|
|
75
|
+
}), A = X(p, {
|
|
76
|
+
enabled: !u,
|
|
77
|
+
event: "mousedown",
|
|
78
|
+
toggle: !l,
|
|
79
|
+
ignoreMouse: l,
|
|
80
|
+
stickIfOpen: !1
|
|
81
|
+
}), V = Y([A]), R = e.useState("triggerProps", !0);
|
|
82
|
+
return delete R.id, F("div", c, {
|
|
83
|
+
state: {
|
|
84
|
+
disabled: u,
|
|
85
|
+
highlighted: a,
|
|
86
|
+
open: g
|
|
87
|
+
},
|
|
88
|
+
stateAttributesMapping: j,
|
|
89
|
+
props: [V.getReferenceProps(), B, R, y, {
|
|
90
|
+
tabIndex: g || a ? 0 : -1,
|
|
91
|
+
onBlur() {
|
|
92
|
+
a && t.set("activeIndex", null);
|
|
93
|
+
}
|
|
94
|
+
}, T, O],
|
|
95
|
+
ref: [v, s.ref, w, C, P]
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
process.env.NODE_ENV !== "production" && (Z.displayName = "MenuSubmenuTrigger");
|
|
99
|
+
export {
|
|
100
|
+
Z as MenuSubmenuTrigger
|
|
101
|
+
};
|