@servicetitan/anvil2 3.0.0 → 3.0.1

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 (192) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/AiMark.css +3 -3
  3. package/dist/{Alert-DmbqtMg_.js → Alert-C04WIw7A.js} +2 -2
  4. package/dist/{Alert-DmbqtMg_.js.map → Alert-C04WIw7A.js.map} +1 -1
  5. package/dist/Alert.css +1 -1
  6. package/dist/Alert.js +1 -1
  7. package/dist/Announcement.css +1 -1
  8. package/dist/AnvilProvider.css +1 -2
  9. package/dist/{Avatar-NbFc4Ovc.js → Avatar-BmNcLUg-.js} +2 -2
  10. package/dist/{Avatar-NbFc4Ovc.js.map → Avatar-BmNcLUg-.js.map} +1 -1
  11. package/dist/{Avatar-B4hRHku9.js → Avatar-Cw8B8xZV.js} +2 -2
  12. package/dist/Avatar-Cw8B8xZV.js.map +1 -0
  13. package/dist/Avatar.css +2 -2
  14. package/dist/Avatar.js +2 -2
  15. package/dist/Badge.css +1 -1
  16. package/dist/{Breadcrumbs-CYmciJ1D.js → Breadcrumbs-CAJMeA1D.js} +2 -2
  17. package/dist/{Breadcrumbs-CYmciJ1D.js.map → Breadcrumbs-CAJMeA1D.js.map} +1 -1
  18. package/dist/Breadcrumbs.css +1 -1
  19. package/dist/Breadcrumbs.js +1 -1
  20. package/dist/Button.css +1 -1
  21. package/dist/ButtonCompound.css +1 -1
  22. package/dist/ButtonToggle.css +1 -1
  23. package/dist/Calendar.css +2 -2
  24. package/dist/Card.css +1 -1
  25. package/dist/Checkbox.css +1 -1
  26. package/dist/{Chip-CR5i8mQW.js → Chip-Da8c7tKP.js} +2 -2
  27. package/dist/{Chip-CR5i8mQW.js.map → Chip-Da8c7tKP.js.map} +1 -1
  28. package/dist/Chip.css +1 -1
  29. package/dist/Chip.js +1 -1
  30. package/dist/{Combobox-BffGTugd.js → Combobox-CBLaT1lU.js} +4 -4
  31. package/dist/{Combobox-BffGTugd.js.map → Combobox-CBLaT1lU.js.map} +1 -1
  32. package/dist/Combobox.css +1 -1
  33. package/dist/Combobox.js +1 -1
  34. package/dist/{DataTable-D9Xj1nq5.js → DataTable-BDXdCF7J.js} +6 -6
  35. package/dist/{DataTable-D9Xj1nq5.js.map → DataTable-BDXdCF7J.js.map} +1 -1
  36. package/dist/DataTable.css +16 -16
  37. package/dist/DateFieldYearlessRange.css +1 -1
  38. package/dist/DaysOfTheWeek.css +1 -1
  39. package/dist/Details.css +1 -1
  40. package/dist/{Dialog-DGmF6qx3.js → Dialog-ByTyuybu.js} +4 -4
  41. package/dist/Dialog-ByTyuybu.js.map +1 -0
  42. package/dist/Dialog.css +1 -1
  43. package/dist/Dialog.js +1 -1
  44. package/dist/Divider.css +1 -1
  45. package/dist/DndSort.css +1 -1
  46. package/dist/{Drawer-iewBy1DW.js → Drawer-CwyfBcwt.js} +5 -5
  47. package/dist/{Drawer-iewBy1DW.js.map → Drawer-CwyfBcwt.js.map} +1 -1
  48. package/dist/Drawer.css +1 -1
  49. package/dist/Drawer.js +1 -1
  50. package/dist/DrillDown.css +1 -1
  51. package/dist/DrillDown.js +1 -1
  52. package/dist/{EditCard-D7-Ye7R0.js → EditCard-DqLSnkih.js} +2 -2
  53. package/dist/{EditCard-D7-Ye7R0.js.map → EditCard-DqLSnkih.js.map} +1 -1
  54. package/dist/EditCard.css +1 -1
  55. package/dist/EditCard.js +1 -1
  56. package/dist/FieldLabel.css +2 -2
  57. package/dist/FieldMessage.css +1 -1
  58. package/dist/{Toolbar-C1_etxss.js → FilterBar-BU8StPPd.js} +121 -933
  59. package/dist/FilterBar-BU8StPPd.js.map +1 -0
  60. package/dist/FilterBar.css +59 -0
  61. package/dist/FilterBar.d.ts +6 -0
  62. package/dist/FilterBar.js +2 -0
  63. package/dist/FilterBar.js.map +1 -0
  64. package/dist/Flex.css +1 -1
  65. package/dist/Grid.css +1 -1
  66. package/dist/Helper.css +1 -1
  67. package/dist/Icon.css +1 -1
  68. package/dist/InteractiveCard.css +1 -1
  69. package/dist/Layout.css +1 -1
  70. package/dist/Link.css +1 -1
  71. package/dist/List.css +1 -1
  72. package/dist/ListView.css +1 -1
  73. package/dist/{Listbox-DDlxpVu9.js → Listbox-C0tjQFDF.js} +2 -2
  74. package/dist/{Listbox-DDlxpVu9.js.map → Listbox-C0tjQFDF.js.map} +1 -1
  75. package/dist/Listbox.css +1 -1
  76. package/dist/Listbox.js +1 -1
  77. package/dist/Menu.css +1 -1
  78. package/dist/MultiSelectField.js +1 -1
  79. package/dist/{MultiSelectFieldSync-DZ3tm7zt.js → MultiSelectFieldSync-ueey5UBM.js} +4 -4
  80. package/dist/{MultiSelectFieldSync-DZ3tm7zt.js.map → MultiSelectFieldSync-ueey5UBM.js.map} +1 -1
  81. package/dist/MultiSelectFieldSync.css +1 -1
  82. package/dist/MultiSelectMenu.js +1 -1
  83. package/dist/{MultiSelectMenuSync-dgO9SmHi.js → MultiSelectMenuSync-D7hqugcQ.js} +4 -4
  84. package/dist/{MultiSelectMenuSync-dgO9SmHi.js.map → MultiSelectMenuSync-D7hqugcQ.js.map} +1 -1
  85. package/dist/NumberField.css +1 -1
  86. package/dist/Overflow.css +2 -2
  87. package/dist/{Page-Be1Blwme.js → Page-DbK-JKyB.js} +5 -5
  88. package/dist/{Page-Be1Blwme.js.map → Page-DbK-JKyB.js.map} +1 -1
  89. package/dist/Page.css +1 -1
  90. package/dist/Page.js +1 -1
  91. package/dist/{Pagination-USDJM5vi.js → Pagination-Bg5Nsdik.js} +2 -2
  92. package/dist/{Pagination-USDJM5vi.js.map → Pagination-Bg5Nsdik.js.map} +1 -1
  93. package/dist/Pagination.css +6 -6
  94. package/dist/Pagination.js +1 -1
  95. package/dist/Popover.css +1 -1
  96. package/dist/ProgressBar.css +1 -1
  97. package/dist/Radio.css +1 -1
  98. package/dist/{SearchField-CsRGYZx3.js → SearchField-BKJOW-vI.js} +3 -10
  99. package/dist/SearchField-BKJOW-vI.js.map +1 -0
  100. package/dist/SearchField-BplvDpBG.js +13 -0
  101. package/dist/SearchField-BplvDpBG.js.map +1 -0
  102. package/dist/SearchField.css +1 -1
  103. package/dist/SearchField.js +1 -1
  104. package/dist/SegmentedControl.css +1 -1
  105. package/dist/SelectCard.css +1 -1
  106. package/dist/SelectField.js +1 -1
  107. package/dist/{SelectFieldSync-C44hPeeS.js → SelectFieldSync-W_-jTf7z.js} +3 -3
  108. package/dist/{SelectFieldSync-C44hPeeS.js.map → SelectFieldSync-W_-jTf7z.js.map} +1 -1
  109. package/dist/SelectMenu.js +1 -1
  110. package/dist/{SelectMenuSync-V97oN85V.js → SelectMenuSync-QcjbQtCO.js} +4 -4
  111. package/dist/{SelectMenuSync-V97oN85V.js.map → SelectMenuSync-QcjbQtCO.js.map} +1 -1
  112. package/dist/{SelectOptions-CDoo4AUu.js → SelectOptions-BsX0f22q.js} +2 -2
  113. package/dist/{SelectOptions-CDoo4AUu.js.map → SelectOptions-BsX0f22q.js.map} +1 -1
  114. package/dist/{SelectTrigger-BWN3Tx43.js → SelectTrigger-BaDvF9JD.js} +3 -3
  115. package/dist/{SelectTrigger-BWN3Tx43.js.map → SelectTrigger-BaDvF9JD.js.map} +1 -1
  116. package/dist/SelectTrigger.js +1 -1
  117. package/dist/{SelectTriggerBase-Do7lQ5rw.js → SelectTriggerBase-kMRqbXwu.js} +2 -2
  118. package/dist/{SelectTriggerBase-Do7lQ5rw.js.map → SelectTriggerBase-kMRqbXwu.js.map} +1 -1
  119. package/dist/SelectTriggerBase.css +1 -1
  120. package/dist/SideNav.css +1 -1
  121. package/dist/Skeleton.css +1 -1
  122. package/dist/Spinner.css +1 -1
  123. package/dist/SrOnly.css +1 -1
  124. package/dist/StatusIcon.css +1 -1
  125. package/dist/Stepper.css +4 -4
  126. package/dist/Switch.css +1 -1
  127. package/dist/Tab.css +1 -1
  128. package/dist/Table.js +1 -1
  129. package/dist/{Text-J5YtSSXY.js → Text-BH8gglCL.js} +4 -4
  130. package/dist/Text-BH8gglCL.js.map +1 -0
  131. package/dist/Text.css +1 -1
  132. package/dist/Text.js +1 -1
  133. package/dist/TextField.css +1 -1
  134. package/dist/Textarea.css +1 -1
  135. package/dist/ThemeProvider.css +0 -1
  136. package/dist/{TimeField-DTg0CE5L.js → TimeField-Cz4tMYb3.js} +2 -2
  137. package/dist/{TimeField-DTg0CE5L.js.map → TimeField-Cz4tMYb3.js.map} +1 -1
  138. package/dist/TimeField.css +1 -1
  139. package/dist/TimeField.js +1 -1
  140. package/dist/TimezoneMessage.css +1 -1
  141. package/dist/Toast.js +2 -2
  142. package/dist/{Toaster-Bq42x6Gx.js → Toaster-BV8RjmIN.js} +2 -2
  143. package/dist/{Toaster-Bq42x6Gx.js.map → Toaster-BV8RjmIN.js.map} +1 -1
  144. package/dist/{Toaster-Dly3rfva.js → Toaster-DYGDohJT.js} +2 -2
  145. package/dist/{Toaster-Dly3rfva.js.map → Toaster-DYGDohJT.js.map} +1 -1
  146. package/dist/Toaster.css +1 -1
  147. package/dist/Toolbar-Dzj2KMEy.js +588 -0
  148. package/dist/Toolbar-Dzj2KMEy.js.map +1 -0
  149. package/dist/Toolbar.css +2 -96
  150. package/dist/Toolbar.js +2 -1
  151. package/dist/Toolbar.js.map +1 -1
  152. package/dist/ToolbarButtonToggle--2Ka05N8.js +284 -0
  153. package/dist/ToolbarButtonToggle--2Ka05N8.js.map +1 -0
  154. package/dist/ToolbarButtonToggle.css +41 -0
  155. package/dist/Tooltip.css +1 -1
  156. package/dist/YearlessDateInputWithPicker.css +2 -2
  157. package/dist/assets/icons/st/unsorted.svg +1 -1
  158. package/dist/beta/components/FilterBar/FilterBar.d.ts +87 -0
  159. package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterToggleButton.d.ts +1 -1
  160. package/dist/beta/components/FilterBar/index.d.ts +3 -0
  161. package/dist/beta/components/{Toolbar/Filters → FilterBar}/internal/FilterGroupContext.d.ts +5 -5
  162. package/dist/beta/components/{Toolbar/Filters → FilterBar}/internal/types.d.ts +2 -2
  163. package/dist/beta/components/{Toolbar/Filters → FilterBar}/internal/utils/test.d.ts +1 -0
  164. package/dist/beta/components/Toolbar/Toolbar.d.ts +0 -54
  165. package/dist/beta/components/Toolbar/index.d.ts +0 -1
  166. package/dist/beta/components/index.d.ts +1 -0
  167. package/dist/beta.js +9 -7
  168. package/dist/beta.js.map +1 -1
  169. package/dist/index.css +2 -2
  170. package/dist/index.js +19 -19
  171. package/dist/index2.css +1 -1
  172. package/dist/{syncFilterUtils-BLcRXQfd.js → syncFilterUtils-nJS_tCsu.js} +4 -4
  173. package/dist/{syncFilterUtils-BLcRXQfd.js.map → syncFilterUtils-nJS_tCsu.js.map} +1 -1
  174. package/dist/syncFilterUtils.css +4 -4
  175. package/dist/{useDrilldown-D5WWJRU2.js → useDrilldown-DwzT0Fse.js} +2 -2
  176. package/dist/{useDrilldown-D5WWJRU2.js.map → useDrilldown-DwzT0Fse.js.map} +1 -1
  177. package/dist/{useToggleSelection-D_2qS0P1.js → useToggleSelection-CAwGOeXk.js} +2 -2
  178. package/dist/{useToggleSelection-D_2qS0P1.js.map → useToggleSelection-CAwGOeXk.js.map} +1 -1
  179. package/package.json +9 -9
  180. package/dist/Avatar-B4hRHku9.js.map +0 -1
  181. package/dist/Dialog-DGmF6qx3.js.map +0 -1
  182. package/dist/SearchField-CsRGYZx3.js.map +0 -1
  183. package/dist/Text-J5YtSSXY.js.map +0 -1
  184. package/dist/Toolbar-C1_etxss.js.map +0 -1
  185. package/dist/beta/components/Toolbar/Filters/FilterGroup.d.ts +0 -25
  186. /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterButton.d.ts +0 -0
  187. /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterDateRange.d.ts +0 -0
  188. /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterDateSingle.d.ts +0 -0
  189. /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterDrawer.d.ts +0 -0
  190. /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterItemWrapper.d.ts +0 -0
  191. /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterSelect.d.ts +0 -0
  192. /package/dist/beta/components/{Toolbar/Filters → FilterBar}/internal/utils/filter-state.d.ts +0 -0
@@ -0,0 +1,588 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { forwardRef, useId, useState, useEffect, useContext, useMemo, useRef, useCallback } from 'react';
3
+ import { B as Button } from './Button-Bnt8XUI7.js';
4
+ import { u as useOverFlowItemContext, a as useToolbarSize, s as styles$2, b as ToolbarItemWrapper, c as ToolbarContext, O as OverflowItemContext, h as handleMenuKeyboardNavigation, T as ToolbarButtonToggle, d as updateToolbarItemsTabIndex, e as handleToolbarKeyDown } from './ToolbarButtonToggle--2Ka05N8.js';
5
+ import { T as Tooltip } from './Tooltip-BlStOXN3.js';
6
+ import { c as cx } from './index-De1g9FRV.js';
7
+ import { useTrackingId } from './useTrackingId.js';
8
+ import { B as ButtonLink } from './ButtonLink-j3h_wRNi.js';
9
+ import { S as SvgArrowDropDown } from './arrow_drop_down-ChAdBDux.js';
10
+ import { L as Listbox } from './Listbox-C0tjQFDF.js';
11
+ import { P as Popover } from './AiMark-B1-M3ZgP.js';
12
+ import { F as Flex } from './Flex-DOUtHiPi.js';
13
+ import { S as SvgMoreHoriz } from './more_horiz-DJgdQiy0.js';
14
+ import { S as SvgMoreVert } from './more_vert-C_lJSyxt.js';
15
+ import { I as Icon } from './Icon-BMMbp40n.js';
16
+ import { S as SearchField } from './SearchField-BKJOW-vI.js';
17
+ import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-CB_zHDbW.js';
18
+ import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
19
+
20
+ import './Toolbar.css';const ToolbarButton = forwardRef(
21
+ (props, _ref) => {
22
+ const { appearance = "ghost", className, children, ...rest } = props;
23
+ const { isInOverflowMenu = false } = useOverFlowItemContext?.() || {};
24
+ const size = useToolbarSize();
25
+ const trackingId = useTrackingId({
26
+ name: "ToolbarButton",
27
+ data: {
28
+ disabled: props.disabled,
29
+ "aria-label": props["aria-label"],
30
+ children: props.children
31
+ },
32
+ hasOverride: !!props["data-tracking-id"]
33
+ });
34
+ const buttonClassNames = cx(className, styles$2["toolbar-button-item"]);
35
+ const item = children ? /* @__PURE__ */ jsx(
36
+ Button,
37
+ {
38
+ "data-tracking-id": trackingId,
39
+ appearance,
40
+ size,
41
+ "data-anv": "toolbar-button",
42
+ className: buttonClassNames,
43
+ ...rest,
44
+ children
45
+ }
46
+ ) : /* @__PURE__ */ jsxs(Tooltip, { children: [
47
+ /* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
48
+ Button,
49
+ {
50
+ "data-tracking-id": trackingId,
51
+ appearance,
52
+ size,
53
+ "data-anv": "toolbar-button",
54
+ className: buttonClassNames,
55
+ ...rest
56
+ }
57
+ ) }),
58
+ /* @__PURE__ */ jsx(Tooltip.Content, { children: rest["aria-label"] })
59
+ ] });
60
+ if (isInOverflowMenu) {
61
+ return item;
62
+ }
63
+ return /* @__PURE__ */ jsx(ToolbarItemWrapper, { item: { itemProps: props, itemType: "button" }, children: item });
64
+ }
65
+ );
66
+ ToolbarButton.displayName = "ToolbarButton";
67
+
68
+ const ToolbarButtonLink = forwardRef((props, _ref) => {
69
+ const { appearance = "ghost", className, children, ...rest } = props;
70
+ const { isInOverflowMenu = false } = useOverFlowItemContext?.() || {};
71
+ const size = useToolbarSize();
72
+ const trackingId = useTrackingId({
73
+ name: "ToolbarButtonLink",
74
+ data: {
75
+ href: props.href,
76
+ disabled: props.disabled,
77
+ "aria-label": props["aria-label"],
78
+ children: props.children,
79
+ target: props.target
80
+ },
81
+ hasOverride: !!props["data-tracking-id"]
82
+ });
83
+ const buttonLinkClassNames = cx(className, styles$2["toolbar-button-item"]);
84
+ const item = children ? /* @__PURE__ */ jsx(
85
+ ButtonLink,
86
+ {
87
+ "data-tracking-id": trackingId,
88
+ appearance,
89
+ size,
90
+ "data-anv": "toolbar-button-link",
91
+ className: buttonLinkClassNames,
92
+ ...rest,
93
+ children
94
+ }
95
+ ) : /* @__PURE__ */ jsxs(Tooltip, { children: [
96
+ /* @__PURE__ */ jsx(Tooltip.Trigger, { children: /* @__PURE__ */ jsx(
97
+ ButtonLink,
98
+ {
99
+ "data-tracking-id": trackingId,
100
+ appearance,
101
+ size,
102
+ "data-anv": "toolbar-button-link",
103
+ className: buttonLinkClassNames,
104
+ ...rest
105
+ }
106
+ ) }),
107
+ /* @__PURE__ */ jsx(Tooltip.Content, { children: rest["aria-label"] })
108
+ ] });
109
+ if (isInOverflowMenu) {
110
+ return item;
111
+ }
112
+ return /* @__PURE__ */ jsx(ToolbarItemWrapper, { item: { itemProps: props, itemType: "buttonLink" }, children: item });
113
+ });
114
+ ToolbarButtonLink.displayName = "ToolbarButtonLink";
115
+
116
+ const ToolbarSelect = forwardRef(
117
+ (props, _ref) => {
118
+ const {
119
+ appearance = "ghost",
120
+ onChange,
121
+ selected: selectedItemId,
122
+ accessibleLabel,
123
+ className,
124
+ items,
125
+ ...rest
126
+ } = props;
127
+ const selectId = useId();
128
+ const [isPopoverOpen, setIsPopoverOpen] = useState(false);
129
+ const defaultId = items.length > 0 ? items[0].id : "";
130
+ const [internalSelectedId, setInternalSelectedId] = useState(defaultId);
131
+ const selectedId = selectedItemId ?? internalSelectedId;
132
+ const selectedItem = items.find((item2) => item2.id === selectedId) || items.find((item2) => item2.id === defaultId);
133
+ useEffect(() => {
134
+ if (!selectedItemId && items.length > 0 && !items.some((item2) => item2.id === internalSelectedId)) {
135
+ setInternalSelectedId(items[0].id);
136
+ }
137
+ }, [items, selectedItemId, internalSelectedId]);
138
+ const handleSelectionChange = (selected) => {
139
+ if (selected?.id) {
140
+ if (selectedItemId === void 0) {
141
+ setInternalSelectedId(selected.id);
142
+ }
143
+ onChange?.(selected.id);
144
+ setIsPopoverOpen(false);
145
+ }
146
+ };
147
+ const { isInOverflowMenu = false } = useOverFlowItemContext?.() || {};
148
+ const toolbarSize = useToolbarSize();
149
+ const trackingId = useTrackingId({
150
+ name: "ToolbarSelect",
151
+ data: {
152
+ selected: props.selected,
153
+ disabled: props.disabled,
154
+ "aria-label": props["aria-label"],
155
+ items: props.items
156
+ },
157
+ hasOverride: !!props["data-tracking-id"]
158
+ });
159
+ const buttonClassNames = cx(className, styles$2["toolbar-button-item"]);
160
+ const item = /* @__PURE__ */ jsxs(
161
+ Popover,
162
+ {
163
+ noPadding: true,
164
+ open: isPopoverOpen,
165
+ onClickOutside: () => {
166
+ setIsPopoverOpen(false);
167
+ },
168
+ onClose: () => {
169
+ setIsPopoverOpen(false);
170
+ },
171
+ children: [
172
+ /* @__PURE__ */ jsx(
173
+ Popover.Button,
174
+ {
175
+ "data-tracking-id": trackingId,
176
+ appearance,
177
+ size: toolbarSize,
178
+ icon: { after: SvgArrowDropDown },
179
+ className: buttonClassNames,
180
+ id: selectId,
181
+ "data-anv": "toolbar-select",
182
+ onClick: () => {
183
+ setIsPopoverOpen(!isPopoverOpen);
184
+ },
185
+ ...rest,
186
+ children: selectedItem?.label
187
+ }
188
+ ),
189
+ /* @__PURE__ */ jsx(
190
+ Popover.Content,
191
+ {
192
+ className: styles$2["toolbar-select-content"],
193
+ "aria-label": accessibleLabel,
194
+ children: /* @__PURE__ */ jsx(
195
+ Listbox,
196
+ {
197
+ selected: selectedItem,
198
+ onSelectionChange: handleSelectionChange,
199
+ items,
200
+ "aria-labelledby": selectId,
201
+ disableAutoSelectOnFocus: true,
202
+ children: ({ items: items2 }) => items2.map((item2) => /* @__PURE__ */ jsx(Listbox.Option, { item: item2, children: item2.label }, item2.label))
203
+ }
204
+ )
205
+ }
206
+ )
207
+ ]
208
+ }
209
+ );
210
+ if (isInOverflowMenu) {
211
+ return item;
212
+ }
213
+ return /* @__PURE__ */ jsx(ToolbarItemWrapper, { item: { itemProps: props, itemType: "select" }, children: item });
214
+ }
215
+ );
216
+ ToolbarSelect.displayName = "ToolbarSelect";
217
+
218
+ const OverflowItem = ({ itemType, itemProps }) => {
219
+ switch (itemType) {
220
+ case "button":
221
+ return /* @__PURE__ */ jsx(ToolbarButton, { ...itemProps });
222
+ case "buttonToggle":
223
+ return /* @__PURE__ */ jsx(ToolbarButtonToggle, { ...itemProps });
224
+ case "buttonLink":
225
+ return /* @__PURE__ */ jsx(ToolbarButtonLink, { ...itemProps });
226
+ case "select":
227
+ return /* @__PURE__ */ jsx(ToolbarSelect, { ...itemProps });
228
+ default:
229
+ return null;
230
+ }
231
+ };
232
+ const ToolbarOverflowMenu = ({
233
+ additionalItems,
234
+ direction
235
+ }) => {
236
+ const { overflowItems, orderedIds } = useContext(ToolbarContext);
237
+ const menuTriggerId = useId();
238
+ const size = useToolbarSize();
239
+ const orderedItems = useMemo(() => {
240
+ const allElements = orderedIds?.map((id) => {
241
+ return overflowItems.find((item) => item.id === id);
242
+ });
243
+ return allElements?.filter((item) => item !== void 0) || [];
244
+ }, [orderedIds, overflowItems]);
245
+ const popoverButtonClassNames = cx(
246
+ styles$2["toolbar-button-item"],
247
+ styles$2["toolbar-overflow-trigger"]
248
+ );
249
+ const overflowIcon = direction === "horizontal" ? SvgMoreHoriz : SvgMoreVert;
250
+ return /* @__PURE__ */ jsxs(Popover, { noPadding: true, children: [
251
+ /* @__PURE__ */ jsx(
252
+ Popover.Button,
253
+ {
254
+ size,
255
+ appearance: "ghost",
256
+ id: menuTriggerId,
257
+ className: popoverButtonClassNames,
258
+ "data-anv": "toolbar-overflow-trigger",
259
+ "aria-label": "Additional toolbar options",
260
+ children: /* @__PURE__ */ jsx(Icon, { svg: overflowIcon, size: size === "xsmall" ? "small" : size })
261
+ }
262
+ ),
263
+ /* @__PURE__ */ jsx(Popover.Content, { children: /* @__PURE__ */ jsx(OverflowItemContext.Provider, { value: { isInOverflowMenu: true }, children: /* @__PURE__ */ jsxs(
264
+ "ul",
265
+ {
266
+ role: "menu",
267
+ className: styles$2["toolbar-overflow-content"],
268
+ "data-anv": "toolbar-overflow-menu",
269
+ "aria-labelledby": menuTriggerId,
270
+ onKeyDown: handleMenuKeyboardNavigation,
271
+ children: [
272
+ orderedItems.map((item) => {
273
+ const { itemType, itemProps, id } = item;
274
+ return /* @__PURE__ */ jsx(
275
+ "li",
276
+ {
277
+ role: "menuitem",
278
+ "data-anv": "toolbar-overflow-item",
279
+ children: /* @__PURE__ */ jsx(
280
+ OverflowItem,
281
+ {
282
+ itemType,
283
+ itemProps,
284
+ id
285
+ }
286
+ )
287
+ },
288
+ `${itemType}-${id}`
289
+ );
290
+ }),
291
+ additionalItems?.map((item, index) => /* @__PURE__ */ jsx(
292
+ "li",
293
+ {
294
+ role: "menuitem",
295
+ "data-anv": "toolbar-overflow-item",
296
+ children: item
297
+ },
298
+ `additional-item-${index}`
299
+ ))
300
+ ]
301
+ }
302
+ ) }) })
303
+ ] });
304
+ };
305
+
306
+ const styles$1 = {
307
+ "toolbar-control-group": "_toolbar-control-group_th00x_1"
308
+ };
309
+
310
+ const ToolbarControlGroupElement = forwardRef((props, ref) => {
311
+ const { children, "aria-label": ariaLabel, ...rest } = props;
312
+ const { overflow } = useContext(ToolbarContext);
313
+ return /* @__PURE__ */ jsx(
314
+ Flex,
315
+ {
316
+ ref,
317
+ alignItems: "center",
318
+ gap: 1,
319
+ wrap: overflow === "collapse" ? "nowrap" : "wrap",
320
+ "data-anv": "toolbar-control-group",
321
+ role: "group",
322
+ "aria-label": ariaLabel ? ariaLabel : "Toolbar controls",
323
+ className: styles$1["toolbar-control-group"],
324
+ ...rest,
325
+ children
326
+ }
327
+ );
328
+ });
329
+ ToolbarControlGroupElement.displayName = "ToolbarControlGroup";
330
+ const ToolbarControlGroup = ToolbarControlGroupElement;
331
+
332
+ const styles = {
333
+ "toolbar-search-field-container": "_toolbar-search-field-container_1kk8y_1",
334
+ "toolbar-search-field": "_toolbar-search-field_1kk8y_1"
335
+ };
336
+
337
+ const ToolbarSearchField = forwardRef(
338
+ (props, ref) => {
339
+ const { className, ...rest } = props;
340
+ const size = useToolbarSize();
341
+ const searchFieldStyles = cx(styles["toolbar-search-field"], className);
342
+ return /* @__PURE__ */ jsx("div", { className: styles["toolbar-search-field-container"], children: /* @__PURE__ */ jsx(
343
+ SearchField,
344
+ {
345
+ ref,
346
+ className: searchFieldStyles,
347
+ size,
348
+ "data-anv": "toolbar-search-field",
349
+ ...rest
350
+ }
351
+ ) });
352
+ }
353
+ );
354
+ ToolbarSearchField.displayName = "ToolbarSearchField";
355
+
356
+ const Toolbar = Object.assign(
357
+ forwardRef(function ToolbarInner(props, ref) {
358
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
359
+ const {
360
+ associatedContent,
361
+ className,
362
+ children,
363
+ style,
364
+ direction = "horizontal",
365
+ overflow = "wrap",
366
+ onKeyDown,
367
+ additionalItems,
368
+ size = "xsmall",
369
+ ...rest
370
+ } = componentProps;
371
+ const [overflowItems, setOverflowItems] = useState([]);
372
+ const toolbarItemsRef = useRef(null);
373
+ const toolbarRef = useRef(null);
374
+ const [orderedIds, setOrderedIds] = useState([]);
375
+ useEffect(() => {
376
+ const newOrderedIds = Array.from(
377
+ toolbarItemsRef.current?.querySelectorAll("[data-id]") || []
378
+ ).map((el) => {
379
+ return el.getAttribute("data-id");
380
+ });
381
+ setOrderedIds(newOrderedIds);
382
+ }, [children]);
383
+ const addItem = useCallback((item) => {
384
+ setOverflowItems((prev) => [...prev, item]);
385
+ }, []);
386
+ const removeItem = useCallback((item) => {
387
+ setOverflowItems(
388
+ (prev) => prev.filter((component) => component.id !== item.id)
389
+ );
390
+ }, []);
391
+ useEffect(() => {
392
+ if (toolbarRef.current) {
393
+ updateToolbarItemsTabIndex(toolbarRef.current);
394
+ }
395
+ }, [children]);
396
+ const handleKeyDown = useCallback(
397
+ (event) => {
398
+ if (toolbarRef.current) {
399
+ handleToolbarKeyDown(event, toolbarRef.current);
400
+ }
401
+ onKeyDown?.(event);
402
+ },
403
+ [onKeyDown]
404
+ );
405
+ const showOverflowMenu = overflow === "collapse" && overflowItems.length > 0 || !!additionalItems;
406
+ const value = useMemo(
407
+ () => ({
408
+ overflowItems,
409
+ addItem,
410
+ removeItem,
411
+ toolbarRef,
412
+ orderedIds,
413
+ overflow,
414
+ size
415
+ }),
416
+ [
417
+ overflowItems,
418
+ addItem,
419
+ removeItem,
420
+ toolbarRef,
421
+ orderedIds,
422
+ overflow,
423
+ size
424
+ ]
425
+ );
426
+ const styleCombined = {
427
+ ...style,
428
+ ...layoutStyles
429
+ };
430
+ const toolbarClassNames = cx(styles$2["toolbar"], className);
431
+ const toolbarContentClassNames = cx(styles$2["toolbar-content"], {
432
+ [styles$2[`overflow-${overflow}`]]: overflow
433
+ });
434
+ return /* @__PURE__ */ jsx(ToolbarContext.Provider, { value, children: /* @__PURE__ */ jsxs(
435
+ Flex,
436
+ {
437
+ direction: direction === "horizontal" ? "row" : "column",
438
+ wrap: overflow === "wrap" ? "wrap" : "nowrap",
439
+ alignItems: "center",
440
+ className: toolbarClassNames,
441
+ style: styleCombined,
442
+ ref: useMergeRefs([toolbarRef, ref]),
443
+ role: "toolbar",
444
+ "data-anv": "toolbar",
445
+ "aria-orientation": direction,
446
+ "aria-label": `Toolbar for ${associatedContent}. Use arrow keys to navigate through toolbar controls.`,
447
+ onKeyDown: handleKeyDown,
448
+ ...rest,
449
+ children: [
450
+ /* @__PURE__ */ jsx(
451
+ Flex,
452
+ {
453
+ ref: useMergeRefs([toolbarItemsRef, ref]),
454
+ className: toolbarContentClassNames,
455
+ direction: direction === "horizontal" ? "row" : "column",
456
+ wrap: overflow === "wrap" ? "wrap" : "nowrap",
457
+ alignItems: "center",
458
+ grow: 1,
459
+ "data-anv": "toolbar-content",
460
+ "data-overflow": overflow,
461
+ children
462
+ }
463
+ ),
464
+ showOverflowMenu && /* @__PURE__ */ jsx(
465
+ ToolbarOverflowMenu,
466
+ {
467
+ direction,
468
+ additionalItems
469
+ }
470
+ )
471
+ ]
472
+ }
473
+ ) });
474
+ }),
475
+ {
476
+ /**
477
+ * ToolbarButton component for standard clickable actions within a toolbar with anvil2 tracking.
478
+ *
479
+ * Features:
480
+ * - Designed specifically for toolbar integration
481
+ * - Consistent styling with other toolbar items
482
+ * - Automatic tooltip for icon-only buttons
483
+ * - Overflow menu support
484
+ * - Accessibility enforcement for aria-labels
485
+ * - Ghost and primary appearance options
486
+ * - Automatic tracking ID generation for analytics
487
+ *
488
+ * @example
489
+ * <Toolbar.Button icon={BoldIcon} aria-label="Bold text" />
490
+ *
491
+ * @example
492
+ * <Toolbar.Button appearance="primary">
493
+ * Save
494
+ * </Toolbar.Button>
495
+ */
496
+ Button: ToolbarButton,
497
+ /**
498
+ * ToolbarButtonToggle component for toggleable actions within a toolbar with anvil2 tracking.
499
+ *
500
+ * Features:
501
+ * - Toggle state management
502
+ * - Designed specifically for toolbar integration
503
+ * - Consistent styling with other toolbar items
504
+ * - Overflow menu support
505
+ * - Accessibility enforcement for aria-labels
506
+ * - Ghost and primary appearance options
507
+ * - Automatic tracking ID generation for analytics
508
+ *
509
+ * @example
510
+ * <Toolbar.ButtonToggle icon={BoldIcon} aria-label="Bold" checked={isBold} />
511
+ */
512
+ ButtonToggle: ToolbarButtonToggle,
513
+ /**
514
+ * ToolbarButtonLink component for link actions within a toolbar with anvil2 tracking.
515
+ *
516
+ * Features:
517
+ * - Link functionality with href support
518
+ * - Designed specifically for toolbar integration
519
+ * - Consistent styling with other toolbar items
520
+ * - Overflow menu support
521
+ * - Accessibility enforcement for aria-labels
522
+ * - Ghost and primary appearance options
523
+ * - Automatic tracking ID generation for analytics
524
+ *
525
+ * @example
526
+ * <Toolbar.ButtonLink href="/help">
527
+ * Help
528
+ * </Toolbar.ButtonLink>
529
+ */
530
+ ButtonLink: ToolbarButtonLink,
531
+ /**
532
+ * ToolbarSelect component provides a dropdown selector within a toolbar with anvil2 tracking.
533
+ *
534
+ * Features:
535
+ * - Dropdown menu with selectable options
536
+ * - Controlled and uncontrolled usage patterns
537
+ * - Automatic overflow menu integration
538
+ * - Accessibility support with proper ARIA labels
539
+ * - Ghost and primary appearance options
540
+ * - Dropdown arrow icon indicator
541
+ * - Listbox integration for keyboard navigation
542
+ * - Automatic tracking ID generation for analytics
543
+ *
544
+ * @example
545
+ * <Toolbar.Select
546
+ * items={fontOptions}
547
+ * selected="arial"
548
+ * accessibleLabel="Font family"
549
+ * onChange={(id) => setFont(id)}
550
+ * />
551
+ */
552
+ Select: ToolbarSelect,
553
+ /**
554
+ * ToolbarControlGroup component provides a flex container for grouping related toolbar controls.
555
+ * Can be used for filters, buttons, or other toolbar items.
556
+ *
557
+ * Features:
558
+ * - Groups related toolbar controls in a flex container
559
+ * - Supports accessibility with aria-label
560
+ * - Handles overflow and wrapping based on toolbar context
561
+ * - Integrates with layout utilities for spacing and alignment
562
+ *
563
+ * @example
564
+ * <Toolbar.ControlGroup aria-label="Formatting controls">
565
+ * <Toolbar.Button icon={BoldIcon} aria-label="Bold" />
566
+ * <Toolbar.Button icon={ItalicIcon} aria-label="Italic" />
567
+ * </Toolbar.ControlGroup>
568
+ */
569
+ ControlGroup: ToolbarControlGroup,
570
+ /**
571
+ * ToolbarSearchField component renders a search field for use in toolbars.
572
+ *
573
+ * Features:
574
+ * - Renders a search field styled for toolbar usage
575
+ * - Supports all SearchField props except size
576
+ * - Integrates with toolbar layouts and accessibility
577
+ *
578
+ * @example
579
+ * <Toolbar.Search placeholder="Search..." />
580
+ */
581
+ Search: ToolbarSearchField
582
+ }
583
+ );
584
+ Toolbar.displayName = "Toolbar";
585
+ const ToolbarElement = Toolbar;
586
+
587
+ export { Toolbar as T, ToolbarButton as a, ToolbarButtonLink as b, ToolbarSelect as c, ToolbarControlGroup as d, ToolbarSearchField as e, ToolbarElement as f };
588
+ //# sourceMappingURL=Toolbar-Dzj2KMEy.js.map