@primer/react 38.22.0-rc.fa8383854 → 38.22.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 (88) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/ActionBar/ActionBar-a41224b2.css +2 -0
  3. package/dist/ActionBar/ActionBar-a41224b2.css.map +1 -0
  4. package/dist/ActionBar/ActionBar.d.ts +1 -1
  5. package/dist/ActionBar/ActionBar.d.ts.map +1 -1
  6. package/dist/ActionBar/ActionBar.js +379 -292
  7. package/dist/ActionBar/ActionBar.module.css.js +2 -2
  8. package/dist/ActionBar/index.d.ts +1 -1
  9. package/dist/ActionList/{ActionList-53389912.css → ActionList-2a35a40c.css} +1 -1
  10. package/dist/ActionList/ActionList-2a35a40c.css.map +1 -0
  11. package/dist/ActionList/ActionList.module.css.js +1 -1
  12. package/dist/ActionList/{Group-2c8b5711.css → Group-743ff5c8.css} +1 -1
  13. package/dist/ActionList/Group-743ff5c8.css.map +1 -0
  14. package/dist/ActionList/Group.module.css.js +1 -1
  15. package/dist/ActionList/index.d.ts +4 -0
  16. package/dist/ActionList/index.d.ts.map +1 -1
  17. package/dist/ActionList/index.js +3 -1
  18. package/dist/ActionMenu/ActionMenu.d.ts.map +1 -1
  19. package/dist/ActionMenu/ActionMenu.js +22 -21
  20. package/dist/AnchoredOverlay/AnchoredOverlay.d.ts.map +1 -1
  21. package/dist/AnchoredOverlay/AnchoredOverlay.js +67 -62
  22. package/dist/AvatarStack/{AvatarStack-8526f38a.css → AvatarStack-9bb5649f.css} +1 -1
  23. package/dist/AvatarStack/{AvatarStack-8526f38a.css.map → AvatarStack-9bb5649f.css.map} +1 -1
  24. package/dist/AvatarStack/AvatarStack.module.css.js +1 -1
  25. package/dist/Breadcrumbs/{Breadcrumbs-dbfc9d95.css → Breadcrumbs-54395fc6.css} +1 -1
  26. package/dist/Breadcrumbs/{Breadcrumbs-dbfc9d95.css.map → Breadcrumbs-54395fc6.css.map} +1 -1
  27. package/dist/Breadcrumbs/Breadcrumbs.js +1 -1
  28. package/dist/Breadcrumbs/Breadcrumbs.module.css.js +1 -1
  29. package/dist/Button/{ButtonBase-4da3fa22.css → ButtonBase-713ecf3d.css} +1 -1
  30. package/dist/Button/ButtonBase-713ecf3d.css.map +1 -0
  31. package/dist/Button/ButtonBase.module.css.js +1 -1
  32. package/dist/ButtonGroup/{ButtonGroup-10292330.css → ButtonGroup-54ba293b.css} +1 -1
  33. package/dist/ButtonGroup/ButtonGroup-54ba293b.css.map +1 -0
  34. package/dist/ButtonGroup/ButtonGroup.module.css.js +1 -1
  35. package/dist/FeatureFlags/DefaultFeatureFlags.d.ts.map +1 -1
  36. package/dist/FeatureFlags/DefaultFeatureFlags.js +1 -2
  37. package/dist/FilteredActionList/FilteredActionList.d.ts.map +1 -1
  38. package/dist/FilteredActionList/FilteredActionList.js +13 -33
  39. package/dist/FilteredActionList/FilteredActionListInput.d.ts +15 -0
  40. package/dist/FilteredActionList/FilteredActionListInput.d.ts.map +1 -0
  41. package/dist/FilteredActionList/FilteredActionListInput.js +119 -0
  42. package/dist/FilteredActionList/index.d.ts +9 -1
  43. package/dist/FilteredActionList/index.d.ts.map +1 -1
  44. package/dist/FilteredActionList/index.js +11 -0
  45. package/dist/NavList/NavList.d.ts.map +1 -1
  46. package/dist/NavList/NavList.js +103 -81
  47. package/dist/PageHeader/{PageHeader-9f4a690a.css → PageHeader-5e969745.css} +1 -1
  48. package/dist/PageHeader/PageHeader-5e969745.css.map +1 -0
  49. package/dist/PageHeader/PageHeader.module.css.js +1 -1
  50. package/dist/SegmentedControl/{SegmentedControl-6389d0da.css → SegmentedControl-622e61a4.css} +1 -1
  51. package/dist/SegmentedControl/SegmentedControl-622e61a4.css.map +1 -0
  52. package/dist/SegmentedControl/SegmentedControl.module.css.js +1 -1
  53. package/dist/SelectPanel/SelectPanel.d.ts +1 -0
  54. package/dist/SelectPanel/SelectPanel.d.ts.map +1 -1
  55. package/dist/SelectPanel/SelectPanel.js +3 -2
  56. package/dist/SelectPanel/index.d.ts +1 -0
  57. package/dist/SelectPanel/index.d.ts.map +1 -1
  58. package/dist/Timeline/{Timeline-d1c91434.css → Timeline-ad31a7fb.css} +1 -1
  59. package/dist/Timeline/{Timeline-d1c91434.css.map → Timeline-ad31a7fb.css.map} +1 -1
  60. package/dist/Timeline/Timeline.module.css.js +1 -1
  61. package/dist/TreeView/{TreeView-70baca82.css → TreeView-0fe09f34.css} +1 -1
  62. package/dist/TreeView/TreeView-0fe09f34.css.map +1 -0
  63. package/dist/TreeView/TreeView.module.css.js +1 -1
  64. package/dist/experimental/SelectPanel2/{SelectPanel-40b4ba73.css → SelectPanel-608e207e.css} +1 -1
  65. package/dist/experimental/SelectPanel2/{SelectPanel-40b4ba73.css.map → SelectPanel-608e207e.css.map} +1 -1
  66. package/dist/experimental/SelectPanel2/SelectPanel.module.css.js +1 -1
  67. package/dist/experimental/index.d.ts +2 -2
  68. package/dist/experimental/index.d.ts.map +1 -1
  69. package/dist/experimental/index.js +2 -1
  70. package/dist/hooks/useAnchoredPosition.d.ts +1 -0
  71. package/dist/hooks/useAnchoredPosition.d.ts.map +1 -1
  72. package/dist/hooks/useAnchoredPosition.js +8 -4
  73. package/dist/hooks/useResizeObserver.d.ts +1 -1
  74. package/dist/hooks/useResizeObserver.d.ts.map +1 -1
  75. package/dist/hooks/useResizeObserver.js +5 -2
  76. package/dist/index.d.ts +2 -2
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +1 -0
  79. package/package.json +1 -1
  80. package/dist/ActionBar/ActionBar-3f7b52a3.css +0 -2
  81. package/dist/ActionBar/ActionBar-3f7b52a3.css.map +0 -1
  82. package/dist/ActionList/ActionList-53389912.css.map +0 -1
  83. package/dist/ActionList/Group-2c8b5711.css.map +0 -1
  84. package/dist/Button/ButtonBase-4da3fa22.css.map +0 -1
  85. package/dist/ButtonGroup/ButtonGroup-10292330.css.map +0 -1
  86. package/dist/PageHeader/PageHeader-9f4a690a.css.map +0 -1
  87. package/dist/SegmentedControl/SegmentedControl-6389d0da.css.map +0 -1
  88. package/dist/TreeView/TreeView-70baca82.css.map +0 -1
@@ -1,19 +1,29 @@
1
1
  import { c } from 'react-compiler-runtime';
2
- import React, { forwardRef, useRef, useState, useMemo, useCallback, useContext, useSyncExternalStore } from 'react';
2
+ import React, { useRef, useState, forwardRef, useMemo, useCallback } from 'react';
3
3
  import { KebabHorizontalIcon } from '@primer/octicons-react';
4
4
  import { ActionList } from '../ActionList/index.js';
5
+ import useIsomorphicLayoutEffect from '../utils/useIsomorphicLayoutEffect.js';
6
+ import { useResizeObserver } from '../hooks/useResizeObserver.js';
5
7
  import { IconButton } from '../Button/IconButton.js';
6
8
  import { useFocusZone } from '../hooks/useFocusZone.js';
7
9
  import styles from './ActionBar.module.css.js';
8
10
  import { clsx } from 'clsx';
9
11
  import { createDescendantRegistry } from '../utils/descendant-registry.js';
10
- import { jsx, jsxs } from 'react/jsx-runtime';
12
+ import { jsxs, jsx } from 'react/jsx-runtime';
11
13
  import { useRefObjectAsForwardedRef } from '../hooks/useRefObjectAsForwardedRef.js';
12
14
  import { FocusKeys } from '@primer/behaviors';
13
15
  import { ActionMenu } from '../ActionMenu/ActionMenu.js';
14
16
 
17
+ const ACTIONBAR_ITEM_GAP = 8;
18
+
19
+ /**
20
+ * Registry of descendants to render in the list or menu. To preserve insertion order across updates, children are
21
+ * set to `null` when unregistered rather than fully dropped from the map.
22
+ */
23
+
15
24
  const ActionBarContext = /*#__PURE__*/React.createContext({
16
25
  size: 'medium',
26
+ isVisibleChild: () => true,
17
27
  groupId: undefined
18
28
  });
19
29
 
@@ -21,8 +31,23 @@ const ActionBarContext = /*#__PURE__*/React.createContext({
21
31
  small (28px), medium (32px), large (40px)
22
32
  */
23
33
 
34
+ const MORE_BTN_WIDTH = 32;
24
35
  const ActionBarItemsRegistry = createDescendantRegistry();
25
- const FOCUSABLE_ITEM_SELECTOR = ':is(button, a, input, [tabindex]):not(:disabled):not([data-overflowing]):not([data-more-button-inactive])';
36
+ const calculatePossibleItems = (registryEntries, navWidth, gap, moreMenuWidth = 0) => {
37
+ const widthToFit = navWidth - moreMenuWidth;
38
+ let breakpoint = registryEntries.length; // assume all items will fit
39
+ let sumsOfChildWidth = 0;
40
+ for (const [index, [, child]] of registryEntries.entries()) {
41
+ sumsOfChildWidth += index > 0 ? child.width + gap : child.width;
42
+ if (sumsOfChildWidth > widthToFit) {
43
+ breakpoint = index;
44
+ break;
45
+ } else {
46
+ continue;
47
+ }
48
+ }
49
+ return breakpoint;
50
+ };
26
51
  const renderMenuItem = (item, index) => {
27
52
  if (item.type === 'divider') {
28
53
  return /*#__PURE__*/jsx(ActionList.Divider, {}, index);
@@ -71,256 +96,328 @@ const renderMenuItem = (item, index) => {
71
96
  }, label);
72
97
  };
73
98
  renderMenuItem.displayName = "renderMenuItem";
74
- const ActionBar = t0 => {
75
- const $ = c(40);
99
+ const getMenuItems = (navWidth, moreMenuWidth, childRegistry, hasActiveMenu, gap) => {
100
+ var _childRegistry$entrie;
101
+ const registryEntries = Array.from((_childRegistry$entrie = childRegistry === null || childRegistry === void 0 ? void 0 : childRegistry.entries()) !== null && _childRegistry$entrie !== void 0 ? _childRegistry$entrie : []).filter(entry => entry[1] !== null && (entry[1].type !== 'action' || entry[1].groupId === undefined));
102
+ if (registryEntries.length === 0) return new Set();
103
+ const numberOfItemsPossible = calculatePossibleItems(registryEntries, navWidth, gap);
104
+ const numberOfItemsPossibleWithMoreMenu = calculatePossibleItems(registryEntries, navWidth, gap, moreMenuWidth || MORE_BTN_WIDTH);
105
+ const menuItems = new Set();
106
+
107
+ // First, we check if we can fit all the items with their icons
108
+ if (registryEntries.length >= numberOfItemsPossible) {
109
+ /* Below is an accessibility requirement. Never show only one item in the overflow menu.
110
+ * If there is only one item left to display in the overflow menu according to the calculation,
111
+ * we need to pull another item from the list into the overflow menu.
112
+ */
113
+ const numberOfItemsInMenu = registryEntries.length - numberOfItemsPossibleWithMoreMenu;
114
+ const numberOfListItems = numberOfItemsInMenu === 1 ? numberOfItemsPossibleWithMoreMenu - 1 : numberOfItemsPossibleWithMoreMenu;
115
+ for (const [index, [id, child]] of registryEntries.entries()) {
116
+ if (index < numberOfListItems) {
117
+ continue;
118
+ //if the last item is a divider
119
+ } else if (child.type === 'divider') {
120
+ if (index === numberOfListItems - 1 || index === numberOfListItems) {
121
+ continue;
122
+ } else {
123
+ menuItems.add(id);
124
+ }
125
+ } else {
126
+ menuItems.add(id);
127
+ }
128
+ }
129
+ return menuItems;
130
+ } else if (numberOfItemsPossible > registryEntries.length && hasActiveMenu) {
131
+ /* If the items fit in the list and there are items in the overflow menu, we need to move them back to the list */
132
+ return new Set();
133
+ }
134
+ };
135
+ const ActionBar = props => {
136
+ const $ = c(38);
76
137
  const {
77
- size: t1,
138
+ size: t0,
78
139
  children,
79
140
  "aria-label": ariaLabel,
80
141
  "aria-labelledby": ariaLabelledBy,
81
- flush: t2,
142
+ flush: t1,
82
143
  className,
83
- gap: t3
84
- } = t0;
85
- const size = t1 === undefined ? "medium" : t1;
86
- const flush = t2 === undefined ? false : t2;
87
- const gap = t3 === undefined ? "condensed" : t3;
144
+ gap: t2
145
+ } = props;
146
+ const size = t0 === undefined ? "medium" : t0;
147
+ const flush = t1 === undefined ? false : t1;
148
+ const gap = t2 === undefined ? "condensed" : t2;
149
+ const listRef = useRef(null);
150
+ const [computedGap, setComputedGap] = useState(ACTIONBAR_ITEM_GAP);
88
151
  const [childRegistry, setChildRegistry] = ActionBarItemsRegistry.useRegistryState();
152
+ const [menuItemIds, setMenuItemIds] = useState(_temp);
153
+ const navRef = useRef(null);
154
+ let t3;
155
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
156
+ t3 = () => {
157
+ if (!listRef.current) {
158
+ return;
159
+ }
160
+ const g = window.getComputedStyle(listRef.current).gap;
161
+ const parsed = parseFloat(g);
162
+ if (!Number.isNaN(parsed)) {
163
+ setComputedGap(parsed);
164
+ }
165
+ };
166
+ $[0] = t3;
167
+ } else {
168
+ t3 = $[0];
169
+ }
89
170
  let t4;
90
- if ($[0] !== childRegistry) {
91
- t4 = childRegistry && Array.from(childRegistry.entries()).filter(_temp);
92
- $[0] = childRegistry;
93
- $[1] = t4;
171
+ if ($[1] !== gap) {
172
+ t4 = [gap];
173
+ $[1] = gap;
174
+ $[2] = t4;
94
175
  } else {
95
- t4 = $[1];
176
+ t4 = $[2];
96
177
  }
97
- const overflowItems = t4;
178
+ useIsomorphicLayoutEffect(t3, t4);
179
+ const moreMenuRef = useRef(null);
98
180
  let t5;
99
- if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
100
- t5 = {
101
- bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.HomeAndEnd,
102
- focusOutBehavior: "wrap",
103
- focusableElementFilter: _temp2
181
+ if ($[3] !== childRegistry || $[4] !== computedGap || $[5] !== menuItemIds.size) {
182
+ t5 = resizeObserverEntries => {
183
+ var _moreMenuRef$current$, _moreMenuRef$current;
184
+ const navWidth = resizeObserverEntries[0].contentRect.width;
185
+ const moreMenuWidth = (_moreMenuRef$current$ = (_moreMenuRef$current = moreMenuRef.current) === null || _moreMenuRef$current === void 0 ? void 0 : _moreMenuRef$current.getBoundingClientRect().width) !== null && _moreMenuRef$current$ !== void 0 ? _moreMenuRef$current$ : 0;
186
+ const hasActiveMenu = menuItemIds.size > 0;
187
+ if (navWidth > 0) {
188
+ const newMenuItemIds = getMenuItems(navWidth, moreMenuWidth, childRegistry, hasActiveMenu, computedGap);
189
+ if (newMenuItemIds) {
190
+ setMenuItemIds(newMenuItemIds);
191
+ }
192
+ }
104
193
  };
105
- $[2] = t5;
194
+ $[3] = childRegistry;
195
+ $[4] = computedGap;
196
+ $[5] = menuItemIds.size;
197
+ $[6] = t5;
106
198
  } else {
107
- t5 = $[2];
199
+ t5 = $[6];
108
200
  }
201
+ useResizeObserver(t5, navRef);
109
202
  let t6;
110
- if ($[3] !== overflowItems) {
111
- t6 = [overflowItems];
112
- $[3] = overflowItems;
113
- $[4] = t6;
203
+ if ($[7] !== menuItemIds) {
204
+ t6 = id => !menuItemIds.has(id);
205
+ $[7] = menuItemIds;
206
+ $[8] = t6;
114
207
  } else {
115
- t6 = $[4];
208
+ t6 = $[8];
116
209
  }
117
- const {
118
- containerRef
119
- } = useFocusZone(t5, t6);
210
+ const isVisibleChild = t6;
120
211
  let t7;
121
- if ($[5] !== size) {
212
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
122
213
  t7 = {
123
- size
214
+ containerRef: listRef,
215
+ bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.HomeAndEnd,
216
+ focusOutBehavior: "wrap"
124
217
  };
125
- $[5] = size;
126
- $[6] = t7;
218
+ $[9] = t7;
127
219
  } else {
128
- t7 = $[6];
129
- }
130
- let t8;
131
- if ($[7] !== className) {
132
- t8 = clsx(className, styles.Nav);
133
- $[7] = className;
134
- $[8] = t8;
135
- } else {
136
- t8 = $[8];
137
- }
138
- const t9 = containerRef;
139
- const t10 = overflowItems ? overflowItems.length > 0 : undefined;
140
- let t11;
141
- if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
142
- t11 = /*#__PURE__*/jsx("div", {});
143
- $[9] = t11;
144
- } else {
145
- t11 = $[9];
146
- }
147
- let t12;
148
- if ($[10] !== children || $[11] !== setChildRegistry) {
149
- t12 = /*#__PURE__*/jsxs("div", {
150
- className: styles.OverflowContainer,
151
- children: [t11, /*#__PURE__*/jsx(ActionBarItemsRegistry.Provider, {
152
- setRegistry: setChildRegistry,
153
- children: children
154
- })]
155
- });
156
- $[10] = children;
157
- $[11] = setChildRegistry;
158
- $[12] = t12;
220
+ t7 = $[9];
221
+ }
222
+ useFocusZone(t7);
223
+ let groupedItemsMap;
224
+ if ($[10] !== childRegistry) {
225
+ groupedItemsMap = new Map();
226
+ for (const [key, childProps] of childRegistry !== null && childRegistry !== void 0 ? childRegistry : []) {
227
+ if (childProps.type === "action" && childProps.groupId) {
228
+ const existingGroup = groupedItemsMap.get(childProps.groupId) || [];
229
+ existingGroup.push([key, childProps]);
230
+ groupedItemsMap.set(childProps.groupId, existingGroup);
231
+ }
232
+ }
233
+ $[10] = childRegistry;
234
+ $[11] = groupedItemsMap;
159
235
  } else {
160
- t12 = $[12];
236
+ groupedItemsMap = $[11];
161
237
  }
162
- const t13 = `More ${ariaLabel} items ${overflowItems === null || overflowItems === void 0 ? void 0 : overflowItems.length}`;
163
- const t14 = overflowItems !== null && overflowItems !== void 0 && overflowItems.length ? undefined : true;
164
- let t15;
165
- if ($[13] !== size || $[14] !== t13 || $[15] !== t14) {
166
- t15 = /*#__PURE__*/jsx(ActionMenu.Anchor, {
167
- children: /*#__PURE__*/jsx(IconButton, {
168
- variant: "invisible",
169
- "aria-label": t13,
170
- icon: KebabHorizontalIcon,
171
- className: styles.MoreButton,
172
- "data-more-button-inactive": t14,
173
- size: size
174
- })
175
- });
238
+ const groupedItems = groupedItemsMap;
239
+ let t8;
240
+ if ($[12] !== isVisibleChild || $[13] !== size) {
241
+ t8 = {
242
+ size,
243
+ isVisibleChild
244
+ };
245
+ $[12] = isVisibleChild;
176
246
  $[13] = size;
177
- $[14] = t13;
178
- $[15] = t14;
179
- $[16] = t15;
247
+ $[14] = t8;
180
248
  } else {
181
- t15 = $[16];
249
+ t8 = $[14];
182
250
  }
183
- let t16;
184
- if ($[17] !== overflowItems) {
185
- t16 = overflowItems === null || overflowItems === void 0 ? void 0 : overflowItems.map(_temp4);
186
- $[17] = overflowItems;
187
- $[18] = t16;
251
+ let t9;
252
+ if ($[15] !== className) {
253
+ t9 = clsx(className, styles.Nav);
254
+ $[15] = className;
255
+ $[16] = t9;
188
256
  } else {
189
- t16 = $[18];
257
+ t9 = $[16];
190
258
  }
191
- let t17;
192
- if ($[19] !== t16) {
193
- t17 = /*#__PURE__*/jsx(ActionMenu.Overlay, {
194
- children: /*#__PURE__*/jsx(ActionList, {
195
- children: t16
196
- })
259
+ let t10;
260
+ if ($[17] !== children || $[18] !== setChildRegistry) {
261
+ t10 = /*#__PURE__*/jsx(ActionBarItemsRegistry.Provider, {
262
+ setRegistry: setChildRegistry,
263
+ children: children
197
264
  });
198
- $[19] = t16;
199
- $[20] = t17;
265
+ $[17] = children;
266
+ $[18] = setChildRegistry;
267
+ $[19] = t10;
200
268
  } else {
201
- t17 = $[20];
269
+ t10 = $[19];
202
270
  }
203
- let t18;
204
- if ($[21] !== t15 || $[22] !== t17) {
205
- t18 = /*#__PURE__*/jsxs(ActionMenu, {
206
- children: [t15, t17]
271
+ let t11;
272
+ if ($[20] !== ariaLabel || $[21] !== childRegistry || $[22] !== groupedItems || $[23] !== menuItemIds) {
273
+ t11 = menuItemIds.size > 0 && /*#__PURE__*/jsxs(ActionMenu, {
274
+ children: [/*#__PURE__*/jsx(ActionMenu.Anchor, {
275
+ children: /*#__PURE__*/jsx(IconButton, {
276
+ variant: "invisible",
277
+ "aria-label": `More ${ariaLabel} items`,
278
+ icon: KebabHorizontalIcon
279
+ })
280
+ }), /*#__PURE__*/jsx(ActionMenu.Overlay, {
281
+ children: /*#__PURE__*/jsx(ActionList, {
282
+ children: Array.from(menuItemIds).map(id_0 => {
283
+ const menuItem = childRegistry === null || childRegistry === void 0 ? void 0 : childRegistry.get(id_0);
284
+ if (!menuItem) {
285
+ return null;
286
+ }
287
+ if (menuItem.type === "divider") {
288
+ return /*#__PURE__*/jsx(ActionList.Divider, {}, id_0);
289
+ } else {
290
+ if (menuItem.type === "action") {
291
+ const {
292
+ onClick,
293
+ icon: Icon,
294
+ label,
295
+ disabled
296
+ } = menuItem;
297
+ return /*#__PURE__*/jsxs(ActionList.Item, {
298
+ onSelect: event => {
299
+ typeof onClick === "function" && onClick(event);
300
+ },
301
+ disabled: disabled,
302
+ children: [/*#__PURE__*/jsx(ActionList.LeadingVisual, {
303
+ children: /*#__PURE__*/jsx(Icon, {})
304
+ }), label]
305
+ }, label);
306
+ }
307
+ }
308
+ if (menuItem.type === "menu") {
309
+ const menuItems = menuItem.items;
310
+ const {
311
+ icon: Icon_0,
312
+ label: label_0,
313
+ returnFocusRef
314
+ } = menuItem;
315
+ return /*#__PURE__*/jsxs(ActionMenu, {
316
+ children: [/*#__PURE__*/jsx(ActionMenu.Anchor, {
317
+ children: /*#__PURE__*/jsxs(ActionList.Item, {
318
+ children: [Icon_0 !== "none" ? /*#__PURE__*/jsx(ActionList.LeadingVisual, {
319
+ children: /*#__PURE__*/jsx(Icon_0, {})
320
+ }) : null, label_0]
321
+ })
322
+ }), /*#__PURE__*/jsx(ActionMenu.Overlay, {
323
+ ...(returnFocusRef && {
324
+ returnFocusRef
325
+ }),
326
+ children: /*#__PURE__*/jsx(ActionList, {
327
+ children: menuItems.map(_temp2)
328
+ })
329
+ })]
330
+ }, id_0);
331
+ }
332
+ const groupedMenuItems = groupedItems.get(id_0) || [];
333
+ if (menuItem.type === "group") {
334
+ return /*#__PURE__*/jsx(React.Fragment, {
335
+ children: groupedMenuItems.map(_temp3)
336
+ }, id_0);
337
+ }
338
+ })
339
+ })
340
+ })]
207
341
  });
208
- $[21] = t15;
209
- $[22] = t17;
210
- $[23] = t18;
342
+ $[20] = ariaLabel;
343
+ $[21] = childRegistry;
344
+ $[22] = groupedItems;
345
+ $[23] = menuItemIds;
346
+ $[24] = t11;
211
347
  } else {
212
- t18 = $[23];
348
+ t11 = $[24];
213
349
  }
214
- let t19;
215
- if ($[24] !== ariaLabel || $[25] !== ariaLabelledBy || $[26] !== gap || $[27] !== size || $[28] !== t10 || $[29] !== t12 || $[30] !== t18 || $[31] !== t9) {
216
- t19 = /*#__PURE__*/jsxs("div", {
217
- ref: t9,
350
+ let t12;
351
+ if ($[25] !== ariaLabel || $[26] !== ariaLabelledBy || $[27] !== gap || $[28] !== t10 || $[29] !== t11) {
352
+ t12 = /*#__PURE__*/jsxs("div", {
353
+ ref: listRef,
218
354
  role: "toolbar",
219
355
  className: styles.List,
220
356
  "aria-label": ariaLabel,
221
357
  "aria-labelledby": ariaLabelledBy,
222
358
  "data-gap": gap,
223
- "data-size": size,
224
- "data-has-overflow": t10,
225
- children: [t12, t18]
359
+ children: [t10, t11]
226
360
  });
227
- $[24] = ariaLabel;
228
- $[25] = ariaLabelledBy;
229
- $[26] = gap;
230
- $[27] = size;
361
+ $[25] = ariaLabel;
362
+ $[26] = ariaLabelledBy;
363
+ $[27] = gap;
231
364
  $[28] = t10;
232
- $[29] = t12;
233
- $[30] = t18;
234
- $[31] = t9;
235
- $[32] = t19;
365
+ $[29] = t11;
366
+ $[30] = t12;
236
367
  } else {
237
- t19 = $[32];
368
+ t12 = $[30];
238
369
  }
239
- let t20;
240
- if ($[33] !== flush || $[34] !== t19 || $[35] !== t8) {
241
- t20 = /*#__PURE__*/jsx("div", {
242
- className: t8,
370
+ let t13;
371
+ if ($[31] !== flush || $[32] !== t12 || $[33] !== t9) {
372
+ t13 = /*#__PURE__*/jsx("div", {
373
+ ref: navRef,
374
+ className: t9,
243
375
  "data-component": "ActionBar",
244
376
  "data-flush": flush,
245
- children: t19
377
+ children: t12
246
378
  });
247
- $[33] = flush;
248
- $[34] = t19;
249
- $[35] = t8;
250
- $[36] = t20;
379
+ $[31] = flush;
380
+ $[32] = t12;
381
+ $[33] = t9;
382
+ $[34] = t13;
251
383
  } else {
252
- t20 = $[36];
384
+ t13 = $[34];
253
385
  }
254
- let t21;
255
- if ($[37] !== t20 || $[38] !== t7) {
256
- t21 = /*#__PURE__*/jsx(ActionBarContext.Provider, {
257
- value: t7,
258
- children: t20
386
+ let t14;
387
+ if ($[35] !== t13 || $[36] !== t8) {
388
+ t14 = /*#__PURE__*/jsx(ActionBarContext.Provider, {
389
+ value: t8,
390
+ children: t13
259
391
  });
260
- $[37] = t20;
261
- $[38] = t7;
262
- $[39] = t21;
392
+ $[35] = t13;
393
+ $[36] = t8;
394
+ $[37] = t14;
263
395
  } else {
264
- t21 = $[39];
396
+ t14 = $[37];
265
397
  }
266
- return t21;
398
+ return t14;
267
399
  };
268
- function useActionBarItem(ref, registryProps) {
269
- var _useContext;
270
- const $ = c(8);
271
- const isGroupOverflowing = (_useContext = useContext(ActionBarGroupContext)) === null || _useContext === void 0 ? void 0 : _useContext.isOverflowing;
272
- const isInGroup = isGroupOverflowing !== undefined;
400
+ function useWidth(ref) {
401
+ const $ = c(3);
402
+ const [width, setWidth] = useState(-1);
273
403
  let t0;
274
- if ($[0] !== isInGroup || $[1] !== ref) {
275
- t0 = onChange => {
276
- if (isInGroup) {
277
- return _temp5;
278
- }
279
- const observer = new IntersectionObserver(() => onChange(), {
280
- threshold: 1
281
- });
282
- if (ref.current) {
283
- observer.observe(ref.current);
284
- }
285
- return () => observer.disconnect();
286
- };
287
- $[0] = isInGroup;
288
- $[1] = ref;
289
- $[2] = t0;
290
- } else {
291
- t0 = $[2];
292
- }
293
- const subscribeIntersectionObserver = t0;
294
404
  let t1;
295
- if ($[3] !== ref) {
296
- t1 = () => ref.current ? ref.current.offsetTop > 0 : false;
297
- $[3] = ref;
298
- $[4] = t1;
299
- } else {
300
- t1 = $[4];
301
- }
302
- const isItemOverflowing = useSyncExternalStore(subscribeIntersectionObserver, t1, _temp6);
303
- const isOverflowing = isGroupOverflowing || isItemOverflowing;
304
- ActionBarItemsRegistry.useRegisterDescendant(isOverflowing ? registryProps : null);
305
- const t2 = isOverflowing ? "" : undefined;
306
- let t3;
307
- if ($[5] !== isOverflowing || $[6] !== t2) {
308
- t3 = {
309
- isOverflowing,
310
- dataOverflowingAttr: t2
405
+ if ($[0] !== ref) {
406
+ t0 = () => {
407
+ var _ref$current$getBound, _ref$current;
408
+ return setWidth((_ref$current$getBound = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.getBoundingClientRect().width) !== null && _ref$current$getBound !== void 0 ? _ref$current$getBound : -1);
311
409
  };
312
- $[5] = isOverflowing;
313
- $[6] = t2;
314
- $[7] = t3;
410
+ t1 = [ref];
411
+ $[0] = ref;
412
+ $[1] = t0;
413
+ $[2] = t1;
315
414
  } else {
316
- t3 = $[7];
415
+ t0 = $[1];
416
+ t1 = $[2];
317
417
  }
318
- return t3;
319
- }
320
- function _temp6() {
321
- return false;
418
+ useIsomorphicLayoutEffect(t0, t1);
419
+ return width;
322
420
  }
323
- function _temp5() {}
324
421
  const ActionBarIconButton = /*#__PURE__*/forwardRef(({
325
422
  disabled,
326
423
  onClick,
@@ -329,36 +426,44 @@ const ActionBarIconButton = /*#__PURE__*/forwardRef(({
329
426
  const ref = useRef(null);
330
427
  useRefObjectAsForwardedRef(forwardedRef, ref);
331
428
  const {
332
- size
429
+ size,
430
+ isVisibleChild
333
431
  } = React.useContext(ActionBarContext);
432
+ const {
433
+ groupId
434
+ } = React.useContext(ActionBarGroupContext);
435
+ const width = useWidth(ref);
334
436
  const {
335
437
  ['aria-label']: ariaLabel,
336
438
  icon
337
439
  } = props;
338
- const {
339
- dataOverflowingAttr
340
- } = useActionBarItem(ref, useMemo(() => ({
440
+ const registryProps = useMemo(() => ({
341
441
  type: 'action',
342
442
  label: ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : '',
343
443
  icon,
344
444
  disabled: !!disabled,
345
- onClick: onClick
346
- }), [ariaLabel, icon, disabled, onClick]));
445
+ onClick: onClick,
446
+ width,
447
+ groupId: groupId !== null && groupId !== void 0 ? groupId : undefined
448
+ }), [ariaLabel, icon, disabled, onClick, groupId, width]);
449
+ const id = ActionBarItemsRegistry.useRegisterDescendant(registryProps);
347
450
  const clickHandler = useCallback(event => {
348
451
  if (disabled) return;
349
452
  onClick === null || onClick === void 0 ? void 0 : onClick(event);
350
453
  }, [disabled, onClick]);
454
+ if (!isVisibleChild(id) || groupId && !isVisibleChild(groupId)) return null;
351
455
  return /*#__PURE__*/jsx(IconButton, {
352
456
  "aria-disabled": disabled,
353
457
  ref: ref,
354
458
  size: size,
355
459
  onClick: clickHandler,
356
460
  ...props,
357
- variant: "invisible",
358
- "data-overflowing": dataOverflowingAttr
461
+ variant: "invisible"
359
462
  });
360
463
  });
361
- const ActionBarGroupContext = /*#__PURE__*/React.createContext(null);
464
+ const ActionBarGroupContext = /*#__PURE__*/React.createContext({
465
+ groupId: null
466
+ });
362
467
  const ActionBarGroup = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
363
468
  const $ = c(10);
364
469
  const {
@@ -366,40 +471,39 @@ const ActionBarGroup = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
366
471
  } = t0;
367
472
  const backupRef = useRef(null);
368
473
  const ref = forwardedRef !== null && forwardedRef !== void 0 ? forwardedRef : backupRef;
474
+ const width = useWidth(ref);
369
475
  let t1;
370
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
476
+ if ($[0] !== width) {
371
477
  t1 = {
372
- type: "group"
478
+ type: "group",
479
+ width
373
480
  };
374
- $[0] = t1;
481
+ $[0] = width;
482
+ $[1] = t1;
375
483
  } else {
376
- t1 = $[0];
484
+ t1 = $[1];
377
485
  }
378
- const {
379
- dataOverflowingAttr,
380
- isOverflowing
381
- } = useActionBarItem(ref, t1);
486
+ const registryProps = t1;
487
+ const id = ActionBarItemsRegistry.useRegisterDescendant(registryProps);
382
488
  let t2;
383
- if ($[1] !== isOverflowing) {
489
+ if ($[2] !== id) {
384
490
  t2 = {
385
- isOverflowing
491
+ groupId: id
386
492
  };
387
- $[1] = isOverflowing;
388
- $[2] = t2;
493
+ $[2] = id;
494
+ $[3] = t2;
389
495
  } else {
390
- t2 = $[2];
496
+ t2 = $[3];
391
497
  }
392
498
  let t3;
393
- if ($[3] !== children || $[4] !== dataOverflowingAttr || $[5] !== ref) {
499
+ if ($[4] !== children || $[5] !== ref) {
394
500
  t3 = /*#__PURE__*/jsx("div", {
395
501
  className: styles.Group,
396
502
  "data-component": "ActionBar.Group",
397
503
  ref: ref,
398
- "data-overflowing": dataOverflowingAttr,
399
504
  children: children
400
505
  });
401
- $[3] = children;
402
- $[4] = dataOverflowingAttr;
506
+ $[4] = children;
403
507
  $[5] = ref;
404
508
  $[6] = t3;
405
509
  } else {
@@ -453,12 +557,17 @@ const ActionBarMenu = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
453
557
  }
454
558
  const backupRef = useRef(null);
455
559
  const ref = forwardedRef !== null && forwardedRef !== void 0 ? forwardedRef : backupRef;
560
+ const {
561
+ isVisibleChild
562
+ } = React.useContext(ActionBarContext);
456
563
  const [menuOpen, setMenuOpen] = useState(false);
564
+ const width = useWidth(ref);
457
565
  const t1 = overflowIcon ? overflowIcon : icon;
458
566
  let t2;
459
- if ($[7] !== ariaLabel || $[8] !== items || $[9] !== returnFocusRef || $[10] !== t1) {
567
+ if ($[7] !== ariaLabel || $[8] !== items || $[9] !== returnFocusRef || $[10] !== t1 || $[11] !== width) {
460
568
  t2 = {
461
569
  type: "menu",
570
+ width,
462
571
  label: ariaLabel,
463
572
  icon: t1,
464
573
  returnFocusRef,
@@ -468,27 +577,28 @@ const ActionBarMenu = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
468
577
  $[8] = items;
469
578
  $[9] = returnFocusRef;
470
579
  $[10] = t1;
471
- $[11] = t2;
580
+ $[11] = width;
581
+ $[12] = t2;
472
582
  } else {
473
- t2 = $[11];
583
+ t2 = $[12];
584
+ }
585
+ const registryProps = t2;
586
+ const id = ActionBarItemsRegistry.useRegisterDescendant(registryProps);
587
+ if (!isVisibleChild(id)) {
588
+ return null;
474
589
  }
475
- const {
476
- dataOverflowingAttr
477
- } = useActionBarItem(ref, t2);
478
590
  let t3;
479
- if ($[12] !== ariaLabel || $[13] !== dataOverflowingAttr || $[14] !== icon || $[15] !== props) {
591
+ if ($[13] !== ariaLabel || $[14] !== icon || $[15] !== props) {
480
592
  t3 = /*#__PURE__*/jsx(ActionMenu.Anchor, {
481
593
  children: /*#__PURE__*/jsx(IconButton, {
482
594
  variant: "invisible",
483
595
  "aria-label": ariaLabel,
484
596
  icon: icon,
485
597
  ...props,
486
- "data-overflowing": dataOverflowingAttr,
487
598
  "data-component": "ActionBar.Menu.IconButton"
488
599
  })
489
600
  });
490
- $[12] = ariaLabel;
491
- $[13] = dataOverflowingAttr;
601
+ $[13] = ariaLabel;
492
602
  $[14] = icon;
493
603
  $[15] = props;
494
604
  $[16] = t3;
@@ -507,7 +617,7 @@ const ActionBarMenu = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
507
617
  }
508
618
  let t5;
509
619
  if ($[19] !== items) {
510
- t5 = items.map(_temp7);
620
+ t5 = items.map(_temp4);
511
621
  $[19] = items;
512
622
  $[20] = t5;
513
623
  } else {
@@ -556,91 +666,68 @@ const ActionBarMenu = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
556
666
  const VerticalDivider = () => {
557
667
  const $ = c(3);
558
668
  const ref = useRef(null);
669
+ const {
670
+ isVisibleChild
671
+ } = React.useContext(ActionBarContext);
672
+ const width = useWidth(ref);
559
673
  let t0;
560
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
674
+ if ($[0] !== width) {
561
675
  t0 = {
562
- type: "divider"
676
+ type: "divider",
677
+ width
563
678
  };
564
- $[0] = t0;
679
+ $[0] = width;
680
+ $[1] = t0;
565
681
  } else {
566
- t0 = $[0];
682
+ t0 = $[1];
683
+ }
684
+ const registryProps = t0;
685
+ const id = ActionBarItemsRegistry.useRegisterDescendant(registryProps);
686
+ if (!isVisibleChild(id)) {
687
+ return null;
567
688
  }
568
- const {
569
- dataOverflowingAttr
570
- } = useActionBarItem(ref, t0);
571
689
  let t1;
572
- if ($[1] !== dataOverflowingAttr) {
690
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
573
691
  t1 = /*#__PURE__*/jsx("div", {
574
692
  ref: ref,
575
693
  "data-component": "ActionBar.VerticalDivider",
576
694
  "aria-hidden": "true",
577
- className: styles.Divider,
578
- "data-overflowing": dataOverflowingAttr
695
+ className: styles.Divider
579
696
  });
580
- $[1] = dataOverflowingAttr;
581
697
  $[2] = t1;
582
698
  } else {
583
699
  t1 = $[2];
584
700
  }
585
701
  return t1;
586
702
  };
587
- function _temp(entry) {
588
- return entry[1] !== null;
703
+ function _temp() {
704
+ return new Set();
589
705
  }
590
- function _temp2(element) {
591
- return element.matches(FOCUSABLE_ITEM_SELECTOR);
592
- }
593
- function _temp3(item, index) {
706
+ function _temp2(item, index) {
594
707
  return renderMenuItem(item, index);
595
708
  }
596
- function _temp4(t0) {
597
- const [id, menuItem] = t0;
598
- if (menuItem.type === "divider") {
599
- return /*#__PURE__*/jsx(ActionList.Divider, {}, id);
600
- }
601
- if (menuItem.type === "action") {
709
+ function _temp3(t0) {
710
+ const [key_0, childProps_0] = t0;
711
+ if (childProps_0.type === "action") {
602
712
  const {
603
- onClick,
604
- icon: Icon,
605
- label,
606
- disabled
607
- } = menuItem;
713
+ onClick: onClick_0,
714
+ icon: Icon_1,
715
+ label: label_1,
716
+ disabled: disabled_0
717
+ } = childProps_0;
608
718
  return /*#__PURE__*/jsxs(ActionList.Item, {
609
- onSelect: event => {
610
- typeof onClick === "function" && onClick(event);
719
+ onSelect: event_0 => {
720
+ typeof onClick_0 === "function" && onClick_0(event_0);
611
721
  },
612
- disabled: disabled,
722
+ disabled: disabled_0,
613
723
  children: [/*#__PURE__*/jsx(ActionList.LeadingVisual, {
614
- children: /*#__PURE__*/jsx(Icon, {})
615
- }), label]
616
- }, label);
617
- }
618
- if (menuItem.type === "menu") {
619
- const menuItems = menuItem.items;
620
- const {
621
- icon: Icon_0,
622
- label: label_0,
623
- returnFocusRef
624
- } = menuItem;
625
- return /*#__PURE__*/jsxs(ActionMenu, {
626
- children: [/*#__PURE__*/jsx(ActionMenu.Anchor, {
627
- children: /*#__PURE__*/jsxs(ActionList.Item, {
628
- children: [Icon_0 !== "none" ? /*#__PURE__*/jsx(ActionList.LeadingVisual, {
629
- children: /*#__PURE__*/jsx(Icon_0, {})
630
- }) : null, label_0]
631
- })
632
- }), /*#__PURE__*/jsx(ActionMenu.Overlay, {
633
- ...(returnFocusRef && {
634
- returnFocusRef
635
- }),
636
- children: /*#__PURE__*/jsx(ActionList, {
637
- children: menuItems.map(_temp3)
638
- })
639
- })]
640
- }, id);
724
+ children: /*#__PURE__*/jsx(Icon_1, {})
725
+ }), label_1]
726
+ }, key_0);
641
727
  }
728
+ return null;
642
729
  }
643
- function _temp7(item, index) {
730
+ function _temp4(item, index) {
644
731
  return renderMenuItem(item, index);
645
732
  }
646
733