@elementor/editor-editing-panel 0.17.0 → 0.19.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 (81) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/index.d.mts +28 -10
  3. package/dist/index.d.ts +28 -10
  4. package/dist/index.js +941 -398
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +918 -366
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +8 -7
  9. package/src/components/editing-panel-error-fallback.tsx +12 -0
  10. package/src/components/editing-panel.tsx +23 -12
  11. package/src/components/settings-tab.tsx +8 -5
  12. package/src/components/style-sections/background-section/background-color-control.tsx +20 -0
  13. package/src/components/style-sections/background-section/background-section.tsx +15 -0
  14. package/src/components/style-sections/effects-section/box-shadow-repeater.tsx +224 -0
  15. package/src/components/style-sections/effects-section/effects-section.tsx +18 -0
  16. package/src/components/style-sections/position-section/z-index-control.tsx +11 -7
  17. package/src/components/style-sections/size-section.tsx +23 -20
  18. package/src/components/style-sections/spacing-section/linked-dimensions-control.tsx +62 -47
  19. package/src/components/style-sections/typography-section/font-size-control.tsx +10 -6
  20. package/src/components/style-sections/typography-section/font-weight-control.tsx +16 -12
  21. package/src/components/style-sections/typography-section/letter-spacing-control.tsx +10 -6
  22. package/src/components/style-sections/typography-section/text-alignment-control.tsx +12 -8
  23. package/src/components/style-sections/typography-section/text-color-control.tsx +10 -6
  24. package/src/components/style-sections/typography-section/text-direction-control.tsx +37 -0
  25. package/src/components/style-sections/typography-section/text-style-control.tsx +37 -34
  26. package/src/components/style-sections/typography-section/transform-control.tsx +14 -12
  27. package/src/components/style-sections/typography-section/typography-section.tsx +2 -0
  28. package/src/components/style-sections/typography-section/word-spacing-control.tsx +10 -6
  29. package/src/components/style-tab.tsx +10 -4
  30. package/src/control-replacement.tsx +3 -0
  31. package/src/controls/components/control-type-container.tsx +28 -0
  32. package/src/controls/components/repeater.tsx +197 -0
  33. package/src/controls/components/text-field-inner-selection.tsx +2 -2
  34. package/src/controls/control-actions/actions/popover-action.tsx +58 -0
  35. package/src/controls/control-actions/control-actions-menu.ts +8 -0
  36. package/src/controls/control-actions/control-actions.tsx +43 -0
  37. package/src/controls/control-context.tsx +1 -1
  38. package/src/controls/control-replacement.ts +16 -8
  39. package/src/controls/control-types/color-control.tsx +21 -18
  40. package/src/controls/control-types/image-control.tsx +56 -59
  41. package/src/controls/control-types/image-media-control.tsx +73 -0
  42. package/src/controls/control-types/number-control.tsx +13 -9
  43. package/src/controls/control-types/select-control.tsx +14 -10
  44. package/src/controls/control-types/size-control.tsx +18 -14
  45. package/src/controls/control-types/text-area-control.tsx +15 -11
  46. package/src/controls/control-types/text-control.tsx +9 -3
  47. package/src/controls/control-types/toggle-control.tsx +4 -3
  48. package/src/controls/control.tsx +1 -7
  49. package/src/controls/controls-registry.tsx +19 -10
  50. package/src/controls/create-control-replacement.tsx +53 -0
  51. package/src/controls/create-control.tsx +40 -0
  52. package/src/controls/hooks/use-style-control.ts +3 -3
  53. package/src/{hooks → controls/hooks}/use-widget-settings.ts +1 -1
  54. package/src/{props → controls/props}/is-transformable.ts +1 -2
  55. package/src/controls/props/types.ts +51 -0
  56. package/src/{contexts/element-context.tsx → controls/providers/element-provider.tsx} +4 -4
  57. package/src/controls/settings-control.tsx +7 -14
  58. package/src/controls/style-control.tsx +1 -1
  59. package/src/{sync → controls/sync}/get-container.ts +1 -1
  60. package/src/{sync → controls/sync}/update-settings.ts +1 -1
  61. package/src/controls/types.ts +39 -0
  62. package/src/dynamics/components/dynamic-selection-control.tsx +2 -2
  63. package/src/dynamics/components/dynamic-selection.tsx +6 -6
  64. package/src/dynamics/dynamic-control.tsx +2 -2
  65. package/src/dynamics/hooks/use-dynamic-tag.ts +2 -2
  66. package/src/dynamics/hooks/use-prop-dynamic-action.tsx +23 -0
  67. package/src/dynamics/hooks/use-prop-dynamic-tags.ts +7 -7
  68. package/src/dynamics/hooks/use-prop-value-history.ts +3 -3
  69. package/src/dynamics/init.ts +10 -1
  70. package/src/dynamics/types.ts +7 -3
  71. package/src/dynamics/utils.ts +17 -4
  72. package/src/hooks/use-element-style-prop.ts +3 -2
  73. package/src/hooks/use-element-styles.ts +1 -1
  74. package/src/hooks/use-element-type.ts +1 -1
  75. package/src/index.ts +3 -1
  76. package/src/sync/get-element-styles.ts +2 -2
  77. package/src/sync/get-selected-elements.ts +1 -1
  78. package/src/sync/types.ts +2 -1
  79. package/src/sync/update-style.ts +3 -2
  80. package/src/controls/components/control-container.tsx +0 -18
  81. package/src/types.ts +0 -68
package/dist/index.js CHANGED
@@ -30,24 +30,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
+ controlActionsMenu: () => controlActionsMenu,
33
34
  replaceControl: () => replaceControl,
34
35
  useControl: () => useControl
35
36
  });
36
37
  module.exports = __toCommonJS(src_exports);
37
38
 
38
- // src/controls/control-replacement.ts
39
- var controlReplacement;
40
- var replaceControl = ({ component, condition }) => {
41
- controlReplacement = { component, condition };
42
- };
43
- var getControlReplacement = ({ value }) => {
44
- let shouldReplace = false;
45
- try {
46
- shouldReplace = !!controlReplacement?.condition({ value });
47
- } catch {
48
- }
49
- return shouldReplace ? controlReplacement?.component : void 0;
50
- };
39
+ // src/controls/create-control-replacement.tsx
40
+ var React = __toESM(require("react"));
41
+ var import_react2 = require("react");
51
42
 
52
43
  // src/controls/control-context.tsx
53
44
  var import_react = require("react");
@@ -60,12 +51,89 @@ function useControl(defaultValue) {
60
51
  return { ...controlContext, value: controlContext.value ?? defaultValue };
61
52
  }
62
53
 
54
+ // src/controls/create-control-replacement.tsx
55
+ var ControlReplacementContext = (0, import_react2.createContext)(void 0);
56
+ var ControlReplacementProvider = ({
57
+ component,
58
+ condition,
59
+ children
60
+ }) => {
61
+ return /* @__PURE__ */ React.createElement(ControlReplacementContext.Provider, { value: { component, condition } }, children);
62
+ };
63
+ var useControlReplacement = () => {
64
+ const { value } = useControl();
65
+ const controlReplacement = (0, import_react2.useContext)(ControlReplacementContext);
66
+ let shouldReplace = false;
67
+ try {
68
+ shouldReplace = !!controlReplacement?.condition({ value }) && !!controlReplacement.component;
69
+ } catch {
70
+ }
71
+ return shouldReplace ? controlReplacement?.component : void 0;
72
+ };
73
+ var createControlReplacement = () => {
74
+ let controlReplacement;
75
+ function replaceControl2({ component, condition }) {
76
+ controlReplacement = { component, condition };
77
+ }
78
+ function getControlReplacement2() {
79
+ return controlReplacement;
80
+ }
81
+ return { replaceControl: replaceControl2, getControlReplacement: getControlReplacement2 };
82
+ };
83
+
84
+ // src/control-replacement.tsx
85
+ var { replaceControl, getControlReplacement } = createControlReplacement();
86
+
87
+ // src/controls/control-actions/actions/popover-action.tsx
88
+ var React2 = __toESM(require("react"));
89
+ var import_ui = require("@elementor/ui");
90
+ var import_react3 = require("react");
91
+ var import_icons = require("@elementor/icons");
92
+ var SIZE = "tiny";
93
+ function PopoverAction({
94
+ title,
95
+ visible = true,
96
+ icon: Icon,
97
+ popoverContent: PopoverContent
98
+ }) {
99
+ const id = (0, import_react3.useId)();
100
+ const popupState = (0, import_ui.usePopupState)({
101
+ variant: "popover",
102
+ popupId: `elementor-popover-action-${id}`
103
+ });
104
+ if (!visible) {
105
+ return null;
106
+ }
107
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(import_ui.Tooltip, { placement: "top", title }, /* @__PURE__ */ React2.createElement(import_ui.IconButton, { "aria-label": title, key: id, size: SIZE, ...(0, import_ui.bindToggle)(popupState) }, /* @__PURE__ */ React2.createElement(Icon, { fontSize: SIZE }))), /* @__PURE__ */ React2.createElement(
108
+ import_ui.Popover,
109
+ {
110
+ disablePortal: true,
111
+ disableScrollLock: true,
112
+ anchorOrigin: {
113
+ vertical: "bottom",
114
+ horizontal: "center"
115
+ },
116
+ ...(0, import_ui.bindPopover)(popupState)
117
+ },
118
+ /* @__PURE__ */ React2.createElement(import_ui.Stack, { direction: "row", alignItems: "center", pl: 1.5, pr: 0.5, py: 1.5 }, /* @__PURE__ */ React2.createElement(Icon, { fontSize: SIZE, sx: { mr: 0.5 } }), /* @__PURE__ */ React2.createElement(import_ui.Typography, { variant: "subtitle2" }, title), /* @__PURE__ */ React2.createElement(import_ui.IconButton, { sx: { ml: "auto" }, size: SIZE, onClick: popupState.close }, /* @__PURE__ */ React2.createElement(import_icons.XIcon, { fontSize: SIZE }))),
119
+ /* @__PURE__ */ React2.createElement(PopoverContent, { closePopover: popupState.close })
120
+ ));
121
+ }
122
+
123
+ // src/controls/control-actions/control-actions-menu.ts
124
+ var import_menus = require("@elementor/menus");
125
+ var controlActionsMenu = (0, import_menus.createMenu)({
126
+ components: {
127
+ PopoverAction
128
+ }
129
+ });
130
+
63
131
  // src/panel.ts
64
132
  var import_editor_panels2 = require("@elementor/editor-panels");
65
133
 
66
134
  // src/components/editing-panel.tsx
67
- var React37 = __toESM(require("react"));
68
- var import_i18n18 = require("@wordpress/i18n");
135
+ var React49 = __toESM(require("react"));
136
+ var import_i18n25 = require("@wordpress/i18n");
69
137
 
70
138
  // src/hooks/use-selected-elements.ts
71
139
  var import_editor_v1_adapters = require("@elementor/editor-v1-adapters");
@@ -94,6 +162,24 @@ function useSelectedElements() {
94
162
  );
95
163
  }
96
164
 
165
+ // src/components/editing-panel.tsx
166
+ var import_editor_panels = require("@elementor/editor-panels");
167
+
168
+ // src/controls/providers/element-provider.tsx
169
+ var React3 = __toESM(require("react"));
170
+ var import_react4 = require("react");
171
+ var Context = (0, import_react4.createContext)(null);
172
+ function ElementProvider({ children, element, elementType }) {
173
+ return /* @__PURE__ */ React3.createElement(Context.Provider, { value: { element, elementType } }, children);
174
+ }
175
+ function useElement() {
176
+ const context = (0, import_react4.useContext)(Context);
177
+ if (!context) {
178
+ throw new Error("useElement must be used within a ElementProvider");
179
+ }
180
+ return context;
181
+ }
182
+
97
183
  // src/hooks/use-element-type.ts
98
184
  var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
99
185
 
@@ -130,47 +216,29 @@ function useElementType(type) {
130
216
  );
131
217
  }
132
218
 
133
- // src/components/editing-panel.tsx
134
- var import_editor_panels = require("@elementor/editor-panels");
135
-
136
- // src/contexts/element-context.tsx
137
- var React = __toESM(require("react"));
138
- var import_react2 = require("react");
139
- var Context = (0, import_react2.createContext)(null);
140
- function ElementContext({ children, element, elementType }) {
141
- return /* @__PURE__ */ React.createElement(Context.Provider, { value: { element, elementType } }, children);
142
- }
143
- function useElementContext() {
144
- const context = (0, import_react2.useContext)(Context);
145
- if (!context) {
146
- throw new Error("useElementContext must be used within a ElementContextProvider");
147
- }
148
- return context;
149
- }
150
-
151
219
  // src/components/editing-panel-tabs.tsx
152
- var import_ui22 = require("@elementor/ui");
153
- var React36 = __toESM(require("react"));
154
- var import_i18n17 = require("@wordpress/i18n");
220
+ var import_ui40 = require("@elementor/ui");
221
+ var React47 = __toESM(require("react"));
222
+ var import_i18n24 = require("@wordpress/i18n");
155
223
 
156
224
  // src/components/settings-tab.tsx
157
- var React13 = __toESM(require("react"));
158
- var import_ui10 = require("@elementor/ui");
225
+ var React18 = __toESM(require("react"));
226
+ var import_ui14 = require("@elementor/ui");
159
227
 
160
228
  // src/controls/settings-control.tsx
161
- var React4 = __toESM(require("react"));
229
+ var React5 = __toESM(require("react"));
162
230
 
163
- // src/hooks/use-widget-settings.ts
231
+ // src/controls/hooks/use-widget-settings.ts
164
232
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
165
233
 
166
- // src/sync/get-container.ts
234
+ // src/controls/sync/get-container.ts
167
235
  function getContainer(id) {
168
236
  const extendedWindow = window;
169
237
  const container = extendedWindow.elementor?.getContainer?.(id);
170
238
  return container ?? null;
171
239
  }
172
240
 
173
- // src/hooks/use-widget-settings.ts
241
+ // src/controls/hooks/use-widget-settings.ts
174
242
  var useWidgetSettings = ({ id, bind }) => {
175
243
  return (0, import_editor_v1_adapters3.__privateUseListenTo)(
176
244
  (0, import_editor_v1_adapters3.commandEndEvent)("document/elements/settings"),
@@ -183,7 +251,7 @@ var useWidgetSettings = ({ id, bind }) => {
183
251
  );
184
252
  };
185
253
 
186
- // src/sync/update-settings.ts
254
+ // src/controls/sync/update-settings.ts
187
255
  var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
188
256
  var updateSettings = ({ id, props }) => {
189
257
  const container = getContainer(id);
@@ -196,32 +264,16 @@ var updateSettings = ({ id, props }) => {
196
264
  };
197
265
 
198
266
  // src/components/control-label.tsx
199
- var React2 = __toESM(require("react"));
200
- var import_ui = require("@elementor/ui");
267
+ var React4 = __toESM(require("react"));
268
+ var import_ui2 = require("@elementor/ui");
201
269
  var ControlLabel = ({ children }) => {
202
- return /* @__PURE__ */ React2.createElement(import_ui.Typography, { component: "label", variant: "caption", color: "text.secondary" }, children);
270
+ return /* @__PURE__ */ React4.createElement(import_ui2.Typography, { component: "label", variant: "caption", color: "text.secondary" }, children);
203
271
  };
204
272
 
205
- // src/controls/components/control-container.tsx
206
- var React3 = __toESM(require("react"));
207
- var import_ui2 = require("@elementor/ui");
208
- var StyledStack = (0, import_ui2.styled)(import_ui2.Stack)(({ theme, gap, direction }) => ({
209
- "> :only-child": {
210
- width: "100%"
211
- },
212
- "&:where( :has( > :nth-child( 2 ):last-child ) ) > :where( * )": {
213
- width: direction === "column" ? "100%" : `calc( 50% - ${theme.spacing(gap / 2)})`
214
- },
215
- "&:where( :has( > :nth-child( 3 ):last-child ) ) > :where( * )": {
216
- width: direction === "column" ? "100%" : `calc( 33.3333% - ${theme.spacing(gap * 2)} / 3)`
217
- }
218
- }));
219
- var ControlContainer = (props) => /* @__PURE__ */ React3.createElement(StyledStack, { gap: 1, direction: "row", alignItems: "center", justifyContent: "space-between", ...props });
220
-
221
273
  // src/controls/settings-control.tsx
222
- var SettingsControlProvider = ({ bind, children }) => {
223
- const { element, elementType } = useElementContext();
224
- const defaultValue = elementType.propsSchema[bind]?.type.default;
274
+ var SettingsControl = ({ bind, children }) => {
275
+ const { element, elementType } = useElement();
276
+ const defaultValue = elementType.propsSchema[bind]?.default;
225
277
  const settingsValue = useWidgetSettings({ id: element.id, bind });
226
278
  const value = settingsValue ?? defaultValue ?? null;
227
279
  const setValue = (newValue) => {
@@ -232,94 +284,181 @@ var SettingsControlProvider = ({ bind, children }) => {
232
284
  }
233
285
  });
234
286
  };
235
- return /* @__PURE__ */ React4.createElement(ControlContext.Provider, { value: { setValue, value, bind } }, children);
287
+ return /* @__PURE__ */ React5.createElement(ControlContext.Provider, { value: { setValue, value, bind } }, children);
236
288
  };
237
- var SettingsControl = ({ children, bind }) => /* @__PURE__ */ React4.createElement(SettingsControlProvider, { bind }, /* @__PURE__ */ React4.createElement(ControlContainer, { flexWrap: "wrap" }, children));
238
289
  SettingsControl.Label = ControlLabel;
239
290
 
240
291
  // src/components/accordion-section.tsx
241
- var React5 = __toESM(require("react"));
242
- var import_react3 = require("react");
292
+ var React6 = __toESM(require("react"));
293
+ var import_react5 = require("react");
243
294
  var import_ui3 = require("@elementor/ui");
244
295
  var AccordionSection = ({ title, children }) => {
245
- const uid = (0, import_react3.useId)();
296
+ const uid = (0, import_react5.useId)();
246
297
  const labelId = `label-${uid}`;
247
298
  const contentId = `content-${uid}`;
248
- return /* @__PURE__ */ React5.createElement(import_ui3.Accordion, { disableGutters: true, defaultExpanded: true }, /* @__PURE__ */ React5.createElement(import_ui3.AccordionSummary, { "aria-controls": contentId, id: labelId }, /* @__PURE__ */ React5.createElement(import_ui3.AccordionSummaryText, { primaryTypographyProps: { variant: "caption" } }, title)), /* @__PURE__ */ React5.createElement(import_ui3.AccordionDetails, { id: contentId, "aria-labelledby": labelId }, /* @__PURE__ */ React5.createElement(import_ui3.Stack, { gap: 2.5 }, children)));
299
+ return /* @__PURE__ */ React6.createElement(import_ui3.Accordion, { disableGutters: true, defaultExpanded: true }, /* @__PURE__ */ React6.createElement(import_ui3.AccordionSummary, { "aria-controls": contentId, id: labelId }, /* @__PURE__ */ React6.createElement(import_ui3.AccordionSummaryText, { primaryTypographyProps: { variant: "caption" } }, title)), /* @__PURE__ */ React6.createElement(import_ui3.AccordionDetails, { id: contentId, "aria-labelledby": labelId }, /* @__PURE__ */ React6.createElement(import_ui3.Stack, { gap: 2.5 }, children)));
249
300
  };
250
301
 
251
302
  // src/controls/control.tsx
252
- var React12 = __toESM(require("react"));
303
+ var React16 = __toESM(require("react"));
253
304
  var import_utils = require("@elementor/utils");
254
305
 
255
306
  // src/controls/control-types/image-control.tsx
256
- var React6 = __toESM(require("react"));
257
- var import_ui4 = require("@elementor/ui");
258
- var import_icons = require("@elementor/icons");
259
- var import_i18n = require("@wordpress/i18n");
307
+ var React11 = __toESM(require("react"));
308
+ var import_ui8 = require("@elementor/ui");
309
+ var import_i18n2 = require("@wordpress/i18n");
310
+
311
+ // src/controls/control-types/image-media-control.tsx
312
+ var React9 = __toESM(require("react"));
313
+ var import_ui6 = require("@elementor/ui");
314
+ var import_icons2 = require("@elementor/icons");
260
315
  var import_wp_media = require("@elementor/wp-media");
261
- var ImageControl = () => {
316
+ var import_i18n = require("@wordpress/i18n");
317
+
318
+ // src/controls/control-actions/control-actions.tsx
319
+ var React7 = __toESM(require("react"));
320
+ var import_ui4 = require("@elementor/ui");
321
+ var { useMenuItems } = controlActionsMenu;
322
+ var FloatingBar = (0, import_ui4.styled)(import_ui4.UnstableFloatingActionBar)`
323
+ & .MuiPaper-root:empty {
324
+ display: none;
325
+ }
326
+
327
+ // this is for a fix which would be added later on - to force the width externally
328
+ width: 100%;
329
+ & > :first-of-type {
330
+ width: 100%;
331
+ }
332
+ `;
333
+ function ControlActions({ fullWidth = false, children }) {
334
+ const items = useMenuItems().default;
335
+ if (items.length === 0) {
336
+ return children;
337
+ }
338
+ return /* @__PURE__ */ React7.createElement(
339
+ FloatingBar,
340
+ {
341
+ actions: items.map(({ MenuItem: MenuItem4, id }) => /* @__PURE__ */ React7.createElement(MenuItem4, { key: id })),
342
+ sx: fullWidth ? { width: "100%" } : void 0
343
+ },
344
+ children
345
+ );
346
+ }
347
+
348
+ // src/controls/create-control.tsx
349
+ var React8 = __toESM(require("react"));
350
+ var import_ui5 = require("@elementor/ui");
351
+ var brandSymbol = Symbol("control");
352
+ function createControl(Component, { supportsReplacements = true } = {}) {
353
+ return (props) => {
354
+ const ControlReplacement = useControlReplacement();
355
+ if (ControlReplacement && supportsReplacements) {
356
+ return /* @__PURE__ */ React8.createElement(import_ui5.ErrorBoundary, { fallback: null }, /* @__PURE__ */ React8.createElement(ControlReplacement, { ...props }));
357
+ }
358
+ return /* @__PURE__ */ React8.createElement(import_ui5.ErrorBoundary, { fallback: null }, /* @__PURE__ */ React8.createElement(Component, { ...props }));
359
+ };
360
+ }
361
+
362
+ // src/controls/control-types/image-media-control.tsx
363
+ var ImageMediaControl = createControl(() => {
262
364
  const { value, setValue } = useControl();
263
- const { data: attachment } = (0, import_wp_media.useWpMediaAttachment)(value?.value?.attachmentId);
264
- const src = attachment?.url ?? value?.value?.url;
365
+ const { id, url } = value?.value ?? {};
366
+ const { data: attachment } = (0, import_wp_media.useWpMediaAttachment)(id?.value || null);
367
+ const src = attachment?.url ?? url;
265
368
  const { open } = (0, import_wp_media.useWpMediaFrame)({
266
369
  types: ["image"],
267
370
  multiple: false,
268
- selected: value?.value?.attachmentId,
371
+ selected: id?.value || null,
269
372
  onSelect: (selectedAttachment) => {
270
373
  setValue({
271
- $$type: "image",
374
+ $$type: "image-src",
272
375
  value: {
273
- attachmentId: selectedAttachment.id
376
+ id: {
377
+ $$type: "image-attachment-id",
378
+ value: selectedAttachment.id
379
+ },
380
+ url: null
274
381
  }
275
382
  });
276
383
  }
277
384
  });
278
- return /* @__PURE__ */ React6.createElement(import_ui4.Card, { variant: "outlined" }, /* @__PURE__ */ React6.createElement(import_ui4.CardMedia, { image: src, sx: { height: 150 } }), /* @__PURE__ */ React6.createElement(import_ui4.CardOverlay, null, /* @__PURE__ */ React6.createElement(
279
- import_ui4.Button,
385
+ return /* @__PURE__ */ React9.createElement(import_ui6.Card, { variant: "outlined" }, /* @__PURE__ */ React9.createElement(import_ui6.CardMedia, { image: src, sx: { height: 150 } }), /* @__PURE__ */ React9.createElement(import_ui6.CardOverlay, null, /* @__PURE__ */ React9.createElement(ControlActions, null, /* @__PURE__ */ React9.createElement(import_ui6.Stack, { gap: 0.5 }, /* @__PURE__ */ React9.createElement(
386
+ import_ui6.Button,
280
387
  {
388
+ size: "tiny",
281
389
  color: "inherit",
282
- size: "small",
283
390
  variant: "outlined",
284
- onClick: () => {
285
- open({ mode: "browse" });
286
- }
391
+ onClick: () => open({ mode: "browse" })
287
392
  },
288
393
  (0, import_i18n.__)("Select Image", "elementor")
289
- ), /* @__PURE__ */ React6.createElement(
290
- import_ui4.Button,
394
+ ), /* @__PURE__ */ React9.createElement(
395
+ import_ui6.Button,
291
396
  {
292
- color: "inherit",
293
- size: "small",
397
+ size: "tiny",
294
398
  variant: "text",
295
- startIcon: /* @__PURE__ */ React6.createElement(import_icons.UploadIcon, null),
296
- onClick: () => {
297
- open({ mode: "upload" });
298
- }
399
+ color: "inherit",
400
+ startIcon: /* @__PURE__ */ React9.createElement(import_icons2.UploadIcon, null),
401
+ onClick: () => open({ mode: "upload" })
299
402
  },
300
403
  (0, import_i18n.__)("Upload Image", "elementor")
301
- )));
302
- };
404
+ )))));
405
+ });
406
+
407
+ // src/controls/control-types/select-control.tsx
408
+ var React10 = __toESM(require("react"));
409
+ var import_ui7 = require("@elementor/ui");
410
+ var SelectControl = createControl(({ options: options4 }) => {
411
+ const { value, setValue } = useControl();
412
+ const handleChange = (event) => {
413
+ setValue(event.target.value);
414
+ };
415
+ return /* @__PURE__ */ React10.createElement(ControlActions, null, /* @__PURE__ */ React10.createElement(import_ui7.Select, { size: "tiny", value: value ?? "", onChange: handleChange }, options4.map(({ label, ...props }) => /* @__PURE__ */ React10.createElement(import_ui7.MenuItem, { key: props.value, ...props }, label))));
416
+ });
417
+
418
+ // src/controls/control-types/image-control.tsx
419
+ var ImageControl = createControl((props) => {
420
+ const { value, setValue } = useControl();
421
+ const { src, size } = value?.value || {};
422
+ const setImageSrc = (newValue) => {
423
+ setValue({
424
+ $$type: "image",
425
+ value: {
426
+ src: newValue,
427
+ size
428
+ }
429
+ });
430
+ };
431
+ const setImageSize = (newValue) => {
432
+ setValue({
433
+ $$type: "image",
434
+ value: {
435
+ src,
436
+ size: newValue
437
+ }
438
+ });
439
+ };
440
+ return /* @__PURE__ */ React11.createElement(import_ui8.Stack, { gap: 2 }, /* @__PURE__ */ React11.createElement(ControlContext.Provider, { value: { setValue: setImageSrc, value: src, bind: "src" } }, /* @__PURE__ */ React11.createElement(ImageMediaControl, null)), /* @__PURE__ */ React11.createElement(ControlContext.Provider, { value: { setValue: setImageSize, value: size, bind: "size" } }, /* @__PURE__ */ React11.createElement(import_ui8.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React11.createElement(import_ui8.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React11.createElement(SettingsControl.Label, null, " ", (0, import_i18n2.__)("Image Resolution", "elementor"))), /* @__PURE__ */ React11.createElement(import_ui8.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React11.createElement(SelectControl, { options: props.sizes })))));
441
+ });
303
442
 
304
443
  // src/controls/control-types/text-control.tsx
305
- var React7 = __toESM(require("react"));
306
- var import_ui5 = require("@elementor/ui");
307
- var TextControl = ({ placeholder }) => {
444
+ var React12 = __toESM(require("react"));
445
+ var import_ui9 = require("@elementor/ui");
446
+ var TextControl = createControl(({ placeholder }) => {
308
447
  const { value, setValue } = useControl("");
309
448
  const handleChange = (event) => setValue(event.target.value);
310
- return /* @__PURE__ */ React7.createElement(import_ui5.TextField, { type: "text", size: "tiny", value, onChange: handleChange, placeholder });
311
- };
449
+ return /* @__PURE__ */ React12.createElement(ControlActions, { fullWidth: true }, /* @__PURE__ */ React12.createElement(import_ui9.TextField, { type: "text", size: "tiny", value, onChange: handleChange, placeholder }));
450
+ });
312
451
 
313
452
  // src/controls/control-types/text-area-control.tsx
314
- var React8 = __toESM(require("react"));
315
- var import_ui6 = require("@elementor/ui");
316
- var TextAreaControl = ({ placeholder }) => {
453
+ var React13 = __toESM(require("react"));
454
+ var import_ui10 = require("@elementor/ui");
455
+ var TextAreaControl = createControl(({ placeholder }) => {
317
456
  const { value, setValue } = useControl();
318
457
  const handleChange = (event) => {
319
458
  setValue(event.target.value);
320
459
  };
321
- return /* @__PURE__ */ React8.createElement(
322
- import_ui6.TextField,
460
+ return /* @__PURE__ */ React13.createElement(ControlActions, { fullWidth: true }, /* @__PURE__ */ React13.createElement(
461
+ import_ui10.TextField,
323
462
  {
324
463
  size: "tiny",
325
464
  multiline: true,
@@ -329,15 +468,15 @@ var TextAreaControl = ({ placeholder }) => {
329
468
  onChange: handleChange,
330
469
  placeholder
331
470
  }
332
- );
333
- };
471
+ ));
472
+ });
334
473
 
335
474
  // src/controls/control-types/size-control.tsx
336
- var React10 = __toESM(require("react"));
337
- var import_ui8 = require("@elementor/ui");
475
+ var React15 = __toESM(require("react"));
476
+ var import_ui12 = require("@elementor/ui");
338
477
 
339
478
  // src/controls/hooks/use-sync-external-state.tsx
340
- var import_react4 = require("react");
479
+ var import_react6 = require("react");
341
480
  var useSyncExternalState = ({
342
481
  external,
343
482
  setExternal,
@@ -356,8 +495,8 @@ var useSyncExternalState = ({
356
495
  }
357
496
  return externalValue;
358
497
  }
359
- const [internal, setInternal] = (0, import_react4.useState)(toInternal(external, void 0));
360
- (0, import_react4.useEffect)(() => {
498
+ const [internal, setInternal] = (0, import_react6.useState)(toInternal(external, void 0));
499
+ (0, import_react6.useEffect)(() => {
361
500
  setInternal((prevInternal) => toInternal(external, prevInternal));
362
501
  }, [external]);
363
502
  const setInternalValue = (setter) => {
@@ -370,9 +509,9 @@ var useSyncExternalState = ({
370
509
  };
371
510
 
372
511
  // src/controls/components/text-field-inner-selection.tsx
373
- var React9 = __toESM(require("react"));
374
- var import_ui7 = require("@elementor/ui");
375
- var import_react5 = require("react");
512
+ var React14 = __toESM(require("react"));
513
+ var import_react7 = require("react");
514
+ var import_ui11 = require("@elementor/ui");
376
515
  var TextFieldInnerSelection = ({
377
516
  placeholder,
378
517
  type,
@@ -381,8 +520,8 @@ var TextFieldInnerSelection = ({
381
520
  endAdornment,
382
521
  startAdornment
383
522
  }) => {
384
- return /* @__PURE__ */ React9.createElement(
385
- import_ui7.TextField,
523
+ return /* @__PURE__ */ React14.createElement(
524
+ import_ui11.TextField,
386
525
  {
387
526
  size: "tiny",
388
527
  type,
@@ -397,33 +536,33 @@ var TextFieldInnerSelection = ({
397
536
  );
398
537
  };
399
538
  var SelectionEndAdornment = ({
400
- options: options3,
539
+ options: options4,
401
540
  onClick,
402
541
  value
403
542
  }) => {
404
- const popupState = (0, import_ui7.usePopupState)({
543
+ const popupState = (0, import_ui11.usePopupState)({
405
544
  variant: "popover",
406
- popupId: (0, import_react5.useId)()
545
+ popupId: (0, import_react7.useId)()
407
546
  });
408
547
  const handleMenuItemClick = (index) => {
409
- onClick(options3[index]);
548
+ onClick(options4[index]);
410
549
  popupState.close();
411
550
  };
412
- return /* @__PURE__ */ React9.createElement(import_ui7.InputAdornment, { position: "end" }, /* @__PURE__ */ React9.createElement(
413
- import_ui7.Button,
551
+ return /* @__PURE__ */ React14.createElement(import_ui11.InputAdornment, { position: "end" }, /* @__PURE__ */ React14.createElement(
552
+ import_ui11.Button,
414
553
  {
415
554
  size: "small",
416
555
  color: "inherit",
417
556
  sx: { font: "inherit", minWidth: "initial" },
418
- ...(0, import_ui7.bindTrigger)(popupState)
557
+ ...(0, import_ui11.bindTrigger)(popupState)
419
558
  },
420
559
  value.toUpperCase()
421
- ), /* @__PURE__ */ React9.createElement(import_ui7.Menu, { MenuListProps: { dense: true }, ...(0, import_ui7.bindMenu)(popupState) }, options3.map((option, index) => /* @__PURE__ */ React9.createElement(import_ui7.MenuItem, { key: option, onClick: () => handleMenuItemClick(index) }, option.toUpperCase()))));
560
+ ), /* @__PURE__ */ React14.createElement(import_ui11.Menu, { MenuListProps: { dense: true }, ...(0, import_ui11.bindMenu)(popupState) }, options4.map((option, index) => /* @__PURE__ */ React14.createElement(import_ui11.MenuItem, { key: option, onClick: () => handleMenuItemClick(index) }, option.toUpperCase()))));
422
561
  };
423
562
 
424
563
  // src/controls/control-types/size-control.tsx
425
564
  var defaultUnits = ["px", "%", "em", "rem", "vw"];
426
- var SizeControl = ({ units = defaultUnits, placeholder, startIcon }) => {
565
+ var SizeControl = createControl(({ units = defaultUnits, placeholder, startIcon }) => {
427
566
  const { value, setValue } = useControl();
428
567
  const [state, setState] = useSyncExternalState({
429
568
  external: value,
@@ -453,39 +592,29 @@ var SizeControl = ({ units = defaultUnits, placeholder, startIcon }) => {
453
592
  }
454
593
  }));
455
594
  };
456
- return /* @__PURE__ */ React10.createElement(
595
+ return /* @__PURE__ */ React15.createElement(ControlActions, null, /* @__PURE__ */ React15.createElement(
457
596
  TextFieldInnerSelection,
458
597
  {
459
- endAdornment: /* @__PURE__ */ React10.createElement(SelectionEndAdornment, { options: units, onClick: handleUnitChange, value: state.value.unit }),
598
+ endAdornment: /* @__PURE__ */ React15.createElement(SelectionEndAdornment, { options: units, onClick: handleUnitChange, value: state.value.unit }),
460
599
  placeholder,
461
- startAdornment: startIcon ?? /* @__PURE__ */ React10.createElement(import_ui8.InputAdornment, { position: "start" }, startIcon),
600
+ startAdornment: startIcon ?? /* @__PURE__ */ React15.createElement(import_ui12.InputAdornment, { position: "start" }, startIcon),
462
601
  type: "number",
463
602
  value: Number.isNaN(state.value.size) ? "" : state.value.size,
464
603
  onChange: handleSizeChange
465
604
  }
466
- );
467
- };
468
-
469
- // src/controls/control-types/select-control.tsx
470
- var React11 = __toESM(require("react"));
471
- var import_ui9 = require("@elementor/ui");
472
- var SelectControl = ({ options: options3 }) => {
473
- const { value, setValue } = useControl();
474
- const handleChange = (event) => {
475
- setValue(event.target.value);
476
- };
477
- return /* @__PURE__ */ React11.createElement(import_ui9.Select, { size: "tiny", value: value ?? "", onChange: handleChange }, options3.map(({ label, ...props }) => /* @__PURE__ */ React11.createElement(import_ui9.MenuItem, { key: props.value, ...props }, label)));
478
- };
605
+ ));
606
+ });
479
607
 
480
608
  // src/controls/controls-registry.tsx
481
609
  var controlTypes = {
482
- image: ImageControl,
483
- text: TextControl,
484
- textarea: TextAreaControl,
485
- size: SizeControl,
486
- select: SelectControl
610
+ image: { component: ImageControl, layout: "full" },
611
+ text: { component: TextControl, layout: "two-columns" },
612
+ textarea: { component: TextAreaControl, layout: "full" },
613
+ size: { component: SizeControl, layout: "two-columns" },
614
+ select: { component: SelectControl, layout: "two-columns" }
487
615
  };
488
- var getControlByType = (type) => controlTypes[type];
616
+ var getControlByType = (type) => controlTypes[type]?.component;
617
+ var getLayoutByType = (type) => controlTypes[type].layout;
489
618
 
490
619
  // src/controls/control.tsx
491
620
  var ControlTypeError = (0, import_utils.createError)({
@@ -493,28 +622,51 @@ var ControlTypeError = (0, import_utils.createError)({
493
622
  message: `Control type not found.`
494
623
  });
495
624
  var Control = ({ props, type }) => {
496
- const { value } = useControl();
497
625
  const ControlByType = getControlByType(type);
498
626
  if (!ControlByType) {
499
627
  throw new ControlTypeError({
500
628
  context: { type }
501
629
  });
502
630
  }
503
- const ControlComponent = getControlReplacement({ value }) || ControlByType;
504
- return /* @__PURE__ */ React12.createElement(ControlComponent, { ...props });
631
+ return /* @__PURE__ */ React16.createElement(ControlByType, { ...props });
505
632
  };
506
633
 
634
+ // src/controls/components/control-type-container.tsx
635
+ var React17 = __toESM(require("react"));
636
+ var import_ui13 = require("@elementor/ui");
637
+ var ControlTypeContainer = ({
638
+ controlType,
639
+ children
640
+ }) => {
641
+ const layout = getLayoutByType(controlType);
642
+ return /* @__PURE__ */ React17.createElement(StyledContainer, { layout }, children);
643
+ };
644
+ var StyledContainer = (0, import_ui13.styled)(import_ui13.Box, {
645
+ shouldForwardProp: (prop) => !["layout"].includes(prop)
646
+ })(({ layout, theme }) => ({
647
+ display: "grid",
648
+ gridGap: theme.spacing(1),
649
+ ...getGridLayout(layout)
650
+ }));
651
+ var getGridLayout = (layout) => ({
652
+ justifyContent: "space-between",
653
+ gridTemplateColumns: {
654
+ full: "1fr",
655
+ "two-columns": "repeat(2, 1fr)"
656
+ }[layout]
657
+ });
658
+
507
659
  // src/components/settings-tab.tsx
508
660
  var SettingsTab = () => {
509
- const { elementType } = useElementContext();
510
- return /* @__PURE__ */ React13.createElement(import_ui10.Stack, null, elementType.controls.map(({ type, value }, index) => {
661
+ const { elementType } = useElement();
662
+ return /* @__PURE__ */ React18.createElement(import_ui14.Stack, null, elementType.controls.map(({ type, value }, index) => {
511
663
  if (type === "control") {
512
- return /* @__PURE__ */ React13.createElement(Control2, { key: value.bind, control: value });
664
+ return /* @__PURE__ */ React18.createElement(Control2, { key: value.bind, control: value });
513
665
  }
514
666
  if (type === "section") {
515
- return /* @__PURE__ */ React13.createElement(AccordionSection, { key: type + "." + index, title: value.label }, value.items?.map((item) => {
667
+ return /* @__PURE__ */ React18.createElement(AccordionSection, { key: type + "." + index, title: value.label }, value.items?.map((item) => {
516
668
  if (item.type === "control") {
517
- return /* @__PURE__ */ React13.createElement(Control2, { key: item.value.bind, control: item.value });
669
+ return /* @__PURE__ */ React18.createElement(Control2, { key: item.value.bind, control: item.value });
518
670
  }
519
671
  return null;
520
672
  }));
@@ -526,24 +678,24 @@ var Control2 = ({ control }) => {
526
678
  if (!getControlByType(control.type)) {
527
679
  return null;
528
680
  }
529
- return /* @__PURE__ */ React13.createElement(SettingsControl, { bind: control.bind }, control.label ? /* @__PURE__ */ React13.createElement(SettingsControl.Label, null, control.label) : null, /* @__PURE__ */ React13.createElement(Control, { type: control.type, props: control.props }));
681
+ return /* @__PURE__ */ React18.createElement(SettingsControl, { bind: control.bind }, /* @__PURE__ */ React18.createElement(ControlTypeContainer, { controlType: control.type }, control.label ? /* @__PURE__ */ React18.createElement(SettingsControl.Label, null, control.label) : null, /* @__PURE__ */ React18.createElement(Control, { type: control.type, props: control.props })));
530
682
  };
531
683
 
532
684
  // src/components/style-tab.tsx
533
- var React35 = __toESM(require("react"));
685
+ var React46 = __toESM(require("react"));
534
686
 
535
687
  // src/contexts/style-context.tsx
536
- var React14 = __toESM(require("react"));
537
- var import_react6 = require("react");
688
+ var React19 = __toESM(require("react"));
689
+ var import_react8 = require("react");
538
690
  var import_editor_responsive = require("@elementor/editor-responsive");
539
- var Context2 = (0, import_react6.createContext)(null);
691
+ var Context2 = (0, import_react8.createContext)(null);
540
692
  function StyleContext({ children, selectedStyleDef, selectedClassesProp }) {
541
693
  const breakpoint = (0, import_editor_responsive.useActiveBreakpoint)();
542
694
  const selectedMeta = { breakpoint, state: null };
543
- return /* @__PURE__ */ React14.createElement(Context2.Provider, { value: { selectedStyleDef, selectedMeta, selectedClassesProp } }, children);
695
+ return /* @__PURE__ */ React19.createElement(Context2.Provider, { value: { selectedStyleDef, selectedMeta, selectedClassesProp } }, children);
544
696
  }
545
697
  function useStyleContext() {
546
- const context = (0, import_react6.useContext)(Context2);
698
+ const context = (0, import_react8.useContext)(Context2);
547
699
  if (!context) {
548
700
  throw new Error("UseStyleContext must be used within a StyleContextProvider");
549
701
  }
@@ -571,13 +723,13 @@ var useElementStyles = (elementID) => {
571
723
  };
572
724
 
573
725
  // src/components/style-tab.tsx
574
- var import_ui21 = require("@elementor/ui");
726
+ var import_ui39 = require("@elementor/ui");
575
727
 
576
728
  // src/components/style-sections/size-section.tsx
577
- var React16 = __toESM(require("react"));
729
+ var React21 = __toESM(require("react"));
578
730
 
579
731
  // src/controls/style-control.tsx
580
- var React15 = __toESM(require("react"));
732
+ var React20 = __toESM(require("react"));
581
733
 
582
734
  // src/hooks/use-element-style-prop.ts
583
735
  var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
@@ -624,7 +776,7 @@ var updateStyle = ({ elementID, styleDefID, meta, props, bind }) => {
624
776
 
625
777
  // src/controls/hooks/use-style-control.ts
626
778
  var useStyleControl = (propName) => {
627
- const { element } = useElementContext();
779
+ const { element } = useElement();
628
780
  const { selectedStyleDef, selectedMeta, selectedClassesProp } = useStyleContext();
629
781
  const value = useElementStyleProp({
630
782
  elementID: element.id,
@@ -647,35 +799,35 @@ var useStyleControl = (propName) => {
647
799
  // src/controls/style-control.tsx
648
800
  var StyleControl = ({ bind, children }) => {
649
801
  const [value, setValue] = useStyleControl(bind);
650
- return /* @__PURE__ */ React15.createElement(ControlContext.Provider, { value: { bind, value, setValue } }, children);
802
+ return /* @__PURE__ */ React20.createElement(ControlContext.Provider, { value: { bind, value, setValue } }, children);
651
803
  };
652
804
  StyleControl.Label = ControlLabel;
653
805
 
654
806
  // src/components/style-sections/size-section.tsx
655
- var import_ui11 = require("@elementor/ui");
656
- var import_i18n2 = require("@wordpress/i18n");
807
+ var import_ui15 = require("@elementor/ui");
808
+ var import_i18n3 = require("@wordpress/i18n");
657
809
  var SizeSection = () => {
658
- return /* @__PURE__ */ React16.createElement(AccordionSection, { title: (0, import_i18n2.__)("Size", "elementor") }, /* @__PURE__ */ React16.createElement(import_ui11.Stack, { gap: 1.5 }, /* @__PURE__ */ React16.createElement(import_ui11.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React16.createElement(Control3, { bind: "width", label: (0, import_i18n2.__)("Width", "elementor") }), /* @__PURE__ */ React16.createElement(Control3, { bind: "height", label: (0, import_i18n2.__)("Height", "elementor") })), /* @__PURE__ */ React16.createElement(import_ui11.Stack, { gap: 1.5, sx: { pt: 1.5 } }, /* @__PURE__ */ React16.createElement(import_ui11.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React16.createElement(Control3, { bind: "minWidth", label: (0, import_i18n2.__)("Min. Width", "elementor") }), /* @__PURE__ */ React16.createElement(Control3, { bind: "minHeight", label: (0, import_i18n2.__)("Min. Height", "elementor") })), /* @__PURE__ */ React16.createElement(import_ui11.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React16.createElement(Control3, { bind: "maxWidth", label: (0, import_i18n2.__)("Max. Width", "elementor") }), /* @__PURE__ */ React16.createElement(Control3, { bind: "maxHeight", label: (0, import_i18n2.__)("Max. Height", "elementor") })))));
810
+ return /* @__PURE__ */ React21.createElement(AccordionSection, { title: (0, import_i18n3.__)("Size", "elementor") }, /* @__PURE__ */ React21.createElement(import_ui15.Stack, { gap: 1.5 }, /* @__PURE__ */ React21.createElement(import_ui15.Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React21.createElement(Control3, { bind: "width", label: (0, import_i18n3.__)("Width", "elementor") }), /* @__PURE__ */ React21.createElement(Control3, { bind: "height", label: (0, import_i18n3.__)("Height", "elementor") })), /* @__PURE__ */ React21.createElement(import_ui15.Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React21.createElement(Control3, { bind: "min-width", label: (0, import_i18n3.__)("Min. Width", "elementor") }), /* @__PURE__ */ React21.createElement(Control3, { bind: "min-height", label: (0, import_i18n3.__)("Min. Height", "elementor") })), /* @__PURE__ */ React21.createElement(import_ui15.Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React21.createElement(Control3, { bind: "max-width", label: (0, import_i18n3.__)("Max. Width", "elementor") }), /* @__PURE__ */ React21.createElement(Control3, { bind: "max-height", label: (0, import_i18n3.__)("Max. Height", "elementor") }))));
659
811
  };
660
812
  var Control3 = ({ label, bind }) => {
661
- return /* @__PURE__ */ React16.createElement(StyleControl, { bind }, /* @__PURE__ */ React16.createElement(ControlContainer, { direction: "column" }, /* @__PURE__ */ React16.createElement(StyleControl.Label, null, label), /* @__PURE__ */ React16.createElement(Control, { type: "size" })));
813
+ return /* @__PURE__ */ React21.createElement(import_ui15.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React21.createElement(StyleControl, { bind }, /* @__PURE__ */ React21.createElement(import_ui15.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React21.createElement(import_ui15.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React21.createElement(StyleControl.Label, null, label)), /* @__PURE__ */ React21.createElement(import_ui15.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React21.createElement(Control, { type: "size" })))));
662
814
  };
663
815
 
664
816
  // src/components/style-sections/typography-section/typography-section.tsx
665
- var React29 = __toESM(require("react"));
666
- var import_ui16 = require("@elementor/ui");
817
+ var React35 = __toESM(require("react"));
818
+ var import_ui28 = require("@elementor/ui");
667
819
 
668
820
  // src/components/style-sections/typography-section/text-style-control.tsx
669
- var React17 = __toESM(require("react"));
670
- var import_ui12 = require("@elementor/ui");
671
- var import_icons2 = require("@elementor/icons");
672
- var import_i18n3 = require("@wordpress/i18n");
821
+ var React22 = __toESM(require("react"));
822
+ var import_i18n4 = require("@wordpress/i18n");
823
+ var import_ui16 = require("@elementor/ui");
824
+ var import_icons3 = require("@elementor/icons");
673
825
  var buttonSize = "tiny";
674
826
  var TextStyleControl = () => {
675
- const [fontStyle, setFontStyle] = useStyleControl("fontStyle");
676
- const [textDecoration, setTextDecoration] = useStyleControl("textDecoration");
827
+ const [fontStyle, setFontStyle] = useStyleControl("font-style");
828
+ const [textDecoration, setTextDecoration] = useStyleControl("text-decoration");
677
829
  const formats = [fontStyle, ...(textDecoration || "").split(" ")];
678
- return /* @__PURE__ */ React17.createElement(ControlContainer, null, /* @__PURE__ */ React17.createElement(ControlLabel, null, (0, import_i18n3.__)("Style", "elementor")), /* @__PURE__ */ React17.createElement(import_ui12.ToggleButtonGroup, { value: formats }, /* @__PURE__ */ React17.createElement(
830
+ return /* @__PURE__ */ React22.createElement(import_ui16.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React22.createElement(import_ui16.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React22.createElement(ControlLabel, null, (0, import_i18n4.__)("Style", "elementor"))), /* @__PURE__ */ React22.createElement(import_ui16.Grid, { item: true, xs: 6, display: "flex", justifyContent: "end" }, /* @__PURE__ */ React22.createElement(import_ui16.ToggleButtonGroup, { value: formats }, /* @__PURE__ */ React22.createElement(
679
831
  ToggleButton,
680
832
  {
681
833
  value: "italic",
@@ -683,8 +835,8 @@ var TextStyleControl = () => {
683
835
  "aria-label": "italic",
684
836
  sx: { marginLeft: "auto" }
685
837
  },
686
- /* @__PURE__ */ React17.createElement(import_icons2.ItalicIcon, { fontSize: buttonSize })
687
- ), /* @__PURE__ */ React17.createElement(
838
+ /* @__PURE__ */ React22.createElement(import_icons3.ItalicIcon, { fontSize: buttonSize })
839
+ ), /* @__PURE__ */ React22.createElement(
688
840
  ShorthandControl,
689
841
  {
690
842
  value: "line-through",
@@ -692,8 +844,8 @@ var TextStyleControl = () => {
692
844
  updateValues: setTextDecoration,
693
845
  "aria-label": "line-through"
694
846
  },
695
- /* @__PURE__ */ React17.createElement(import_icons2.StrikethroughIcon, { fontSize: buttonSize })
696
- ), /* @__PURE__ */ React17.createElement(
847
+ /* @__PURE__ */ React22.createElement(import_icons3.StrikethroughIcon, { fontSize: buttonSize })
848
+ ), /* @__PURE__ */ React22.createElement(
697
849
  ShorthandControl,
698
850
  {
699
851
  value: "underline",
@@ -701,8 +853,8 @@ var TextStyleControl = () => {
701
853
  updateValues: setTextDecoration,
702
854
  "aria-label": "underline"
703
855
  },
704
- /* @__PURE__ */ React17.createElement(import_icons2.UnderlineIcon, { fontSize: buttonSize })
705
- )));
856
+ /* @__PURE__ */ React22.createElement(import_icons3.UnderlineIcon, { fontSize: buttonSize })
857
+ ))));
706
858
  };
707
859
  var ShorthandControl = ({
708
860
  children,
@@ -720,105 +872,108 @@ var ShorthandControl = ({
720
872
  updateValues([...valuesArr, newValue].join(" "));
721
873
  }
722
874
  };
723
- return /* @__PURE__ */ React17.createElement(ToggleButton, { value, onChange: toggleValue, selected, "aria-label": ariaLabel }, children);
875
+ return /* @__PURE__ */ React22.createElement(ToggleButton, { value, onChange: toggleValue, selected, "aria-label": ariaLabel }, children);
724
876
  };
725
877
  var ToggleButton = ({ onChange, ...props }) => {
726
878
  const handleChange = (_e, newValue) => {
727
879
  onChange(newValue);
728
880
  };
729
- return /* @__PURE__ */ React17.createElement(import_ui12.ToggleButton, { ...props, onChange: handleChange, size: buttonSize });
881
+ return /* @__PURE__ */ React22.createElement(import_ui16.ToggleButton, { ...props, onChange: handleChange, size: buttonSize });
730
882
  };
731
883
 
732
884
  // src/components/style-sections/typography-section/typography-section.tsx
733
- var import_i18n12 = require("@wordpress/i18n");
885
+ var import_i18n14 = require("@wordpress/i18n");
734
886
 
735
887
  // src/components/style-sections/typography-section/font-size-control.tsx
736
- var React18 = __toESM(require("react"));
737
- var import_i18n4 = require("@wordpress/i18n");
888
+ var React23 = __toESM(require("react"));
889
+ var import_i18n5 = require("@wordpress/i18n");
890
+ var import_ui17 = require("@elementor/ui");
738
891
  var FontSizeControl = () => {
739
- return /* @__PURE__ */ React18.createElement(StyleControl, { bind: "font-size" }, /* @__PURE__ */ React18.createElement(ControlContainer, null, /* @__PURE__ */ React18.createElement(StyleControl.Label, null, (0, import_i18n4.__)("Font Size", "elementor")), /* @__PURE__ */ React18.createElement(SizeControl, null)));
892
+ return /* @__PURE__ */ React23.createElement(StyleControl, { bind: "font-size" }, /* @__PURE__ */ React23.createElement(import_ui17.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(import_ui17.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React23.createElement(StyleControl.Label, null, (0, import_i18n5.__)("Font Size", "elementor"))), /* @__PURE__ */ React23.createElement(import_ui17.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React23.createElement(SizeControl, null))));
740
893
  };
741
894
 
742
895
  // src/components/style-sections/typography-section/font-weight-control.tsx
743
- var React19 = __toESM(require("react"));
744
- var import_i18n5 = require("@wordpress/i18n");
896
+ var React24 = __toESM(require("react"));
897
+ var import_i18n6 = require("@wordpress/i18n");
898
+ var import_ui18 = require("@elementor/ui");
745
899
  var fontWeightOptions = [
746
- { label: (0, import_i18n5.__)("Light - 400", "elementor"), value: 400 },
747
- { label: (0, import_i18n5.__)("Regular - 500", "elementor"), value: 500 },
748
- { label: (0, import_i18n5.__)("Semi Bold - 600", "elementor"), value: 600 },
749
- { label: (0, import_i18n5.__)("Bold - 700", "elementor"), value: 700 },
750
- { label: (0, import_i18n5.__)("Black - 900", "elementor"), value: 900 }
900
+ { label: (0, import_i18n6.__)("Light - 400", "elementor"), value: "400" },
901
+ { label: (0, import_i18n6.__)("Regular - 500", "elementor"), value: "500" },
902
+ { label: (0, import_i18n6.__)("Semi Bold - 600", "elementor"), value: "600" },
903
+ { label: (0, import_i18n6.__)("Bold - 700", "elementor"), value: "700" },
904
+ { label: (0, import_i18n6.__)("Black - 900", "elementor"), value: "900" }
751
905
  ];
752
906
  var FontWeightControl = () => {
753
- return /* @__PURE__ */ React19.createElement(StyleControl, { bind: "fontWeight" }, /* @__PURE__ */ React19.createElement(ControlContainer, null, /* @__PURE__ */ React19.createElement(StyleControl.Label, null, (0, import_i18n5.__)("Font Weight", "elementor")), /* @__PURE__ */ React19.createElement(SelectControl, { options: fontWeightOptions })));
907
+ return /* @__PURE__ */ React24.createElement(StyleControl, { bind: "font-weight" }, /* @__PURE__ */ React24.createElement(import_ui18.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React24.createElement(import_ui18.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React24.createElement(StyleControl.Label, null, (0, import_i18n6.__)("Font Weight", "elementor"))), /* @__PURE__ */ React24.createElement(import_ui18.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React24.createElement(SelectControl, { options: fontWeightOptions }))));
754
908
  };
755
909
 
756
910
  // src/components/style-sections/typography-section/text-color-control.tsx
757
- var React21 = __toESM(require("react"));
758
- var import_i18n6 = require("@wordpress/i18n");
911
+ var React26 = __toESM(require("react"));
912
+ var import_i18n7 = require("@wordpress/i18n");
913
+ var import_ui20 = require("@elementor/ui");
759
914
 
760
915
  // src/controls/control-types/color-control.tsx
761
- var React20 = __toESM(require("react"));
762
- var import_ui13 = require("@elementor/ui");
763
- var ColorControl = () => {
764
- const { value, setValue } = useControl();
765
- const handleChange = debounce((selectedColor) => {
766
- setValue(selectedColor);
767
- });
768
- return /* @__PURE__ */ React20.createElement(import_ui13.UnstableColorPicker, { value, onChange: handleChange });
769
- };
770
- var debounce = (func, wait = 300) => {
771
- let timer;
772
- return (...args) => {
773
- clearTimeout(timer);
774
- timer = setTimeout(() => func(...args), wait);
775
- };
776
- };
916
+ var React25 = __toESM(require("react"));
917
+ var import_ui19 = require("@elementor/ui");
918
+ var ColorControl = createControl(
919
+ (props) => {
920
+ const { value, setValue } = useControl();
921
+ const handleChange = (selectedColor) => {
922
+ setValue({
923
+ $$type: "color",
924
+ value: selectedColor
925
+ });
926
+ };
927
+ return /* @__PURE__ */ React25.createElement(ControlActions, null, /* @__PURE__ */ React25.createElement(import_ui19.UnstableColorPicker, { size: "tiny", ...props, value: value?.value, onChange: handleChange }));
928
+ }
929
+ );
777
930
 
778
931
  // src/components/style-sections/typography-section/text-color-control.tsx
779
932
  var TextColorControl = () => {
780
- return /* @__PURE__ */ React21.createElement(StyleControl, { bind: "color" }, /* @__PURE__ */ React21.createElement(ControlContainer, null, /* @__PURE__ */ React21.createElement(StyleControl.Label, null, (0, import_i18n6.__)("Text Color", "elementor")), /* @__PURE__ */ React21.createElement(ColorControl, null)));
933
+ return /* @__PURE__ */ React26.createElement(StyleControl, { bind: "color" }, /* @__PURE__ */ React26.createElement(import_ui20.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React26.createElement(import_ui20.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React26.createElement(StyleControl.Label, null, (0, import_i18n7.__)("Text Color", "elementor"))), /* @__PURE__ */ React26.createElement(import_ui20.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React26.createElement(ColorControl, null))));
781
934
  };
782
935
 
783
936
  // src/components/style-sections/typography-section/letter-spacing-control.tsx
784
- var React22 = __toESM(require("react"));
785
- var import_i18n7 = require("@wordpress/i18n");
937
+ var React27 = __toESM(require("react"));
938
+ var import_i18n8 = require("@wordpress/i18n");
939
+ var import_ui21 = require("@elementor/ui");
786
940
  var LetterSpacingControl = () => {
787
- return /* @__PURE__ */ React22.createElement(StyleControl, { bind: "letter-spacing" }, /* @__PURE__ */ React22.createElement(ControlContainer, null, /* @__PURE__ */ React22.createElement(StyleControl.Label, null, (0, import_i18n7.__)("Letter Spacing", "elementor")), /* @__PURE__ */ React22.createElement(SizeControl, null)));
941
+ return /* @__PURE__ */ React27.createElement(StyleControl, { bind: "letter-spacing" }, /* @__PURE__ */ React27.createElement(import_ui21.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React27.createElement(import_ui21.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React27.createElement(StyleControl.Label, null, (0, import_i18n8.__)("Letter Spacing", "elementor"))), /* @__PURE__ */ React27.createElement(import_ui21.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React27.createElement(SizeControl, null))));
788
942
  };
789
943
 
790
944
  // src/components/style-sections/typography-section/word-spacing-control.tsx
791
- var React23 = __toESM(require("react"));
792
- var import_i18n8 = require("@wordpress/i18n");
945
+ var React28 = __toESM(require("react"));
946
+ var import_i18n9 = require("@wordpress/i18n");
947
+ var import_ui22 = require("@elementor/ui");
793
948
  var WordSpacingControl = () => {
794
- return /* @__PURE__ */ React23.createElement(StyleControl, { bind: "word-spacing" }, /* @__PURE__ */ React23.createElement(ControlContainer, null, /* @__PURE__ */ React23.createElement(StyleControl.Label, null, (0, import_i18n8.__)("Word Spacing", "elementor")), /* @__PURE__ */ React23.createElement(SizeControl, null)));
949
+ return /* @__PURE__ */ React28.createElement(StyleControl, { bind: "word-spacing" }, /* @__PURE__ */ React28.createElement(import_ui22.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React28.createElement(import_ui22.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(StyleControl.Label, null, (0, import_i18n9.__)("Word Spacing", "elementor"))), /* @__PURE__ */ React28.createElement(import_ui22.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(SizeControl, null))));
795
950
  };
796
951
 
797
952
  // src/components/collapsible-content.tsx
798
- var React24 = __toESM(require("react"));
799
- var import_react7 = require("react");
800
- var import_icons3 = require("@elementor/icons");
801
- var import_ui14 = require("@elementor/ui");
802
- var import_i18n9 = require("@wordpress/i18n");
953
+ var React29 = __toESM(require("react"));
954
+ var import_react9 = require("react");
955
+ var import_icons4 = require("@elementor/icons");
956
+ var import_ui23 = require("@elementor/ui");
957
+ var import_i18n10 = require("@wordpress/i18n");
803
958
  var CollapsibleContent = ({ children, defaultOpen = false }) => {
804
- const [open, setOpen] = (0, import_react7.useState)(defaultOpen);
959
+ const [open, setOpen] = (0, import_react9.useState)(defaultOpen);
805
960
  const handleToggle = () => {
806
961
  setOpen((prevOpen) => !prevOpen);
807
962
  };
808
- return /* @__PURE__ */ React24.createElement(import_ui14.Stack, { sx: { py: 0.5 } }, /* @__PURE__ */ React24.createElement(
809
- import_ui14.Button,
963
+ return /* @__PURE__ */ React29.createElement(import_ui23.Stack, { sx: { py: 0.5 } }, /* @__PURE__ */ React29.createElement(
964
+ import_ui23.Button,
810
965
  {
811
966
  fullWidth: true,
812
967
  size: "small",
813
968
  color: "secondary",
814
969
  variant: "outlined",
815
970
  onClick: handleToggle,
816
- endIcon: /* @__PURE__ */ React24.createElement(ChevronIcon, { open })
971
+ endIcon: /* @__PURE__ */ React29.createElement(ChevronIcon, { open })
817
972
  },
818
- open ? (0, import_i18n9.__)("Show less", "elementor") : (0, import_i18n9.__)("Show more", "elementor")
819
- ), /* @__PURE__ */ React24.createElement(import_ui14.Collapse, { in: open, timeout: "auto" }, children));
973
+ open ? (0, import_i18n10.__)("Show less", "elementor") : (0, import_i18n10.__)("Show more", "elementor")
974
+ ), /* @__PURE__ */ React29.createElement(import_ui23.Collapse, { in: open, timeout: "auto" }, children));
820
975
  };
821
- var ChevronIcon = (0, import_ui14.styled)(import_icons3.ChevronDownIcon, {
976
+ var ChevronIcon = (0, import_ui23.styled)(import_icons4.ChevronDownIcon, {
822
977
  shouldForwardProp: (prop) => prop !== "open"
823
978
  })(({ theme, open }) => ({
824
979
  transform: open ? "rotate(180deg)" : "rotate(0)",
@@ -828,16 +983,18 @@ var ChevronIcon = (0, import_ui14.styled)(import_icons3.ChevronDownIcon, {
828
983
  }));
829
984
 
830
985
  // src/components/style-sections/typography-section/transform-control.tsx
831
- var React27 = __toESM(require("react"));
832
- var import_i18n10 = require("@wordpress/i18n");
986
+ var React32 = __toESM(require("react"));
987
+ var import_i18n11 = require("@wordpress/i18n");
988
+ var import_ui25 = require("@elementor/ui");
989
+ var import_icons5 = require("@elementor/icons");
833
990
 
834
991
  // src/controls/control-types/toggle-control.tsx
835
- var React26 = __toESM(require("react"));
992
+ var React31 = __toESM(require("react"));
836
993
 
837
994
  // src/controls/components/control-toggle-button-group.tsx
838
- var React25 = __toESM(require("react"));
839
- var import_ui15 = require("@elementor/ui");
840
- var StyledToggleButtonGroup = (0, import_ui15.styled)(import_ui15.ToggleButtonGroup)`
995
+ var React30 = __toESM(require("react"));
996
+ var import_ui24 = require("@elementor/ui");
997
+ var StyledToggleButtonGroup = (0, import_ui24.styled)(import_ui24.ToggleButtonGroup)`
841
998
  ${({ justify }) => `justify-content: ${justify};`}
842
999
  `;
843
1000
  var ControlToggleButtonGroup = ({
@@ -851,92 +1008,112 @@ var ControlToggleButtonGroup = ({
851
1008
  const handleChange = (_, newValue) => {
852
1009
  onChange(newValue);
853
1010
  };
854
- return /* @__PURE__ */ React25.createElement(StyledToggleButtonGroup, { justify, value, onChange: handleChange, exclusive }, items.map(({ label, value: buttonValue, icon: Icon }) => /* @__PURE__ */ React25.createElement(import_ui15.ToggleButton, { key: buttonValue, value: buttonValue, "aria-label": label, size }, /* @__PURE__ */ React25.createElement(Icon, { fontSize: size }))));
1011
+ return /* @__PURE__ */ React30.createElement(StyledToggleButtonGroup, { justify, value, onChange: handleChange, exclusive }, items.map(({ label, value: buttonValue, icon: Icon }) => /* @__PURE__ */ React30.createElement(import_ui24.ToggleButton, { key: buttonValue, value: buttonValue, "aria-label": label, size }, /* @__PURE__ */ React30.createElement(Icon, { fontSize: size }))));
855
1012
  };
856
1013
 
857
1014
  // src/controls/control-types/toggle-control.tsx
858
- var ToggleControl = ({ options: options3 }) => {
1015
+ var ToggleControl = createControl(({ options: options4 }) => {
859
1016
  const { value, setValue } = useControl();
860
1017
  const handleToggle = (option) => {
861
1018
  setValue(option || void 0);
862
1019
  };
863
- return /* @__PURE__ */ React26.createElement(
1020
+ return /* @__PURE__ */ React31.createElement(
864
1021
  ControlToggleButtonGroup,
865
1022
  {
866
- items: options3,
1023
+ items: options4,
867
1024
  value: value || null,
868
1025
  onChange: handleToggle,
869
1026
  exclusive: true
870
1027
  }
871
1028
  );
872
- };
1029
+ });
873
1030
 
874
1031
  // src/components/style-sections/typography-section/transform-control.tsx
875
- var import_icons4 = require("@elementor/icons");
876
1032
  var options = [
877
- { value: "capitalize", label: (0, import_i18n10.__)("Capitalize", "elementor"), icon: import_icons4.LetterCaseIcon },
878
- { value: "uppercase", label: (0, import_i18n10.__)("Uppercase", "elementor"), icon: import_icons4.LetterCaseUpperIcon },
879
- { value: "lowercase", label: (0, import_i18n10.__)("Lowercase", "elementor"), icon: import_icons4.LetterCaseLowerIcon }
1033
+ { value: "capitalize", label: (0, import_i18n11.__)("Capitalize", "elementor"), icon: import_icons5.LetterCaseIcon },
1034
+ { value: "uppercase", label: (0, import_i18n11.__)("Uppercase", "elementor"), icon: import_icons5.LetterCaseUpperIcon },
1035
+ { value: "lowercase", label: (0, import_i18n11.__)("Lowercase", "elementor"), icon: import_icons5.LetterCaseLowerIcon }
880
1036
  ];
881
- var TransformControl = () => {
882
- return /* @__PURE__ */ React27.createElement(ControlContainer, null, /* @__PURE__ */ React27.createElement(StyleControl.Label, null, (0, import_i18n10.__)("Transform", "elementor")), /* @__PURE__ */ React27.createElement(StyleControl, { bind: "text-transform" }, /* @__PURE__ */ React27.createElement(ToggleControl, { options })));
883
- };
1037
+ var TransformControl = () => /* @__PURE__ */ React32.createElement(StyleControl, { bind: "text-transform" }, /* @__PURE__ */ React32.createElement(import_ui25.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React32.createElement(import_ui25.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React32.createElement(StyleControl.Label, null, (0, import_i18n11.__)("Transform", "elementor"))), /* @__PURE__ */ React32.createElement(import_ui25.Grid, { item: true, xs: 6, display: "flex", justifyContent: "end" }, /* @__PURE__ */ React32.createElement(ToggleControl, { options }))));
884
1038
 
885
1039
  // src/components/style-sections/typography-section/text-alignment-control.tsx
886
- var React28 = __toESM(require("react"));
887
- var import_icons5 = require("@elementor/icons");
888
- var import_i18n11 = require("@wordpress/i18n");
1040
+ var React33 = __toESM(require("react"));
1041
+ var import_i18n12 = require("@wordpress/i18n");
1042
+ var import_ui26 = require("@elementor/ui");
1043
+ var import_icons6 = require("@elementor/icons");
889
1044
  var options2 = [
890
1045
  {
891
1046
  value: "left",
892
- label: (0, import_i18n11.__)("Left", "elementor"),
893
- icon: import_icons5.AlignLeftIcon
1047
+ label: (0, import_i18n12.__)("Left", "elementor"),
1048
+ icon: import_icons6.AlignLeftIcon
894
1049
  },
895
1050
  {
896
1051
  value: "center",
897
- label: (0, import_i18n11.__)("Center", "elementor"),
898
- icon: import_icons5.AlignCenterIcon
1052
+ label: (0, import_i18n12.__)("Center", "elementor"),
1053
+ icon: import_icons6.AlignCenterIcon
899
1054
  },
900
1055
  {
901
1056
  value: "right",
902
- label: (0, import_i18n11.__)("Right", "elementor"),
903
- icon: import_icons5.AlignRightIcon
1057
+ label: (0, import_i18n12.__)("Right", "elementor"),
1058
+ icon: import_icons6.AlignRightIcon
904
1059
  },
905
1060
  {
906
1061
  value: "justify",
907
- label: (0, import_i18n11.__)("Justify", "elementor"),
908
- icon: import_icons5.AlignJustifiedIcon
1062
+ label: (0, import_i18n12.__)("Justify", "elementor"),
1063
+ icon: import_icons6.AlignJustifiedIcon
909
1064
  }
910
1065
  ];
911
1066
  var TextAlignmentControl = () => {
912
- return /* @__PURE__ */ React28.createElement(ControlContainer, null, /* @__PURE__ */ React28.createElement(StyleControl.Label, null, (0, import_i18n11.__)("Alignment", "elementor")), /* @__PURE__ */ React28.createElement(StyleControl, { bind: "text-align" }, /* @__PURE__ */ React28.createElement(ToggleControl, { options: options2 })));
1067
+ return /* @__PURE__ */ React33.createElement(StyleControl, { bind: "text-align" }, /* @__PURE__ */ React33.createElement(import_ui26.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React33.createElement(import_ui26.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React33.createElement(StyleControl.Label, null, (0, import_i18n12.__)("Alignment", "elementor"))), /* @__PURE__ */ React33.createElement(import_ui26.Grid, { item: true, xs: 6, display: "flex", justifyContent: "end" }, /* @__PURE__ */ React33.createElement(ToggleControl, { options: options2 }))));
1068
+ };
1069
+
1070
+ // src/components/style-sections/typography-section/text-direction-control.tsx
1071
+ var React34 = __toESM(require("react"));
1072
+ var import_i18n13 = require("@wordpress/i18n");
1073
+ var import_ui27 = require("@elementor/ui");
1074
+ var import_icons7 = require("@elementor/icons");
1075
+ var options3 = [
1076
+ {
1077
+ value: "ltr",
1078
+ label: (0, import_i18n13.__)("Left to Right", "elementor"),
1079
+ icon: import_icons7.TextDirectionLtrIcon
1080
+ },
1081
+ {
1082
+ value: "rtl",
1083
+ label: (0, import_i18n13.__)("Right to Left", "elementor"),
1084
+ icon: import_icons7.TextDirectionRtlIcon
1085
+ }
1086
+ ];
1087
+ var TextDirectionControl = () => {
1088
+ return /* @__PURE__ */ React34.createElement(StyleControl, { bind: "direction" }, /* @__PURE__ */ React34.createElement(import_ui27.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React34.createElement(import_ui27.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React34.createElement(StyleControl.Label, null, (0, import_i18n13.__)("Direction", "elementor"))), /* @__PURE__ */ React34.createElement(import_ui27.Grid, { item: true, xs: 6, display: "flex", justifyContent: "end" }, /* @__PURE__ */ React34.createElement(ToggleControl, { options: options3 }))));
913
1089
  };
914
1090
 
915
1091
  // src/components/style-sections/typography-section/typography-section.tsx
916
1092
  var TypographySection = () => {
917
- return /* @__PURE__ */ React29.createElement(AccordionSection, { title: (0, import_i18n12.__)("Typography", "elementor") }, /* @__PURE__ */ React29.createElement(import_ui16.Stack, { gap: 1.5 }, /* @__PURE__ */ React29.createElement(FontWeightControl, null), /* @__PURE__ */ React29.createElement(FontSizeControl, null), /* @__PURE__ */ React29.createElement(import_ui16.Divider, null), /* @__PURE__ */ React29.createElement(TextColorControl, null), /* @__PURE__ */ React29.createElement(CollapsibleContent, null, /* @__PURE__ */ React29.createElement(import_ui16.Stack, { gap: 1.5, sx: { pt: 1.5 } }, /* @__PURE__ */ React29.createElement(LetterSpacingControl, null), /* @__PURE__ */ React29.createElement(WordSpacingControl, null), /* @__PURE__ */ React29.createElement(import_ui16.Divider, null), /* @__PURE__ */ React29.createElement(TextAlignmentControl, null), /* @__PURE__ */ React29.createElement(TextStyleControl, null), /* @__PURE__ */ React29.createElement(TransformControl, null)))));
1093
+ return /* @__PURE__ */ React35.createElement(AccordionSection, { title: (0, import_i18n14.__)("Typography", "elementor") }, /* @__PURE__ */ React35.createElement(import_ui28.Stack, { gap: 1.5 }, /* @__PURE__ */ React35.createElement(FontWeightControl, null), /* @__PURE__ */ React35.createElement(FontSizeControl, null), /* @__PURE__ */ React35.createElement(import_ui28.Divider, null), /* @__PURE__ */ React35.createElement(TextColorControl, null), /* @__PURE__ */ React35.createElement(CollapsibleContent, null, /* @__PURE__ */ React35.createElement(import_ui28.Stack, { gap: 1.5, sx: { pt: 1.5 } }, /* @__PURE__ */ React35.createElement(LetterSpacingControl, null), /* @__PURE__ */ React35.createElement(WordSpacingControl, null), /* @__PURE__ */ React35.createElement(import_ui28.Divider, null), /* @__PURE__ */ React35.createElement(TextAlignmentControl, null), /* @__PURE__ */ React35.createElement(TextStyleControl, null), /* @__PURE__ */ React35.createElement(TransformControl, null), /* @__PURE__ */ React35.createElement(TextDirectionControl, null)))));
918
1094
  };
919
1095
 
920
1096
  // src/components/style-sections/position-section/position-section.tsx
921
- var React32 = __toESM(require("react"));
922
- var import_ui18 = require("@elementor/ui");
1097
+ var React38 = __toESM(require("react"));
1098
+ var import_ui31 = require("@elementor/ui");
923
1099
 
924
1100
  // src/components/style-sections/position-section/z-index-control.tsx
925
- var React31 = __toESM(require("react"));
926
- var import_i18n13 = require("@wordpress/i18n");
1101
+ var React37 = __toESM(require("react"));
1102
+ var import_i18n15 = require("@wordpress/i18n");
1103
+ var import_ui30 = require("@elementor/ui");
927
1104
 
928
1105
  // src/controls/control-types/number-control.tsx
929
- var React30 = __toESM(require("react"));
930
- var import_ui17 = require("@elementor/ui");
1106
+ var React36 = __toESM(require("react"));
1107
+ var import_ui29 = require("@elementor/ui");
931
1108
  var isEmptyOrNaN = (value) => value === void 0 || value === "" || Number.isNaN(Number(value));
932
- var NumberControl = ({ placeholder }) => {
1109
+ var NumberControl = createControl(({ placeholder }) => {
933
1110
  const { value, setValue } = useControl();
934
1111
  const handleChange = (event) => {
935
1112
  const eventValue = event.target.value;
936
1113
  setValue(isEmptyOrNaN(eventValue) ? void 0 : Number(eventValue));
937
1114
  };
938
- return /* @__PURE__ */ React30.createElement(
939
- import_ui17.TextField,
1115
+ return /* @__PURE__ */ React36.createElement(ControlActions, null, /* @__PURE__ */ React36.createElement(
1116
+ import_ui29.TextField,
940
1117
  {
941
1118
  size: "tiny",
942
1119
  type: "number",
@@ -944,33 +1121,33 @@ var NumberControl = ({ placeholder }) => {
944
1121
  onChange: handleChange,
945
1122
  placeholder
946
1123
  }
947
- );
948
- };
1124
+ ));
1125
+ });
949
1126
 
950
1127
  // src/components/style-sections/position-section/z-index-control.tsx
951
1128
  var ZIndexControl = () => {
952
- return /* @__PURE__ */ React31.createElement(StyleControl, { bind: "zIndex" }, /* @__PURE__ */ React31.createElement(ControlContainer, null, /* @__PURE__ */ React31.createElement(StyleControl.Label, null, (0, import_i18n13.__)("Z-Index", "elementor")), /* @__PURE__ */ React31.createElement(NumberControl, null)));
1129
+ return /* @__PURE__ */ React37.createElement(StyleControl, { bind: "z-index" }, /* @__PURE__ */ React37.createElement(import_ui30.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React37.createElement(import_ui30.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React37.createElement(StyleControl.Label, null, (0, import_i18n15.__)("Z-Index", "elementor"))), /* @__PURE__ */ React37.createElement(import_ui30.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React37.createElement(NumberControl, null))));
953
1130
  };
954
1131
 
955
1132
  // src/components/style-sections/position-section/position-section.tsx
956
- var import_i18n14 = require("@wordpress/i18n");
1133
+ var import_i18n16 = require("@wordpress/i18n");
957
1134
  var PositionSection = () => {
958
- return /* @__PURE__ */ React32.createElement(AccordionSection, { title: (0, import_i18n14.__)("Position", "elementor") }, /* @__PURE__ */ React32.createElement(import_ui18.Stack, { gap: 1.5 }, /* @__PURE__ */ React32.createElement(ZIndexControl, null)));
1135
+ return /* @__PURE__ */ React38.createElement(AccordionSection, { title: (0, import_i18n16.__)("Position", "elementor") }, /* @__PURE__ */ React38.createElement(import_ui31.Stack, { gap: 1.5 }, /* @__PURE__ */ React38.createElement(ZIndexControl, null)));
959
1136
  };
960
1137
 
961
1138
  // src/components/style-sections/spacing-section/spacing-section.tsx
962
- var React34 = __toESM(require("react"));
963
- var import_ui20 = require("@elementor/ui");
964
- var import_i18n16 = require("@wordpress/i18n");
1139
+ var React40 = __toESM(require("react"));
1140
+ var import_ui33 = require("@elementor/ui");
1141
+ var import_i18n18 = require("@wordpress/i18n");
965
1142
 
966
1143
  // src/components/style-sections/spacing-section/linked-dimensions-control.tsx
967
- var React33 = __toESM(require("react"));
968
- var import_ui19 = require("@elementor/ui");
969
- var import_icons6 = require("@elementor/icons");
970
- var import_i18n15 = require("@wordpress/i18n");
1144
+ var React39 = __toESM(require("react"));
1145
+ var import_i18n17 = require("@wordpress/i18n");
1146
+ var import_ui32 = require("@elementor/ui");
1147
+ var import_icons8 = require("@elementor/icons");
971
1148
  var LinkedDimensionsControl = ({ label }) => {
972
1149
  const { value, setValue } = useControl();
973
- const { top, right, bottom, left, isLinked = false } = value?.value || {};
1150
+ const { top, right, bottom, left, isLinked = true } = value?.value || {};
974
1151
  const setLinkedValue = (position, newValue) => {
975
1152
  const updatedValue = {
976
1153
  isLinked,
@@ -998,58 +1175,58 @@ var LinkedDimensionsControl = ({ label }) => {
998
1175
  value: updatedValue
999
1176
  });
1000
1177
  };
1001
- const LinkedIcon = isLinked ? import_icons6.LinkIcon : import_icons6.DetachIcon;
1002
- return /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement(import_ui19.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React33.createElement(ControlLabel, null, label), /* @__PURE__ */ React33.createElement(
1003
- import_ui19.ToggleButton,
1178
+ const LinkedIcon = isLinked ? import_icons8.LinkIcon : import_icons8.DetachIcon;
1179
+ return /* @__PURE__ */ React39.createElement(React39.Fragment, null, /* @__PURE__ */ React39.createElement(import_ui32.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React39.createElement(ControlLabel, null, label), /* @__PURE__ */ React39.createElement(
1180
+ import_ui32.ToggleButton,
1004
1181
  {
1005
- "aria-label": (0, import_i18n15.__)("Link Inputs", "elementor"),
1182
+ "aria-label": (0, import_i18n17.__)("Link Inputs", "elementor"),
1006
1183
  size: "tiny",
1007
1184
  value: "check",
1008
1185
  selected: isLinked,
1009
1186
  sx: { marginLeft: "auto" },
1010
1187
  onChange: toggleLinked
1011
1188
  },
1012
- /* @__PURE__ */ React33.createElement(LinkedIcon, { fontSize: "tiny" })
1013
- )), /* @__PURE__ */ React33.createElement(import_ui19.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React33.createElement(ControlContainer, { direction: "column" }, /* @__PURE__ */ React33.createElement(ControlLabel, null, (0, import_i18n15.__)("Top", "elementor")), /* @__PURE__ */ React33.createElement(
1189
+ /* @__PURE__ */ React39.createElement(LinkedIcon, { fontSize: "tiny" })
1190
+ )), /* @__PURE__ */ React39.createElement(import_ui32.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React39.createElement(import_ui32.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(ControlLabel, null, (0, import_i18n17.__)("Top", "elementor"))), /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(
1014
1191
  Control4,
1015
1192
  {
1016
1193
  bind: "top",
1017
1194
  value: top,
1018
1195
  setValue: setLinkedValue,
1019
- startIcon: /* @__PURE__ */ React33.createElement(import_icons6.SideTopIcon, { fontSize: "tiny" })
1196
+ startIcon: /* @__PURE__ */ React39.createElement(import_icons8.SideTopIcon, { fontSize: "tiny" })
1020
1197
  }
1021
- )), /* @__PURE__ */ React33.createElement(ControlContainer, { direction: "column" }, /* @__PURE__ */ React33.createElement(ControlLabel, null, (0, import_i18n15.__)("Right", "elementor")), /* @__PURE__ */ React33.createElement(
1198
+ ))), /* @__PURE__ */ React39.createElement(import_ui32.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(ControlLabel, null, (0, import_i18n17.__)("Right", "elementor"))), /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(
1022
1199
  Control4,
1023
1200
  {
1024
1201
  bind: "right",
1025
1202
  value: right,
1026
1203
  setValue: setLinkedValue,
1027
- startIcon: /* @__PURE__ */ React33.createElement(import_icons6.SideRightIcon, { fontSize: "tiny" })
1204
+ startIcon: /* @__PURE__ */ React39.createElement(import_icons8.SideRightIcon, { fontSize: "tiny" })
1028
1205
  }
1029
- ))), /* @__PURE__ */ React33.createElement(import_ui19.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React33.createElement(ControlContainer, { direction: "column" }, /* @__PURE__ */ React33.createElement(ControlLabel, null, (0, import_i18n15.__)("Bottom", "elementor")), /* @__PURE__ */ React33.createElement(
1206
+ )))), /* @__PURE__ */ React39.createElement(import_ui32.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React39.createElement(import_ui32.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(ControlLabel, null, (0, import_i18n17.__)("Bottom", "elementor"))), /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(
1030
1207
  Control4,
1031
1208
  {
1032
1209
  bind: "bottom",
1033
1210
  value: bottom,
1034
1211
  setValue: setLinkedValue,
1035
- startIcon: /* @__PURE__ */ React33.createElement(import_icons6.SideBottomIcon, { fontSize: "tiny" })
1212
+ startIcon: /* @__PURE__ */ React39.createElement(import_icons8.SideBottomIcon, { fontSize: "tiny" })
1036
1213
  }
1037
- )), /* @__PURE__ */ React33.createElement(ControlContainer, { direction: "column" }, /* @__PURE__ */ React33.createElement(ControlLabel, null, (0, import_i18n15.__)("Left", "elementor")), /* @__PURE__ */ React33.createElement(
1214
+ ))), /* @__PURE__ */ React39.createElement(import_ui32.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(ControlLabel, null, (0, import_i18n17.__)("Left", "elementor"))), /* @__PURE__ */ React39.createElement(import_ui32.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React39.createElement(
1038
1215
  Control4,
1039
1216
  {
1040
1217
  bind: "left",
1041
1218
  value: left,
1042
1219
  setValue: setLinkedValue,
1043
- startIcon: /* @__PURE__ */ React33.createElement(import_icons6.SideLeftIcon, { fontSize: "tiny" })
1220
+ startIcon: /* @__PURE__ */ React39.createElement(import_icons8.SideLeftIcon, { fontSize: "tiny" })
1044
1221
  }
1045
- ))));
1222
+ )))));
1046
1223
  };
1047
1224
  var Control4 = ({
1048
1225
  bind,
1049
1226
  startIcon,
1050
1227
  value,
1051
1228
  setValue
1052
- }) => /* @__PURE__ */ React33.createElement(
1229
+ }) => /* @__PURE__ */ React39.createElement(
1053
1230
  ControlContext.Provider,
1054
1231
  {
1055
1232
  value: {
@@ -1058,12 +1235,332 @@ var Control4 = ({
1058
1235
  value
1059
1236
  }
1060
1237
  },
1061
- /* @__PURE__ */ React33.createElement(SizeControl, { startIcon })
1238
+ /* @__PURE__ */ React39.createElement(SizeControl, { startIcon })
1062
1239
  );
1063
1240
 
1064
1241
  // src/components/style-sections/spacing-section/spacing-section.tsx
1065
1242
  var SpacingSection = () => {
1066
- return /* @__PURE__ */ React34.createElement(AccordionSection, { title: (0, import_i18n16.__)("Spacing", "elementor") }, /* @__PURE__ */ React34.createElement(import_ui20.Stack, { gap: 1.5 }, /* @__PURE__ */ React34.createElement(StyleControl, { bind: "padding" }, /* @__PURE__ */ React34.createElement(LinkedDimensionsControl, { label: (0, import_i18n16.__)("Padding", "elementor") })), /* @__PURE__ */ React34.createElement(import_ui20.Divider, null), /* @__PURE__ */ React34.createElement(StyleControl, { bind: "margin" }, /* @__PURE__ */ React34.createElement(LinkedDimensionsControl, { label: (0, import_i18n16.__)("Margin", "elementor") }))));
1243
+ return /* @__PURE__ */ React40.createElement(AccordionSection, { title: (0, import_i18n18.__)("Spacing", "elementor") }, /* @__PURE__ */ React40.createElement(import_ui33.Stack, { gap: 1.5 }, /* @__PURE__ */ React40.createElement(StyleControl, { bind: "padding" }, /* @__PURE__ */ React40.createElement(LinkedDimensionsControl, { label: (0, import_i18n18.__)("Padding", "elementor") })), /* @__PURE__ */ React40.createElement(import_ui33.Divider, null), /* @__PURE__ */ React40.createElement(StyleControl, { bind: "margin" }, /* @__PURE__ */ React40.createElement(LinkedDimensionsControl, { label: (0, import_i18n18.__)("Margin", "elementor") }))));
1244
+ };
1245
+
1246
+ // src/components/style-sections/effects-section/effects-section.tsx
1247
+ var React43 = __toESM(require("react"));
1248
+ var import_i18n21 = require("@wordpress/i18n");
1249
+ var import_ui36 = require("@elementor/ui");
1250
+
1251
+ // src/components/style-sections/effects-section/box-shadow-repeater.tsx
1252
+ var React42 = __toESM(require("react"));
1253
+ var import_i18n20 = require("@wordpress/i18n");
1254
+ var import_ui35 = require("@elementor/ui");
1255
+
1256
+ // src/controls/components/repeater.tsx
1257
+ var React41 = __toESM(require("react"));
1258
+ var import_react10 = require("react");
1259
+ var import_i18n19 = require("@wordpress/i18n");
1260
+ var import_icons9 = require("@elementor/icons");
1261
+ var import_ui34 = require("@elementor/ui");
1262
+ var SIZE2 = "tiny";
1263
+ var Repeater = ({
1264
+ label,
1265
+ itemSettings,
1266
+ values: repeaterValues = [],
1267
+ setValues: setRepeaterValues
1268
+ }) => {
1269
+ const addRepeaterItem = () => {
1270
+ const newItem = structuredClone(itemSettings.initialValues);
1271
+ setRepeaterValues([...repeaterValues, newItem]);
1272
+ };
1273
+ const duplicateRepeaterItem = (index) => {
1274
+ setRepeaterValues([
1275
+ ...repeaterValues.slice(0, index),
1276
+ structuredClone(repeaterValues[index]),
1277
+ ...repeaterValues.slice(index)
1278
+ ]);
1279
+ };
1280
+ const removeRepeaterItem = (index) => {
1281
+ setRepeaterValues(repeaterValues.filter((_, i) => i !== index));
1282
+ };
1283
+ const toggleDisableRepeaterItem = (index) => {
1284
+ setRepeaterValues(
1285
+ repeaterValues.map((value, i) => {
1286
+ if (i === index) {
1287
+ const { disabled, ...rest } = value;
1288
+ return { ...rest, ...disabled ? {} : { disabled: true } };
1289
+ }
1290
+ return value;
1291
+ })
1292
+ );
1293
+ };
1294
+ return /* @__PURE__ */ React41.createElement(import_ui34.Stack, null, /* @__PURE__ */ React41.createElement(import_ui34.Stack, { direction: "row", justifyContent: "space-between", sx: { py: 0.5 } }, /* @__PURE__ */ React41.createElement(import_ui34.Typography, { component: "label", variant: "caption", color: "text.secondary" }, label), /* @__PURE__ */ React41.createElement(import_ui34.IconButton, { size: SIZE2, onClick: addRepeaterItem, "aria-label": (0, import_i18n19.__)("Add item", "elementor") }, /* @__PURE__ */ React41.createElement(import_icons9.PlusIcon, { fontSize: SIZE2 }))), /* @__PURE__ */ React41.createElement(import_ui34.Stack, { gap: 1 }, repeaterValues.map((value, index) => /* @__PURE__ */ React41.createElement(
1295
+ RepeaterItem,
1296
+ {
1297
+ key: index,
1298
+ disabled: value.disabled,
1299
+ label: /* @__PURE__ */ React41.createElement(itemSettings.Label, { value }),
1300
+ startIcon: /* @__PURE__ */ React41.createElement(itemSettings.Icon, { value }),
1301
+ removeItem: () => removeRepeaterItem(index),
1302
+ duplicateItem: () => duplicateRepeaterItem(index),
1303
+ toggleDisableItem: () => toggleDisableRepeaterItem(index)
1304
+ },
1305
+ (props) => /* @__PURE__ */ React41.createElement(
1306
+ itemSettings.Content,
1307
+ {
1308
+ ...props,
1309
+ value,
1310
+ setValue: (newValue) => setRepeaterValues(
1311
+ repeaterValues.map((item, i) => i === index ? newValue : item)
1312
+ )
1313
+ }
1314
+ )
1315
+ ))));
1316
+ };
1317
+ var RepeaterItem = ({
1318
+ label,
1319
+ disabled,
1320
+ startIcon,
1321
+ children,
1322
+ removeItem,
1323
+ duplicateItem,
1324
+ toggleDisableItem
1325
+ }) => {
1326
+ const popupId = (0, import_react10.useId)();
1327
+ const tagRef = (0, import_react10.useRef)(null);
1328
+ const [anchorEl, setAnchorEl] = (0, import_react10.useState)(null);
1329
+ const popoverState = (0, import_ui34.usePopupState)({ popupId, variant: "popover" });
1330
+ const popoverProps = (0, import_ui34.bindPopover)(popoverState);
1331
+ return /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement(
1332
+ import_ui34.UnstableTag,
1333
+ {
1334
+ ref: tagRef,
1335
+ label,
1336
+ showActionsOnHover: true,
1337
+ variant: "outlined",
1338
+ "aria-label": (0, import_i18n19.__)("Open item", "elementor"),
1339
+ ...(0, import_ui34.bindTrigger)(popoverState),
1340
+ startIcon,
1341
+ actions: /* @__PURE__ */ React41.createElement(React41.Fragment, null, /* @__PURE__ */ React41.createElement(
1342
+ import_ui34.IconButton,
1343
+ {
1344
+ size: SIZE2,
1345
+ onClick: duplicateItem,
1346
+ "aria-label": (0, import_i18n19.__)("Duplicate item", "elementor")
1347
+ },
1348
+ /* @__PURE__ */ React41.createElement(import_icons9.CopyIcon, { fontSize: SIZE2 })
1349
+ ), /* @__PURE__ */ React41.createElement(
1350
+ import_ui34.IconButton,
1351
+ {
1352
+ size: SIZE2,
1353
+ onClick: toggleDisableItem,
1354
+ "aria-label": disabled ? (0, import_i18n19.__)("Enable item", "elementor") : (0, import_i18n19.__)("Disable item", "elementor")
1355
+ },
1356
+ disabled ? /* @__PURE__ */ React41.createElement(import_icons9.EyeOffIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React41.createElement(import_icons9.EyeIcon, { fontSize: SIZE2 })
1357
+ ), /* @__PURE__ */ React41.createElement(
1358
+ import_ui34.IconButton,
1359
+ {
1360
+ size: SIZE2,
1361
+ onClick: removeItem,
1362
+ "aria-label": (0, import_i18n19.__)("Remove item", "elementor")
1363
+ },
1364
+ /* @__PURE__ */ React41.createElement(import_icons9.XIcon, { fontSize: SIZE2 })
1365
+ ))
1366
+ }
1367
+ ), /* @__PURE__ */ React41.createElement(
1368
+ import_ui34.Popover,
1369
+ {
1370
+ disablePortal: true,
1371
+ slotProps: {
1372
+ paper: { ref: setAnchorEl, sx: { width: tagRef.current?.getBoundingClientRect().width } }
1373
+ },
1374
+ anchorOrigin: { vertical: "bottom", horizontal: "left" },
1375
+ ...popoverProps
1376
+ },
1377
+ /* @__PURE__ */ React41.createElement(import_ui34.Box, { p: 2 }, children({ anchorEl }))
1378
+ ));
1379
+ };
1380
+
1381
+ // src/components/style-sections/effects-section/box-shadow-repeater.tsx
1382
+ var BoxShadowRepeater = () => {
1383
+ const { value, setValue } = useControl();
1384
+ const boxShadowValues = value?.value;
1385
+ const setBoxShadow = (newValue) => {
1386
+ setValue({
1387
+ $$type: "box-shadow",
1388
+ value: newValue
1389
+ });
1390
+ };
1391
+ return /* @__PURE__ */ React42.createElement(
1392
+ Repeater,
1393
+ {
1394
+ values: boxShadowValues,
1395
+ setValues: setBoxShadow,
1396
+ label: (0, import_i18n20.__)("Box shadow", "elementor"),
1397
+ itemSettings: {
1398
+ Icon: ItemIcon,
1399
+ Label: ItemLabel,
1400
+ Content: ItemContent,
1401
+ initialValues: initialShadow
1402
+ }
1403
+ }
1404
+ );
1405
+ };
1406
+ var ItemIcon = ({ value }) => /* @__PURE__ */ React42.createElement(import_ui35.UnstableColorIndicator, { size: "inherit", component: "span", value: value.value.color.value });
1407
+ var ItemContent = ({
1408
+ anchorEl,
1409
+ value,
1410
+ setValue
1411
+ }) => {
1412
+ const setShadow = (newValue) => {
1413
+ setValue({
1414
+ $$type: "shadow",
1415
+ value: newValue
1416
+ });
1417
+ };
1418
+ return /* @__PURE__ */ React42.createElement(import_ui35.Stack, { gap: 1.5 }, /* @__PURE__ */ React42.createElement(import_ui35.Grid, { container: true, spacing: 1 }, /* @__PURE__ */ React42.createElement(
1419
+ Control5,
1420
+ {
1421
+ bind: "color",
1422
+ value: value.value.color,
1423
+ label: (0, import_i18n20.__)("Color", "elementor"),
1424
+ setValue: (v) => setShadow({ ...value.value, color: v })
1425
+ },
1426
+ /* @__PURE__ */ React42.createElement(
1427
+ ColorControl,
1428
+ {
1429
+ anchorEl,
1430
+ anchorOrigin: {
1431
+ vertical: "top",
1432
+ horizontal: "right"
1433
+ },
1434
+ transformOrigin: {
1435
+ vertical: "top",
1436
+ horizontal: -10
1437
+ }
1438
+ }
1439
+ )
1440
+ ), /* @__PURE__ */ React42.createElement(
1441
+ Control5,
1442
+ {
1443
+ bind: "position",
1444
+ value: value.value.position,
1445
+ label: (0, import_i18n20.__)("Position", "elementor"),
1446
+ setValue: (v) => setShadow({ ...value.value, position: v })
1447
+ },
1448
+ /* @__PURE__ */ React42.createElement(
1449
+ SelectControl,
1450
+ {
1451
+ options: [
1452
+ { label: "Inset", value: "inset" },
1453
+ { label: "Outset", value: "outset" }
1454
+ ]
1455
+ }
1456
+ )
1457
+ )), /* @__PURE__ */ React42.createElement(import_ui35.Grid, { container: true, spacing: 1 }, /* @__PURE__ */ React42.createElement(
1458
+ Control5,
1459
+ {
1460
+ bind: "hOffset",
1461
+ label: (0, import_i18n20.__)("Horizontal", "elementor"),
1462
+ value: value.value.hOffset,
1463
+ setValue: (v) => setShadow({ ...value.value, hOffset: v })
1464
+ },
1465
+ /* @__PURE__ */ React42.createElement(SizeControl, null)
1466
+ ), /* @__PURE__ */ React42.createElement(
1467
+ Control5,
1468
+ {
1469
+ label: (0, import_i18n20.__)("Vertical", "elementor"),
1470
+ bind: "vOffset",
1471
+ value: value.value.vOffset,
1472
+ setValue: (v) => setShadow({ ...value.value, vOffset: v })
1473
+ },
1474
+ /* @__PURE__ */ React42.createElement(SizeControl, null)
1475
+ )), /* @__PURE__ */ React42.createElement(import_ui35.Grid, { container: true, spacing: 1 }, /* @__PURE__ */ React42.createElement(
1476
+ Control5,
1477
+ {
1478
+ bind: "blur",
1479
+ value: value.value.blur,
1480
+ label: (0, import_i18n20.__)("Blur", "elementor"),
1481
+ setValue: (v) => setShadow({ ...value.value, blur: v })
1482
+ },
1483
+ /* @__PURE__ */ React42.createElement(SizeControl, null)
1484
+ ), /* @__PURE__ */ React42.createElement(
1485
+ Control5,
1486
+ {
1487
+ bind: "spread",
1488
+ label: (0, import_i18n20.__)("Spread", "elementor"),
1489
+ value: value.value.spread,
1490
+ setValue: (v) => setShadow({ ...value.value, spread: v })
1491
+ },
1492
+ /* @__PURE__ */ React42.createElement(SizeControl, null)
1493
+ )));
1494
+ };
1495
+ var Control5 = ({
1496
+ value,
1497
+ setValue,
1498
+ label,
1499
+ bind,
1500
+ children
1501
+ }) => /* @__PURE__ */ React42.createElement(ControlContext.Provider, { value: { value, setValue, bind } }, /* @__PURE__ */ React42.createElement(import_ui35.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React42.createElement(import_ui35.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React42.createElement(import_ui35.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React42.createElement(ControlLabel, null, label)), /* @__PURE__ */ React42.createElement(import_ui35.Grid, { item: true, xs: 12 }, children))));
1502
+ var ItemLabel = ({ value }) => {
1503
+ const { position, hOffset, vOffset, blur, spread } = value.value;
1504
+ const { size: hOffsetSize, unit: hOffsetUnit } = hOffset.value;
1505
+ const { size: vOffsetSize, unit: vOffsetUnit } = vOffset.value;
1506
+ const { size: blurSize, unit: blurUnit } = blur.value;
1507
+ const { size: spreadSize, unit: spreadUnit } = spread.value;
1508
+ const sizes = [
1509
+ hOffsetSize + hOffsetUnit,
1510
+ vOffsetSize + vOffsetUnit,
1511
+ blurSize + blurUnit,
1512
+ spreadSize + spreadUnit
1513
+ ].join(" ");
1514
+ return /* @__PURE__ */ React42.createElement("span", { style: { textTransform: "capitalize" } }, position, ": ", sizes);
1515
+ };
1516
+ var initialShadow = {
1517
+ $$type: "shadow",
1518
+ value: {
1519
+ hOffset: {
1520
+ $$type: "size",
1521
+ value: { unit: "px", size: 0 }
1522
+ },
1523
+ vOffset: {
1524
+ $$type: "size",
1525
+ value: { unit: "px", size: 0 }
1526
+ },
1527
+ blur: {
1528
+ $$type: "size",
1529
+ value: { unit: "px", size: 0 }
1530
+ },
1531
+ spread: {
1532
+ $$type: "size",
1533
+ value: { unit: "px", size: 0 }
1534
+ },
1535
+ color: {
1536
+ $$type: "color",
1537
+ value: "rgba(0, 0, 0, 0)"
1538
+ },
1539
+ position: "inset"
1540
+ }
1541
+ };
1542
+
1543
+ // src/components/style-sections/effects-section/effects-section.tsx
1544
+ var EffectsSection = () => {
1545
+ return /* @__PURE__ */ React43.createElement(AccordionSection, { title: (0, import_i18n21.__)("Effects", "elementor") }, /* @__PURE__ */ React43.createElement(import_ui36.Stack, { gap: 1.5 }, /* @__PURE__ */ React43.createElement(StyleControl, { bind: "box-shadow" }, /* @__PURE__ */ React43.createElement(BoxShadowRepeater, null))));
1546
+ };
1547
+
1548
+ // src/components/style-sections/background-section/background-section.tsx
1549
+ var React45 = __toESM(require("react"));
1550
+ var import_i18n23 = require("@wordpress/i18n");
1551
+ var import_ui38 = require("@elementor/ui");
1552
+
1553
+ // src/components/style-sections/background-section/background-color-control.tsx
1554
+ var React44 = __toESM(require("react"));
1555
+ var import_i18n22 = require("@wordpress/i18n");
1556
+ var import_ui37 = require("@elementor/ui");
1557
+ var BackgroundColorControl = () => {
1558
+ return /* @__PURE__ */ React44.createElement(StyleControl, { bind: "background-color" }, /* @__PURE__ */ React44.createElement(import_ui37.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React44.createElement(import_ui37.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React44.createElement(StyleControl.Label, null, (0, import_i18n22.__)("Color", "elementor"))), /* @__PURE__ */ React44.createElement(import_ui37.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React44.createElement(ColorControl, null))));
1559
+ };
1560
+
1561
+ // src/components/style-sections/background-section/background-section.tsx
1562
+ var BackgroundSection = () => {
1563
+ return /* @__PURE__ */ React45.createElement(AccordionSection, { title: (0, import_i18n23.__)("Background", "elementor") }, /* @__PURE__ */ React45.createElement(import_ui38.Stack, { gap: 1.5 }, /* @__PURE__ */ React45.createElement(BackgroundColorControl, null)));
1067
1564
  };
1068
1565
 
1069
1566
  // src/components/style-tab.tsx
@@ -1071,28 +1568,40 @@ var CLASSES_PROP_KEY = "classes";
1071
1568
  var StyleTab = () => {
1072
1569
  const styleDefinition = useStyleDefinition();
1073
1570
  const classesProp = useClassesProp();
1074
- return /* @__PURE__ */ React35.createElement(StyleContext, { selectedStyleDef: styleDefinition, selectedClassesProp: classesProp }, /* @__PURE__ */ React35.createElement(import_ui21.Stack, null, /* @__PURE__ */ React35.createElement(SizeSection, null), /* @__PURE__ */ React35.createElement(PositionSection, null), /* @__PURE__ */ React35.createElement(TypographySection, null), /* @__PURE__ */ React35.createElement(SpacingSection, null)));
1571
+ return /* @__PURE__ */ React46.createElement(StyleContext, { selectedStyleDef: styleDefinition, selectedClassesProp: classesProp }, /* @__PURE__ */ React46.createElement(import_ui39.Stack, null, /* @__PURE__ */ React46.createElement(SizeSection, null), /* @__PURE__ */ React46.createElement(PositionSection, null), /* @__PURE__ */ React46.createElement(TypographySection, null), /* @__PURE__ */ React46.createElement(BackgroundSection, null), /* @__PURE__ */ React46.createElement(SpacingSection, null), /* @__PURE__ */ React46.createElement(EffectsSection, null)));
1075
1572
  };
1076
1573
  function useClassesProp() {
1077
- const { elementType } = useElementContext();
1078
- const prop = Object.entries(elementType.propsSchema).find(([, { type }]) => type.key === CLASSES_PROP_KEY);
1574
+ const { elementType } = useElement();
1575
+ const prop = Object.entries(elementType.propsSchema).find(
1576
+ ([, propType]) => propType.kind === "array" && propType.key === CLASSES_PROP_KEY
1577
+ );
1079
1578
  if (!prop) {
1080
1579
  throw new Error("Element does not have a classes prop");
1081
1580
  }
1082
1581
  return prop[0];
1083
1582
  }
1084
1583
  function useStyleDefinition() {
1085
- const { element } = useElementContext();
1584
+ const { element } = useElement();
1086
1585
  const elementStyles = useElementStyles(element.id);
1087
1586
  return Object.values(elementStyles || {})[0] ?? null;
1088
1587
  }
1089
1588
 
1090
1589
  // src/components/editing-panel-tabs.tsx
1091
1590
  var EditingPanelTabs = () => {
1092
- const { getTabProps, getTabPanelProps, getTabsProps } = (0, import_ui22.useTabs)("settings");
1093
- return /* @__PURE__ */ React36.createElement(import_ui22.Stack, { direction: "column", sx: { width: "100%" } }, /* @__PURE__ */ React36.createElement(import_ui22.Tabs, { variant: "fullWidth", indicatorColor: "secondary", textColor: "inherit", ...getTabsProps() }, /* @__PURE__ */ React36.createElement(import_ui22.Tab, { label: (0, import_i18n17.__)("General", "elementor"), ...getTabProps("settings") }), /* @__PURE__ */ React36.createElement(import_ui22.Tab, { label: (0, import_i18n17.__)("Style", "elementor"), ...getTabProps("style") })), /* @__PURE__ */ React36.createElement(import_ui22.TabPanel, { ...getTabPanelProps("settings"), disablePadding: true }, /* @__PURE__ */ React36.createElement(SettingsTab, null)), /* @__PURE__ */ React36.createElement(import_ui22.TabPanel, { ...getTabPanelProps("style"), disablePadding: true }, /* @__PURE__ */ React36.createElement(StyleTab, null)));
1591
+ const { getTabProps, getTabPanelProps, getTabsProps } = (0, import_ui40.useTabs)("settings");
1592
+ return /* @__PURE__ */ React47.createElement(import_ui40.Stack, { direction: "column", sx: { width: "100%" } }, /* @__PURE__ */ React47.createElement(import_ui40.Tabs, { variant: "fullWidth", indicatorColor: "secondary", textColor: "inherit", ...getTabsProps() }, /* @__PURE__ */ React47.createElement(import_ui40.Tab, { label: (0, import_i18n24.__)("General", "elementor"), ...getTabProps("settings") }), /* @__PURE__ */ React47.createElement(import_ui40.Tab, { label: (0, import_i18n24.__)("Style", "elementor"), ...getTabProps("style") })), /* @__PURE__ */ React47.createElement(import_ui40.TabPanel, { ...getTabPanelProps("settings"), disablePadding: true }, /* @__PURE__ */ React47.createElement(SettingsTab, null)), /* @__PURE__ */ React47.createElement(import_ui40.TabPanel, { ...getTabPanelProps("style"), disablePadding: true }, /* @__PURE__ */ React47.createElement(StyleTab, null)));
1094
1593
  };
1095
1594
 
1595
+ // src/components/editing-panel.tsx
1596
+ var import_ui42 = require("@elementor/ui");
1597
+
1598
+ // src/components/editing-panel-error-fallback.tsx
1599
+ var React48 = __toESM(require("react"));
1600
+ var import_ui41 = require("@elementor/ui");
1601
+ function EditorPanelErrorFallback() {
1602
+ return /* @__PURE__ */ React48.createElement(import_ui41.Box, { role: "alert", sx: { minHeight: "100%", p: 2 } }, /* @__PURE__ */ React48.createElement(import_ui41.Alert, { severity: "error", sx: { mb: 2, maxWidth: 400, textAlign: "center" } }, /* @__PURE__ */ React48.createElement("strong", null, "Something went wrong")));
1603
+ }
1604
+
1096
1605
  // src/components/editing-panel.tsx
1097
1606
  var EditingPanel = () => {
1098
1607
  const elements = useSelectedElements();
@@ -1101,8 +1610,9 @@ var EditingPanel = () => {
1101
1610
  if (elements.length !== 1 || !elementType) {
1102
1611
  return null;
1103
1612
  }
1104
- const panelTitle = (0, import_i18n18.__)("Edit %s", "elementor").replace("%s", elementType.title);
1105
- return /* @__PURE__ */ React37.createElement(import_editor_panels.Panel, null, /* @__PURE__ */ React37.createElement(import_editor_panels.PanelHeader, null, /* @__PURE__ */ React37.createElement(import_editor_panels.PanelHeaderTitle, null, panelTitle)), /* @__PURE__ */ React37.createElement(import_editor_panels.PanelBody, null, /* @__PURE__ */ React37.createElement(ElementContext, { element: selectedElement, elementType }, /* @__PURE__ */ React37.createElement(EditingPanelTabs, null))));
1613
+ const controlReplacement = getControlReplacement();
1614
+ const panelTitle = (0, import_i18n25.__)("Edit %s", "elementor").replace("%s", elementType.title);
1615
+ return /* @__PURE__ */ React49.createElement(import_ui42.ErrorBoundary, { fallback: /* @__PURE__ */ React49.createElement(EditorPanelErrorFallback, null) }, /* @__PURE__ */ React49.createElement(import_editor_panels.Panel, null, /* @__PURE__ */ React49.createElement(import_editor_panels.PanelHeader, null, /* @__PURE__ */ React49.createElement(import_editor_panels.PanelHeaderTitle, null, panelTitle)), /* @__PURE__ */ React49.createElement(import_editor_panels.PanelBody, null, /* @__PURE__ */ React49.createElement(ControlReplacementProvider, { ...controlReplacement }, /* @__PURE__ */ React49.createElement(ElementProvider, { element: selectedElement, elementType }, /* @__PURE__ */ React49.createElement(EditingPanelTabs, null))))));
1106
1616
  };
1107
1617
 
1108
1618
  // src/panel.ts
@@ -1125,11 +1635,11 @@ var shouldUseV2Panel = () => {
1125
1635
  };
1126
1636
 
1127
1637
  // src/hooks/use-open-editor-panel.ts
1128
- var import_react8 = require("react");
1638
+ var import_react11 = require("react");
1129
1639
  var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
1130
1640
  var useOpenEditorPanel = () => {
1131
1641
  const { open } = usePanelActions();
1132
- (0, import_react8.useEffect)(() => {
1642
+ (0, import_react11.useEffect)(() => {
1133
1643
  return (0, import_editor_v1_adapters8.__privateListenTo)((0, import_editor_v1_adapters8.commandStartEvent)("panel/editor/open"), () => {
1134
1644
  if (shouldUseV2Panel()) {
1135
1645
  open();
@@ -1149,14 +1659,17 @@ var import_editor_panels3 = require("@elementor/editor-panels");
1149
1659
  var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
1150
1660
 
1151
1661
  // src/dynamics/components/dynamic-selection-control.tsx
1152
- var React40 = __toESM(require("react"));
1153
- var import_react12 = require("react");
1662
+ var React52 = __toESM(require("react"));
1663
+ var import_react15 = require("react");
1154
1664
 
1155
1665
  // src/dynamics/dynamic-control.tsx
1156
- var React38 = __toESM(require("react"));
1666
+ var React50 = __toESM(require("react"));
1667
+
1668
+ // src/dynamics/hooks/use-dynamic-tag.ts
1669
+ var import_react13 = require("react");
1157
1670
 
1158
1671
  // src/dynamics/hooks/use-prop-dynamic-tags.ts
1159
- var import_react9 = require("react");
1672
+ var import_react12 = require("react");
1160
1673
 
1161
1674
  // src/dynamics/sync/get-elementor-config.ts
1162
1675
  var getElementorConfig = () => {
@@ -1176,7 +1689,7 @@ var getAtomicDynamicTags = () => {
1176
1689
  };
1177
1690
  };
1178
1691
 
1179
- // src/props/is-transformable.ts
1692
+ // src/controls/props/is-transformable.ts
1180
1693
  var import_schema = require("@elementor/schema");
1181
1694
  var transformableSchema = import_schema.z.object({
1182
1695
  $$type: import_schema.z.string(),
@@ -1187,21 +1700,29 @@ var isTransformable = (value) => {
1187
1700
  };
1188
1701
 
1189
1702
  // src/dynamics/utils.ts
1190
- var isDynamicType = (prop) => prop.key === "dynamic";
1703
+ var DYNAMIC_PROP_TYPE_KEY = "dynamic";
1704
+ var isDynamicPropType = (prop) => prop.key === DYNAMIC_PROP_TYPE_KEY;
1705
+ var getDynamicPropType = (propType) => {
1706
+ const dynamicPropType = propType.kind === "union" && propType.prop_types[DYNAMIC_PROP_TYPE_KEY];
1707
+ return dynamicPropType && isDynamicPropType(dynamicPropType) ? dynamicPropType : null;
1708
+ };
1191
1709
  var isDynamicPropValue = (prop) => {
1192
- return isTransformable(prop) && prop.$$type === "dynamic";
1710
+ return isTransformable(prop) && prop.$$type === DYNAMIC_PROP_TYPE_KEY;
1711
+ };
1712
+ var supportsDynamic = (propType) => {
1713
+ return !!getDynamicPropType(propType);
1193
1714
  };
1194
1715
 
1195
1716
  // src/dynamics/hooks/use-prop-dynamic-tags.ts
1196
1717
  var usePropDynamicTags = (propName) => {
1197
1718
  let categories = [];
1198
- const { elementType } = useElementContext();
1199
- const propSchema = elementType.propsSchema?.[propName];
1200
- if (propSchema) {
1201
- const propDynamicType = propSchema.additional_types.find(isDynamicType);
1719
+ const { elementType } = useElement();
1720
+ const propType = elementType.propsSchema?.[propName];
1721
+ if (propType) {
1722
+ const propDynamicType = getDynamicPropType(propType);
1202
1723
  categories = propDynamicType?.settings.categories || [];
1203
1724
  }
1204
- return (0, import_react9.useMemo)(() => getDynamicTagsByCategories(categories), [categories.join()]);
1725
+ return (0, import_react12.useMemo)(() => getDynamicTagsByCategories(categories), [categories.join()]);
1205
1726
  };
1206
1727
  var getDynamicTagsByCategories = (categories) => {
1207
1728
  const dynamicTags = getAtomicDynamicTags();
@@ -1215,10 +1736,9 @@ var getDynamicTagsByCategories = (categories) => {
1215
1736
  };
1216
1737
 
1217
1738
  // src/dynamics/hooks/use-dynamic-tag.ts
1218
- var import_react10 = require("react");
1219
1739
  var useDynamicTag = (propName, tagName) => {
1220
1740
  const dynamicTags = usePropDynamicTags(propName);
1221
- return (0, import_react10.useMemo)(() => dynamicTags.find((tag) => tag.name === tagName) ?? null, [dynamicTags, tagName]);
1741
+ return (0, import_react13.useMemo)(() => dynamicTags.find((tag) => tag.name === tagName) ?? null, [dynamicTags, tagName]);
1222
1742
  };
1223
1743
 
1224
1744
  // src/dynamics/dynamic-control.tsx
@@ -1229,7 +1749,7 @@ var DynamicControl = ({ bind, children }) => {
1229
1749
  if (!dynamicTag) {
1230
1750
  throw new Error(`Dynamic tag ${name} not found`);
1231
1751
  }
1232
- const defaultValue = dynamicTag.props_schema[bind]?.type.default;
1752
+ const defaultValue = dynamicTag.props_schema[bind]?.default;
1233
1753
  const dynamicValue = settings?.[bind] ?? defaultValue;
1234
1754
  const setDynamicValue = (newValue) => {
1235
1755
  setValue({
@@ -1243,24 +1763,24 @@ var DynamicControl = ({ bind, children }) => {
1243
1763
  }
1244
1764
  });
1245
1765
  };
1246
- return /* @__PURE__ */ React38.createElement(ControlContext.Provider, { value: { setValue: setDynamicValue, value: dynamicValue, bind } }, children);
1766
+ return /* @__PURE__ */ React50.createElement(ControlContext.Provider, { value: { setValue: setDynamicValue, value: dynamicValue, bind } }, children);
1247
1767
  };
1248
1768
 
1249
1769
  // src/dynamics/components/dynamic-selection-control.tsx
1250
- var import_icons8 = require("@elementor/icons");
1770
+ var import_icons11 = require("@elementor/icons");
1251
1771
 
1252
1772
  // src/dynamics/components/dynamic-selection.tsx
1253
- var React39 = __toESM(require("react"));
1254
- var import_react11 = require("react");
1255
- var import_icons7 = require("@elementor/icons");
1256
- var import_ui23 = require("@elementor/ui");
1257
- var import_i18n19 = require("@wordpress/i18n");
1773
+ var React51 = __toESM(require("react"));
1774
+ var import_react14 = require("react");
1775
+ var import_icons10 = require("@elementor/icons");
1776
+ var import_ui43 = require("@elementor/ui");
1777
+ var import_i18n26 = require("@wordpress/i18n");
1258
1778
 
1259
1779
  // src/dynamics/hooks/use-prop-value-history.ts
1260
1780
  var PROPS_VALUES_HISTORY_KEY = "elementor/dynamic/non-dynamic-values-history";
1261
1781
  var usePropValueHistory = (path) => {
1262
1782
  const valuesHistory = getValues();
1263
- const { element } = useElementContext();
1783
+ const { element } = useElement();
1264
1784
  const key = `${element.id}-${path}`;
1265
1785
  const value = valuesHistory[key] ?? null;
1266
1786
  const setValue = (newValue) => {
@@ -1276,14 +1796,14 @@ var setValues = (values) => {
1276
1796
  };
1277
1797
 
1278
1798
  // src/dynamics/components/dynamic-selection.tsx
1279
- var SIZE = "tiny";
1799
+ var SIZE3 = "tiny";
1280
1800
  var DynamicSelection = ({ onSelect }) => {
1281
- const [searchValue, setSearchValue] = (0, import_react11.useState)("");
1801
+ const [searchValue, setSearchValue] = (0, import_react14.useState)("");
1282
1802
  const { groups: dynamicGroups } = getAtomicDynamicTags() || {};
1283
1803
  const { bind, value: currentValue, setValue } = useControl();
1284
1804
  const [, updatePropValueHistory] = usePropValueHistory(bind);
1285
1805
  const isCurrentValueDynamic = isDynamicPropValue(currentValue);
1286
- const options3 = useFilteredOptions(bind, searchValue);
1806
+ const options4 = useFilteredOptions(bind, searchValue);
1287
1807
  const handleSearch = (event) => {
1288
1808
  setSearchValue(event.target.value);
1289
1809
  };
@@ -1291,25 +1811,25 @@ var DynamicSelection = ({ onSelect }) => {
1291
1811
  if (!isCurrentValueDynamic) {
1292
1812
  updatePropValueHistory(currentValue);
1293
1813
  }
1294
- setValue({ $$type: "dynamic", value: { name: value } });
1814
+ setValue({ $$type: "dynamic", value: { name: value, settings: {} } });
1295
1815
  onSelect?.();
1296
1816
  };
1297
- return /* @__PURE__ */ React39.createElement(import_ui23.Stack, null, /* @__PURE__ */ React39.createElement(import_ui23.Box, { px: 1.5, pb: 1 }, /* @__PURE__ */ React39.createElement(
1298
- import_ui23.TextField,
1817
+ return /* @__PURE__ */ React51.createElement(import_ui43.Stack, null, /* @__PURE__ */ React51.createElement(import_ui43.Box, { px: 1.5, pb: 1 }, /* @__PURE__ */ React51.createElement(
1818
+ import_ui43.TextField,
1299
1819
  {
1300
1820
  fullWidth: true,
1301
- size: SIZE,
1821
+ size: SIZE3,
1302
1822
  value: searchValue,
1303
1823
  onChange: handleSearch,
1304
- placeholder: (0, import_i18n19.__)("Search dynamic tag", "elementor"),
1824
+ placeholder: (0, import_i18n26.__)("Search dynamic tag", "elementor"),
1305
1825
  InputProps: {
1306
- startAdornment: /* @__PURE__ */ React39.createElement(import_ui23.InputAdornment, { position: "start" }, /* @__PURE__ */ React39.createElement(import_icons7.SearchIcon, { fontSize: SIZE }))
1826
+ startAdornment: /* @__PURE__ */ React51.createElement(import_ui43.InputAdornment, { position: "start" }, /* @__PURE__ */ React51.createElement(import_icons10.SearchIcon, { fontSize: SIZE3 }))
1307
1827
  }
1308
1828
  }
1309
- )), /* @__PURE__ */ React39.createElement(import_ui23.Divider, null), /* @__PURE__ */ React39.createElement(import_ui23.Box, { sx: { overflowY: "auto", height: 260, width: 220 } }, options3.length > 0 ? /* @__PURE__ */ React39.createElement(import_ui23.MenuList, { role: "listbox", tabIndex: 0 }, options3.map(([category, items], index) => /* @__PURE__ */ React39.createElement(import_react11.Fragment, { key: index }, /* @__PURE__ */ React39.createElement(import_ui23.ListSubheader, { sx: { typography: "caption", color: "text.tertiary" } }, dynamicGroups?.[category]?.title || category), items.map(({ value, label: tagLabel }) => {
1829
+ )), /* @__PURE__ */ React51.createElement(import_ui43.Divider, null), /* @__PURE__ */ React51.createElement(import_ui43.Box, { sx: { overflowY: "auto", height: 260, width: 220 } }, options4.length > 0 ? /* @__PURE__ */ React51.createElement(import_ui43.MenuList, { role: "listbox", tabIndex: 0 }, options4.map(([category, items], index) => /* @__PURE__ */ React51.createElement(import_react14.Fragment, { key: index }, /* @__PURE__ */ React51.createElement(import_ui43.ListSubheader, { sx: { typography: "caption", color: "text.tertiary" } }, dynamicGroups?.[category]?.title || category), items.map(({ value, label: tagLabel }) => {
1310
1830
  const isSelected = isCurrentValueDynamic && value === currentValue?.value?.name;
1311
- return /* @__PURE__ */ React39.createElement(
1312
- import_ui23.MenuItem,
1831
+ return /* @__PURE__ */ React51.createElement(
1832
+ import_ui43.MenuItem,
1313
1833
  {
1314
1834
  key: value,
1315
1835
  selected: isSelected,
@@ -1319,20 +1839,20 @@ var DynamicSelection = ({ onSelect }) => {
1319
1839
  },
1320
1840
  tagLabel
1321
1841
  );
1322
- })))) : /* @__PURE__ */ React39.createElement(import_ui23.Stack, { alignItems: "center", p: 2.5, gap: 1.5 }, /* @__PURE__ */ React39.createElement(import_icons7.PhotoIcon, { fontSize: "large" }), /* @__PURE__ */ React39.createElement(import_ui23.Typography, { align: "center", variant: "caption", color: "text.secondary" }, (0, import_i18n19.__)("Sorry, nothing matched", "elementor"), /* @__PURE__ */ React39.createElement("br", null), "\u201C", searchValue, "\u201D."), /* @__PURE__ */ React39.createElement(import_ui23.Typography, { align: "center", variant: "caption", color: "text.secondary" }, /* @__PURE__ */ React39.createElement(
1323
- import_ui23.Link,
1842
+ })))) : /* @__PURE__ */ React51.createElement(import_ui43.Stack, { alignItems: "center", p: 2.5, gap: 1.5 }, /* @__PURE__ */ React51.createElement(import_icons10.PhotoIcon, { fontSize: "large" }), /* @__PURE__ */ React51.createElement(import_ui43.Typography, { align: "center", variant: "caption", color: "text.secondary" }, (0, import_i18n26.__)("Sorry, nothing matched", "elementor"), /* @__PURE__ */ React51.createElement("br", null), "\u201C", searchValue, "\u201D."), /* @__PURE__ */ React51.createElement(import_ui43.Typography, { align: "center", variant: "caption", color: "text.secondary" }, /* @__PURE__ */ React51.createElement(
1843
+ import_ui43.Link,
1324
1844
  {
1325
1845
  color: "secondary",
1326
1846
  variant: "caption",
1327
1847
  component: "button",
1328
1848
  onClick: () => setSearchValue("")
1329
1849
  },
1330
- (0, import_i18n19.__)("Clear the filters", "elementor")
1331
- ), "\xA0", (0, import_i18n19.__)("and try again.", "elementor")))));
1850
+ (0, import_i18n26.__)("Clear the filters", "elementor")
1851
+ ), "\xA0", (0, import_i18n26.__)("and try again.", "elementor")))));
1332
1852
  };
1333
1853
  var useFilteredOptions = (bind, searchValue) => {
1334
1854
  const dynamicTags = usePropDynamicTags(bind);
1335
- const options3 = dynamicTags.reduce((categories, { name, label, group }) => {
1855
+ const options4 = dynamicTags.reduce((categories, { name, label, group }) => {
1336
1856
  const isVisible = label.toLowerCase().includes(searchValue.trim().toLowerCase());
1337
1857
  if (!isVisible) {
1338
1858
  return categories;
@@ -1343,19 +1863,19 @@ var useFilteredOptions = (bind, searchValue) => {
1343
1863
  categories.get(group)?.push({ label, value: name });
1344
1864
  return categories;
1345
1865
  }, /* @__PURE__ */ new Map());
1346
- return [...options3];
1866
+ return [...options4];
1347
1867
  };
1348
1868
 
1349
1869
  // src/dynamics/components/dynamic-selection-control.tsx
1350
- var import_ui24 = require("@elementor/ui");
1351
- var import_i18n20 = require("@wordpress/i18n");
1352
- var SIZE2 = "tiny";
1870
+ var import_ui44 = require("@elementor/ui");
1871
+ var import_i18n27 = require("@wordpress/i18n");
1872
+ var SIZE4 = "tiny";
1353
1873
  var DynamicSelectionControl = () => {
1354
1874
  const { bind, value, setValue } = useControl();
1355
1875
  const [propValueFromHistory] = usePropValueHistory(bind);
1356
1876
  const { name: tagName = "" } = value?.value || {};
1357
- const selectionPopoverId = (0, import_react12.useId)();
1358
- const selectionPopoverState = (0, import_ui24.usePopupState)({ variant: "popover", popupId: selectionPopoverId });
1877
+ const selectionPopoverId = (0, import_react15.useId)();
1878
+ const selectionPopoverState = (0, import_ui44.usePopupState)({ variant: "popover", popupId: selectionPopoverId });
1359
1879
  const dynamicTag = useDynamicTag(bind, tagName);
1360
1880
  const removeDynamicTag = () => {
1361
1881
  setValue(propValueFromHistory ?? null);
@@ -1363,88 +1883,110 @@ var DynamicSelectionControl = () => {
1363
1883
  if (!dynamicTag) {
1364
1884
  throw new Error(`Dynamic tag ${tagName} not found`);
1365
1885
  }
1366
- return /* @__PURE__ */ React40.createElement(import_ui24.Box, { sx: { width: "100%" } }, /* @__PURE__ */ React40.createElement(
1367
- import_ui24.UnstableTag,
1886
+ return /* @__PURE__ */ React52.createElement(import_ui44.Box, null, /* @__PURE__ */ React52.createElement(
1887
+ import_ui44.UnstableTag,
1368
1888
  {
1369
1889
  fullWidth: true,
1370
1890
  showActionsOnHover: true,
1371
1891
  label: dynamicTag.label,
1372
- startIcon: /* @__PURE__ */ React40.createElement(import_icons8.DatabaseIcon, { fontSize: SIZE2 }),
1373
- ...(0, import_ui24.bindTrigger)(selectionPopoverState),
1374
- actions: /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement(DynamicSettingsPopover, { dynamicTag }), /* @__PURE__ */ React40.createElement(
1375
- import_ui24.IconButton,
1892
+ startIcon: /* @__PURE__ */ React52.createElement(import_icons11.DatabaseIcon, { fontSize: SIZE4 }),
1893
+ ...(0, import_ui44.bindTrigger)(selectionPopoverState),
1894
+ actions: /* @__PURE__ */ React52.createElement(React52.Fragment, null, /* @__PURE__ */ React52.createElement(DynamicSettingsPopover, { dynamicTag }), /* @__PURE__ */ React52.createElement(
1895
+ import_ui44.IconButton,
1376
1896
  {
1377
- size: SIZE2,
1897
+ size: SIZE4,
1378
1898
  onClick: removeDynamicTag,
1379
- "aria-label": (0, import_i18n20.__)("Remove dynamic value", "elementor")
1899
+ "aria-label": (0, import_i18n27.__)("Remove dynamic value", "elementor")
1380
1900
  },
1381
- /* @__PURE__ */ React40.createElement(import_icons8.XIcon, { fontSize: SIZE2 })
1901
+ /* @__PURE__ */ React52.createElement(import_icons11.XIcon, { fontSize: SIZE4 })
1382
1902
  ))
1383
1903
  }
1384
- ), /* @__PURE__ */ React40.createElement(
1385
- import_ui24.Popover,
1904
+ ), /* @__PURE__ */ React52.createElement(
1905
+ import_ui44.Popover,
1386
1906
  {
1387
1907
  disablePortal: true,
1388
1908
  disableScrollLock: true,
1389
1909
  anchorOrigin: { vertical: "bottom", horizontal: "left" },
1390
- ...(0, import_ui24.bindPopover)(selectionPopoverState)
1910
+ ...(0, import_ui44.bindPopover)(selectionPopoverState)
1391
1911
  },
1392
- /* @__PURE__ */ React40.createElement(import_ui24.Stack, null, /* @__PURE__ */ React40.createElement(import_ui24.Stack, { direction: "row", alignItems: "center", pl: 1.5, pr: 0.5, py: 1.5 }, /* @__PURE__ */ React40.createElement(import_icons8.DatabaseIcon, { fontSize: SIZE2, sx: { mr: 0.5 } }), /* @__PURE__ */ React40.createElement(import_ui24.Typography, { variant: "subtitle2" }, (0, import_i18n20.__)("Dynamic Tags", "elementor")), /* @__PURE__ */ React40.createElement(import_ui24.IconButton, { size: SIZE2, sx: { ml: "auto" }, onClick: selectionPopoverState.close }, /* @__PURE__ */ React40.createElement(import_icons8.XIcon, { fontSize: SIZE2 }))), /* @__PURE__ */ React40.createElement(DynamicSelection, { onSelect: selectionPopoverState.close }))
1912
+ /* @__PURE__ */ React52.createElement(import_ui44.Stack, null, /* @__PURE__ */ React52.createElement(import_ui44.Stack, { direction: "row", alignItems: "center", pl: 1.5, pr: 0.5, py: 1.5 }, /* @__PURE__ */ React52.createElement(import_icons11.DatabaseIcon, { fontSize: SIZE4, sx: { mr: 0.5 } }), /* @__PURE__ */ React52.createElement(import_ui44.Typography, { variant: "subtitle2" }, (0, import_i18n27.__)("Dynamic Tags", "elementor")), /* @__PURE__ */ React52.createElement(import_ui44.IconButton, { size: SIZE4, sx: { ml: "auto" }, onClick: selectionPopoverState.close }, /* @__PURE__ */ React52.createElement(import_icons11.XIcon, { fontSize: SIZE4 }))), /* @__PURE__ */ React52.createElement(DynamicSelection, { onSelect: selectionPopoverState.close }))
1393
1913
  ));
1394
1914
  };
1395
1915
  var DynamicSettingsPopover = ({ dynamicTag }) => {
1396
- const popupId = (0, import_react12.useId)();
1397
- const settingsPopupState = (0, import_ui24.usePopupState)({ variant: "popover", popupId });
1916
+ const popupId = (0, import_react15.useId)();
1917
+ const settingsPopupState = (0, import_ui44.usePopupState)({ variant: "popover", popupId });
1398
1918
  const hasDynamicSettings = !!dynamicTag.atomic_controls.length;
1399
1919
  if (!hasDynamicSettings) {
1400
1920
  return null;
1401
1921
  }
1402
- return /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement(
1403
- import_ui24.IconButton,
1922
+ return /* @__PURE__ */ React52.createElement(React52.Fragment, null, /* @__PURE__ */ React52.createElement(
1923
+ import_ui44.IconButton,
1404
1924
  {
1405
- size: SIZE2,
1406
- ...(0, import_ui24.bindTrigger)(settingsPopupState),
1407
- "aria-label": (0, import_i18n20.__)("Settings", "elementor")
1925
+ size: SIZE4,
1926
+ ...(0, import_ui44.bindTrigger)(settingsPopupState),
1927
+ "aria-label": (0, import_i18n27.__)("Settings", "elementor")
1408
1928
  },
1409
- /* @__PURE__ */ React40.createElement(import_icons8.SettingsIcon, { fontSize: SIZE2 })
1410
- ), /* @__PURE__ */ React40.createElement(
1411
- import_ui24.Popover,
1929
+ /* @__PURE__ */ React52.createElement(import_icons11.SettingsIcon, { fontSize: SIZE4 })
1930
+ ), /* @__PURE__ */ React52.createElement(
1931
+ import_ui44.Popover,
1412
1932
  {
1413
1933
  disableScrollLock: true,
1414
1934
  anchorOrigin: { vertical: "bottom", horizontal: "center" },
1415
- ...(0, import_ui24.bindPopover)(settingsPopupState)
1935
+ ...(0, import_ui44.bindPopover)(settingsPopupState)
1416
1936
  },
1417
- /* @__PURE__ */ React40.createElement(import_ui24.Paper, { component: import_ui24.Stack, sx: { minHeight: "300px", width: "220px" } }, /* @__PURE__ */ React40.createElement(import_ui24.Stack, { direction: "row", alignItems: "center", px: 1.5, pt: 2, pb: 1 }, /* @__PURE__ */ React40.createElement(import_icons8.DatabaseIcon, { fontSize: SIZE2, sx: { mr: 0.5 } }), /* @__PURE__ */ React40.createElement(import_ui24.Typography, { variant: "subtitle2" }, dynamicTag.label), /* @__PURE__ */ React40.createElement(import_ui24.IconButton, { sx: { ml: "auto" }, size: SIZE2, onClick: settingsPopupState.close }, /* @__PURE__ */ React40.createElement(import_icons8.XIcon, { fontSize: SIZE2 }))), /* @__PURE__ */ React40.createElement(DynamicSettings, { controls: dynamicTag.atomic_controls }))
1937
+ /* @__PURE__ */ React52.createElement(import_ui44.Paper, { component: import_ui44.Stack, sx: { minHeight: "300px", width: "220px" } }, /* @__PURE__ */ React52.createElement(import_ui44.Stack, { direction: "row", alignItems: "center", px: 1.5, pt: 2, pb: 1 }, /* @__PURE__ */ React52.createElement(import_icons11.DatabaseIcon, { fontSize: SIZE4, sx: { mr: 0.5 } }), /* @__PURE__ */ React52.createElement(import_ui44.Typography, { variant: "subtitle2" }, dynamicTag.label), /* @__PURE__ */ React52.createElement(import_ui44.IconButton, { sx: { ml: "auto" }, size: SIZE4, onClick: settingsPopupState.close }, /* @__PURE__ */ React52.createElement(import_icons11.XIcon, { fontSize: SIZE4 }))), /* @__PURE__ */ React52.createElement(DynamicSettings, { controls: dynamicTag.atomic_controls }))
1418
1938
  ));
1419
1939
  };
1420
1940
  var DynamicSettings = ({ controls }) => {
1421
1941
  const tabs = controls.filter(({ type }) => type === "section");
1422
- const { getTabsProps, getTabProps, getTabPanelProps } = (0, import_ui24.useTabs)(0);
1942
+ const { getTabsProps, getTabProps, getTabPanelProps } = (0, import_ui44.useTabs)(0);
1423
1943
  if (!tabs.length) {
1424
1944
  return null;
1425
1945
  }
1426
- return /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement(import_ui24.Tabs, { indicatorColor: "secondary", textColor: "secondary", ...getTabsProps() }, tabs.map(({ value }, index) => /* @__PURE__ */ React40.createElement(import_ui24.Tab, { key: index, label: value.label, sx: { px: 1, py: 0.5 }, ...getTabProps(index) }))), /* @__PURE__ */ React40.createElement(import_ui24.Divider, null), tabs.map(({ value }, index) => {
1427
- return /* @__PURE__ */ React40.createElement(import_ui24.TabPanel, { key: index, sx: { flexGrow: 1 }, ...getTabPanelProps(index) }, /* @__PURE__ */ React40.createElement(import_ui24.Stack, { gap: 1, px: 2 }, value.items.map((item) => {
1946
+ return /* @__PURE__ */ React52.createElement(React52.Fragment, null, /* @__PURE__ */ React52.createElement(import_ui44.Tabs, { indicatorColor: "secondary", textColor: "secondary", ...getTabsProps() }, tabs.map(({ value }, index) => /* @__PURE__ */ React52.createElement(import_ui44.Tab, { key: index, label: value.label, sx: { px: 1, py: 0.5 }, ...getTabProps(index) }))), /* @__PURE__ */ React52.createElement(import_ui44.Divider, null), tabs.map(({ value }, index) => {
1947
+ return /* @__PURE__ */ React52.createElement(import_ui44.TabPanel, { key: index, sx: { flexGrow: 1 }, ...getTabPanelProps(index) }, /* @__PURE__ */ React52.createElement(import_ui44.Stack, { gap: 1, px: 2 }, value.items.map((item) => {
1428
1948
  if (item.type === "control") {
1429
- return /* @__PURE__ */ React40.createElement(Control5, { key: item.value.bind, control: item.value });
1949
+ return /* @__PURE__ */ React52.createElement(Control6, { key: item.value.bind, control: item.value });
1430
1950
  }
1431
1951
  return null;
1432
1952
  })));
1433
1953
  }));
1434
1954
  };
1435
- var Control5 = ({ control }) => {
1955
+ var Control6 = ({ control }) => {
1436
1956
  if (!getControlByType(control.type)) {
1437
1957
  return null;
1438
1958
  }
1439
- return /* @__PURE__ */ React40.createElement(DynamicControl, { bind: control.bind }, control.label ? /* @__PURE__ */ React40.createElement(ControlLabel, null, control.label) : null, /* @__PURE__ */ React40.createElement(Control, { type: control.type, props: control.props }));
1959
+ return /* @__PURE__ */ React52.createElement(DynamicControl, { bind: control.bind }, control.label ? /* @__PURE__ */ React52.createElement(ControlLabel, null, control.label) : null, /* @__PURE__ */ React52.createElement(Control, { type: control.type, props: control.props }));
1960
+ };
1961
+
1962
+ // src/dynamics/hooks/use-prop-dynamic-action.tsx
1963
+ var React53 = __toESM(require("react"));
1964
+ var import_icons12 = require("@elementor/icons");
1965
+ var import_i18n28 = require("@wordpress/i18n");
1966
+ var usePropDynamicAction = () => {
1967
+ const { bind } = useControl();
1968
+ const { elementType } = useElement();
1969
+ const propType = elementType.propsSchema[bind];
1970
+ const visible = !!propType && supportsDynamic(propType);
1971
+ return {
1972
+ visible,
1973
+ icon: import_icons12.DatabaseIcon,
1974
+ title: (0, import_i18n28.__)("Dynamic Tags", "elementor"),
1975
+ popoverContent: ({ closePopover }) => /* @__PURE__ */ React53.createElement(DynamicSelection, { onSelect: closePopover })
1976
+ };
1440
1977
  };
1441
1978
 
1442
1979
  // src/dynamics/init.ts
1980
+ var { registerPopoverAction } = controlActionsMenu;
1443
1981
  var init = () => {
1444
1982
  replaceControl({
1445
1983
  component: DynamicSelectionControl,
1446
1984
  condition: ({ value }) => isDynamicPropValue(value)
1447
1985
  });
1986
+ registerPopoverAction({
1987
+ id: "dynamic-tags",
1988
+ useProps: usePropDynamicAction
1989
+ });
1448
1990
  };
1449
1991
 
1450
1992
  // src/init.ts
@@ -1468,6 +2010,7 @@ var blockV1Panel = () => {
1468
2010
  init2();
1469
2011
  // Annotate the CommonJS export names for ESM import in node:
1470
2012
  0 && (module.exports = {
2013
+ controlActionsMenu,
1471
2014
  replaceControl,
1472
2015
  useControl
1473
2016
  });