@salt-ds/lab 1.0.0-alpha.96 → 1.0.0-alpha.98

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 (195) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/css/salt-lab.css +1 -343
  3. package/dist-cjs/common-hooks/useSelection.js +6 -3
  4. package/dist-cjs/common-hooks/useSelection.js.map +1 -1
  5. package/dist-cjs/index.js +0 -28
  6. package/dist-cjs/index.js.map +1 -1
  7. package/dist-cjs/list/useList.js +7 -1
  8. package/dist-cjs/list/useList.js.map +1 -1
  9. package/dist-es/common-hooks/useSelection.js +6 -3
  10. package/dist-es/common-hooks/useSelection.js.map +1 -1
  11. package/dist-es/index.js +0 -14
  12. package/dist-es/index.js.map +1 -1
  13. package/dist-es/list/useList.js +7 -1
  14. package/dist-es/list/useList.js.map +1 -1
  15. package/dist-types/index.d.ts +0 -2
  16. package/package.json +2 -2
  17. package/dist-cjs/mega-menu/MegaMenu.js +0 -76
  18. package/dist-cjs/mega-menu/MegaMenu.js.map +0 -1
  19. package/dist-cjs/mega-menu/MegaMenuActions.css.js +0 -6
  20. package/dist-cjs/mega-menu/MegaMenuActions.css.js.map +0 -1
  21. package/dist-cjs/mega-menu/MegaMenuActions.js +0 -33
  22. package/dist-cjs/mega-menu/MegaMenuActions.js.map +0 -1
  23. package/dist-cjs/mega-menu/MegaMenuAside.css.js +0 -6
  24. package/dist-cjs/mega-menu/MegaMenuAside.css.js.map +0 -1
  25. package/dist-cjs/mega-menu/MegaMenuAside.js +0 -33
  26. package/dist-cjs/mega-menu/MegaMenuAside.js.map +0 -1
  27. package/dist-cjs/mega-menu/MegaMenuContent.css.js +0 -6
  28. package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +0 -1
  29. package/dist-cjs/mega-menu/MegaMenuContent.js +0 -25
  30. package/dist-cjs/mega-menu/MegaMenuContent.js.map +0 -1
  31. package/dist-cjs/mega-menu/MegaMenuContext.js +0 -11
  32. package/dist-cjs/mega-menu/MegaMenuContext.js.map +0 -1
  33. package/dist-cjs/mega-menu/MegaMenuGroup.css.js +0 -6
  34. package/dist-cjs/mega-menu/MegaMenuGroup.css.js.map +0 -1
  35. package/dist-cjs/mega-menu/MegaMenuGroup.js +0 -40
  36. package/dist-cjs/mega-menu/MegaMenuGroup.js.map +0 -1
  37. package/dist-cjs/mega-menu/MegaMenuGroupContext.js +0 -17
  38. package/dist-cjs/mega-menu/MegaMenuGroupContext.js.map +0 -1
  39. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +0 -6
  40. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js.map +0 -1
  41. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js +0 -39
  42. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js.map +0 -1
  43. package/dist-cjs/mega-menu/MegaMenuGroups.css.js +0 -6
  44. package/dist-cjs/mega-menu/MegaMenuGroups.css.js.map +0 -1
  45. package/dist-cjs/mega-menu/MegaMenuGroups.js +0 -25
  46. package/dist-cjs/mega-menu/MegaMenuGroups.js.map +0 -1
  47. package/dist-cjs/mega-menu/MegaMenuList.css.js +0 -6
  48. package/dist-cjs/mega-menu/MegaMenuList.css.js.map +0 -1
  49. package/dist-cjs/mega-menu/MegaMenuList.js +0 -43
  50. package/dist-cjs/mega-menu/MegaMenuList.js.map +0 -1
  51. package/dist-cjs/mega-menu/MegaMenuListItem.css.js +0 -6
  52. package/dist-cjs/mega-menu/MegaMenuListItem.css.js.map +0 -1
  53. package/dist-cjs/mega-menu/MegaMenuListItem.js +0 -45
  54. package/dist-cjs/mega-menu/MegaMenuListItem.js.map +0 -1
  55. package/dist-cjs/mega-menu/MegaMenuPanel.css.js +0 -6
  56. package/dist-cjs/mega-menu/MegaMenuPanel.css.js.map +0 -1
  57. package/dist-cjs/mega-menu/MegaMenuPanel.js +0 -88
  58. package/dist-cjs/mega-menu/MegaMenuPanel.js.map +0 -1
  59. package/dist-cjs/mega-menu/MegaMenuTrigger.js +0 -90
  60. package/dist-cjs/mega-menu/MegaMenuTrigger.js.map +0 -1
  61. package/dist-cjs/mega-menu/useMegaMenu.js +0 -15
  62. package/dist-cjs/mega-menu/useMegaMenu.js.map +0 -1
  63. package/dist-cjs/mega-menu/useMegaMenuNavigation.js +0 -282
  64. package/dist-cjs/mega-menu/useMegaMenuNavigation.js.map +0 -1
  65. package/dist-cjs/mega-menu/usePageMargin.js +0 -22
  66. package/dist-cjs/mega-menu/usePageMargin.js.map +0 -1
  67. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +0 -6
  68. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +0 -1
  69. package/dist-cjs/toolbar-next/ToolbarContentNext.js +0 -32
  70. package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +0 -1
  71. package/dist-cjs/toolbar-next/ToolbarNext.css.js +0 -6
  72. package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +0 -1
  73. package/dist-cjs/toolbar-next/ToolbarNext.js +0 -394
  74. package/dist-cjs/toolbar-next/ToolbarNext.js.map +0 -1
  75. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +0 -6
  76. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
  77. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +0 -706
  78. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +0 -1
  79. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -165
  80. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
  81. package/dist-cjs/toolbar-next/TooltrayNext.css.js +0 -6
  82. package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +0 -1
  83. package/dist-cjs/toolbar-next/TooltrayNext.js +0 -55
  84. package/dist-cjs/toolbar-next/TooltrayNext.js.map +0 -1
  85. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +0 -409
  86. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
  87. package/dist-cjs/toolbar-next/toolbarNextUtils.js +0 -215
  88. package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +0 -1
  89. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -312
  90. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
  91. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +0 -745
  92. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +0 -1
  93. package/dist-es/mega-menu/MegaMenu.js +0 -74
  94. package/dist-es/mega-menu/MegaMenu.js.map +0 -1
  95. package/dist-es/mega-menu/MegaMenuActions.css.js +0 -4
  96. package/dist-es/mega-menu/MegaMenuActions.css.js.map +0 -1
  97. package/dist-es/mega-menu/MegaMenuActions.js +0 -31
  98. package/dist-es/mega-menu/MegaMenuActions.js.map +0 -1
  99. package/dist-es/mega-menu/MegaMenuAside.css.js +0 -4
  100. package/dist-es/mega-menu/MegaMenuAside.css.js.map +0 -1
  101. package/dist-es/mega-menu/MegaMenuAside.js +0 -31
  102. package/dist-es/mega-menu/MegaMenuAside.js.map +0 -1
  103. package/dist-es/mega-menu/MegaMenuContent.css.js +0 -4
  104. package/dist-es/mega-menu/MegaMenuContent.css.js.map +0 -1
  105. package/dist-es/mega-menu/MegaMenuContent.js +0 -23
  106. package/dist-es/mega-menu/MegaMenuContent.js.map +0 -1
  107. package/dist-es/mega-menu/MegaMenuContext.js +0 -9
  108. package/dist-es/mega-menu/MegaMenuContext.js.map +0 -1
  109. package/dist-es/mega-menu/MegaMenuGroup.css.js +0 -4
  110. package/dist-es/mega-menu/MegaMenuGroup.css.js.map +0 -1
  111. package/dist-es/mega-menu/MegaMenuGroup.js +0 -38
  112. package/dist-es/mega-menu/MegaMenuGroup.js.map +0 -1
  113. package/dist-es/mega-menu/MegaMenuGroupContext.js +0 -14
  114. package/dist-es/mega-menu/MegaMenuGroupContext.js.map +0 -1
  115. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +0 -4
  116. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js.map +0 -1
  117. package/dist-es/mega-menu/MegaMenuGroupHeading.js +0 -37
  118. package/dist-es/mega-menu/MegaMenuGroupHeading.js.map +0 -1
  119. package/dist-es/mega-menu/MegaMenuGroups.css.js +0 -4
  120. package/dist-es/mega-menu/MegaMenuGroups.css.js.map +0 -1
  121. package/dist-es/mega-menu/MegaMenuGroups.js +0 -23
  122. package/dist-es/mega-menu/MegaMenuGroups.js.map +0 -1
  123. package/dist-es/mega-menu/MegaMenuList.css.js +0 -4
  124. package/dist-es/mega-menu/MegaMenuList.css.js.map +0 -1
  125. package/dist-es/mega-menu/MegaMenuList.js +0 -41
  126. package/dist-es/mega-menu/MegaMenuList.js.map +0 -1
  127. package/dist-es/mega-menu/MegaMenuListItem.css.js +0 -4
  128. package/dist-es/mega-menu/MegaMenuListItem.css.js.map +0 -1
  129. package/dist-es/mega-menu/MegaMenuListItem.js +0 -43
  130. package/dist-es/mega-menu/MegaMenuListItem.js.map +0 -1
  131. package/dist-es/mega-menu/MegaMenuPanel.css.js +0 -4
  132. package/dist-es/mega-menu/MegaMenuPanel.css.js.map +0 -1
  133. package/dist-es/mega-menu/MegaMenuPanel.js +0 -86
  134. package/dist-es/mega-menu/MegaMenuPanel.js.map +0 -1
  135. package/dist-es/mega-menu/MegaMenuTrigger.js +0 -88
  136. package/dist-es/mega-menu/MegaMenuTrigger.js.map +0 -1
  137. package/dist-es/mega-menu/useMegaMenu.js +0 -13
  138. package/dist-es/mega-menu/useMegaMenu.js.map +0 -1
  139. package/dist-es/mega-menu/useMegaMenuNavigation.js +0 -278
  140. package/dist-es/mega-menu/useMegaMenuNavigation.js.map +0 -1
  141. package/dist-es/mega-menu/usePageMargin.js +0 -20
  142. package/dist-es/mega-menu/usePageMargin.js.map +0 -1
  143. package/dist-es/toolbar-next/ToolbarContentNext.css.js +0 -4
  144. package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +0 -1
  145. package/dist-es/toolbar-next/ToolbarContentNext.js +0 -30
  146. package/dist-es/toolbar-next/ToolbarContentNext.js.map +0 -1
  147. package/dist-es/toolbar-next/ToolbarNext.css.js +0 -4
  148. package/dist-es/toolbar-next/ToolbarNext.css.js.map +0 -1
  149. package/dist-es/toolbar-next/ToolbarNext.js +0 -392
  150. package/dist-es/toolbar-next/ToolbarNext.js.map +0 -1
  151. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +0 -4
  152. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
  153. package/dist-es/toolbar-next/ToolbarNextOverflow.js +0 -701
  154. package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +0 -1
  155. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -159
  156. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
  157. package/dist-es/toolbar-next/TooltrayNext.css.js +0 -4
  158. package/dist-es/toolbar-next/TooltrayNext.css.js.map +0 -1
  159. package/dist-es/toolbar-next/TooltrayNext.js +0 -53
  160. package/dist-es/toolbar-next/TooltrayNext.js.map +0 -1
  161. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +0 -390
  162. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
  163. package/dist-es/toolbar-next/toolbarNextUtils.js +0 -211
  164. package/dist-es/toolbar-next/toolbarNextUtils.js.map +0 -1
  165. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -310
  166. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
  167. package/dist-es/toolbar-next/useToolbarNextOverflow.js +0 -743
  168. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +0 -1
  169. package/dist-types/mega-menu/MegaMenu.d.ts +0 -36
  170. package/dist-types/mega-menu/MegaMenuActions.d.ts +0 -10
  171. package/dist-types/mega-menu/MegaMenuAside.d.ts +0 -9
  172. package/dist-types/mega-menu/MegaMenuContent.d.ts +0 -9
  173. package/dist-types/mega-menu/MegaMenuContext.d.ts +0 -28
  174. package/dist-types/mega-menu/MegaMenuGroup.d.ts +0 -9
  175. package/dist-types/mega-menu/MegaMenuGroupContext.d.ts +0 -12
  176. package/dist-types/mega-menu/MegaMenuGroupHeading.d.ts +0 -13
  177. package/dist-types/mega-menu/MegaMenuGroups.d.ts +0 -8
  178. package/dist-types/mega-menu/MegaMenuList.d.ts +0 -16
  179. package/dist-types/mega-menu/MegaMenuListItem.d.ts +0 -25
  180. package/dist-types/mega-menu/MegaMenuPanel.d.ts +0 -8
  181. package/dist-types/mega-menu/MegaMenuTrigger.d.ts +0 -9
  182. package/dist-types/mega-menu/index.d.ts +0 -11
  183. package/dist-types/mega-menu/useMegaMenu.d.ts +0 -6
  184. package/dist-types/mega-menu/useMegaMenuNavigation.d.ts +0 -16
  185. package/dist-types/mega-menu/usePageMargin.d.ts +0 -6
  186. package/dist-types/toolbar-next/ToolbarContentNext.d.ts +0 -11
  187. package/dist-types/toolbar-next/ToolbarNext.d.ts +0 -12
  188. package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +0 -34
  189. package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +0 -16
  190. package/dist-types/toolbar-next/TooltrayNext.d.ts +0 -37
  191. package/dist-types/toolbar-next/index.d.ts +0 -3
  192. package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +0 -39
  193. package/dist-types/toolbar-next/toolbarNextUtils.d.ts +0 -42
  194. package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +0 -42
  195. package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +0 -37
@@ -1,706 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var react$1 = require('@floating-ui/react');
5
- var core = require('@salt-ds/core');
6
- var styles = require('@salt-ds/styles');
7
- var window = require('@salt-ds/window');
8
- var clsx = require('clsx');
9
- var computeScrollIntoView = require('compute-scroll-into-view');
10
- var react = require('react');
11
- var ReactDOM = require('react-dom');
12
- var ToolbarContentNext = require('./ToolbarContentNext.js');
13
- var ToolbarNextOverflow = require('./ToolbarNextOverflow.css.js');
14
- var ToolbarNextOverflowFloatingBoundary = require('./ToolbarNextOverflowFloatingBoundary.js');
15
- var toolbarNextKeyboardUtils = require('./toolbarNextKeyboardUtils.js');
16
- var toolbarNextUtils = require('./toolbarNextUtils.js');
17
- var useToolbarNextKeyboardNavigation = require('./useToolbarNextKeyboardNavigation.js');
18
-
19
- const withBaseName = core.makePrefixer("saltToolbarNextOverflow");
20
- const toolbarNextStatefulFocusRootSelector = [
21
- ".saltComboBox-focused",
22
- ".saltDateInput-focused",
23
- ".saltInput-focused"
24
- ].join(", ");
25
- const toolbarNextOverflowFocusScrollRootSelector = [
26
- ".saltComboBox",
27
- ".saltDateInput",
28
- ".saltDropdown",
29
- ".saltInput",
30
- ".saltSwitch"
31
- ].join(", ");
32
- function createToolbarNextFocusEvent(eventName, target, relatedTarget) {
33
- var _a;
34
- const FocusEventCtor = (_a = target.ownerDocument.defaultView) == null ? void 0 : _a.FocusEvent;
35
- const eventInit = {
36
- bubbles: eventName === "focusout",
37
- relatedTarget
38
- };
39
- return FocusEventCtor ? new FocusEventCtor(eventName, eventInit) : new Event(eventName, eventInit);
40
- }
41
- function notifyToolbarNextReparentedFocusLoss(mountNode) {
42
- const activeElement = mountNode.ownerDocument.activeElement;
43
- if (mountNode.contains(activeElement)) {
44
- return;
45
- }
46
- const staleFocusTargets = Array.from(
47
- mountNode.querySelectorAll(
48
- toolbarNextStatefulFocusRootSelector
49
- )
50
- ).map(
51
- (root) => root.querySelector("input") ?? root.querySelector(toolbarNextKeyboardUtils.toolbarNextFocusableSelector)
52
- ).filter((target) => target != null);
53
- for (const target of staleFocusTargets) {
54
- const relatedTarget = activeElement instanceof Element ? activeElement : null;
55
- target.dispatchEvent(
56
- createToolbarNextFocusEvent("blur", target, relatedTarget)
57
- );
58
- target.dispatchEvent(
59
- createToolbarNextFocusEvent("focusout", target, relatedTarget)
60
- );
61
- }
62
- }
63
- function getToolbarNextOverflowFocusScrollTarget(target) {
64
- const itemRoot = target.closest(`[${toolbarNextKeyboardUtils.TOOLBAR_NEXT_ITEM_ATTR}]`);
65
- const controlRoot = target.closest(
66
- toolbarNextOverflowFocusScrollRootSelector
67
- );
68
- return controlRoot && (itemRoot == null ? void 0 : itemRoot.contains(controlRoot)) ? controlRoot : target;
69
- }
70
- function getToolbarNextOverflowPanelInlinePadding(target) {
71
- var _a;
72
- const panelContent = target.closest(
73
- `[${toolbarNextKeyboardUtils.TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`
74
- );
75
- const styles = (_a = panelContent == null ? void 0 : panelContent.ownerDocument.defaultView) == null ? void 0 : _a.getComputedStyle(panelContent);
76
- return {
77
- left: Number.parseFloat((styles == null ? void 0 : styles.paddingLeft) ?? "0") || 0,
78
- right: Number.parseFloat((styles == null ? void 0 : styles.paddingRight) ?? "0") || 0
79
- };
80
- }
81
- function scrollToolbarNextOverflowTargetIntoView(panel, target) {
82
- if (!panel || !panel.contains(target)) {
83
- return;
84
- }
85
- const scrollTarget = getToolbarNextOverflowFocusScrollTarget(target);
86
- const actions = computeScrollIntoView.compute(scrollTarget, {
87
- block: "nearest",
88
- boundary: panel,
89
- inline: "nearest",
90
- scrollMode: "if-needed"
91
- });
92
- for (const { el, left, top } of actions) {
93
- if (el === panel) {
94
- const targetRect = scrollTarget.getBoundingClientRect();
95
- const panelRect = panel.getBoundingClientRect();
96
- const viewportLeft = panelRect.left + panel.clientLeft;
97
- const viewportRight = viewportLeft + panel.clientWidth;
98
- const padding = getToolbarNextOverflowPanelInlinePadding(scrollTarget);
99
- const nextLeft = targetRect.left < viewportLeft + padding.left ? left - padding.left : targetRect.right > viewportRight - padding.right ? left + padding.right : left;
100
- el.scrollLeft = Math.max(0, nextLeft);
101
- } else {
102
- el.scrollLeft = left;
103
- }
104
- el.scrollTop = top;
105
- }
106
- }
107
- function canSeedOverflowFocusMemory(focusMemory, group) {
108
- return (focusMemory == null ? void 0 : focusMemory.type) === "item" && group.items.some((item) => item.id === focusMemory.itemId);
109
- }
110
- function ToolbarNextOverflowItemOwner({
111
- host,
112
- item
113
- }) {
114
- const targetWindow = window.useWindow();
115
- const [mountNode, setMountNode] = react.useState(null);
116
- const mainToolbarTabIndexMemoryRef = react.useRef(
117
- /* @__PURE__ */ new WeakMap()
118
- );
119
- const lastOverflowBoundaryKeyRef = react.useRef(null);
120
- const currentOverflowBoundaryKey = ToolbarNextOverflowFloatingBoundary.getToolbarNextOverflowBoundaryKey(host);
121
- if (host) {
122
- lastOverflowBoundaryKeyRef.current = currentOverflowBoundaryKey;
123
- }
124
- const boundaryKey = host ? currentOverflowBoundaryKey : lastOverflowBoundaryKeyRef.current;
125
- core.useIsomorphicLayoutEffect(() => {
126
- const nextMountNode = targetWindow == null ? void 0 : targetWindow.document.createElement("div");
127
- if (!nextMountNode) {
128
- return;
129
- }
130
- nextMountNode.className = withBaseName("contentHost");
131
- setMountNode(nextMountNode);
132
- return () => {
133
- var _a;
134
- (_a = nextMountNode.parentElement) == null ? void 0 : _a.removeChild(nextMountNode);
135
- };
136
- }, [targetWindow]);
137
- core.useIsomorphicLayoutEffect(() => {
138
- var _a, _b;
139
- if (!mountNode) {
140
- return;
141
- }
142
- if (host) {
143
- if (mountNode.parentElement !== host) {
144
- host.appendChild(mountNode);
145
- notifyToolbarNextReparentedFocusLoss(mountNode);
146
- }
147
- const isMainToolbarHost = ((_a = host.closest(`[${toolbarNextKeyboardUtils.TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`)) == null ? void 0 : _a.getAttribute(toolbarNextKeyboardUtils.TOOLBAR_NEXT_SCOPE_ROOT_ATTR)) === "main";
148
- if (isMainToolbarHost) {
149
- const focusableElements = Array.from(
150
- mountNode.querySelectorAll(toolbarNextKeyboardUtils.toolbarNextFocusableSelector)
151
- );
152
- for (const element of focusableElements) {
153
- const rememberedTabIndex = mainToolbarTabIndexMemoryRef.current.get(element);
154
- if (rememberedTabIndex !== void 0) {
155
- if (rememberedTabIndex == null) {
156
- element.removeAttribute("tabindex");
157
- } else {
158
- element.setAttribute("tabindex", rememberedTabIndex);
159
- }
160
- }
161
- }
162
- for (const element of focusableElements) {
163
- mainToolbarTabIndexMemoryRef.current.set(
164
- element,
165
- element.getAttribute("tabindex")
166
- );
167
- }
168
- }
169
- return;
170
- }
171
- notifyToolbarNextReparentedFocusLoss(mountNode);
172
- (_b = mountNode.parentElement) == null ? void 0 : _b.removeChild(mountNode);
173
- }, [host, mountNode]);
174
- if (!mountNode) {
175
- return null;
176
- }
177
- const clonedItem = react.cloneElement(
178
- item.element,
179
- {
180
- [toolbarNextKeyboardUtils.TOOLBAR_NEXT_GROUP_KEY_ATTR]: item.overflowGroupKey,
181
- [toolbarNextKeyboardUtils.TOOLBAR_NEXT_ITEM_ATTR]: item.id
182
- }
183
- );
184
- const itemContent = /* @__PURE__ */ jsxRuntime.jsx(ToolbarNextOverflowFloatingBoundary.ToolbarNextOverflowFloatingComponentProvider, { boundaryKey, children: clonedItem });
185
- return ReactDOM.createPortal(itemContent, mountNode);
186
- }
187
- function ToolbarNextOverflowOwners({
188
- hostNodes,
189
- items
190
- }) {
191
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
192
- ToolbarNextOverflowItemOwner,
193
- {
194
- host: hostNodes[item.id] ?? null,
195
- item
196
- },
197
- item.id
198
- )) });
199
- }
200
- function cloneDecorations(itemId, decorations, slot) {
201
- return react.Children.toArray(decorations).flatMap((decoration) => {
202
- if (!react.isValidElement(decoration)) {
203
- return [];
204
- }
205
- return [
206
- react.cloneElement(decoration, {
207
- key: `${itemId}-${slot}-${String(
208
- decoration.key ?? (typeof decoration.type === "string" ? decoration.type : "decoration")
209
- )}`
210
- })
211
- ];
212
- });
213
- }
214
- function ToolbarNextOverflowTriggerContent({
215
- label,
216
- named
217
- }) {
218
- const { OverflowIcon } = core.useIcon();
219
- if (named) {
220
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: label });
221
- }
222
- return /* @__PURE__ */ jsxRuntime.jsx(OverflowIcon, { "aria-hidden": true });
223
- }
224
- function getOverflowTriggerLabel(group) {
225
- return group.named ? `${group.label} overflow. Hidden controls.` : "Overflow. Hidden controls.";
226
- }
227
- function ToolbarNextOverflowMenu({
228
- focusMemoryRef,
229
- getItemHostRef,
230
- group,
231
- onItemFocus
232
- }) {
233
- var _a, _b;
234
- const panelId = core.useId();
235
- const [open, setOpen] = react.useState(false);
236
- const triggerRef = react.useRef(null);
237
- const panelRef = react.useRef(null);
238
- const panelContentRef = react.useRef(null);
239
- const [panelContentNode, setPanelContentNode] = react.useState(null);
240
- const wasOpenRef = react.useRef(false);
241
- const focusedOpenPanelRef = react.useRef(false);
242
- const openModalityRef = react.useRef(null);
243
- const floatingBoundary = ToolbarNextOverflowFloatingBoundary.useToolbarNextOverflowFloatingBoundary();
244
- const {
245
- focusEntryTarget,
246
- handleScopeBlur,
247
- handleScopeFocus,
248
- handleScopeKeyDown,
249
- handleScopePointerDown,
250
- rememberedFocusRef
251
- } = useToolbarNextKeyboardNavigation.useToolbarNextKeyboardNavigation({
252
- includeTabIndexMinusOne: true,
253
- items: group.items,
254
- scopeRef: panelContentRef
255
- });
256
- const { refs, x, y, strategy, context, elements } = core.useFloatingUI({
257
- open,
258
- onOpenChange(nextOpen, _, reason) {
259
- setOpen(nextOpen);
260
- if (!nextOpen) {
261
- openModalityRef.current = null;
262
- }
263
- if (!nextOpen && reason === "escape-key") {
264
- toolbarNextKeyboardUtils.scheduleToolbarNextFocus(triggerRef.current);
265
- }
266
- },
267
- placement: "bottom-end",
268
- middleware: [
269
- react$1.offset(1),
270
- react$1.size({
271
- apply({ elements: elements2, availableHeight }) {
272
- Object.assign(elements2.floating.style, {
273
- maxHeight: `${availableHeight}px`
274
- });
275
- }
276
- }),
277
- react$1.flip(),
278
- react$1.shift({
279
- padding: 8
280
- })
281
- ]
282
- });
283
- const { getFloatingProps, getReferenceProps } = react$1.useInteractions([
284
- react$1.useClick(context),
285
- react$1.useDismiss(context, {
286
- escapeKey: false,
287
- outsidePress(event) {
288
- return !ToolbarNextOverflowFloatingBoundary.isTargetInsideOverflowBoundary(
289
- panelContentRef.current,
290
- floatingBoundary,
291
- group.key,
292
- event.target
293
- );
294
- }
295
- })
296
- ]);
297
- const handleTriggerKeyDown = react.useCallback(
298
- (event) => {
299
- if (!open && ["Enter", " "].includes(event.key)) {
300
- event.preventDefault();
301
- openModalityRef.current = "keyboard";
302
- setOpen(true);
303
- return;
304
- }
305
- if (open && event.key === "Escape") {
306
- event.preventDefault();
307
- setOpen(false);
308
- toolbarNextKeyboardUtils.scheduleToolbarNextFocus(triggerRef.current);
309
- }
310
- },
311
- [open]
312
- );
313
- const handleTriggerPointerDown = react.useCallback(
314
- (event) => {
315
- if (!open && event.button === 0) {
316
- openModalityRef.current = "pointer";
317
- }
318
- },
319
- [open]
320
- );
321
- const handleTriggerMouseDown = react.useCallback(
322
- (event) => {
323
- if (!open && event.button === 0) {
324
- openModalityRef.current = "pointer";
325
- }
326
- },
327
- [open]
328
- );
329
- const handlePanelKeyDown = react.useCallback((event) => {
330
- var _a2;
331
- if (event.key === "Tab") {
332
- const panelContent = panelContentRef.current;
333
- const target = event.target;
334
- if (panelContent && target instanceof HTMLElement && toolbarNextKeyboardUtils.shouldToolbarNextPreserveNativeTab(target)) {
335
- const focusableElements = toolbarNextKeyboardUtils.getDocumentFocusableElements(
336
- panelContent.ownerDocument
337
- );
338
- const currentIndex = focusableElements.indexOf(target);
339
- const nextFocusTarget = focusableElements[currentIndex + (event.shiftKey ? -1 : 1)];
340
- if (currentIndex !== -1 && nextFocusTarget && panelContent.contains(nextFocusTarget)) {
341
- return;
342
- }
343
- }
344
- }
345
- if (event.key === "Tab" && !event.shiftKey) {
346
- const toolbarRoot = (_a2 = triggerRef.current) == null ? void 0 : _a2.closest(
347
- `[${toolbarNextKeyboardUtils.TOOLBAR_NEXT_SCOPE_ROOT_ATTR}]`
348
- );
349
- const nextFocusTarget = toolbarRoot ? toolbarNextKeyboardUtils.getToolbarNextTabMoveTarget(toolbarRoot, false) : null;
350
- if (nextFocusTarget) {
351
- event.preventDefault();
352
- event.stopPropagation();
353
- setOpen(false);
354
- toolbarNextKeyboardUtils.scheduleToolbarNextFocus(nextFocusTarget);
355
- }
356
- return;
357
- }
358
- if (event.key === "Tab" && event.shiftKey) {
359
- event.preventDefault();
360
- event.stopPropagation();
361
- setOpen(false);
362
- toolbarNextKeyboardUtils.scheduleToolbarNextFocus(triggerRef.current);
363
- return;
364
- }
365
- if (event.key === "Escape") {
366
- event.preventDefault();
367
- event.stopPropagation();
368
- setOpen(false);
369
- toolbarNextKeyboardUtils.scheduleToolbarNextFocus(triggerRef.current);
370
- }
371
- }, []);
372
- const handleTriggerRef = core.useForkRef(
373
- triggerRef,
374
- refs.setReference
375
- );
376
- const handlePanelRef = core.useForkRef(panelRef, refs.setFloating);
377
- const handlePanelContentRef = core.useForkRef(
378
- panelContentRef,
379
- setPanelContentNode
380
- );
381
- const handlePanelFocus = react.useCallback(
382
- (event) => {
383
- handleScopeFocus(event);
384
- const panelContent = panelContentRef.current;
385
- const target = event.target;
386
- if (!panelContent || !(target instanceof HTMLElement)) {
387
- return;
388
- }
389
- const focusMemory = toolbarNextKeyboardUtils.getToolbarNextFocusMemory(panelContent, target, {
390
- includeTabIndexMinusOne: true
391
- });
392
- if ((focusMemory == null ? void 0 : focusMemory.type) !== "item") {
393
- return;
394
- }
395
- scrollToolbarNextOverflowTargetIntoView(panelRef.current, target);
396
- onItemFocus == null ? void 0 : onItemFocus(focusMemory.itemId, focusMemory.controlIndex);
397
- },
398
- [handleScopeFocus, onItemFocus]
399
- );
400
- const { Component: FloatingComponent } = core.useFloatingComponent();
401
- react.useEffect(() => {
402
- if (open && !wasOpenRef.current) {
403
- const externalFocusMemory = focusMemoryRef == null ? void 0 : focusMemoryRef.current;
404
- if (canSeedOverflowFocusMemory(externalFocusMemory, group)) {
405
- rememberedFocusRef.current = externalFocusMemory;
406
- }
407
- if (openModalityRef.current !== "pointer") {
408
- focusEntryTarget();
409
- }
410
- }
411
- wasOpenRef.current = open;
412
- }, [focusEntryTarget, focusMemoryRef, group, open, rememberedFocusRef]);
413
- react.useEffect(() => {
414
- if (!open || !panelContentNode) {
415
- return;
416
- }
417
- const handleFocusIn = (event) => {
418
- handlePanelFocus(event);
419
- };
420
- const handleFocusOut = (event) => {
421
- if (ToolbarNextOverflowFloatingBoundary.isTargetInsideOverflowBoundary(
422
- panelContentRef.current,
423
- floatingBoundary,
424
- group.key,
425
- event.relatedTarget
426
- )) {
427
- return;
428
- }
429
- handleScopeBlur(event);
430
- };
431
- const handleKeyDownCapture = (event) => {
432
- handleScopeKeyDown(event);
433
- };
434
- const handlePointerDownCapture = (event) => {
435
- handleScopePointerDown(event);
436
- };
437
- const handleKeyDown = (event) => {
438
- if (!event.defaultPrevented) {
439
- handlePanelKeyDown(event);
440
- }
441
- };
442
- panelContentNode.addEventListener("focusin", handleFocusIn);
443
- panelContentNode.addEventListener("focusout", handleFocusOut);
444
- panelContentNode.addEventListener("keydown", handleKeyDownCapture, true);
445
- panelContentNode.addEventListener(
446
- "pointerdown",
447
- handlePointerDownCapture,
448
- true
449
- );
450
- panelContentNode.addEventListener("keydown", handleKeyDown);
451
- return () => {
452
- panelContentNode.removeEventListener("focusin", handleFocusIn);
453
- panelContentNode.removeEventListener("focusout", handleFocusOut);
454
- panelContentNode.removeEventListener(
455
- "keydown",
456
- handleKeyDownCapture,
457
- true
458
- );
459
- panelContentNode.removeEventListener(
460
- "pointerdown",
461
- handlePointerDownCapture,
462
- true
463
- );
464
- panelContentNode.removeEventListener("keydown", handleKeyDown);
465
- };
466
- }, [
467
- handlePanelFocus,
468
- handlePanelKeyDown,
469
- handleScopeBlur,
470
- handleScopeKeyDown,
471
- handleScopePointerDown,
472
- floatingBoundary,
473
- group.key,
474
- open,
475
- panelContentNode
476
- ]);
477
- core.useIsomorphicLayoutEffect(() => {
478
- if (!open) {
479
- focusedOpenPanelRef.current = false;
480
- return;
481
- }
482
- if (!panelContentNode || focusedOpenPanelRef.current || openModalityRef.current === "pointer") {
483
- return;
484
- }
485
- const getPanelFocusables = () => toolbarNextKeyboardUtils.getToolbarNextScopeFocusableElements(panelContentNode, {
486
- includeTabIndexMinusOne: true
487
- });
488
- const focusEntryWhenReady = () => {
489
- const panelFocusables = getPanelFocusables();
490
- if (panelFocusables.length === 0) {
491
- return false;
492
- }
493
- focusedOpenPanelRef.current = true;
494
- focusEntryTarget();
495
- return true;
496
- };
497
- if (focusEntryWhenReady()) {
498
- return;
499
- }
500
- const panelWindow = panelContentNode.ownerDocument.defaultView;
501
- const mutationObserverCtor = panelWindow == null ? void 0 : panelWindow.MutationObserver;
502
- const resizeObserverCtor = panelWindow == null ? void 0 : panelWindow.ResizeObserver;
503
- let mutationObserver = null;
504
- let resizeObserver = null;
505
- mutationObserver = mutationObserverCtor != null ? new mutationObserverCtor(() => {
506
- if (focusEntryWhenReady()) {
507
- mutationObserver == null ? void 0 : mutationObserver.disconnect();
508
- resizeObserver == null ? void 0 : resizeObserver.disconnect();
509
- }
510
- }) : null;
511
- resizeObserver = resizeObserverCtor != null ? new resizeObserverCtor(() => {
512
- if (focusEntryWhenReady()) {
513
- mutationObserver == null ? void 0 : mutationObserver.disconnect();
514
- resizeObserver == null ? void 0 : resizeObserver.disconnect();
515
- }
516
- }) : null;
517
- mutationObserver == null ? void 0 : mutationObserver.observe(panelContentNode, {
518
- childList: true,
519
- subtree: true
520
- });
521
- resizeObserver == null ? void 0 : resizeObserver.observe(panelContentNode);
522
- return () => {
523
- mutationObserver == null ? void 0 : mutationObserver.disconnect();
524
- resizeObserver == null ? void 0 : resizeObserver.disconnect();
525
- };
526
- }, [focusEntryTarget, open, panelContentNode]);
527
- return /* @__PURE__ */ jsxRuntime.jsxs(
528
- "div",
529
- {
530
- className: withBaseName("menu"),
531
- "data-overflowgroup": group.overflowGroup,
532
- children: [
533
- /* @__PURE__ */ jsxRuntime.jsx(
534
- core.Button,
535
- {
536
- appearance: "transparent",
537
- "aria-controls": panelId,
538
- "aria-expanded": open,
539
- "aria-label": getOverflowTriggerLabel(group),
540
- className: withBaseName("trigger"),
541
- ...{
542
- [toolbarNextKeyboardUtils.TOOLBAR_NEXT_GROUP_KEY_ATTR]: group.key,
543
- [toolbarNextKeyboardUtils.TOOLBAR_NEXT_OVERFLOW_TRIGGER_ATTR]: ""
544
- },
545
- ...getReferenceProps({
546
- onKeyDown: handleTriggerKeyDown,
547
- onMouseDown: handleTriggerMouseDown,
548
- onPointerDown: handleTriggerPointerDown
549
- }),
550
- ref: handleTriggerRef,
551
- sentiment: "neutral",
552
- children: /* @__PURE__ */ jsxRuntime.jsx(
553
- ToolbarNextOverflowTriggerContent,
554
- {
555
- label: group.label,
556
- named: group.named
557
- }
558
- )
559
- }
560
- ),
561
- /* @__PURE__ */ jsxRuntime.jsx(
562
- FloatingComponent,
563
- {
564
- ...getFloatingProps({
565
- role: "presentation"
566
- }),
567
- className: withBaseName("panel"),
568
- focusManagerProps: context ? {
569
- context,
570
- initialFocus: -1,
571
- returnFocus: false,
572
- modal: false,
573
- closeOnFocusOut: false
574
- } : void 0,
575
- id: panelId,
576
- left: x ?? 0,
577
- open,
578
- position: strategy,
579
- ref: handlePanelRef,
580
- top: y ?? 0,
581
- width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
582
- height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight,
583
- children: /* @__PURE__ */ jsxRuntime.jsx(
584
- "div",
585
- {
586
- "aria-label": `${group.label} overflow`,
587
- "aria-orientation": "horizontal",
588
- className: withBaseName("panelContent"),
589
- ...{ [toolbarNextKeyboardUtils.TOOLBAR_NEXT_SCOPE_ROOT_ATTR]: group.key },
590
- role: "toolbar",
591
- ref: handlePanelContentRef,
592
- children: group.items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
593
- "div",
594
- {
595
- className: withBaseName("panelItem"),
596
- children: [
597
- index > 0 && item.leadingDecorations.length > 0 && cloneDecorations(item.id, item.leadingDecorations, "leading"),
598
- /* @__PURE__ */ jsxRuntime.jsx(
599
- "div",
600
- {
601
- className: withBaseName("itemHost"),
602
- ref: open ? getItemHostRef(item.id, "overflow") : null
603
- }
604
- ),
605
- cloneDecorations(item.id, item.trailingDecorations, "trailing")
606
- ]
607
- },
608
- `${group.id}-${item.id}`
609
- ))
610
- }
611
- )
612
- }
613
- )
614
- ]
615
- }
616
- );
617
- }
618
- function ToolbarNextOverflowContent({
619
- content,
620
- focusMemoryRef,
621
- getItemHostRef,
622
- getItemRef,
623
- getNamedTriggerRef,
624
- getContentRef,
625
- onItemFocus,
626
- overflowGroups,
627
- overflowedIds
628
- }) {
629
- const targetWindow = window.useWindow();
630
- styles.useComponentCssInjection({
631
- testId: "salt-toolbar-next-overflow",
632
- css: ToolbarNextOverflow,
633
- window: targetWindow
634
- });
635
- const { className, ...contentProps } = content.props;
636
- const handleContentRef = core.useForkRef(content.ref, getContentRef(content.key));
637
- const overflowGroupByKey = new Map(
638
- overflowGroups.map((group) => [group.key, group])
639
- );
640
- const renderSlots = toolbarNextUtils.buildContentOverflowRenderSlots(
641
- content.items,
642
- overflowedIds,
643
- new Set(overflowGroups.map((group) => group.key))
644
- );
645
- return /* @__PURE__ */ jsxRuntime.jsx(
646
- ToolbarContentNext.ToolbarContentNext,
647
- {
648
- ...contentProps,
649
- "data-implicit": content.implicit || void 0,
650
- className: clsx.clsx(className, withBaseName("content")),
651
- position: content.position,
652
- ref: handleContentRef,
653
- children: renderSlots.map(
654
- ({
655
- item,
656
- overflowed,
657
- showLeadingDecorations,
658
- showTrailingDecorations,
659
- triggerGroupKey
660
- }) => {
661
- const triggerGroup = triggerGroupKey != null ? overflowGroupByKey.get(triggerGroupKey) : void 0;
662
- return /* @__PURE__ */ jsxRuntime.jsxs(
663
- "div",
664
- {
665
- className: withBaseName("slot"),
666
- "data-align": item.align,
667
- "data-priority": item.overflowPriority,
668
- ref: triggerGroup ? getNamedTriggerRef(item.id) : getItemRef(item.id),
669
- children: [
670
- showLeadingDecorations ? cloneDecorations(item.id, item.leadingDecorations, "leading") : null,
671
- !overflowed ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("item"), children: /* @__PURE__ */ jsxRuntime.jsx(
672
- "div",
673
- {
674
- className: withBaseName("itemHost"),
675
- ref: getItemHostRef(item.id, "main")
676
- }
677
- ) }) : null,
678
- triggerGroup ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("item"), children: /* @__PURE__ */ jsxRuntime.jsx(
679
- ToolbarNextOverflowMenu,
680
- {
681
- focusMemoryRef,
682
- getItemHostRef,
683
- group: triggerGroup,
684
- onItemFocus
685
- }
686
- ) }) : null,
687
- showTrailingDecorations ? cloneDecorations(
688
- item.id,
689
- item.trailingDecorations,
690
- "trailing"
691
- ) : null
692
- ]
693
- },
694
- triggerGroup ? `${content.key}-${triggerGroup.id}-anchor-${item.id}` : item.id
695
- );
696
- }
697
- )
698
- }
699
- );
700
- }
701
-
702
- exports.ToolbarNextOverflowContent = ToolbarNextOverflowContent;
703
- exports.ToolbarNextOverflowMenu = ToolbarNextOverflowMenu;
704
- exports.ToolbarNextOverflowOwners = ToolbarNextOverflowOwners;
705
- exports.ToolbarNextOverflowTriggerContent = ToolbarNextOverflowTriggerContent;
706
- //# sourceMappingURL=ToolbarNextOverflow.js.map