@eightshift/ui-components 1.5.0 → 1.6.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 (38) hide show
  1. package/dist/{Dialog-DSquJZb-.js → Dialog-BdtBguys.js} +1 -1
  2. package/dist/Heading-DGnF6JDc.js +17 -0
  3. package/dist/List-Bx2anbX-.js +583 -0
  4. package/dist/{RSPContexts-DQtGvvpM.js → RSPContexts-2lR5GG9p.js} +2 -2
  5. package/dist/{Select-49a62830.esm-D8voKavK.js → Select-c7902d94.esm-DtzFQzf-.js} +6 -4
  6. package/dist/assets/style.css +1 -1
  7. package/dist/components/animated-visibility/animated-visibility.js +139 -118
  8. package/dist/components/checkbox/checkbox.js +1 -1
  9. package/dist/components/color-pickers/color-picker.js +18 -11
  10. package/dist/components/color-pickers/solid-color-picker.js +1 -1
  11. package/dist/components/component-toggle/component-toggle.js +44 -4
  12. package/dist/components/draggable/draggable-handle.js +45 -0
  13. package/dist/components/draggable/draggable.js +5138 -96
  14. package/dist/components/draggable-list/draggable-list-item.js +16 -25
  15. package/dist/components/draggable-list/draggable-list.js +54 -86
  16. package/dist/components/expandable/expandable.js +63 -40
  17. package/dist/components/index.js +6 -4
  18. package/dist/components/link-input/link-input.js +2 -2
  19. package/dist/components/menu/menu.js +2 -2
  20. package/dist/components/modal/modal.js +4 -15
  21. package/dist/components/options-panel/options-panel.js +55 -1
  22. package/dist/components/popover/popover.js +1 -1
  23. package/dist/components/repeater/repeater-item.js +76 -27
  24. package/dist/components/repeater/repeater.js +72 -5110
  25. package/dist/components/select/async-multi-select.js +1 -1
  26. package/dist/components/select/async-single-select.js +1 -1
  27. package/dist/components/select/multi-select.js +1 -1
  28. package/dist/components/select/single-select.js +1 -1
  29. package/dist/components/select/styles.js +1 -1
  30. package/dist/icons/jsx-svg.js +1 -1
  31. package/dist/index.js +6 -4
  32. package/dist/{react-jsx-parser.min-CAGfntg1.js → react-jsx-parser.min-sPC96O_U.js} +124 -85
  33. package/dist/{react-select-async.esm-DY-cP0QK.js → react-select-async.esm-CxA8wpeT.js} +1 -1
  34. package/dist/{react-select.esm-DNlXj0hV.js → react-select.esm-CeE7o5M9.js} +1 -1
  35. package/dist/{useMenuTrigger-BbwpSVmh.js → useMenuTrigger-CT2-BFLo.js} +1 -1
  36. package/package.json +14 -14
  37. package/dist/components/draggable/draggable-item.js +0 -66
  38. package/dist/swapy-qb4t7itb.js +0 -3059
@@ -1,9 +1,10 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { c as clsx } from "../../lite-DVmmD_-j.js";
3
3
  import "../../default-i18n-BqWys-1G.js";
4
- import { RichLabel } from "../rich-label/rich-label.js";
5
- import { DraggableListContext } from "./draggable-list-context.js";
6
- import { useContext } from "react";
4
+ import { BaseControl } from "../base-control/base-control.js";
5
+ import { icons } from "../../icons/icons.js";
6
+ import { cloneElement } from "react";
7
+ import "../../react-jsx-parser.min-sPC96O_U.js";
7
8
  /**
8
9
  * A DraggableList item.
9
10
  *
@@ -15,7 +16,6 @@ import { useContext } from "react";
15
16
  * @param {JSX.Element|JSX.Element[]} [props.actions] - Actions to display to the right of the label.
16
17
  * @param {string} [props.textValue] - The text value of the item.
17
18
  * @param {string} [props.className] - Classes to pass to the label.
18
- * @param {string} [props.containerClassName] - Classes to pass to the item container.
19
19
  *
20
20
  * @returns {JSX.Element} The DraggableList component.
21
21
  *
@@ -24,31 +24,21 @@ import { useContext } from "react";
24
24
  * @preserve
25
25
  */
26
26
  const DraggableListItem = (props) => {
27
- const { children, icon, label, subtitle, className, containerClassName, ...rest } = props;
28
- const { labelAsHandle } = useContext(DraggableListContext);
29
- const labelElement = /* @__PURE__ */ jsx(
30
- RichLabel,
27
+ const { children, icon, label, subtitle, className, ...rest } = props;
28
+ return /* @__PURE__ */ jsxs(
29
+ BaseControl,
31
30
  {
32
- hidden: !(icon || label || subtitle),
33
31
  icon,
34
32
  label,
35
33
  subtitle,
36
- className,
37
- fullWidth: true
38
- }
39
- );
40
- return /* @__PURE__ */ jsxs(
41
- "div",
42
- {
43
- className: clsx(
44
- "es-uic-flex es-uic-min-h-7 es-uic-items-center es-uic-gap-1 es-uic-rounded-lg es-uic-transition",
45
- "focus:es-uic-outline-none focus-visible:es-uic-ring focus-visible:es-uic-ring-teal-500 focus-visible:es-uic-ring-opacity-50",
46
- containerClassName
47
- ),
34
+ className: clsx("es-uic-w-full", className),
35
+ fullWidthLabel: true,
36
+ inline: true,
48
37
  ...rest,
49
38
  children: [
50
- labelAsHandle && /* @__PURE__ */ jsx("div", { "data-swapy-handle": true, children: labelElement }),
51
- !labelAsHandle && labelElement,
39
+ cloneElement(icons.reorderGrabberV, {
40
+ className: "es-uic-opacity-0 es-uic-transition-opacity group-focus-visible:es-uic-opacity-100 es-uic-text-gray-400 es-uic-size-4 group-hover:es-uic-opacity-100"
41
+ }),
52
42
  children
53
43
  ]
54
44
  }
@@ -71,11 +61,12 @@ const DraggableListItem = (props) => {
71
61
  const DraggableListItemHandle = (props) => {
72
62
  const { className, children, ...rest } = props;
73
63
  return /* @__PURE__ */ jsx(
74
- "div",
64
+ "button",
75
65
  {
76
- "data-swapy-handle": true,
77
66
  className: className ?? 'es-uic-relative es-uic-h-6 es-uic-w-2 es-uic-cursor-pointer es-uic-items-center es-uic-justify-center es-uic-self-center es-uic-rounded es-uic-border es-uic-border-gray-300 es-uic-bg-gray-50 es-uic-transition after:es-uic-absolute after:es-uic-inset-0 after:es-uic-m-auto after:es-uic-h-4 after:es-uic-w-px after:es-uic-bg-gray-200 after:es-uic-transition after:es-uic-content-[""] hover:es-uic-border-teal-500 hover:es-uic-bg-teal-400 hover:after:es-uic-bg-teal-500',
78
67
  ...rest,
68
+ "data-movable-handle": true,
69
+ tabIndex: -1,
79
70
  children
80
71
  }
81
72
  );
@@ -1,10 +1,9 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { useId, useMemo, useRef, useState, useEffect } from "react";
2
+ import { useId } from "react";
3
3
  import "../../default-i18n-BqWys-1G.js";
4
4
  import { BaseControl } from "../base-control/base-control.js";
5
- import { j as je } from "../../swapy-qb4t7itb.js";
6
- import { DraggableListContext } from "./draggable-list-context.js";
7
5
  import { c as clsx } from "../../lite-DVmmD_-j.js";
6
+ import { L as List, a as arrayRemove, b as arrayMove } from "../../List-Bx2anbX-.js";
8
7
  const fixIds = (items, itemIdBase) => {
9
8
  return items.map((item, i) => ({
10
9
  ...item,
@@ -26,7 +25,6 @@ const fixIds = (items, itemIdBase) => {
26
25
  * @param {boolean} [props.hidden] - If `true`, the component is not rendered.
27
26
  * @param {boolean} [props.disabled] - If `true`, item reordering is disabled.
28
27
  * @param {string} [props.className] - Classes to pass to the item wrapper.
29
- * @param {boolean} [props.labelAsHandle=false] - If `true`, the label will be used as the handle for dragging.
30
28
  *
31
29
  * @returns {JSX.Element} The DraggableList component.
32
30
  *
@@ -74,52 +72,7 @@ const DraggableList = (props) => {
74
72
  hidden,
75
73
  ...rest
76
74
  } = props;
77
- const items = useMemo(() => fixIds(rawItems, itemIdBase), [rawItems]);
78
- const ref = useRef(null);
79
- const swapyRef = useRef(null);
80
- const [slotItemsMap, setSlotItemsMap] = useState([
81
- ...items.map((item) => ({
82
- slotId: item.id,
83
- itemId: item.id
84
- })),
85
- { slotId: `${Math.round(Math.random() * 99999)}`, itemId: null }
86
- ]);
87
- const slottedItems = useMemo(
88
- () => slotItemsMap.map(({ slotId, itemId }) => ({
89
- slotId,
90
- itemId,
91
- item: items.find((item) => item.id === itemId)
92
- })),
93
- [items, slotItemsMap]
94
- );
95
- useEffect(() => {
96
- var _a;
97
- const newItems = items.filter((item) => !slotItemsMap.some((slotItem) => slotItem.itemId === item.id)).map((item) => ({
98
- slotId: item.id,
99
- itemId: item.id
100
- }));
101
- const withoutRemovedItems = slotItemsMap.filter((slotItem) => items.some((item) => item.id === slotItem.itemId) || !slotItem.itemId);
102
- const updatedSlotItemsMap = [...withoutRemovedItems, ...newItems];
103
- setSlotItemsMap(updatedSlotItemsMap);
104
- (_a = swapyRef.current) == null ? void 0 : _a.setData({ array: updatedSlotItemsMap });
105
- }, [items]);
106
- useEffect(() => {
107
- const container = ref == null ? void 0 : ref.current;
108
- swapyRef.current = je(container, {
109
- manualSwap: true
110
- });
111
- swapyRef.current.onSwap(({ data }) => {
112
- var _a;
113
- const tweakedItems = data.array.filter(({ itemId }) => itemId !== null).map(({ itemId }) => items.find((item) => (item == null ? void 0 : item.id) === itemId));
114
- onChange(tweakedItems);
115
- (_a = swapyRef.current) == null ? void 0 : _a.setData({ array: data.array });
116
- setSlotItemsMap(data.array);
117
- });
118
- return () => {
119
- var _a;
120
- (_a = swapyRef.current) == null ? void 0 : _a.destroy();
121
- };
122
- }, []);
75
+ const items = fixIds(rawItems, itemIdBase);
123
76
  if (hidden) {
124
77
  return null;
125
78
  }
@@ -132,45 +85,60 @@ const DraggableList = (props) => {
132
85
  help,
133
86
  actions,
134
87
  className: "es-uic-w-full",
135
- children: /* @__PURE__ */ jsx(DraggableListContext.Provider, { value: { labelAsHandle }, children: /* @__PURE__ */ jsx(
136
- "div",
88
+ ...rest,
89
+ children: /* @__PURE__ */ jsx(
90
+ List,
137
91
  {
138
- ref,
139
- ...rest,
140
- children: slottedItems.map(({ itemId, slotId, item }, index) => /* @__PURE__ */ jsx(
141
- "div",
142
- {
143
- className: "es-uic-group es-uic-transition-colors data-[swapy-highlighted]:es-uic-rounded-md data-[swapy-highlighted]:es-uic-outline-dashed data-[swapy-highlighted]:es-uic-outline-1 data-[swapy-highlighted]:es-uic-outline-teal-500/50",
144
- "data-swapy-slot": slotId,
145
- children: item && /* @__PURE__ */ jsx(
146
- "div",
147
- {
148
- className: clsx(
149
- "es-uic-transition-[background-color,_box-shadow,_border-radius,_border]",
150
- "group-data-[swapy-highlighted]:es-uic-rounded-md group-data-[swapy-highlighted]:es-uic-bg-white group-data-[swapy-highlighted]:es-uic-shadow"
151
- ),
152
- "data-swapy-item": itemId,
153
- children: children({
154
- ...item,
155
- updateData: (newValue) => {
156
- onChange(items.map((i) => i.id === itemId ? { ...i, ...newValue } : i));
157
- },
158
- itemIndex: index,
159
- deleteItem: () => {
160
- onChange(items.filter((i) => i.id !== item.id));
161
- if (item.onAfterItemRemove) {
162
- onAfterItemRemove(item);
163
- }
92
+ values: items,
93
+ onChange: ({ oldIndex, newIndex }) => onChange(newIndex === -1 ? arrayRemove(items, oldIndex) : arrayMove(items, oldIndex, newIndex)),
94
+ renderList: ({ children: children2, props: props2 }) => {
95
+ const { key, ...rest2 } = props2;
96
+ return /* @__PURE__ */ jsx(
97
+ "ul",
98
+ {
99
+ className: "es-uic-w-full es-uic-list-none",
100
+ ...rest2,
101
+ children: children2
102
+ },
103
+ key
104
+ );
105
+ },
106
+ renderItem: ({ value, index, isDisabled, isDragged, isSelected, isOutOfBounds, props: props2 }) => {
107
+ const { key, ...rest2 } = props2;
108
+ return /* @__PURE__ */ jsx(
109
+ "li",
110
+ {
111
+ className: clsx(
112
+ "es-uic-group",
113
+ "es-uic-min-h-8 es-uic-w-full",
114
+ "es-uic-flex es-uic-items-center es-uic-gap-1 es-uic-rounded-lg",
115
+ "es-uic-transition-[box-shadow,_background-color,_filter,_opacity,_border-color]",
116
+ "focus:es-uic-outline-none focus-visible:es-uic-ring focus-visible:es-uic-ring-teal-500 focus-visible:es-uic-ring-opacity-50",
117
+ isDisabled && "es-uic-grayscale",
118
+ isDragged && "es-uic-bg-white es-uic-opacity-50",
119
+ isSelected && "es-uic-bg-teal-50",
120
+ isDragged ? "es-uic-cursor-grabbing" : "es-uic-cursor-grab"
121
+ ),
122
+ ...rest2,
123
+ children: children({
124
+ ...value,
125
+ updateData: (newValue) => {
126
+ onChange(items.map((i) => i.id === value.id ? { ...i, ...newValue } : i));
127
+ },
128
+ itemIndex: index,
129
+ deleteItem: () => {
130
+ onChange(items.filter((i) => i.id !== value.id));
131
+ if (value.onAfterItemRemove) {
132
+ onAfterItemRemove(value);
164
133
  }
165
- })
166
- },
167
- itemId
168
- )
169
- },
170
- slotId
171
- ))
134
+ }
135
+ })
136
+ },
137
+ (value == null ? void 0 : value.id) ?? key
138
+ );
139
+ }
172
140
  }
173
- ) })
141
+ )
174
142
  }
175
143
  );
176
144
  };
@@ -19,12 +19,14 @@ import { $ as $9bf71ea28793e738$export$20e40289641fbbb6 } from "../../FocusScope
19
19
  * @param {string} [props.className] - Classes to pass to the container.
20
20
  * @param {string} [props.contentClassName] - Classes to pass to the inner content wrapper.
21
21
  * @param {string} [props.labelClassName] - Classes to pass to the label.
22
+ * @param {string} [props.headerClassName] - Classes to pass to the header (label + trigger).
22
23
  * @param {JSX.Element|JSX.Element[]} [props.actions] - Actions to display in the panel header, left of the expand button.
23
24
  * @param {boolean} [props.keepActionsOnExpand=false] - If `true`, the actions are not hidden when the panel is expanded.
24
25
  * @param {boolean} [props.disabled] - If `true`, the expand button is disabled.
25
26
  * @param {boolean} [props.noFocusHandling] - If `true`, the focus trapping when the item is expanded is disabled. Useful when part of another component that manages focus itself.
26
27
  * @param {boolean} [props.open] - Whether the expandable is open.
27
28
  * @param {Function} [props.onOpenChange] - Function is called when the panel is opened or closed.
29
+ * @param {object} [props.headerProps] - Props to pass to the header (label + trigger).
28
30
  * @param {boolean} [props.hidden] - If `true`, the component is not rendered.
29
31
  *
30
32
  * @returns {JSX.Element} The Expandable component.
@@ -44,6 +46,7 @@ const Expandable = (props) => {
44
46
  className,
45
47
  labelClassName,
46
48
  contentClassName,
49
+ headerClassName,
47
50
  actions,
48
51
  keepActionsOnExpand = false,
49
52
  disabled,
@@ -51,6 +54,8 @@ const Expandable = (props) => {
51
54
  children,
52
55
  open = false,
53
56
  onOpenChange,
57
+ customOpenButton,
58
+ headerProps,
54
59
  hidden,
55
60
  ...other
56
61
  } = props;
@@ -71,47 +76,65 @@ const Expandable = (props) => {
71
76
  ),
72
77
  ...other,
73
78
  children: [
74
- /* @__PURE__ */ jsxs("div", { className: clsx("es-uic-flex es-uic-h-10 es-uic-items-center es-uic-gap-1 es-uic-transition-[padding]", isOpen && "es-uic-py-1 es-uic-pl-2 es-uic-pr-1"), children: [
75
- /* @__PURE__ */ jsx(
76
- RichLabel,
77
- {
78
- icon,
79
- label,
80
- subtitle,
81
- className: labelClassName,
82
- as: $01b77f81d0f07f68$export$b04be29aa201d4f5,
83
- fullWidth: true
84
- }
85
- ),
86
- actions && !keepActionsOnExpand && /* @__PURE__ */ jsx(
87
- AnimatedVisibility,
88
- {
89
- visible: !isOpen,
90
- className: "es-uic-ml-auto es-uic-flex es-uic-gap-2",
91
- transition: "scaleFade",
92
- noInitial: true,
93
- children: actions
94
- }
95
- ),
96
- actions && keepActionsOnExpand && /* @__PURE__ */ jsx("div", { className: "es-uic-ml-auto es-uic-flex es-uic-gap-2", children: actions }),
97
- /* @__PURE__ */ jsx(
98
- Button,
99
- {
100
- type: "ghost",
101
- icon: isOpen ? icons.caretDownFill : icons.caretDown,
102
- onPress: () => {
103
- setIsOpen(!isOpen);
104
- if (onOpenChange) {
105
- onOpenChange(!isOpen);
79
+ /* @__PURE__ */ jsxs(
80
+ "div",
81
+ {
82
+ className: clsx("es-uic-flex es-uic-h-10 es-uic-items-center es-uic-gap-1 es-uic-transition-[padding]", isOpen && "es-uic-py-1 es-uic-pl-2 es-uic-pr-1", headerClassName),
83
+ ...headerProps,
84
+ children: [
85
+ /* @__PURE__ */ jsx(
86
+ RichLabel,
87
+ {
88
+ icon,
89
+ label,
90
+ subtitle,
91
+ className: labelClassName,
92
+ as: $01b77f81d0f07f68$export$b04be29aa201d4f5,
93
+ fullWidth: true
94
+ }
95
+ ),
96
+ actions && !keepActionsOnExpand && /* @__PURE__ */ jsx(
97
+ AnimatedVisibility,
98
+ {
99
+ visible: !isOpen,
100
+ className: "es-uic-ml-auto es-uic-flex es-uic-gap-2",
101
+ transition: "scaleFade",
102
+ noInitial: true,
103
+ children: actions
106
104
  }
107
- },
108
- tooltip: isOpen ? __("Close", "eightshift-ui-components") : __("Open", "eightshift-ui-components"),
109
- disabled,
110
- className: clsx("[&>svg]:es-uic-size-5 [&>svg]:es-uic-transition-transform", isOpen && "[&>svg]:-es-uic-scale-y-100"),
111
- size: "small"
112
- }
113
- )
114
- ] }),
105
+ ),
106
+ actions && keepActionsOnExpand && /* @__PURE__ */ jsx("div", { className: "es-uic-ml-auto es-uic-flex es-uic-gap-2", children: actions }),
107
+ customOpenButton && customOpenButton({
108
+ open: isOpen,
109
+ toggleOpen: () => {
110
+ setIsOpen(!isOpen);
111
+ if (onOpenChange) {
112
+ onOpenChange(!isOpen);
113
+ }
114
+ },
115
+ tooltip: isOpen ? __("Close", "eightshift-ui-components") : __("Open", "eightshift-ui-components"),
116
+ disabled
117
+ }),
118
+ !customOpenButton && /* @__PURE__ */ jsx(
119
+ Button,
120
+ {
121
+ type: "ghost",
122
+ icon: isOpen ? icons.caretDownFill : icons.caretDown,
123
+ onPress: () => {
124
+ setIsOpen(!isOpen);
125
+ if (onOpenChange) {
126
+ onOpenChange(!isOpen);
127
+ }
128
+ },
129
+ tooltip: isOpen ? __("Close", "eightshift-ui-components") : __("Open", "eightshift-ui-components"),
130
+ disabled,
131
+ className: clsx("[&>svg]:es-uic-size-5 [&>svg]:es-uic-transition-transform", isOpen && "[&>svg]:-es-uic-scale-y-100"),
132
+ size: "small"
133
+ }
134
+ )
135
+ ]
136
+ }
137
+ ),
115
138
  /* @__PURE__ */ jsx(
116
139
  AnimatedVisibility,
117
140
  {
@@ -10,8 +10,9 @@ import { ColorPicker } from "./color-pickers/color-picker.js";
10
10
  import { ColumnConfigSlider, ColumnConfigSliderOutput } from "./slider/column-config-slider.js";
11
11
  import { DraggableList } from "./draggable-list/draggable-list.js";
12
12
  import { DraggableListItem, DraggableListItemHandle } from "./draggable-list/draggable-list-item.js";
13
+ import { DraggableContext } from "./draggable/draggable-context.js";
13
14
  import { Draggable } from "./draggable/draggable.js";
14
- import { DraggableItem, DraggableItemHandle } from "./draggable/draggable-item.js";
15
+ import { DraggableHandle } from "./draggable/draggable-handle.js";
15
16
  import { Expandable } from "./expandable/expandable.js";
16
17
  import { FilePlaceholder } from "./placeholders/file-placeholder.js";
17
18
  import { GradientEditor } from "./color-pickers/gradient-editor.js";
@@ -40,7 +41,7 @@ import { Modal } from "./modal/modal.js";
40
41
  import { MultiSelect } from "./select/multi-select.js";
41
42
  import { RSClearIndicator, RSDropdownIndicator, RSMultiValue, RSMultiValueContainer, RSMultiValueLabel, RSMultiValueRemove, RSOption, RSSingleValue } from "./select/react-select-component-wrappers.js";
42
43
  import { OptionSelect } from "./option-select/option-select.js";
43
- import { OptionsPanel, OptionsPanelSection } from "./options-panel/options-panel.js";
44
+ import { OptionsPanel, OptionsPanelHeader, OptionsPanelSection } from "./options-panel/options-panel.js";
44
45
  import { Select } from "./select/single-select.js";
45
46
  import { Slider } from "./slider/slider.js";
46
47
  import { SolidColorPicker } from "./color-pickers/solid-color-picker.js";
@@ -68,8 +69,8 @@ export {
68
69
  ContainerPanel,
69
70
  D as DecorativeTooltip,
70
71
  Draggable,
71
- DraggableItem,
72
- DraggableItemHandle,
72
+ DraggableContext,
73
+ DraggableHandle,
73
74
  DraggableList,
74
75
  DraggableListItem,
75
76
  DraggableListItemHandle,
@@ -94,6 +95,7 @@ export {
94
95
  NumberPicker,
95
96
  OptionSelect,
96
97
  OptionsPanel,
98
+ OptionsPanelHeader,
97
99
  OptionsPanelSection,
98
100
  Popover,
99
101
  RSClearIndicator,
@@ -7,7 +7,7 @@ import { $ as $a049562f99e7db0e$export$f9c6924e160136d1, a as $a049562f99e7db0e$
7
7
  import { b as $2d73ec29415bd339$export$712718f7aec83d5, $ as $3985021b0ad6602f$export$37fb8590cf2c088c, a as $3985021b0ad6602f$export$f5b8910cec6cf069 } from "../../Input-BoNEjaXM.js";
8
8
  import { a as $01b77f81d0f07f68$export$75b6ee27786ba447, $ as $01b77f81d0f07f68$export$b04be29aa201d4f5 } from "../../Label-BqW0M3HN.js";
9
9
  import { b as $b1f0cad8af73213b$export$3585ede4d035bf14, c as $b1f0cad8af73213b$export$9145995848b05025, d as $eed445e0843c11d0$export$7ff8f37d2d81a48d, e as $eed445e0843c11d0$export$7c5906fe4f1f2af2, $ as $eed445e0843c11d0$export$41f133550aa26f48, a as $eed445e0843c11d0$export$a11e76429ed99b4 } from "../../ListBox-civ86c_v.js";
10
- import { f as $5e3802645cc19319$export$1c3ebcada18427bf, g as $de32f1b87079253c$export$d2f961adcb0afbe, j as $07b14b47974efb58$export$9b9a0cd73afb7ca4, $ as $07b14b47974efb58$export$5b6b19405a83ff9d } from "../../Dialog-DSquJZb-.js";
10
+ import { f as $5e3802645cc19319$export$1c3ebcada18427bf, g as $de32f1b87079253c$export$d2f961adcb0afbe, j as $07b14b47974efb58$export$9b9a0cd73afb7ca4, $ as $07b14b47974efb58$export$5b6b19405a83ff9d } from "../../Dialog-BdtBguys.js";
11
11
  import { a as $514c0188e459b4c0$export$9afb8bc826b033ea } from "../../Text-CdwRBXol.js";
12
12
  import { i as $ae20dd8cbca75726$export$d6daf82dcd84e87c, j as $c5a24bc478652b5f$export$1005530eda016c13, e as $e1995378a142960e$export$bf788dd355e3a401 } from "../../SelectionManager-Ctbzoj1E.js";
13
13
  import { $ as $65484d02dcb7eb3e$export$457c3d6518dd4c6f } from "../../filterDOMProps-EDDcM64A.js";
@@ -22,7 +22,7 @@ import { $ as $319e236875307eab$export$a9b970dcc4ae71a9 } from "../../LiveAnnoun
22
22
  import { b as $ea8dcbcb9ea1b556$export$9a302a45f65d0572 } from "../../usePress-Cs8K7gKw.js";
23
23
  import { $ as $313b98861ee5dd6c$export$d6875122194c7b44 } from "../../useLabels-DmsOywGg.js";
24
24
  import { $ as $fca6afa0e843324b$export$f12b703ca79dfbb1 } from "../../useLocalizedStringFormatter-m03yY3xi.js";
25
- import { $ as $168583247155ddda$export$dc9c12ed27dd1b49 } from "../../useMenuTrigger-BbwpSVmh.js";
25
+ import { $ as $168583247155ddda$export$dc9c12ed27dd1b49 } from "../../useMenuTrigger-CT2-BFLo.js";
26
26
  import { _ as __ } from "../../default-i18n-BqWys-1G.js";
27
27
  import { icons } from "../../icons/icons.js";
28
28
  import { c as clsx } from "../../lite-DVmmD_-j.js";
@@ -3,12 +3,12 @@ import { $ as $982254629710d113$export$b95089534ab7c1fd, a as $453cc9f0df89c0a5$
3
3
  import { c as $880e95eb8b93ba9a$export$ecf600387e221c37, $ as $7af3f5b51489e0b5$export$253fe78d46329472, a as $7613b1592d41b092$export$6cd28814d92fa9c9, b as $d496c0a20b6e58ec$export$6c8a5aaad13c9852, l as $e1995378a142960e$export$e953bb1cd0f19726, g as $7135fc7d473fd974$export$4feb769f8ddf26c5, d as $e1995378a142960e$export$18af5c7a9e9b3664, e as $e1995378a142960e$export$bf788dd355e3a401, f as $e1995378a142960e$export$fb8073518f34e6ec, h as $7135fc7d473fd974$export$d40e14dec8b060a8, k as $7135fc7d473fd974$export$90e00781bc59d8f9, m as $7135fc7d473fd974$export$6e2c8f0811a474ce } from "../../SelectionManager-Ctbzoj1E.js";
4
4
  import { c as $3ef42575df84b30b$export$9d1611c77c2fe928, k as $bdb11010cef70236$export$b4cc09c592e8fdb8, e as $bdb11010cef70236$export$f680877a34711e37, f as $8ae05eaa5c114e9c$export$7f54fc3180508a52, j as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c, i as $64fa3d84918910a7$export$2881499e37b75b9a, l as $df56164dff5785e2$export$4338b53315abf666, $ as $64fa3d84918910a7$export$fabf2dc03a41866e, a as $64fa3d84918910a7$export$29f1550f4b0d4415, b as $64fa3d84918910a7$export$4d86445c2cf5e3, g as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8 } from "../../utils-Du2x3YVu.js";
5
5
  import React__default, { useRef, useState, useEffect, useCallback, useMemo, createContext, useContext, forwardRef, cloneElement } from "react";
6
- import { g as $de32f1b87079253c$export$d2f961adcb0afbe, j as $07b14b47974efb58$export$9b9a0cd73afb7ca4, k as $f1ab8c75478c6f73$export$3351871ee4b288b8, l as $e0b6e0b68ec7f50f$export$872b660ac5a1ff98 } from "../../Dialog-DSquJZb-.js";
6
+ import { g as $de32f1b87079253c$export$d2f961adcb0afbe, j as $07b14b47974efb58$export$9b9a0cd73afb7ca4, k as $f1ab8c75478c6f73$export$3351871ee4b288b8, l as $e0b6e0b68ec7f50f$export$872b660ac5a1ff98 } from "../../Dialog-BdtBguys.js";
7
7
  import { a as $514c0188e459b4c0$export$9afb8bc826b033ea } from "../../Text-CdwRBXol.js";
8
8
  import { $ as $65484d02dcb7eb3e$export$457c3d6518dd4c6f } from "../../filterDOMProps-EDDcM64A.js";
9
9
  import { a as $9daab02d461809db$export$683480f191c0e3ea, $ as $fc909762b330b746$export$61c6a8c84e605fb6 } from "../../tooltip-srrt1p-b.js";
10
10
  import { $ as $6179b936705e76d3$export$ae780daf29e6d456, a as $507fabe10e71c6fb$export$b9b3dfddab17db27, c as $a1ea59d68270f0dd$export$f8168d8dd8fd66e6, t as $507fabe10e71c6fb$export$98e20ec92f614cfe, e as $458b0a5536c1a7cf$export$40bfa8c7b0832715 } from "../../focusSafely-xMzk3syC.js";
11
- import { $ as $168583247155ddda$export$dc9c12ed27dd1b49 } from "../../useMenuTrigger-BbwpSVmh.js";
11
+ import { $ as $168583247155ddda$export$dc9c12ed27dd1b49 } from "../../useMenuTrigger-CT2-BFLo.js";
12
12
  import { b as $ea8dcbcb9ea1b556$export$9a302a45f65d0572, $ as $f6c31cce2adf654f$export$45712eceda6fad21, a as $ea8dcbcb9ea1b556$export$7e924b3091a3bd18 } from "../../usePress-Cs8K7gKw.js";
13
13
  import { a as $46d819fcbaf35654$export$8f71654801c2f7cd } from "../../useFocusable-Bu2Ovohk.js";
14
14
  import { $ as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 } from "../../context-kCEA3M_y.js";
@@ -1,15 +1,15 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
- import { c as $a11501f3d1d39e6c$export$ea8f71083e90600f, d as $49c51c25361d4cd2$export$ee0f7cc6afcd1c18, e as $337b884510726a0d$export$14c98a7594375490, f as $5e3802645cc19319$export$1c3ebcada18427bf, g as $de32f1b87079253c$export$d2f961adcb0afbe, h as $337b884510726a0d$export$c6fdb837b070b4ff, i as $86ea4cb521eb2e37$export$2317d149ed6f78c4, b as $de32f1b87079253c$export$2e1e1122cf0cba88, a as $de32f1b87079253c$export$3ddf2d174ce01153 } from "../../Dialog-DSquJZb-.js";
3
- import { a as $4e85f108e88277b8$export$d688439359537581 } from "../../RSPContexts-DQtGvvpM.js";
2
+ import { c as $a11501f3d1d39e6c$export$ea8f71083e90600f, d as $49c51c25361d4cd2$export$ee0f7cc6afcd1c18, e as $337b884510726a0d$export$14c98a7594375490, f as $5e3802645cc19319$export$1c3ebcada18427bf, g as $de32f1b87079253c$export$d2f961adcb0afbe, h as $337b884510726a0d$export$c6fdb837b070b4ff, i as $86ea4cb521eb2e37$export$2317d149ed6f78c4, b as $de32f1b87079253c$export$2e1e1122cf0cba88, a as $de32f1b87079253c$export$3ddf2d174ce01153 } from "../../Dialog-BdtBguys.js";
3
+ import { $ as $5cb03073d3f54797$export$a8a3e93435678ff9 } from "../../Heading-DGnF6JDc.js";
4
4
  import { d as $b5e257d569688ac6$export$535bd6ca7f90a273, c as $3ef42575df84b30b$export$9d1611c77c2fe928, a as $64fa3d84918910a7$export$29f1550f4b0d4415, l as $df56164dff5785e2$export$4338b53315abf666, o as $64fa3d84918910a7$export$45fda7c47f93fd48, p as $64fa3d84918910a7$export$6d3443f2c48bfc20, b as $64fa3d84918910a7$export$4d86445c2cf5e3, i as $64fa3d84918910a7$export$2881499e37b75b9a, m as $5dc95899b306f630$export$c9058316764c140e } from "../../utils-Du2x3YVu.js";
5
- import React__default, { useState, useEffect, forwardRef, useContext, useRef, useMemo, createContext } from "react";
6
5
  import { $ as $65484d02dcb7eb3e$export$457c3d6518dd4c6f } from "../../filterDOMProps-EDDcM64A.js";
6
+ import React__default, { useState, useEffect, forwardRef, useContext, useRef, useMemo, createContext } from "react";
7
7
  import { $ as $fc909762b330b746$export$61c6a8c84e605fb6 } from "../../tooltip-srrt1p-b.js";
8
8
  import { Button } from "../button/button.js";
9
9
  import { _ as __ } from "../../default-i18n-BqWys-1G.js";
10
10
  import { c as clsx } from "../../lite-DVmmD_-j.js";
11
11
  import { icons } from "../../icons/icons.js";
12
- import "../../react-jsx-parser.min-CAGfntg1.js";
12
+ import "../../react-jsx-parser.min-sPC96O_U.js";
13
13
  import { HStack } from "../layout/hstack.js";
14
14
  let $5df64b3807dc15ee$var$visualViewport = typeof document !== "undefined" && window.visualViewport;
15
15
  function $5df64b3807dc15ee$export$d699905dd57c73ca() {
@@ -64,17 +64,6 @@ function $8ac8429251c45e4b$export$dbc0f175b25fb0fb(props, state, ref) {
64
64
  underlayProps
65
65
  };
66
66
  }
67
- function $5cb03073d3f54797$var$Heading(props, ref) {
68
- [props, ref] = $64fa3d84918910a7$export$29f1550f4b0d4415(props, ref, $4e85f108e88277b8$export$d688439359537581);
69
- let { children, level = 3, className, ...domProps } = props;
70
- let Element = `h${level}`;
71
- return /* @__PURE__ */ React__default.createElement(Element, {
72
- ...domProps,
73
- ref,
74
- className: className !== null && className !== void 0 ? className : "react-aria-Heading"
75
- }, children);
76
- }
77
- const $5cb03073d3f54797$export$a8a3e93435678ff9 = /* @__PURE__ */ forwardRef($5cb03073d3f54797$var$Heading);
78
67
  const $f3f84453ead64de5$export$ab57792b9b6974a6 = /* @__PURE__ */ createContext(null);
79
68
  const $f3f84453ead64de5$var$InternalModalContext = /* @__PURE__ */ createContext(null);
80
69
  function $f3f84453ead64de5$var$Modal(props, ref) {
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { c as clsx } from "../../lite-DVmmD_-j.js";
3
3
  import { RichLabel } from "../rich-label/rich-label.js";
4
+ import { $ as $5cb03073d3f54797$export$a8a3e93435678ff9 } from "../../Heading-DGnF6JDc.js";
4
5
  /**
5
6
  * Component that provides a container panel for options, with an optional title.
6
7
  * Best used within the Gutenberg sidebar, instead of the default `PanelBody` component.
@@ -25,7 +26,7 @@ import { RichLabel } from "../rich-label/rich-label.js";
25
26
  */
26
27
  const OptionsPanel = (props) => {
27
28
  const { children, className, title, icon, subtitle, help } = props;
28
- return /* @__PURE__ */ jsxs("div", { className: clsx("es-uic-max-w-96", className), children: [
29
+ return /* @__PURE__ */ jsxs("div", { className: clsx("es-uic-max-w-md", className), children: [
29
30
  title && /* @__PURE__ */ jsx(
30
31
  RichLabel,
31
32
  {
@@ -39,6 +40,22 @@ const OptionsPanel = (props) => {
39
40
  help && /* @__PURE__ */ jsx("span", { className: "es-uic-mt-1.5 es-uic-block es-uic-text-sm es-uic-text-gray-400", children: help })
40
41
  ] });
41
42
  };
43
+ /**
44
+ * Component that provides a container for grouping related options within the `OptionsPanel` component.
45
+ *
46
+ * @component
47
+ * @param {Object} props - Component props.
48
+ * @param {string} [props.className] - Classes to pass to the container.
49
+ *
50
+ * @returns {JSX.Element} The OptionsPanelSection component.
51
+ *
52
+ * @example
53
+ * <OptionsPanelSection>
54
+ * ...
55
+ * </OptionsPanelSection>
56
+ *
57
+ * @preserve
58
+ */
42
59
  const OptionsPanelSection = ({ children, className }) => {
43
60
  return /* @__PURE__ */ jsx(
44
61
  "div",
@@ -51,7 +68,44 @@ const OptionsPanelSection = ({ children, className }) => {
51
68
  }
52
69
  );
53
70
  };
71
+ /**
72
+ * Component that provides a header for the top of an options page.
73
+ *
74
+ * @component
75
+ * @param {Object} props - Component props.
76
+ * @param {boolean} [props.sticky] - If `true`, the header will be sticky (scroll with content). Make sure to pass a background color!
77
+ * @param {string} [props.title] - Title to show.
78
+ * @param {Number} [props.level=2] - Heading level of the title.
79
+ * @param {string} [props.className] - Classes to pass to the container.
80
+ * @param {JSX.Element|JSX.Element[]} [props.actions] - Controls to show on the right side of the header.
81
+ *
82
+ * @returns {JSX.Element} The OptionsPanelHeader component.
83
+ *
84
+ * @example
85
+ * <OptionsPanelHeader title='Theme options'>
86
+ * ...
87
+ * </OptionsPanelHeader>
88
+ *
89
+ * @preserve
90
+ */
91
+ const OptionsPanelHeader = ({ children, sticky, title, className, actions, level = 2 }) => {
92
+ return /* @__PURE__ */ jsxs("div", { className: clsx("es-uic-max-w-md es-uic-space-y-2.5", sticky && "es-uic-sticky es-uic-top-0 es-uic-z-10", className), children: [
93
+ /* @__PURE__ */ jsxs("div", { className: "es-uic-flex es-uic-flex-wrap es-uic-items-center es-uic-justify-between es-uic-gap-x-8 es-uic-gap-y-4", children: [
94
+ /* @__PURE__ */ jsx(
95
+ $5cb03073d3f54797$export$a8a3e93435678ff9,
96
+ {
97
+ className: "es-uic-text-3xl es-uic-font-medium es-uic-tracking-tighter",
98
+ level,
99
+ children: title
100
+ }
101
+ ),
102
+ /* @__PURE__ */ jsx("div", { className: "es-uic-flex es-uic-items-center es-uic-gap-2", children: actions })
103
+ ] }),
104
+ children
105
+ ] });
106
+ };
54
107
  export {
55
108
  OptionsPanel,
109
+ OptionsPanelHeader,
56
110
  OptionsPanelSection
57
111
  };
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { $ as $07b14b47974efb58$export$5b6b19405a83ff9d, a as $de32f1b87079253c$export$3ddf2d174ce01153, b as $de32f1b87079253c$export$2e1e1122cf0cba88 } from "../../Dialog-DSquJZb-.js";
2
+ import { $ as $07b14b47974efb58$export$5b6b19405a83ff9d, a as $de32f1b87079253c$export$3ddf2d174ce01153, b as $de32f1b87079253c$export$2e1e1122cf0cba88 } from "../../Dialog-BdtBguys.js";
3
3
  import { c as clsx } from "../../lite-DVmmD_-j.js";
4
4
  import { _ as __ } from "../../default-i18n-BqWys-1G.js";
5
5
  import { Button } from "../button/button.js";