@navikt/ds-react 6.14.0 → 6.16.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.
Files changed (91) hide show
  1. package/cjs/form/combobox/FilteredOptions/AddNewOption.d.ts +3 -0
  2. package/cjs/form/combobox/FilteredOptions/AddNewOption.js +41 -0
  3. package/cjs/form/combobox/FilteredOptions/AddNewOption.js.map +1 -0
  4. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +13 -57
  5. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  6. package/cjs/form/combobox/FilteredOptions/FilteredOptionsItem.d.ts +6 -0
  7. package/cjs/form/combobox/FilteredOptions/FilteredOptionsItem.js +43 -0
  8. package/cjs/form/combobox/FilteredOptions/FilteredOptionsItem.js.map +1 -0
  9. package/cjs/form/combobox/FilteredOptions/LoadingMessage.d.ts +3 -0
  10. package/cjs/form/combobox/FilteredOptions/LoadingMessage.js +16 -0
  11. package/cjs/form/combobox/FilteredOptions/LoadingMessage.js.map +1 -0
  12. package/cjs/form/combobox/FilteredOptions/MaxSelectedMessage.d.ts +3 -0
  13. package/cjs/form/combobox/FilteredOptions/MaxSelectedMessage.js +20 -0
  14. package/cjs/form/combobox/FilteredOptions/MaxSelectedMessage.js.map +1 -0
  15. package/cjs/form/combobox/FilteredOptions/NoSearchHitsMessage.d.ts +3 -0
  16. package/cjs/form/combobox/FilteredOptions/NoSearchHitsMessage.js +14 -0
  17. package/cjs/form/combobox/FilteredOptions/NoSearchHitsMessage.js.map +1 -0
  18. package/cjs/form/combobox/Input/Input.d.ts +1 -0
  19. package/cjs/form/combobox/Input/Input.js +3 -2
  20. package/cjs/form/combobox/Input/Input.js.map +1 -1
  21. package/cjs/form/combobox/Input/InputController.js +1 -1
  22. package/cjs/form/combobox/Input/InputController.js.map +1 -1
  23. package/cjs/layout/base/BasePrimitive.d.ts +5 -1
  24. package/cjs/layout/base/BasePrimitive.js +4 -2
  25. package/cjs/layout/base/BasePrimitive.js.map +1 -1
  26. package/cjs/overlays/floating-menu/Menu.d.ts +106 -0
  27. package/cjs/overlays/floating-menu/Menu.js +593 -0
  28. package/cjs/overlays/floating-menu/Menu.js.map +1 -0
  29. package/cjs/overlays/floating-menu/parts/FocusScope.d.ts +22 -0
  30. package/cjs/overlays/floating-menu/parts/FocusScope.js +89 -0
  31. package/cjs/overlays/floating-menu/parts/FocusScope.js.map +1 -0
  32. package/cjs/overlays/floating-menu/parts/RovingFocus.d.ts +9 -0
  33. package/cjs/overlays/floating-menu/parts/RovingFocus.js +112 -0
  34. package/cjs/overlays/floating-menu/parts/RovingFocus.js.map +1 -0
  35. package/cjs/overlays/floating-menu/parts/SlottedDivElement.d.ts +7 -0
  36. package/cjs/overlays/floating-menu/parts/SlottedDivElement.js +46 -0
  37. package/cjs/overlays/floating-menu/parts/SlottedDivElement.js.map +1 -0
  38. package/cjs/util/composeEventHandlers.d.ts +1 -1
  39. package/esm/form/combobox/FilteredOptions/AddNewOption.d.ts +3 -0
  40. package/esm/form/combobox/FilteredOptions/AddNewOption.js +36 -0
  41. package/esm/form/combobox/FilteredOptions/AddNewOption.js.map +1 -0
  42. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +13 -57
  43. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  44. package/esm/form/combobox/FilteredOptions/FilteredOptionsItem.d.ts +6 -0
  45. package/esm/form/combobox/FilteredOptions/FilteredOptionsItem.js +38 -0
  46. package/esm/form/combobox/FilteredOptions/FilteredOptionsItem.js.map +1 -0
  47. package/esm/form/combobox/FilteredOptions/LoadingMessage.d.ts +3 -0
  48. package/esm/form/combobox/FilteredOptions/LoadingMessage.js +11 -0
  49. package/esm/form/combobox/FilteredOptions/LoadingMessage.js.map +1 -0
  50. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.d.ts +3 -0
  51. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.js +15 -0
  52. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.js.map +1 -0
  53. package/esm/form/combobox/FilteredOptions/NoSearchHitsMessage.d.ts +3 -0
  54. package/esm/form/combobox/FilteredOptions/NoSearchHitsMessage.js +9 -0
  55. package/esm/form/combobox/FilteredOptions/NoSearchHitsMessage.js.map +1 -0
  56. package/esm/form/combobox/Input/Input.d.ts +1 -0
  57. package/esm/form/combobox/Input/Input.js +3 -2
  58. package/esm/form/combobox/Input/Input.js.map +1 -1
  59. package/esm/form/combobox/Input/InputController.js +1 -1
  60. package/esm/form/combobox/Input/InputController.js.map +1 -1
  61. package/esm/layout/base/BasePrimitive.d.ts +5 -1
  62. package/esm/layout/base/BasePrimitive.js +4 -2
  63. package/esm/layout/base/BasePrimitive.js.map +1 -1
  64. package/esm/overlays/floating-menu/Menu.d.ts +106 -0
  65. package/esm/overlays/floating-menu/Menu.js +551 -0
  66. package/esm/overlays/floating-menu/Menu.js.map +1 -0
  67. package/esm/overlays/floating-menu/parts/FocusScope.d.ts +22 -0
  68. package/esm/overlays/floating-menu/parts/FocusScope.js +63 -0
  69. package/esm/overlays/floating-menu/parts/FocusScope.js.map +1 -0
  70. package/esm/overlays/floating-menu/parts/RovingFocus.d.ts +9 -0
  71. package/esm/overlays/floating-menu/parts/RovingFocus.js +86 -0
  72. package/esm/overlays/floating-menu/parts/RovingFocus.js.map +1 -0
  73. package/esm/overlays/floating-menu/parts/SlottedDivElement.d.ts +7 -0
  74. package/esm/overlays/floating-menu/parts/SlottedDivElement.js +20 -0
  75. package/esm/overlays/floating-menu/parts/SlottedDivElement.js.map +1 -0
  76. package/esm/util/composeEventHandlers.d.ts +1 -1
  77. package/package.json +4 -4
  78. package/src/form/combobox/FilteredOptions/AddNewOption.tsx +63 -0
  79. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +11 -121
  80. package/src/form/combobox/FilteredOptions/FilteredOptionsItem.tsx +73 -0
  81. package/src/form/combobox/FilteredOptions/LoadingMessage.tsx +20 -0
  82. package/src/form/combobox/FilteredOptions/MaxSelectedMessage.tsx +27 -0
  83. package/src/form/combobox/FilteredOptions/NoSearchHitsMessage.tsx +19 -0
  84. package/src/form/combobox/Input/Input.tsx +4 -2
  85. package/src/form/combobox/Input/InputController.tsx +1 -0
  86. package/src/layout/base/BasePrimitive.tsx +9 -0
  87. package/src/overlays/floating-menu/Menu.tsx +1177 -0
  88. package/src/overlays/floating-menu/parts/FocusScope.tsx +84 -0
  89. package/src/overlays/floating-menu/parts/RovingFocus.tsx +121 -0
  90. package/src/overlays/floating-menu/parts/SlottedDivElement.tsx +17 -0
  91. package/src/util/composeEventHandlers.ts +1 -1
@@ -0,0 +1,551 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { forwardRef, useCallback, useEffect, useRef, useState, } from "react";
13
+ import ReactDOM from "react-dom";
14
+ import { Portal } from "../../portal/index.js";
15
+ import { composeEventHandlers } from "../../util/composeEventHandlers.js";
16
+ import { createContext } from "../../util/create-context.js";
17
+ import { useCallbackRef, useId, useMergeRefs } from "../../util/hooks/index.js";
18
+ import { createDescendantContext } from "../../util/hooks/descendants/useDescendant.js";
19
+ import { DismissableLayer } from "../dismissablelayer/DismissableLayer.js";
20
+ import { Floating } from "../floating/Floating.js";
21
+ import { FocusScope } from "./parts/FocusScope.js";
22
+ import { RovingFocus } from "./parts/RovingFocus.js";
23
+ import { SlottedDivElement, } from "./parts/SlottedDivElement.js";
24
+ /* -------------------------------------------------------------------------- */
25
+ /* Constants */
26
+ /* -------------------------------------------------------------------------- */
27
+ const SELECTION_KEYS = ["Enter", " "];
28
+ const SUB_OPEN_KEYS = [...SELECTION_KEYS, "ArrowRight"];
29
+ const SUB_CLOSE_KEYS = ["ArrowLeft"];
30
+ const FIRST_KEYS = ["ArrowDown", "PageUp", "Home"];
31
+ const LAST_KEYS = ["ArrowUp", "PageDown", "End"];
32
+ const FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];
33
+ const [MenuDescendantsProvider, useMenuDescendantsContext, useMenuDescendants, useMenuDescendant,] = createDescendantContext();
34
+ const [MenuProvider, useMenuContext] = createContext({
35
+ providerName: "MenuProvider",
36
+ hookName: "useMenuContext",
37
+ });
38
+ const [MenuRootProvider, useMenuRootContext] = createContext({
39
+ providerName: "MenuRootProvider",
40
+ hookName: "useMenuRootContext",
41
+ });
42
+ const MenuRoot = ({ open = false, children, onOpenChange, modal = true, }) => {
43
+ const [content, setContent] = useState(null);
44
+ const isUsingKeyboardRef = useRef(false);
45
+ const handleOpenChange = useCallbackRef(onOpenChange);
46
+ useEffect(() => {
47
+ const globalDocument = globalThis.document;
48
+ // Capturephase ensures we set the boolean before any side effects execute
49
+ // in response to the key or pointer event as they might depend on this value.
50
+ const handlePointer = () => {
51
+ isUsingKeyboardRef.current = false;
52
+ };
53
+ const handleKeyDown = () => {
54
+ isUsingKeyboardRef.current = true;
55
+ globalDocument.addEventListener("pointerdown", handlePointer, {
56
+ capture: true,
57
+ once: true,
58
+ });
59
+ globalDocument.addEventListener("pointermove", handlePointer, {
60
+ capture: true,
61
+ once: true,
62
+ });
63
+ };
64
+ globalDocument.addEventListener("keydown", handleKeyDown, {
65
+ capture: true,
66
+ });
67
+ return () => {
68
+ globalDocument.removeEventListener("keydown", handleKeyDown, {
69
+ capture: true,
70
+ });
71
+ globalDocument.removeEventListener("pointerdown", handlePointer, {
72
+ capture: true,
73
+ });
74
+ globalDocument.removeEventListener("pointermove", handlePointer, {
75
+ capture: true,
76
+ });
77
+ };
78
+ }, []);
79
+ return (React.createElement(Floating, null,
80
+ React.createElement(MenuProvider, { open: open, onOpenChange: handleOpenChange, content: content, onContentChange: setContent },
81
+ React.createElement(MenuRootProvider, { onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]), isUsingKeyboardRef: isUsingKeyboardRef, modal: modal }, children))));
82
+ };
83
+ const Menu = MenuRoot;
84
+ const MenuAnchor = forwardRef((props, forwardedRef) => {
85
+ return React.createElement(Floating.Anchor, Object.assign({}, props, { ref: forwardedRef }));
86
+ });
87
+ const [MenuContentProvider, useMenuContentContext] = createContext({
88
+ providerName: "MenuContentProvider",
89
+ hookName: "useMenuContentContext",
90
+ });
91
+ const MenuContent = React.forwardRef((props, ref) => {
92
+ const descendants = useMenuDescendants();
93
+ const rootContext = useMenuRootContext();
94
+ return (React.createElement(MenuDescendantsProvider, { value: descendants }, rootContext.modal ? (React.createElement(MenuRootContentModal, Object.assign({}, props, { ref: ref }))) : (React.createElement(MenuRootContentNonModal, Object.assign({}, props, { ref: ref })))));
95
+ });
96
+ /* ---------------------------- Non-modal content --------------------------- */
97
+ const MenuRootContentNonModal = React.forwardRef((props, ref) => {
98
+ const context = useMenuContext();
99
+ return (React.createElement(MenuContentInternal, Object.assign({}, props, { ref: ref, disableOutsidePointerEvents: false, onDismiss: () => context.onOpenChange(false) })));
100
+ });
101
+ /* ------------------------------ Modal content ----------------------------- */
102
+ const MenuRootContentModal = forwardRef((props, ref) => {
103
+ const context = useMenuContext();
104
+ return (React.createElement(MenuContentInternal, Object.assign({}, props, { ref: ref,
105
+ // make sure to only disable pointer events when open
106
+ // this avoids blocking interactions while animating out
107
+ disableOutsidePointerEvents: context.open,
108
+ // When focus is trapped, a `focusout` event may still happen.
109
+ // We make sure we don't trigger our `onDismiss` in such case.
110
+ onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => event.preventDefault(), { checkForDefaultPrevented: false }), onDismiss: () => context.onOpenChange(false) })));
111
+ });
112
+ const MenuContentInternal = forwardRef((_a, forwardedRef) => {
113
+ var { onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, onEntryFocus, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, onDismiss } = _a, rest = __rest(_a, ["onOpenAutoFocus", "onCloseAutoFocus", "disableOutsidePointerEvents", "onEntryFocus", "onEscapeKeyDown", "onPointerDownOutside", "onFocusOutside", "onInteractOutside", "onDismiss"]);
114
+ const descendants = useMenuDescendantsContext();
115
+ const context = useMenuContext();
116
+ const rootContext = useMenuRootContext();
117
+ const contentRef = useRef(null);
118
+ const composedRefs = useMergeRefs(forwardedRef, contentRef, context.onContentChange);
119
+ const pointerGraceTimerRef = React.useRef(0);
120
+ const pointerGraceIntentRef = React.useRef(null);
121
+ const pointerDirRef = React.useRef("right");
122
+ const lastPointerXRef = React.useRef(0);
123
+ const isPointerMovingToSubmenu = React.useCallback((event) => {
124
+ var _a, _b;
125
+ const isMovingTowards = pointerDirRef.current === ((_a = pointerGraceIntentRef.current) === null || _a === void 0 ? void 0 : _a.side);
126
+ return (isMovingTowards &&
127
+ isPointerInGraceArea(event, (_b = pointerGraceIntentRef.current) === null || _b === void 0 ? void 0 : _b.area));
128
+ }, []);
129
+ return (React.createElement(MenuContentProvider, { onItemEnter: React.useCallback((event) => {
130
+ if (isPointerMovingToSubmenu(event))
131
+ event.preventDefault();
132
+ }, [isPointerMovingToSubmenu]), onItemLeave: React.useCallback((event) => {
133
+ var _a;
134
+ if (isPointerMovingToSubmenu(event))
135
+ return;
136
+ /**
137
+ * Resets focus from current active item to content area
138
+ * This is to prevent focus from being stuck on an item when we move pointer outside the menu or onto a disabled item
139
+ */
140
+ (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.focus();
141
+ }, [isPointerMovingToSubmenu]), onPointerLeaveTrigger: React.useCallback((event) => {
142
+ if (isPointerMovingToSubmenu(event))
143
+ event.preventDefault();
144
+ }, [isPointerMovingToSubmenu]), pointerGraceTimerRef: pointerGraceTimerRef, onPointerGraceIntentChange: React.useCallback((intent) => {
145
+ pointerGraceIntentRef.current = intent;
146
+ }, []) },
147
+ React.createElement(FocusScope, { onMountHandler: composeEventHandlers(onOpenAutoFocus, (event) => {
148
+ var _a;
149
+ // when opening, explicitly focus the content area only and leave
150
+ // `onEntryFocus` in control of focusing first item
151
+ event.preventDefault();
152
+ (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
153
+ }), onUnmountHandler: onCloseAutoFocus },
154
+ React.createElement(DismissableLayer, { asChild: true, disableOutsidePointerEvents: disableOutsidePointerEvents, onEscapeKeyDown: onEscapeKeyDown, onPointerDownOutside: onPointerDownOutside, onFocusOutside: onFocusOutside, onInteractOutside: onInteractOutside, onDismiss: onDismiss },
155
+ React.createElement(RovingFocus, { asChild: true, descendants: descendants, onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {
156
+ // only focus first item when using keyboard
157
+ if (!rootContext.isUsingKeyboardRef.current)
158
+ event.preventDefault();
159
+ }) },
160
+ React.createElement(Floating.Content, Object.assign({ role: "menu", "aria-orientation": "vertical", "data-state": getOpenState(context.open), "data-aksel-menu-content": "", dir: "ltr" }, rest, { ref: composedRefs, style: Object.assign({ outline: "none" }, rest.style), onKeyDown: composeEventHandlers(rest.onKeyDown, (event) => {
161
+ var _a, _b, _c, _d;
162
+ // submenu key events bubble through portals. We only care about keys in this menu.
163
+ const target = event.target;
164
+ const isKeyDownInside = target.closest("[data-aksel-menu-content]") ===
165
+ event.currentTarget;
166
+ if (isKeyDownInside) {
167
+ // menus should not be navigated using tab key so we prevent it
168
+ if (event.key === "Tab")
169
+ event.preventDefault();
170
+ }
171
+ // focus first/last item based on key pressed
172
+ const content = contentRef.current;
173
+ if (event.target !== content)
174
+ return;
175
+ if (!FIRST_LAST_KEYS.includes(event.key))
176
+ return;
177
+ event.preventDefault();
178
+ if (LAST_KEYS.includes(event.key)) {
179
+ (_b = (_a = descendants.lastEnabled()) === null || _a === void 0 ? void 0 : _a.node) === null || _b === void 0 ? void 0 : _b.focus();
180
+ return;
181
+ }
182
+ (_d = (_c = descendants.firstEnabled()) === null || _c === void 0 ? void 0 : _c.node) === null || _d === void 0 ? void 0 : _d.focus();
183
+ }), onPointerMove: composeEventHandlers(rest.onPointerMove, whenMouse((event) => {
184
+ const target = event.target;
185
+ const pointerXHasChanged = lastPointerXRef.current !== event.clientX;
186
+ // We don't use `event.movementX` for this check because Safari will
187
+ // always return `0` on a pointer event.
188
+ if (event.currentTarget.contains(target) &&
189
+ pointerXHasChanged) {
190
+ const newDir = event.clientX > lastPointerXRef.current
191
+ ? "right"
192
+ : "left";
193
+ pointerDirRef.current = newDir;
194
+ lastPointerXRef.current = event.clientX;
195
+ }
196
+ })) })))))));
197
+ });
198
+ /* -------------------------------------------------------------------------- */
199
+ /* Menu item */
200
+ /* -------------------------------------------------------------------------- */
201
+ const ITEM_SELECT_EVENT = "menu.itemSelect";
202
+ const MenuItem = forwardRef((_a, forwardedRef) => {
203
+ var { disabled = false, onSelect, onClick, onPointerUp, onPointerDown, onKeyDown } = _a, rest = __rest(_a, ["disabled", "onSelect", "onClick", "onPointerUp", "onPointerDown", "onKeyDown"]);
204
+ const ref = useRef(null);
205
+ const rootContext = useMenuRootContext();
206
+ const composedRefs = useMergeRefs(forwardedRef, ref);
207
+ const isPointerDownRef = useRef(false);
208
+ const handleSelect = () => {
209
+ const menuItem = ref.current;
210
+ if (!disabled && menuItem && onSelect) {
211
+ const itemSelectEvent = new CustomEvent(ITEM_SELECT_EVENT, {
212
+ bubbles: true,
213
+ cancelable: true,
214
+ });
215
+ menuItem.addEventListener(ITEM_SELECT_EVENT, onSelect, { once: true });
216
+ /**
217
+ * We flush the event synchronously to ensure that the event is dispatched before other events react to side-effect from event.
218
+ * This is necessary to prevent the menu from potentially closing before we are able to prevent it.
219
+ */
220
+ ReactDOM.flushSync(() => menuItem.dispatchEvent(itemSelectEvent));
221
+ if (itemSelectEvent.defaultPrevented) {
222
+ isPointerDownRef.current = false;
223
+ }
224
+ else {
225
+ rootContext.onClose();
226
+ }
227
+ }
228
+ };
229
+ return (React.createElement(MenuItemInternal, Object.assign({}, rest, { tabIndex: disabled ? -1 : 0, ref: composedRefs, disabled: disabled, onClick: composeEventHandlers(onClick, handleSelect), onPointerDown: composeEventHandlers(onPointerDown, () => {
230
+ isPointerDownRef.current = true;
231
+ }, { checkForDefaultPrevented: false }), onPointerUp: composeEventHandlers(onPointerUp, (event) => {
232
+ var _a;
233
+ // Pointer down can move to a different menu item which should activate it on pointer up.
234
+ // We dispatch a click for selection to allow composition with click based triggers and to
235
+ // prevent Firefox from getting stuck in text selection mode when the menu closes.
236
+ if (!isPointerDownRef.current)
237
+ (_a = event.currentTarget) === null || _a === void 0 ? void 0 : _a.click();
238
+ }), onKeyDown: composeEventHandlers(onKeyDown, (event) => {
239
+ if (disabled) {
240
+ return;
241
+ }
242
+ if (SELECTION_KEYS.includes(event.key)) {
243
+ event.currentTarget.click();
244
+ /**
245
+ * We prevent default browser behaviour for selection keys as they should only trigger
246
+ * selection.
247
+ * - Prevents space from scrolling the page.
248
+ * - If keydown causes focus to move, prevents keydown from firing on the new target.
249
+ */
250
+ event.preventDefault();
251
+ }
252
+ }) })));
253
+ });
254
+ const MenuItemInternal = forwardRef((_a, forwardedRef) => {
255
+ var { disabled = false, onPointerMove, onPointerLeave } = _a, rest = __rest(_a, ["disabled", "onPointerMove", "onPointerLeave"]);
256
+ const { register } = useMenuDescendant({ disabled });
257
+ const contentContext = useMenuContentContext();
258
+ const ref = useRef(null);
259
+ const composedRefs = useMergeRefs(forwardedRef, ref, register);
260
+ return (React.createElement(SlottedDivElement, Object.assign({ role: "menuitem", "aria-disabled": disabled || undefined, "data-disabled": disabled ? "" : undefined, tabIndex: -1 }, rest, { style: Object.assign({ userSelect: "none" }, rest === null || rest === void 0 ? void 0 : rest.style), ref: composedRefs,
261
+ /**
262
+ * We focus items on `pointerMove` make sure that the item is focused or re-focused
263
+ * when the mouse wiggles. If we used `mouseOver`/`mouseEnter` it would not re-focus.
264
+ * This is mostly to handle edgecases where the user uses mouse and keyboard together.
265
+ */
266
+ onPointerMove: composeEventHandlers(onPointerMove, whenMouse((event) => {
267
+ if (disabled) {
268
+ /**
269
+ * In the edgecase the focus is still stuck on a previous item, we make sure to reset it
270
+ * even when the disabled item can't be focused itself to reset it.
271
+ */
272
+ contentContext.onItemLeave(event);
273
+ }
274
+ else {
275
+ contentContext.onItemEnter(event);
276
+ if (!event.defaultPrevented) {
277
+ event.currentTarget.focus();
278
+ }
279
+ }
280
+ })), onPointerLeave: composeEventHandlers(onPointerLeave, whenMouse(contentContext.onItemLeave)) })));
281
+ });
282
+ const MenuGroup = forwardRef((props, ref) => {
283
+ return React.createElement(SlottedDivElement, Object.assign({ role: "group" }, props, { ref: ref }));
284
+ });
285
+ const MenuPortal = forwardRef(({ children, rootElement }, ref) => {
286
+ const context = useMenuContext();
287
+ if (!context.open) {
288
+ return null;
289
+ }
290
+ return (React.createElement(Portal, { asChild: true, rootElement: rootElement, ref: ref }, children));
291
+ });
292
+ /* -------------------------------------------------------------------------- */
293
+ /* Menu Radio */
294
+ /* -------------------------------------------------------------------------- */
295
+ const [RadioGroupProvider, useMenuRadioGroupContext] = createContext({
296
+ providerName: "MenuRadioGroupProvider",
297
+ hookName: "useMenuRadioGroupContext",
298
+ defaultValue: {
299
+ value: undefined,
300
+ onValueChange: () => { },
301
+ },
302
+ });
303
+ const MenuRadioGroup = React.forwardRef((_a, ref) => {
304
+ var { value, onValueChange } = _a, rest = __rest(_a, ["value", "onValueChange"]);
305
+ const handleValueChange = useCallbackRef(onValueChange);
306
+ return (React.createElement(RadioGroupProvider, { value: value, onValueChange: handleValueChange },
307
+ React.createElement(MenuGroup, Object.assign({}, rest, { ref: ref }))));
308
+ });
309
+ /* -------------------------------------------------------------------------- */
310
+ /* Menu Item Indicator */
311
+ /* -------------------------------------------------------------------------- */
312
+ const [MenuItemIndicatorProvider, useMenuItemIndicatorContext] = createContext({
313
+ providerName: "MenuItemIndicatorProvider",
314
+ hookName: "useMenuItemIndicatorContext",
315
+ });
316
+ const MenuItemIndicator = forwardRef((_a, ref) => {
317
+ var { asChild } = _a, rest = __rest(_a, ["asChild"]);
318
+ const ctx = useMenuItemIndicatorContext();
319
+ return (React.createElement(SlottedDivElement, Object.assign({}, rest, { ref: ref, "data-state": getCheckedState(ctx.state), "aria-hidden": true, asChild: asChild })));
320
+ });
321
+ const MenuRadioItem = forwardRef((_a, forwardedRef) => {
322
+ var { value, onSelect } = _a, rest = __rest(_a, ["value", "onSelect"]);
323
+ const context = useMenuRadioGroupContext();
324
+ const checked = value === context.value;
325
+ return (React.createElement(MenuItemIndicatorProvider, { state: checked },
326
+ React.createElement(MenuItem, Object.assign({ role: "menuitemradio", "aria-checked": checked }, rest, { ref: forwardedRef, "data-state": getCheckedState(checked), onSelect: composeEventHandlers(onSelect, () => { var _a; return (_a = context.onValueChange) === null || _a === void 0 ? void 0 : _a.call(context, value); }, { checkForDefaultPrevented: false }) }))));
327
+ });
328
+ const MenuCheckboxItem = forwardRef((_a, forwardedRef) => {
329
+ var { checked = false, onCheckedChange, onSelect } = _a, rest = __rest(_a, ["checked", "onCheckedChange", "onSelect"]);
330
+ return (React.createElement(MenuItemIndicatorProvider, { state: checked },
331
+ React.createElement(MenuItem, Object.assign({ role: "menuitemcheckbox", "aria-checked": isIndeterminate(checked) ? "mixed" : checked }, rest, { ref: forwardedRef, "data-state": getCheckedState(checked), onSelect: composeEventHandlers(onSelect, () => onCheckedChange === null || onCheckedChange === void 0 ? void 0 : onCheckedChange(isIndeterminate(checked) ? true : !checked), { checkForDefaultPrevented: false }) }))));
332
+ });
333
+ const MenuSeparator = forwardRef((props, ref) => {
334
+ return (React.createElement(SlottedDivElement, Object.assign({ role: "separator", "aria-orientation": "horizontal" }, props, { ref: ref })));
335
+ });
336
+ const [MenuSubProvider, useMenuSubContext] = createContext({
337
+ providerName: "MenuSubProvider",
338
+ hookName: "useMenuSubContext",
339
+ });
340
+ const MenuSub = ({ children, onOpenChange, open = false, }) => {
341
+ const parentMenuContext = useMenuContext();
342
+ const [trigger, setTrigger] = useState(null);
343
+ const [content, setContent] = useState(null);
344
+ const handleOpenChange = useCallbackRef(onOpenChange);
345
+ // Prevent the parent menu from reopening with open submenus.
346
+ useEffect(() => {
347
+ if (parentMenuContext.open === false) {
348
+ handleOpenChange(false);
349
+ }
350
+ return () => handleOpenChange(false);
351
+ }, [parentMenuContext.open, handleOpenChange]);
352
+ return (React.createElement(Floating, null,
353
+ React.createElement(MenuProvider, { open: open, onOpenChange: handleOpenChange, content: content, onContentChange: setContent },
354
+ React.createElement(MenuSubProvider, { contentId: useId(), triggerId: useId(), trigger: trigger, onTriggerChange: setTrigger }, children))));
355
+ };
356
+ const MenuSubTrigger = forwardRef((props, forwardedRef) => {
357
+ const context = useMenuContext();
358
+ const subContext = useMenuSubContext();
359
+ const contentContext = useMenuContentContext();
360
+ const openTimerRef = useRef(null);
361
+ const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;
362
+ const composedRefs = useMergeRefs(forwardedRef, subContext.onTriggerChange);
363
+ const clearOpenTimer = useCallback(() => {
364
+ if (openTimerRef.current) {
365
+ window.clearTimeout(openTimerRef.current);
366
+ }
367
+ openTimerRef.current = null;
368
+ }, []);
369
+ React.useEffect(() => clearOpenTimer, [clearOpenTimer]);
370
+ React.useEffect(() => {
371
+ const pointerGraceTimer = pointerGraceTimerRef.current;
372
+ return () => {
373
+ window.clearTimeout(pointerGraceTimer);
374
+ onPointerGraceIntentChange(null);
375
+ };
376
+ }, [pointerGraceTimerRef, onPointerGraceIntentChange]);
377
+ return (React.createElement(MenuAnchor, { asChild: true },
378
+ React.createElement(MenuItemInternal, Object.assign({ id: subContext.triggerId, "aria-haspopup": "menu", "aria-expanded": context.open, "aria-controls": subContext.contentId, "data-state": getOpenState(context.open) }, props, { ref: composedRefs,
379
+ /**
380
+ * onClick is added to solve edgecase where the user clicks the trigger,
381
+ * but the focus is outside browser-window or viewport at first.
382
+ */
383
+ onClick: (event) => {
384
+ var _a;
385
+ (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, event);
386
+ if (props.disabled || event.defaultPrevented)
387
+ return;
388
+ event.currentTarget.focus();
389
+ if (!context.open)
390
+ context.onOpenChange(true);
391
+ }, onPointerMove: composeEventHandlers(props.onPointerMove, whenMouse((event) => {
392
+ if (event.defaultPrevented)
393
+ return;
394
+ if (!props.disabled && !context.open && !openTimerRef.current) {
395
+ contentContext.onPointerGraceIntentChange(null);
396
+ openTimerRef.current = window.setTimeout(() => {
397
+ context.onOpenChange(true);
398
+ clearOpenTimer();
399
+ }, 100);
400
+ }
401
+ })), onPointerLeave: composeEventHandlers(props.onPointerLeave, whenMouse((event) => {
402
+ var _a, _b;
403
+ clearOpenTimer();
404
+ const contentRect = (_a = context.content) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
405
+ if (contentRect) {
406
+ const side = (_b = context.content) === null || _b === void 0 ? void 0 : _b.dataset.side;
407
+ const rightSide = side === "right";
408
+ const bleed = rightSide ? -5 : +5;
409
+ const contentNearEdge = contentRect[rightSide ? "left" : "right"];
410
+ const contentFarEdge = contentRect[rightSide ? "right" : "left"];
411
+ contentContext.onPointerGraceIntentChange({
412
+ area: [
413
+ // Apply a bleed on clientX to ensure that our exit point is
414
+ // consistently within polygon bounds
415
+ { x: event.clientX + bleed, y: event.clientY },
416
+ { x: contentNearEdge, y: contentRect.top },
417
+ { x: contentFarEdge, y: contentRect.top },
418
+ { x: contentFarEdge, y: contentRect.bottom },
419
+ { x: contentNearEdge, y: contentRect.bottom },
420
+ ],
421
+ side,
422
+ });
423
+ window.clearTimeout(pointerGraceTimerRef.current);
424
+ pointerGraceTimerRef.current = window.setTimeout(() => contentContext.onPointerGraceIntentChange(null), 300);
425
+ }
426
+ else {
427
+ contentContext.onPointerLeaveTrigger(event);
428
+ if (event.defaultPrevented)
429
+ return;
430
+ // There's 100ms where the user may leave an item before the submenu was opened.
431
+ contentContext.onPointerGraceIntentChange(null);
432
+ }
433
+ })), onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
434
+ var _a;
435
+ if (props.disabled) {
436
+ return;
437
+ }
438
+ if (SUB_OPEN_KEYS.includes(event.key)) {
439
+ context.onOpenChange(true);
440
+ // The trigger may hold focus if opened via pointer interaction
441
+ // so we ensure content is given focus again when switching to keyboard.
442
+ (_a = context.content) === null || _a === void 0 ? void 0 : _a.focus();
443
+ // prevent window from scrolling
444
+ event.preventDefault();
445
+ }
446
+ }) }))));
447
+ });
448
+ const MenuSubContent = forwardRef((props, forwardedRef) => {
449
+ const descendants = useMenuDescendants();
450
+ const context = useMenuContext();
451
+ const rootContext = useMenuRootContext();
452
+ const subContext = useMenuSubContext();
453
+ const ref = useRef(null);
454
+ const composedRefs = useMergeRefs(forwardedRef, ref);
455
+ return (React.createElement(MenuDescendantsProvider, { value: descendants },
456
+ React.createElement(MenuContentInternal, Object.assign({ id: subContext.contentId, "aria-labelledby": subContext.triggerId }, props, { ref: composedRefs, align: "start", side: "right", disableOutsidePointerEvents: false, onOpenAutoFocus: (event) => {
457
+ var _a;
458
+ // when opening a submenu, focus content for keyboard users only
459
+ if (rootContext.isUsingKeyboardRef.current) {
460
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
461
+ }
462
+ event.preventDefault();
463
+ },
464
+ // The menu might close because of focusing another menu item in the parent menu. We
465
+ // don't want it to refocus the trigger in that case so we handle trigger focus ourselves.
466
+ onCloseAutoFocus: (event) => event.preventDefault(), onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {
467
+ // We prevent closing when the trigger is focused to avoid triggering a re-open animation
468
+ // on pointer interaction.
469
+ if (event.target !== subContext.trigger)
470
+ context.onOpenChange(false);
471
+ }), onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {
472
+ rootContext.onClose();
473
+ // Ensure pressing escape in submenu doesn't escape full screen mode
474
+ event.preventDefault();
475
+ }), onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
476
+ var _a, _b;
477
+ // Submenu key events bubble through portals. We only care about keys in this menu.
478
+ const isKeyDownInside = event.currentTarget.contains(event.target);
479
+ let isCloseKey = SUB_CLOSE_KEYS.includes(event.key);
480
+ /* When submenu opens to the left, we allow closing it with ArrowRight */
481
+ if (((_a = context.content) === null || _a === void 0 ? void 0 : _a.dataset.side) === "left") {
482
+ isCloseKey = isCloseKey || event.key === "ArrowRight";
483
+ }
484
+ if (isKeyDownInside && isCloseKey) {
485
+ context.onOpenChange(false);
486
+ // We focus manually because we prevented it in `onCloseAutoFocus`
487
+ (_b = subContext.trigger) === null || _b === void 0 ? void 0 : _b.focus();
488
+ // Prevent window from scrolling
489
+ event.preventDefault();
490
+ }
491
+ }) }))));
492
+ });
493
+ /* -------------------------------------------------------------------------- */
494
+ /* Utilities */
495
+ /* -------------------------------------------------------------------------- */
496
+ function getOpenState(open) {
497
+ return open ? "open" : "closed";
498
+ }
499
+ function isIndeterminate(checked) {
500
+ return checked === "indeterminate";
501
+ }
502
+ function getCheckedState(checked) {
503
+ return isIndeterminate(checked)
504
+ ? "indeterminate"
505
+ : checked
506
+ ? "checked"
507
+ : "unchecked";
508
+ }
509
+ /**
510
+ * Determine if a point is inside of a polygon.
511
+ */
512
+ function isPointInPolygon(point, polygon) {
513
+ const { x, y } = point;
514
+ let inside = false;
515
+ for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
516
+ const xi = polygon[i].x;
517
+ const yi = polygon[i].y;
518
+ const xj = polygon[j].x;
519
+ const yj = polygon[j].y;
520
+ // prettier-ignore
521
+ const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
522
+ if (intersect)
523
+ inside = !inside;
524
+ }
525
+ return inside;
526
+ }
527
+ function isPointerInGraceArea(event, area) {
528
+ if (!area)
529
+ return false;
530
+ const cursorPos = { x: event.clientX, y: event.clientY };
531
+ return isPointInPolygon(cursorPos, area);
532
+ }
533
+ function whenMouse(handler) {
534
+ return (event) => event.pointerType === "mouse" ? handler(event) : undefined;
535
+ }
536
+ /* -------------------------------------------------------------------------- */
537
+ Menu.Anchor = MenuAnchor;
538
+ Menu.Portal = MenuPortal;
539
+ Menu.Content = MenuContent;
540
+ Menu.Group = MenuGroup;
541
+ Menu.Item = MenuItem;
542
+ Menu.CheckboxItem = MenuCheckboxItem;
543
+ Menu.RadioGroup = MenuRadioGroup;
544
+ Menu.RadioItem = MenuRadioItem;
545
+ Menu.Separator = MenuSeparator;
546
+ Menu.Sub = MenuSub;
547
+ Menu.SubTrigger = MenuSubTrigger;
548
+ Menu.SubContent = MenuSubContent;
549
+ Menu.ItemIndicator = MenuItemIndicator;
550
+ export { Menu, MenuAnchor, MenuCheckboxItem, MenuContent, MenuGroup, MenuItem, MenuItemIndicator, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, };
551
+ //# sourceMappingURL=Menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/overlays/floating-menu/Menu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ interface FocusScopeProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * Event handler called on mount, unless the component already has focus. Used for auto-focusing.
5
+ * Can be prevented.
6
+ */
7
+ onMountHandler?: (event: Event) => void;
8
+ /**
9
+ * Event handler called on unmount. Used for auto-focusing.
10
+ * Can be prevented.
11
+ */
12
+ onUnmountHandler?: (event: Event) => void;
13
+ }
14
+ /**
15
+ * FocusScope manages focus on mount and unmount of container.
16
+ * This is used to better handle autofocus of elements when mounted and unmounted.
17
+ * Example usage:
18
+ * - Focus first item in a list when mounted
19
+ * - Focus a button when unmounted
20
+ */
21
+ declare const FocusScope: React.ForwardRefExoticComponent<FocusScopeProps & React.RefAttributes<HTMLDivElement>>;
22
+ export { FocusScope, type FocusScopeProps };