@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.
- package/CHANGELOG.md +12 -0
- package/dist/AiMark.css +3 -3
- package/dist/{Alert-DmbqtMg_.js → Alert-C04WIw7A.js} +2 -2
- package/dist/{Alert-DmbqtMg_.js.map → Alert-C04WIw7A.js.map} +1 -1
- package/dist/Alert.css +1 -1
- package/dist/Alert.js +1 -1
- package/dist/Announcement.css +1 -1
- package/dist/AnvilProvider.css +1 -2
- package/dist/{Avatar-NbFc4Ovc.js → Avatar-BmNcLUg-.js} +2 -2
- package/dist/{Avatar-NbFc4Ovc.js.map → Avatar-BmNcLUg-.js.map} +1 -1
- package/dist/{Avatar-B4hRHku9.js → Avatar-Cw8B8xZV.js} +2 -2
- package/dist/Avatar-Cw8B8xZV.js.map +1 -0
- package/dist/Avatar.css +2 -2
- package/dist/Avatar.js +2 -2
- package/dist/Badge.css +1 -1
- package/dist/{Breadcrumbs-CYmciJ1D.js → Breadcrumbs-CAJMeA1D.js} +2 -2
- package/dist/{Breadcrumbs-CYmciJ1D.js.map → Breadcrumbs-CAJMeA1D.js.map} +1 -1
- package/dist/Breadcrumbs.css +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/Button.css +1 -1
- package/dist/ButtonCompound.css +1 -1
- package/dist/ButtonToggle.css +1 -1
- package/dist/Calendar.css +2 -2
- package/dist/Card.css +1 -1
- package/dist/Checkbox.css +1 -1
- package/dist/{Chip-CR5i8mQW.js → Chip-Da8c7tKP.js} +2 -2
- package/dist/{Chip-CR5i8mQW.js.map → Chip-Da8c7tKP.js.map} +1 -1
- package/dist/Chip.css +1 -1
- package/dist/Chip.js +1 -1
- package/dist/{Combobox-BffGTugd.js → Combobox-CBLaT1lU.js} +4 -4
- package/dist/{Combobox-BffGTugd.js.map → Combobox-CBLaT1lU.js.map} +1 -1
- package/dist/Combobox.css +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-D9Xj1nq5.js → DataTable-BDXdCF7J.js} +6 -6
- package/dist/{DataTable-D9Xj1nq5.js.map → DataTable-BDXdCF7J.js.map} +1 -1
- package/dist/DataTable.css +16 -16
- package/dist/DateFieldYearlessRange.css +1 -1
- package/dist/DaysOfTheWeek.css +1 -1
- package/dist/Details.css +1 -1
- package/dist/{Dialog-DGmF6qx3.js → Dialog-ByTyuybu.js} +4 -4
- package/dist/Dialog-ByTyuybu.js.map +1 -0
- package/dist/Dialog.css +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/Divider.css +1 -1
- package/dist/DndSort.css +1 -1
- package/dist/{Drawer-iewBy1DW.js → Drawer-CwyfBcwt.js} +5 -5
- package/dist/{Drawer-iewBy1DW.js.map → Drawer-CwyfBcwt.js.map} +1 -1
- package/dist/Drawer.css +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.css +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-D7-Ye7R0.js → EditCard-DqLSnkih.js} +2 -2
- package/dist/{EditCard-D7-Ye7R0.js.map → EditCard-DqLSnkih.js.map} +1 -1
- package/dist/EditCard.css +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/FieldLabel.css +2 -2
- package/dist/FieldMessage.css +1 -1
- package/dist/{Toolbar-C1_etxss.js → FilterBar-BU8StPPd.js} +121 -933
- package/dist/FilterBar-BU8StPPd.js.map +1 -0
- package/dist/FilterBar.css +59 -0
- package/dist/FilterBar.d.ts +6 -0
- package/dist/FilterBar.js +2 -0
- package/dist/FilterBar.js.map +1 -0
- package/dist/Flex.css +1 -1
- package/dist/Grid.css +1 -1
- package/dist/Helper.css +1 -1
- package/dist/Icon.css +1 -1
- package/dist/InteractiveCard.css +1 -1
- package/dist/Layout.css +1 -1
- package/dist/Link.css +1 -1
- package/dist/List.css +1 -1
- package/dist/ListView.css +1 -1
- package/dist/{Listbox-DDlxpVu9.js → Listbox-C0tjQFDF.js} +2 -2
- package/dist/{Listbox-DDlxpVu9.js.map → Listbox-C0tjQFDF.js.map} +1 -1
- package/dist/Listbox.css +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/Menu.css +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-DZ3tm7zt.js → MultiSelectFieldSync-ueey5UBM.js} +4 -4
- package/dist/{MultiSelectFieldSync-DZ3tm7zt.js.map → MultiSelectFieldSync-ueey5UBM.js.map} +1 -1
- package/dist/MultiSelectFieldSync.css +1 -1
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-dgO9SmHi.js → MultiSelectMenuSync-D7hqugcQ.js} +4 -4
- package/dist/{MultiSelectMenuSync-dgO9SmHi.js.map → MultiSelectMenuSync-D7hqugcQ.js.map} +1 -1
- package/dist/NumberField.css +1 -1
- package/dist/Overflow.css +2 -2
- package/dist/{Page-Be1Blwme.js → Page-DbK-JKyB.js} +5 -5
- package/dist/{Page-Be1Blwme.js.map → Page-DbK-JKyB.js.map} +1 -1
- package/dist/Page.css +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-USDJM5vi.js → Pagination-Bg5Nsdik.js} +2 -2
- package/dist/{Pagination-USDJM5vi.js.map → Pagination-Bg5Nsdik.js.map} +1 -1
- package/dist/Pagination.css +6 -6
- package/dist/Pagination.js +1 -1
- package/dist/Popover.css +1 -1
- package/dist/ProgressBar.css +1 -1
- package/dist/Radio.css +1 -1
- package/dist/{SearchField-CsRGYZx3.js → SearchField-BKJOW-vI.js} +3 -10
- package/dist/SearchField-BKJOW-vI.js.map +1 -0
- package/dist/SearchField-BplvDpBG.js +13 -0
- package/dist/SearchField-BplvDpBG.js.map +1 -0
- package/dist/SearchField.css +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/SegmentedControl.css +1 -1
- package/dist/SelectCard.css +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-C44hPeeS.js → SelectFieldSync-W_-jTf7z.js} +3 -3
- package/dist/{SelectFieldSync-C44hPeeS.js.map → SelectFieldSync-W_-jTf7z.js.map} +1 -1
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-V97oN85V.js → SelectMenuSync-QcjbQtCO.js} +4 -4
- package/dist/{SelectMenuSync-V97oN85V.js.map → SelectMenuSync-QcjbQtCO.js.map} +1 -1
- package/dist/{SelectOptions-CDoo4AUu.js → SelectOptions-BsX0f22q.js} +2 -2
- package/dist/{SelectOptions-CDoo4AUu.js.map → SelectOptions-BsX0f22q.js.map} +1 -1
- package/dist/{SelectTrigger-BWN3Tx43.js → SelectTrigger-BaDvF9JD.js} +3 -3
- package/dist/{SelectTrigger-BWN3Tx43.js.map → SelectTrigger-BaDvF9JD.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-Do7lQ5rw.js → SelectTriggerBase-kMRqbXwu.js} +2 -2
- package/dist/{SelectTriggerBase-Do7lQ5rw.js.map → SelectTriggerBase-kMRqbXwu.js.map} +1 -1
- package/dist/SelectTriggerBase.css +1 -1
- package/dist/SideNav.css +1 -1
- package/dist/Skeleton.css +1 -1
- package/dist/Spinner.css +1 -1
- package/dist/SrOnly.css +1 -1
- package/dist/StatusIcon.css +1 -1
- package/dist/Stepper.css +4 -4
- package/dist/Switch.css +1 -1
- package/dist/Tab.css +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-J5YtSSXY.js → Text-BH8gglCL.js} +4 -4
- package/dist/Text-BH8gglCL.js.map +1 -0
- package/dist/Text.css +1 -1
- package/dist/Text.js +1 -1
- package/dist/TextField.css +1 -1
- package/dist/Textarea.css +1 -1
- package/dist/ThemeProvider.css +0 -1
- package/dist/{TimeField-DTg0CE5L.js → TimeField-Cz4tMYb3.js} +2 -2
- package/dist/{TimeField-DTg0CE5L.js.map → TimeField-Cz4tMYb3.js.map} +1 -1
- package/dist/TimeField.css +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/TimezoneMessage.css +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-Bq42x6Gx.js → Toaster-BV8RjmIN.js} +2 -2
- package/dist/{Toaster-Bq42x6Gx.js.map → Toaster-BV8RjmIN.js.map} +1 -1
- package/dist/{Toaster-Dly3rfva.js → Toaster-DYGDohJT.js} +2 -2
- package/dist/{Toaster-Dly3rfva.js.map → Toaster-DYGDohJT.js.map} +1 -1
- package/dist/Toaster.css +1 -1
- package/dist/Toolbar-Dzj2KMEy.js +588 -0
- package/dist/Toolbar-Dzj2KMEy.js.map +1 -0
- package/dist/Toolbar.css +2 -96
- package/dist/Toolbar.js +2 -1
- package/dist/Toolbar.js.map +1 -1
- package/dist/ToolbarButtonToggle--2Ka05N8.js +284 -0
- package/dist/ToolbarButtonToggle--2Ka05N8.js.map +1 -0
- package/dist/ToolbarButtonToggle.css +41 -0
- package/dist/Tooltip.css +1 -1
- package/dist/YearlessDateInputWithPicker.css +2 -2
- package/dist/assets/icons/st/unsorted.svg +1 -1
- package/dist/beta/components/FilterBar/FilterBar.d.ts +87 -0
- package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterToggleButton.d.ts +1 -1
- package/dist/beta/components/FilterBar/index.d.ts +3 -0
- package/dist/beta/components/{Toolbar/Filters → FilterBar}/internal/FilterGroupContext.d.ts +5 -5
- package/dist/beta/components/{Toolbar/Filters → FilterBar}/internal/types.d.ts +2 -2
- package/dist/beta/components/{Toolbar/Filters → FilterBar}/internal/utils/test.d.ts +1 -0
- package/dist/beta/components/Toolbar/Toolbar.d.ts +0 -54
- package/dist/beta/components/Toolbar/index.d.ts +0 -1
- package/dist/beta/components/index.d.ts +1 -0
- package/dist/beta.js +9 -7
- package/dist/beta.js.map +1 -1
- package/dist/index.css +2 -2
- package/dist/index.js +19 -19
- package/dist/index2.css +1 -1
- package/dist/{syncFilterUtils-BLcRXQfd.js → syncFilterUtils-nJS_tCsu.js} +4 -4
- package/dist/{syncFilterUtils-BLcRXQfd.js.map → syncFilterUtils-nJS_tCsu.js.map} +1 -1
- package/dist/syncFilterUtils.css +4 -4
- package/dist/{useDrilldown-D5WWJRU2.js → useDrilldown-DwzT0Fse.js} +2 -2
- package/dist/{useDrilldown-D5WWJRU2.js.map → useDrilldown-DwzT0Fse.js.map} +1 -1
- package/dist/{useToggleSelection-D_2qS0P1.js → useToggleSelection-CAwGOeXk.js} +2 -2
- package/dist/{useToggleSelection-D_2qS0P1.js.map → useToggleSelection-CAwGOeXk.js.map} +1 -1
- package/package.json +9 -9
- package/dist/Avatar-B4hRHku9.js.map +0 -1
- package/dist/Dialog-DGmF6qx3.js.map +0 -1
- package/dist/SearchField-CsRGYZx3.js.map +0 -1
- package/dist/Text-J5YtSSXY.js.map +0 -1
- package/dist/Toolbar-C1_etxss.js.map +0 -1
- package/dist/beta/components/Toolbar/Filters/FilterGroup.d.ts +0 -25
- /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterButton.d.ts +0 -0
- /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterDateRange.d.ts +0 -0
- /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterDateSingle.d.ts +0 -0
- /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterDrawer.d.ts +0 -0
- /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterItemWrapper.d.ts +0 -0
- /package/dist/beta/components/{Toolbar/Filters → FilterBar}/FilterSelect.d.ts +0 -0
- /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
|