@elementor/editor-controls 1.2.0 → 1.3.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 (30) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/index.d.mts +7 -3
  3. package/dist/index.d.ts +7 -3
  4. package/dist/index.js +645 -415
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +570 -341
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +7 -7
  9. package/src/bound-prop-context/prop-context.tsx +3 -3
  10. package/src/bound-prop-context/prop-key-context.tsx +1 -0
  11. package/src/bound-prop-context/use-bound-prop.ts +5 -1
  12. package/src/components/text-field-popover.tsx +19 -18
  13. package/src/controls/background-control/background-overlay/background-overlay-repeater-control.tsx +3 -15
  14. package/src/controls/box-shadow-repeater-control.tsx +1 -1
  15. package/src/controls/equal-unequal-sizes-control.tsx +1 -1
  16. package/src/controls/font-family-control/font-family-control.tsx +14 -2
  17. package/src/controls/image-control.tsx +45 -16
  18. package/src/controls/link-control.tsx +25 -20
  19. package/src/controls/linked-dimensions-control.tsx +1 -1
  20. package/src/controls/repeatable-control.tsx +77 -17
  21. package/src/controls/select-control.tsx +22 -2
  22. package/src/controls/switch-control.tsx +9 -1
  23. package/src/controls/transform-control/functions/axis-row.tsx +32 -0
  24. package/src/controls/transform-control/functions/move.tsx +44 -0
  25. package/src/controls/transform-control/transform-content.tsx +36 -0
  26. package/src/controls/transform-control/transform-icon.tsx +12 -0
  27. package/src/controls/transform-control/transform-label.tsx +27 -0
  28. package/src/controls/transform-control/transform-repeater-control.tsx +42 -0
  29. package/src/hooks/use-repeatable-control-context.ts +6 -1
  30. package/src/index.ts +1 -0
package/dist/index.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  // src/controls/image-control.tsx
2
- import * as React9 from "react";
2
+ import * as React10 from "react";
3
3
  import { imagePropTypeUtil } from "@elementor/editor-props";
4
- import { Stack as Stack2 } from "@elementor/ui";
4
+ import { Grid, Stack as Stack2 } from "@elementor/ui";
5
+ import { __ as __2 } from "@wordpress/i18n";
5
6
 
6
7
  // src/bound-prop-context/prop-context.tsx
7
8
  import * as React from "react";
@@ -30,7 +31,7 @@ var PropProvider = ({
30
31
  setValue,
31
32
  propType,
32
33
  placeholder,
33
- disabled
34
+ isDisabled
34
35
  }) => {
35
36
  return /* @__PURE__ */ React.createElement(
36
37
  PropContext.Provider,
@@ -40,7 +41,7 @@ var PropProvider = ({
40
41
  propType,
41
42
  setValue,
42
43
  placeholder,
43
- disabled
44
+ isDisabled
44
45
  }
45
46
  },
46
47
  children
@@ -130,8 +131,9 @@ import { useState } from "react";
130
131
  function useBoundProp(propTypeUtil) {
131
132
  const propKeyContext = usePropKeyContext();
132
133
  const { isValid, validate, restoreValue } = useValidation(propKeyContext.propType);
134
+ const disabled = propKeyContext.isDisabled?.(propKeyContext.propType);
133
135
  if (!propTypeUtil) {
134
- return propKeyContext;
136
+ return { ...propKeyContext, disabled };
135
137
  }
136
138
  function setValue(value2, options, meta) {
137
139
  if (!validate(value2)) {
@@ -151,7 +153,8 @@ function useBoundProp(propTypeUtil) {
151
153
  setValue,
152
154
  value: isValid ? value : null,
153
155
  restoreValue,
154
- placeholder
156
+ placeholder,
157
+ disabled
155
158
  };
156
159
  }
157
160
  var useValidation = (propType) => {
@@ -183,16 +186,23 @@ var resolveUnionPropType = (propType, key) => {
183
186
  return resolvedPropType;
184
187
  };
185
188
 
189
+ // src/components/control-form-label.tsx
190
+ import * as React3 from "react";
191
+ import { FormLabel } from "@elementor/ui";
192
+ var ControlFormLabel = (props) => {
193
+ return /* @__PURE__ */ React3.createElement(FormLabel, { size: "tiny", ...props });
194
+ };
195
+
186
196
  // src/create-control.tsx
187
- import * as React4 from "react";
197
+ import * as React5 from "react";
188
198
  import { ErrorBoundary } from "@elementor/ui";
189
199
 
190
200
  // src/control-replacements.tsx
191
- import * as React3 from "react";
201
+ import * as React4 from "react";
192
202
  import { createContext as createContext3, useContext as useContext3 } from "react";
193
203
  var ControlReplacementContext = createContext3([]);
194
204
  var ControlReplacementsProvider = ({ replacements, children }) => {
195
- return /* @__PURE__ */ React3.createElement(ControlReplacementContext.Provider, { value: replacements }, children);
205
+ return /* @__PURE__ */ React4.createElement(ControlReplacementContext.Provider, { value: replacements }, children);
196
206
  };
197
207
  var useControlReplacement = (OriginalComponent) => {
198
208
  const { value } = useBoundProp();
@@ -220,7 +230,7 @@ var brandSymbol = Symbol("control");
220
230
  function createControl(Control5) {
221
231
  return (props) => {
222
232
  const Component = useControlReplacement(Control5);
223
- return /* @__PURE__ */ React4.createElement(ErrorBoundary, { fallback: null }, /* @__PURE__ */ React4.createElement(Component, { ...props }));
233
+ return /* @__PURE__ */ React5.createElement(ErrorBoundary, { fallback: null }, /* @__PURE__ */ React5.createElement(Component, { ...props }));
224
234
  };
225
235
  }
226
236
 
@@ -264,7 +274,7 @@ var formatResponse = (response) => {
264
274
  };
265
275
 
266
276
  // src/controls/image-media-control.tsx
267
- import * as React7 from "react";
277
+ import * as React8 from "react";
268
278
  import { imageSrcPropTypeUtil } from "@elementor/editor-props";
269
279
  import { UploadIcon } from "@elementor/icons";
270
280
  import { Button, Card, CardMedia, CardOverlay, CircularProgress, Stack } from "@elementor/ui";
@@ -272,14 +282,14 @@ import { useWpMediaAttachment, useWpMediaFrame } from "@elementor/wp-media";
272
282
  import { __ } from "@wordpress/i18n";
273
283
 
274
284
  // src/control-actions/control-actions.tsx
275
- import * as React6 from "react";
285
+ import * as React7 from "react";
276
286
  import { styled, UnstableFloatingActionBar } from "@elementor/ui";
277
287
 
278
288
  // src/control-actions/control-actions-context.tsx
279
- import * as React5 from "react";
289
+ import * as React6 from "react";
280
290
  import { createContext as createContext4, useContext as useContext4 } from "react";
281
291
  var Context = createContext4(null);
282
- var ControlActionsProvider = ({ children, items }) => /* @__PURE__ */ React5.createElement(Context.Provider, { value: { items } }, children);
292
+ var ControlActionsProvider = ({ children, items }) => /* @__PURE__ */ React6.createElement(Context.Provider, { value: { items } }, children);
283
293
  var useControlActions = () => {
284
294
  const context = useContext4(Context);
285
295
  if (!context) {
@@ -306,8 +316,8 @@ function ControlActions({ children }) {
306
316
  if (items.length === 0 || disabled) {
307
317
  return children;
308
318
  }
309
- const menuItems = items.map(({ MenuItem: MenuItem2, id }) => /* @__PURE__ */ React6.createElement(MenuItem2, { key: id }));
310
- return /* @__PURE__ */ React6.createElement(FloatingBarContainer, null, /* @__PURE__ */ React6.createElement(UnstableFloatingActionBar, { actions: menuItems }, children));
319
+ const menuItems = items.map(({ MenuItem: MenuItem2, id }) => /* @__PURE__ */ React7.createElement(MenuItem2, { key: id }));
320
+ return /* @__PURE__ */ React7.createElement(FloatingBarContainer, null, /* @__PURE__ */ React7.createElement(UnstableFloatingActionBar, { actions: menuItems }, children));
311
321
  }
312
322
 
313
323
  // src/controls/image-media-control.tsx
@@ -330,7 +340,7 @@ var ImageMediaControl = createControl(({ mediaTypes = ["image"] }) => {
330
340
  });
331
341
  }
332
342
  });
333
- return /* @__PURE__ */ React7.createElement(ControlActions, null, /* @__PURE__ */ React7.createElement(Card, { variant: "outlined" }, /* @__PURE__ */ React7.createElement(CardMedia, { image: src, sx: { height: 150 } }, isFetching ? /* @__PURE__ */ React7.createElement(Stack, { justifyContent: "center", alignItems: "center", width: "100%", height: "100%" }, /* @__PURE__ */ React7.createElement(CircularProgress, null)) : /* @__PURE__ */ React7.createElement(React7.Fragment, null)), /* @__PURE__ */ React7.createElement(CardOverlay, null, /* @__PURE__ */ React7.createElement(Stack, { gap: 1 }, /* @__PURE__ */ React7.createElement(
343
+ return /* @__PURE__ */ React8.createElement(ControlActions, null, /* @__PURE__ */ React8.createElement(Card, { variant: "outlined" }, /* @__PURE__ */ React8.createElement(CardMedia, { image: src, sx: { height: 150 } }, isFetching ? /* @__PURE__ */ React8.createElement(Stack, { justifyContent: "center", alignItems: "center", width: "100%", height: "100%" }, /* @__PURE__ */ React8.createElement(CircularProgress, null)) : /* @__PURE__ */ React8.createElement(React8.Fragment, null)), /* @__PURE__ */ React8.createElement(CardOverlay, null, /* @__PURE__ */ React8.createElement(Stack, { gap: 1 }, /* @__PURE__ */ React8.createElement(
334
344
  Button,
335
345
  {
336
346
  size: "tiny",
@@ -339,13 +349,13 @@ var ImageMediaControl = createControl(({ mediaTypes = ["image"] }) => {
339
349
  onClick: () => open({ mode: "browse" })
340
350
  },
341
351
  __("Select image", "elementor")
342
- ), /* @__PURE__ */ React7.createElement(
352
+ ), /* @__PURE__ */ React8.createElement(
343
353
  Button,
344
354
  {
345
355
  size: "tiny",
346
356
  variant: "text",
347
357
  color: "inherit",
348
- startIcon: /* @__PURE__ */ React7.createElement(UploadIcon, null),
358
+ startIcon: /* @__PURE__ */ React8.createElement(UploadIcon, null),
349
359
  onClick: () => open({ mode: "upload" })
350
360
  },
351
361
  __("Upload", "elementor")
@@ -353,48 +363,79 @@ var ImageMediaControl = createControl(({ mediaTypes = ["image"] }) => {
353
363
  });
354
364
 
355
365
  // src/controls/select-control.tsx
356
- import * as React8 from "react";
366
+ import * as React9 from "react";
357
367
  import { stringPropTypeUtil } from "@elementor/editor-props";
358
368
  import { MenuListItem } from "@elementor/editor-ui";
359
- import { Select } from "@elementor/ui";
369
+ import { Select, Typography } from "@elementor/ui";
360
370
  var SelectControl = createControl(({ options, onChange }) => {
361
- const { value, setValue, disabled } = useBoundProp(stringPropTypeUtil);
371
+ const { value, setValue, disabled, placeholder } = useBoundProp(stringPropTypeUtil);
362
372
  const handleChange = (event) => {
363
373
  const newValue = event.target.value || null;
364
374
  onChange?.(newValue, value);
365
375
  setValue(newValue);
366
376
  };
367
- return /* @__PURE__ */ React8.createElement(ControlActions, null, /* @__PURE__ */ React8.createElement(
377
+ return /* @__PURE__ */ React9.createElement(ControlActions, null, /* @__PURE__ */ React9.createElement(
368
378
  Select,
369
379
  {
370
380
  sx: { overflow: "hidden" },
371
381
  displayEmpty: true,
372
382
  size: "tiny",
383
+ renderValue: (selectedValue) => {
384
+ const findOptionByValue = (searchValue) => options.find((opt) => opt.value === searchValue);
385
+ if (!selectedValue || selectedValue === "") {
386
+ if (placeholder) {
387
+ const placeholderOption = findOptionByValue(placeholder);
388
+ const displayText = placeholderOption?.label || placeholder;
389
+ return /* @__PURE__ */ React9.createElement(Typography, { component: "span", variant: "caption", color: "text.tertiary" }, displayText);
390
+ }
391
+ return "";
392
+ }
393
+ const option = findOptionByValue(selectedValue);
394
+ return option?.label || selectedValue;
395
+ },
373
396
  value: value ?? "",
374
397
  onChange: handleChange,
375
398
  disabled,
376
399
  fullWidth: true
377
400
  },
378
- options.map(({ label, ...props }) => /* @__PURE__ */ React8.createElement(MenuListItem, { key: props.value, ...props, value: props.value ?? "" }, label))
401
+ options.map(({ label, ...props }) => /* @__PURE__ */ React9.createElement(MenuListItem, { key: props.value, ...props, value: props.value ?? "" }, label))
379
402
  ));
380
403
  });
381
404
 
382
405
  // src/controls/image-control.tsx
383
406
  var ImageControl = createControl(({ sizes, showMode = "all" }) => {
384
407
  const propContext = useBoundProp(imagePropTypeUtil);
408
+ let componentToRender;
409
+ switch (showMode) {
410
+ case "media":
411
+ componentToRender = /* @__PURE__ */ React10.createElement(ImageSrcControl, null);
412
+ break;
413
+ case "sizes":
414
+ componentToRender = /* @__PURE__ */ React10.createElement(ImageSizeControl, { sizes });
415
+ break;
416
+ case "all":
417
+ default:
418
+ componentToRender = /* @__PURE__ */ React10.createElement(Stack2, { gap: 1.5 }, /* @__PURE__ */ React10.createElement(ControlFormLabel, null, __2("Image", "elementor")), /* @__PURE__ */ React10.createElement(ImageSrcControl, null), /* @__PURE__ */ React10.createElement(Grid, { container: true, gap: 1.5, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React10.createElement(Grid, { item: true, xs: 6 }, /* @__PURE__ */ React10.createElement(ControlFormLabel, null, __2("Resolution", "elementor"))), /* @__PURE__ */ React10.createElement(Grid, { item: true, xs: 6, sx: { overflow: "hidden" } }, /* @__PURE__ */ React10.createElement(ImageSizeControl, { sizes }))));
419
+ }
420
+ return /* @__PURE__ */ React10.createElement(PropProvider, { ...propContext }, componentToRender);
421
+ });
422
+ var ImageSrcControl = () => {
385
423
  const { data: allowSvgUpload } = useUnfilteredFilesUpload();
386
424
  const mediaTypes = allowSvgUpload ? ["image", "svg"] : ["image"];
387
- return /* @__PURE__ */ React9.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React9.createElement(Stack2, { gap: 1.5 }, ["all", "media"].includes(showMode) ? /* @__PURE__ */ React9.createElement(PropKeyProvider, { bind: "src" }, /* @__PURE__ */ React9.createElement(ImageMediaControl, { mediaTypes })) : null, ["all", "sizes"].includes(showMode) ? /* @__PURE__ */ React9.createElement(PropKeyProvider, { bind: "size" }, /* @__PURE__ */ React9.createElement(SelectControl, { options: sizes })) : null));
388
- });
425
+ return /* @__PURE__ */ React10.createElement(PropKeyProvider, { bind: "src" }, /* @__PURE__ */ React10.createElement(ImageMediaControl, { mediaTypes }));
426
+ };
427
+ var ImageSizeControl = ({ sizes }) => {
428
+ return /* @__PURE__ */ React10.createElement(PropKeyProvider, { bind: "size" }, /* @__PURE__ */ React10.createElement(SelectControl, { options: sizes }));
429
+ };
389
430
 
390
431
  // src/controls/text-control.tsx
391
- import * as React10 from "react";
432
+ import * as React11 from "react";
392
433
  import { stringPropTypeUtil as stringPropTypeUtil2 } from "@elementor/editor-props";
393
434
  import { TextField } from "@elementor/ui";
394
435
  var TextControl = createControl(({ placeholder }) => {
395
436
  const { value, setValue, disabled } = useBoundProp(stringPropTypeUtil2);
396
437
  const handleChange = (event) => setValue(event.target.value);
397
- return /* @__PURE__ */ React10.createElement(ControlActions, null, /* @__PURE__ */ React10.createElement(
438
+ return /* @__PURE__ */ React11.createElement(ControlActions, null, /* @__PURE__ */ React11.createElement(
398
439
  TextField,
399
440
  {
400
441
  size: "tiny",
@@ -408,7 +449,7 @@ var TextControl = createControl(({ placeholder }) => {
408
449
  });
409
450
 
410
451
  // src/controls/text-area-control.tsx
411
- import * as React11 from "react";
452
+ import * as React12 from "react";
412
453
  import { stringPropTypeUtil as stringPropTypeUtil3 } from "@elementor/editor-props";
413
454
  import { TextField as TextField2 } from "@elementor/ui";
414
455
  var TextAreaControl = createControl(({ placeholder }) => {
@@ -416,7 +457,7 @@ var TextAreaControl = createControl(({ placeholder }) => {
416
457
  const handleChange = (event) => {
417
458
  setValue(event.target.value);
418
459
  };
419
- return /* @__PURE__ */ React11.createElement(ControlActions, null, /* @__PURE__ */ React11.createElement(
460
+ return /* @__PURE__ */ React12.createElement(ControlActions, null, /* @__PURE__ */ React12.createElement(
420
461
  TextField2,
421
462
  {
422
463
  size: "tiny",
@@ -432,14 +473,14 @@ var TextAreaControl = createControl(({ placeholder }) => {
432
473
  });
433
474
 
434
475
  // src/controls/size-control.tsx
435
- import * as React15 from "react";
476
+ import * as React16 from "react";
436
477
  import { useEffect as useEffect2, useState as useState3 } from "react";
437
478
  import { sizePropTypeUtil } from "@elementor/editor-props";
438
479
  import { useActiveBreakpoint } from "@elementor/editor-responsive";
439
480
  import { usePopupState as usePopupState2 } from "@elementor/ui";
440
481
 
441
482
  // src/components/size-control/size-input.tsx
442
- import * as React13 from "react";
483
+ import * as React14 from "react";
443
484
  import { useRef } from "react";
444
485
  import { PencilIcon } from "@elementor/icons";
445
486
  import { Box, InputAdornment as InputAdornment2 } from "@elementor/ui";
@@ -452,7 +493,7 @@ function isUnitExtendedOption(unit) {
452
493
  }
453
494
 
454
495
  // src/components/size-control/text-field-inner-selection.tsx
455
- import * as React12 from "react";
496
+ import * as React13 from "react";
456
497
  import { forwardRef, useId } from "react";
457
498
  import { MenuListItem as MenuListItem2 } from "@elementor/editor-ui";
458
499
  import {
@@ -477,7 +518,7 @@ var TextFieldInnerSelection = forwardRef(
477
518
  inputProps,
478
519
  disabled
479
520
  }, ref) => {
480
- return /* @__PURE__ */ React12.createElement(
521
+ return /* @__PURE__ */ React13.createElement(
481
522
  TextField3,
482
523
  {
483
524
  ref,
@@ -513,7 +554,7 @@ var SelectionEndAdornment = ({
513
554
  onClick(options[index]);
514
555
  popupState.close();
515
556
  };
516
- return /* @__PURE__ */ React12.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React12.createElement(
557
+ return /* @__PURE__ */ React13.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React13.createElement(
517
558
  Button2,
518
559
  {
519
560
  size: "small",
@@ -523,7 +564,7 @@ var SelectionEndAdornment = ({
523
564
  ...bindTrigger(popupState)
524
565
  },
525
566
  alternativeOptionLabels[value] ?? value
526
- ), /* @__PURE__ */ React12.createElement(Menu, { MenuListProps: { dense: true }, ...bindMenu(popupState) }, options.map((option, index) => /* @__PURE__ */ React12.createElement(
567
+ ), /* @__PURE__ */ React13.createElement(Menu, { MenuListProps: { dense: true }, ...bindMenu(popupState) }, options.map((option, index) => /* @__PURE__ */ React13.createElement(
527
568
  MenuListItem2,
528
569
  {
529
570
  key: option,
@@ -576,8 +617,8 @@ var SizeInput = ({
576
617
  autoComplete: "off",
577
618
  onClick,
578
619
  onFocus,
579
- startAdornment: startIcon ? /* @__PURE__ */ React13.createElement(InputAdornment2, { position: "start", disabled }, startIcon) : void 0,
580
- endAdornment: /* @__PURE__ */ React13.createElement(
620
+ startAdornment: startIcon ? /* @__PURE__ */ React14.createElement(InputAdornment2, { position: "start", disabled }, startIcon) : void 0,
621
+ endAdornment: /* @__PURE__ */ React14.createElement(
581
622
  SelectionEndAdornment,
582
623
  {
583
624
  disabled,
@@ -585,7 +626,7 @@ var SizeInput = ({
585
626
  onClick: handleUnitChange,
586
627
  value: unit,
587
628
  alternativeOptionLabels: {
588
- custom: /* @__PURE__ */ React13.createElement(PencilIcon, { fontSize: "small" })
629
+ custom: /* @__PURE__ */ React14.createElement(PencilIcon, { fontSize: "small" })
589
630
  },
590
631
  menuItemsAttributes: units2.includes("custom") ? {
591
632
  custom: popupAttributes
@@ -593,7 +634,7 @@ var SizeInput = ({
593
634
  }
594
635
  )
595
636
  };
596
- return /* @__PURE__ */ React13.createElement(ControlActions, null, /* @__PURE__ */ React13.createElement(Box, null, /* @__PURE__ */ React13.createElement(
637
+ return /* @__PURE__ */ React14.createElement(ControlActions, null, /* @__PURE__ */ React14.createElement(Box, null, /* @__PURE__ */ React14.createElement(
597
638
  TextFieldInnerSelection,
598
639
  {
599
640
  disabled,
@@ -615,14 +656,23 @@ var SizeInput = ({
615
656
  };
616
657
 
617
658
  // src/components/text-field-popover.tsx
618
- import * as React14 from "react";
619
- import { bindPopover, Paper, Popover, TextField as TextField4 } from "@elementor/ui";
659
+ import * as React15 from "react";
660
+ import { bindPopover, Popover, TextField as TextField4 } from "@elementor/ui";
620
661
  var TextFieldPopover = (props) => {
621
662
  const { popupState, restoreValue, anchorRef, value, onChange } = props;
622
- return /* @__PURE__ */ React14.createElement(
663
+ return /* @__PURE__ */ React15.createElement(
623
664
  Popover,
624
665
  {
625
666
  disablePortal: true,
667
+ slotProps: {
668
+ paper: {
669
+ sx: {
670
+ borderRadius: 2,
671
+ width: anchorRef.current?.offsetWidth + "px",
672
+ p: 1.5
673
+ }
674
+ }
675
+ },
626
676
  ...bindPopover(popupState),
627
677
  anchorOrigin: { vertical: "bottom", horizontal: "center" },
628
678
  transformOrigin: { vertical: "top", horizontal: "center" },
@@ -631,28 +681,18 @@ var TextFieldPopover = (props) => {
631
681
  popupState.close();
632
682
  }
633
683
  },
634
- /* @__PURE__ */ React14.createElement(
635
- Paper,
684
+ /* @__PURE__ */ React15.createElement(
685
+ TextField4,
636
686
  {
637
- sx: {
638
- width: anchorRef.current?.offsetWidth + "px",
639
- borderRadius: 2,
640
- p: 1.5
641
- }
642
- },
643
- /* @__PURE__ */ React14.createElement(
644
- TextField4,
645
- {
646
- value,
647
- onChange,
648
- size: "tiny",
649
- type: "text",
650
- fullWidth: true,
651
- inputProps: {
652
- autoFocus: true
653
- }
687
+ value,
688
+ onChange,
689
+ size: "tiny",
690
+ type: "text",
691
+ fullWidth: true,
692
+ inputProps: {
693
+ autoFocus: true
654
694
  }
655
- )
695
+ }
656
696
  )
657
697
  );
658
698
  };
@@ -785,7 +825,7 @@ var SizeControl = createControl((props) => {
785
825
  setState(newState);
786
826
  }
787
827
  }, [activeBreakpoint]);
788
- return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(
828
+ return /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement(
789
829
  SizeInput,
790
830
  {
791
831
  disabled,
@@ -801,7 +841,7 @@ var SizeControl = createControl((props) => {
801
841
  onClick: onInputClick,
802
842
  popupState
803
843
  }
804
- ), anchorRef?.current && /* @__PURE__ */ React15.createElement(
844
+ ), anchorRef?.current && /* @__PURE__ */ React16.createElement(
805
845
  TextFieldPopover,
806
846
  {
807
847
  popupState,
@@ -857,15 +897,8 @@ function areStatesEqual(state1, state2) {
857
897
  import * as React19 from "react";
858
898
  import { forwardRef as forwardRef2, useRef as useRef2 } from "react";
859
899
  import { strokePropTypeUtil } from "@elementor/editor-props";
860
- import { Grid } from "@elementor/ui";
861
- import { __ as __2 } from "@wordpress/i18n";
862
-
863
- // src/components/control-form-label.tsx
864
- import * as React16 from "react";
865
- import { FormLabel } from "@elementor/ui";
866
- var ControlFormLabel = (props) => {
867
- return /* @__PURE__ */ React16.createElement(FormLabel, { size: "tiny", ...props });
868
- };
900
+ import { Grid as Grid2 } from "@elementor/ui";
901
+ import { __ as __3 } from "@wordpress/i18n";
869
902
 
870
903
  // src/components/section-content.tsx
871
904
  import * as React17 from "react";
@@ -915,16 +948,16 @@ var units = ["px", "em", "rem"];
915
948
  var StrokeControl = createControl(() => {
916
949
  const propContext = useBoundProp(strokePropTypeUtil);
917
950
  const rowRef = useRef2(null);
918
- return /* @__PURE__ */ React19.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React19.createElement(SectionContent, null, /* @__PURE__ */ React19.createElement(Control, { bind: "width", label: __2("Stroke width", "elementor"), ref: rowRef }, /* @__PURE__ */ React19.createElement(SizeControl, { units, anchorRef: rowRef })), /* @__PURE__ */ React19.createElement(Control, { bind: "color", label: __2("Stroke color", "elementor") }, /* @__PURE__ */ React19.createElement(ColorControl, null))));
951
+ return /* @__PURE__ */ React19.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React19.createElement(SectionContent, null, /* @__PURE__ */ React19.createElement(Control, { bind: "width", label: __3("Stroke width", "elementor"), ref: rowRef }, /* @__PURE__ */ React19.createElement(SizeControl, { units, anchorRef: rowRef })), /* @__PURE__ */ React19.createElement(Control, { bind: "color", label: __3("Stroke color", "elementor") }, /* @__PURE__ */ React19.createElement(ColorControl, null))));
919
952
  });
920
- var Control = forwardRef2(({ bind, label, children }, ref) => /* @__PURE__ */ React19.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React19.createElement(Grid, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap", ref }, /* @__PURE__ */ React19.createElement(Grid, { item: true, xs: 6 }, /* @__PURE__ */ React19.createElement(ControlFormLabel, null, label)), /* @__PURE__ */ React19.createElement(Grid, { item: true, xs: 6 }, children))));
953
+ var Control = forwardRef2(({ bind, label, children }, ref) => /* @__PURE__ */ React19.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React19.createElement(Grid2, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap", ref }, /* @__PURE__ */ React19.createElement(Grid2, { item: true, xs: 6 }, /* @__PURE__ */ React19.createElement(ControlFormLabel, null, label)), /* @__PURE__ */ React19.createElement(Grid2, { item: true, xs: 6 }, children))));
921
954
 
922
955
  // src/controls/box-shadow-repeater-control.tsx
923
956
  import * as React26 from "react";
924
957
  import { useRef as useRef3 } from "react";
925
958
  import { boxShadowPropTypeUtil, shadowPropTypeUtil } from "@elementor/editor-props";
926
- import { FormLabel as FormLabel2, Grid as Grid3, UnstableColorIndicator } from "@elementor/ui";
927
- import { __ as __4 } from "@wordpress/i18n";
959
+ import { FormLabel as FormLabel2, Grid as Grid4, UnstableColorIndicator } from "@elementor/ui";
960
+ import { __ as __5 } from "@wordpress/i18n";
928
961
 
929
962
  // src/components/popover-content.tsx
930
963
  import * as React20 from "react";
@@ -934,9 +967,9 @@ var PopoverContent = ({ gap = 1.5, children, ...props }) => /* @__PURE__ */ Reac
934
967
  // src/components/popover-grid-container.tsx
935
968
  import { forwardRef as forwardRef3 } from "react";
936
969
  import * as React21 from "react";
937
- import { Grid as Grid2 } from "@elementor/ui";
970
+ import { Grid as Grid3 } from "@elementor/ui";
938
971
  var PopoverGridContainer = forwardRef3(
939
- ({ gap = 1.5, alignItems = "center", flexWrap = "nowrap", children }, ref) => /* @__PURE__ */ React21.createElement(Grid2, { container: true, gap, alignItems, flexWrap, ref }, children)
972
+ ({ gap = 1.5, alignItems = "center", flexWrap = "nowrap", children }, ref) => /* @__PURE__ */ React21.createElement(Grid3, { container: true, gap, alignItems, flexWrap, ref }, children)
940
973
  );
941
974
 
942
975
  // src/components/repeater.tsx
@@ -951,11 +984,11 @@ import {
951
984
  Popover as Popover2,
952
985
  Stack as Stack5,
953
986
  Tooltip,
954
- Typography,
987
+ Typography as Typography2,
955
988
  UnstableTag,
956
989
  usePopupState as usePopupState3
957
990
  } from "@elementor/ui";
958
- import { __ as __3 } from "@wordpress/i18n";
991
+ import { __ as __4 } from "@wordpress/i18n";
959
992
 
960
993
  // src/control-adornments/control-adornments.tsx
961
994
  import * as React23 from "react";
@@ -1152,7 +1185,7 @@ var Repeater = ({
1152
1185
  gap: 1,
1153
1186
  sx: { marginInlineEnd: -0.75 }
1154
1187
  },
1155
- /* @__PURE__ */ React25.createElement(Typography, { component: "label", variant: "caption", color: "text.secondary" }, label),
1188
+ /* @__PURE__ */ React25.createElement(Typography2, { component: "label", variant: "caption", color: "text.secondary" }, label),
1156
1189
  /* @__PURE__ */ React25.createElement(ControlAdornments, null),
1157
1190
  /* @__PURE__ */ React25.createElement(
1158
1191
  IconButton,
@@ -1161,7 +1194,7 @@ var Repeater = ({
1161
1194
  sx: { ml: "auto" },
1162
1195
  disabled,
1163
1196
  onClick: addRepeaterItem,
1164
- "aria-label": __3("Add item", "elementor")
1197
+ "aria-label": __4("Add item", "elementor")
1165
1198
  },
1166
1199
  /* @__PURE__ */ React25.createElement(PlusIcon, { fontSize: SIZE })
1167
1200
  )
@@ -1205,9 +1238,9 @@ var RepeaterItem = ({
1205
1238
  }) => {
1206
1239
  const [anchorEl, setAnchorEl] = useState4(null);
1207
1240
  const { popoverState, popoverProps, ref, setRef } = usePopover(openOnMount, onOpen);
1208
- const duplicateLabel = __3("Duplicate", "elementor");
1209
- const toggleLabel = propDisabled ? __3("Show", "elementor") : __3("Hide", "elementor");
1210
- const removeLabel = __3("Remove", "elementor");
1241
+ const duplicateLabel = __4("Duplicate", "elementor");
1242
+ const toggleLabel = propDisabled ? __4("Show", "elementor") : __4("Hide", "elementor");
1243
+ const removeLabel = __4("Remove", "elementor");
1211
1244
  return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(
1212
1245
  UnstableTag,
1213
1246
  {
@@ -1217,7 +1250,7 @@ var RepeaterItem = ({
1217
1250
  fullWidth: true,
1218
1251
  ref: setRef,
1219
1252
  variant: "outlined",
1220
- "aria-label": __3("Open item", "elementor"),
1253
+ "aria-label": __4("Open item", "elementor"),
1221
1254
  ...bindTrigger2(popoverState),
1222
1255
  startIcon,
1223
1256
  actions: /* @__PURE__ */ React25.createElement(React25.Fragment, null, showDuplicate && /* @__PURE__ */ React25.createElement(Tooltip, { title: duplicateLabel, placement: "top" }, /* @__PURE__ */ React25.createElement(IconButton, { size: SIZE, onClick: duplicateItem, "aria-label": duplicateLabel }, /* @__PURE__ */ React25.createElement(CopyIcon, { fontSize: SIZE }))), showToggle && /* @__PURE__ */ React25.createElement(Tooltip, { title: toggleLabel, placement: "top" }, /* @__PURE__ */ React25.createElement(IconButton, { size: SIZE, onClick: toggleDisableItem, "aria-label": toggleLabel }, propDisabled ? /* @__PURE__ */ React25.createElement(EyeOffIcon, { fontSize: SIZE }) : /* @__PURE__ */ React25.createElement(EyeIcon, { fontSize: SIZE }))), /* @__PURE__ */ React25.createElement(Tooltip, { title: removeLabel, placement: "top" }, /* @__PURE__ */ React25.createElement(IconButton, { size: SIZE, onClick: removeItem, "aria-label": removeLabel }, /* @__PURE__ */ React25.createElement(XIcon, { fontSize: SIZE }))))
@@ -1260,14 +1293,14 @@ var usePopover = (openOnMount, onOpen) => {
1260
1293
  // src/controls/box-shadow-repeater-control.tsx
1261
1294
  var BoxShadowRepeaterControl = createControl(() => {
1262
1295
  const { propType, value, setValue, disabled } = useBoundProp(boxShadowPropTypeUtil);
1263
- return /* @__PURE__ */ React26.createElement(PropProvider, { propType, value, setValue, disabled }, /* @__PURE__ */ React26.createElement(
1296
+ return /* @__PURE__ */ React26.createElement(PropProvider, { propType, value, setValue, isDisabled: () => disabled }, /* @__PURE__ */ React26.createElement(
1264
1297
  Repeater,
1265
1298
  {
1266
1299
  openOnAdd: true,
1267
1300
  disabled,
1268
1301
  values: value ?? [],
1269
1302
  setValues: setValue,
1270
- label: __4("Box shadow", "elementor"),
1303
+ label: __5("Box shadow", "elementor"),
1271
1304
  itemSettings: {
1272
1305
  Icon: ItemIcon,
1273
1306
  Label: ItemLabel,
@@ -1284,22 +1317,22 @@ var ItemContent = ({ anchorEl, bind }) => {
1284
1317
  var Content = ({ anchorEl }) => {
1285
1318
  const context = useBoundProp(shadowPropTypeUtil);
1286
1319
  const rowRef = [useRef3(null), useRef3(null)];
1287
- return /* @__PURE__ */ React26.createElement(PropProvider, { ...context }, /* @__PURE__ */ React26.createElement(PopoverContent, { p: 1.5 }, /* @__PURE__ */ React26.createElement(PopoverGridContainer, null, /* @__PURE__ */ React26.createElement(Control2, { bind: "color", label: __4("Color", "elementor") }, /* @__PURE__ */ React26.createElement(ColorControl, { anchorEl })), /* @__PURE__ */ React26.createElement(Control2, { bind: "position", label: __4("Position", "elementor"), sx: { overflow: "hidden" } }, /* @__PURE__ */ React26.createElement(
1320
+ return /* @__PURE__ */ React26.createElement(PropProvider, { ...context }, /* @__PURE__ */ React26.createElement(PopoverContent, { p: 1.5 }, /* @__PURE__ */ React26.createElement(PopoverGridContainer, null, /* @__PURE__ */ React26.createElement(Control2, { bind: "color", label: __5("Color", "elementor") }, /* @__PURE__ */ React26.createElement(ColorControl, { anchorEl })), /* @__PURE__ */ React26.createElement(Control2, { bind: "position", label: __5("Position", "elementor"), sx: { overflow: "hidden" } }, /* @__PURE__ */ React26.createElement(
1288
1321
  SelectControl,
1289
1322
  {
1290
1323
  options: [
1291
- { label: __4("Inset", "elementor"), value: "inset" },
1292
- { label: __4("Outset", "elementor"), value: null }
1324
+ { label: __5("Inset", "elementor"), value: "inset" },
1325
+ { label: __5("Outset", "elementor"), value: null }
1293
1326
  ]
1294
1327
  }
1295
- ))), /* @__PURE__ */ React26.createElement(PopoverGridContainer, { ref: rowRef[0] }, /* @__PURE__ */ React26.createElement(Control2, { bind: "hOffset", label: __4("Horizontal", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[0] })), /* @__PURE__ */ React26.createElement(Control2, { bind: "vOffset", label: __4("Vertical", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[0] }))), /* @__PURE__ */ React26.createElement(PopoverGridContainer, { ref: rowRef[1] }, /* @__PURE__ */ React26.createElement(Control2, { bind: "blur", label: __4("Blur", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[1] })), /* @__PURE__ */ React26.createElement(Control2, { bind: "spread", label: __4("Spread", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[1] })))));
1328
+ ))), /* @__PURE__ */ React26.createElement(PopoverGridContainer, { ref: rowRef[0] }, /* @__PURE__ */ React26.createElement(Control2, { bind: "hOffset", label: __5("Horizontal", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[0] })), /* @__PURE__ */ React26.createElement(Control2, { bind: "vOffset", label: __5("Vertical", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[0] }))), /* @__PURE__ */ React26.createElement(PopoverGridContainer, { ref: rowRef[1] }, /* @__PURE__ */ React26.createElement(Control2, { bind: "blur", label: __5("Blur", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[1] })), /* @__PURE__ */ React26.createElement(Control2, { bind: "spread", label: __5("Spread", "elementor") }, /* @__PURE__ */ React26.createElement(SizeControl, { anchorRef: rowRef[1] })))));
1296
1329
  };
1297
1330
  var Control2 = ({
1298
1331
  label,
1299
1332
  bind,
1300
1333
  children,
1301
1334
  sx
1302
- }) => /* @__PURE__ */ React26.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React26.createElement(Grid3, { item: true, xs: 6, sx }, /* @__PURE__ */ React26.createElement(Grid3, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React26.createElement(Grid3, { item: true, xs: 12 }, /* @__PURE__ */ React26.createElement(FormLabel2, { size: "tiny" }, label)), /* @__PURE__ */ React26.createElement(Grid3, { item: true, xs: 12 }, children))));
1335
+ }) => /* @__PURE__ */ React26.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React26.createElement(Grid4, { item: true, xs: 6, sx }, /* @__PURE__ */ React26.createElement(Grid4, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React26.createElement(Grid4, { item: true, xs: 12 }, /* @__PURE__ */ React26.createElement(FormLabel2, { size: "tiny" }, label)), /* @__PURE__ */ React26.createElement(Grid4, { item: true, xs: 12 }, children))));
1303
1336
  var ItemLabel = ({ value }) => {
1304
1337
  const { position, hOffset, vOffset, blur, spread } = value.value;
1305
1338
  const { size: blurSize = "", unit: blurUnit = "" } = blur?.value || {};
@@ -1351,8 +1384,8 @@ import {
1351
1384
  filterPropTypeUtil
1352
1385
  } from "@elementor/editor-props";
1353
1386
  import { MenuListItem as MenuListItem3 } from "@elementor/editor-ui";
1354
- import { Box as Box3, Grid as Grid4, Select as Select2 } from "@elementor/ui";
1355
- import { __ as __5 } from "@wordpress/i18n";
1387
+ import { Box as Box3, Grid as Grid5, Select as Select2 } from "@elementor/ui";
1388
+ import { __ as __6 } from "@wordpress/i18n";
1356
1389
 
1357
1390
  // src/components/control-label.tsx
1358
1391
  import * as React27 from "react";
@@ -1366,15 +1399,15 @@ var DEFAULT_FILTER_KEY = "blur";
1366
1399
  var filterConfig = {
1367
1400
  blur: {
1368
1401
  defaultValue: { $$type: "radius", radius: { $$type: "size", value: { size: 0, unit: "px" } } },
1369
- name: __5("Blur", "elementor"),
1370
- valueName: __5("Radius", "elementor"),
1402
+ name: __6("Blur", "elementor"),
1403
+ valueName: __6("Radius", "elementor"),
1371
1404
  propType: blurFilterPropTypeUtil,
1372
1405
  units: defaultUnits.filter((unit) => unit !== "%")
1373
1406
  },
1374
1407
  brightness: {
1375
1408
  defaultValue: { $$type: "amount", amount: { $$type: "size", value: { size: 100, unit: "%" } } },
1376
- name: __5("Brightness", "elementor"),
1377
- valueName: __5("Amount", "elementor"),
1409
+ name: __6("Brightness", "elementor"),
1410
+ valueName: __6("Amount", "elementor"),
1378
1411
  propType: brightnessFilterPropTypeUtil,
1379
1412
  units: ["%"]
1380
1413
  }
@@ -1393,7 +1426,7 @@ var FilterRepeaterControl = createControl(() => {
1393
1426
  disabled,
1394
1427
  values: filterValues ?? [],
1395
1428
  setValues: setValue,
1396
- label: __5("Filter", "elementor"),
1429
+ label: __6("Filter", "elementor"),
1397
1430
  itemSettings: {
1398
1431
  Icon: ItemIcon2,
1399
1432
  Label: ItemLabel2,
@@ -1432,7 +1465,7 @@ var ItemContent2 = ({ bind }) => {
1432
1465
  };
1433
1466
  setValue(newFilterValues);
1434
1467
  };
1435
- return /* @__PURE__ */ React28.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React28.createElement(PopoverContent, { p: 1.5 }, /* @__PURE__ */ React28.createElement(PopoverGridContainer, null, /* @__PURE__ */ React28.createElement(Grid4, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(ControlLabel, null, __5("Filter", "elementor"))), /* @__PURE__ */ React28.createElement(Grid4, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(
1468
+ return /* @__PURE__ */ React28.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React28.createElement(PopoverContent, { p: 1.5 }, /* @__PURE__ */ React28.createElement(PopoverGridContainer, null, /* @__PURE__ */ React28.createElement(Grid5, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(ControlLabel, null, __6("Filter", "elementor"))), /* @__PURE__ */ React28.createElement(Grid5, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(
1436
1469
  Select2,
1437
1470
  {
1438
1471
  sx: { overflow: "hidden" },
@@ -1452,7 +1485,7 @@ var SingleSizeItemContent = ({ filterType }) => {
1452
1485
  const { $$type } = defaultValue;
1453
1486
  const context = useBoundProp(propType);
1454
1487
  const rowRef = useRef4(null);
1455
- return /* @__PURE__ */ React28.createElement(PropProvider, { ...context }, /* @__PURE__ */ React28.createElement(PropKeyProvider, { bind: $$type }, /* @__PURE__ */ React28.createElement(PopoverGridContainer, { ref: rowRef }, /* @__PURE__ */ React28.createElement(Grid4, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(ControlLabel, null, valueName)), /* @__PURE__ */ React28.createElement(Grid4, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(SizeControl, { anchorRef: rowRef, units: units2 })))));
1488
+ return /* @__PURE__ */ React28.createElement(PropProvider, { ...context }, /* @__PURE__ */ React28.createElement(PropKeyProvider, { bind: $$type }, /* @__PURE__ */ React28.createElement(PopoverGridContainer, { ref: rowRef }, /* @__PURE__ */ React28.createElement(Grid5, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(ControlLabel, null, valueName)), /* @__PURE__ */ React28.createElement(Grid5, { item: true, xs: 6 }, /* @__PURE__ */ React28.createElement(SizeControl, { anchorRef: rowRef, units: units2 })))));
1456
1489
  };
1457
1490
 
1458
1491
  // src/controls/toggle-control.tsx
@@ -1470,7 +1503,7 @@ import {
1470
1503
  styled as styled3,
1471
1504
  ToggleButton,
1472
1505
  ToggleButtonGroup,
1473
- Typography as Typography2,
1506
+ Typography as Typography3,
1474
1507
  useTheme
1475
1508
  } from "@elementor/ui";
1476
1509
 
@@ -1634,7 +1667,7 @@ var SplitButtonGroup = ({
1634
1667
  selected: buttonValue === value,
1635
1668
  onClick: () => onMenuItemClick(buttonValue)
1636
1669
  },
1637
- /* @__PURE__ */ React30.createElement(ListItemText, null, /* @__PURE__ */ React30.createElement(Typography2, { sx: { fontSize: "14px" } }, label))
1670
+ /* @__PURE__ */ React30.createElement(ListItemText, null, /* @__PURE__ */ React30.createElement(Typography3, { sx: { fontSize: "14px" } }, label))
1638
1671
  ))
1639
1672
  ));
1640
1673
  };
@@ -1746,8 +1779,8 @@ import * as React33 from "react";
1746
1779
  import { useId as useId2, useRef as useRef6 } from "react";
1747
1780
  import { sizePropTypeUtil as sizePropTypeUtil2 } from "@elementor/editor-props";
1748
1781
  import { isExperimentActive as isExperimentActive2 } from "@elementor/editor-v1-adapters";
1749
- import { bindPopover as bindPopover3, bindToggle, Grid as Grid5, Popover as Popover3, Stack as Stack7, ToggleButton as ToggleButton2, Tooltip as Tooltip3, usePopupState as usePopupState4 } from "@elementor/ui";
1750
- import { __ as __6 } from "@wordpress/i18n";
1782
+ import { bindPopover as bindPopover3, bindToggle, Grid as Grid6, Popover as Popover3, Stack as Stack7, ToggleButton as ToggleButton2, Tooltip as Tooltip3, usePopupState as usePopupState4 } from "@elementor/ui";
1783
+ import { __ as __7 } from "@wordpress/i18n";
1751
1784
  var isEqualSizes = (propValue, items) => {
1752
1785
  const values = Object.values(propValue);
1753
1786
  if (values.length !== items.length) {
@@ -1803,10 +1836,10 @@ function EqualUnequalSizesControl({
1803
1836
  };
1804
1837
  const isShowingGeneralIndicator = !isExperimentActive2("e_v_3_30") || !popupState.isOpen;
1805
1838
  const isMixed = !!multiSizeValue;
1806
- return /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement(Grid5, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap", ref: rowRefs[0] }, /* @__PURE__ */ React33.createElement(Grid5, { item: true, xs: 6 }, !isShowingGeneralIndicator ? /* @__PURE__ */ React33.createElement(ControlFormLabel, null, label) : /* @__PURE__ */ React33.createElement(ControlLabel, null, label)), /* @__PURE__ */ React33.createElement(Grid5, { item: true, xs: 6 }, /* @__PURE__ */ React33.createElement(Stack7, { direction: "row", alignItems: "center", gap: 1 }, /* @__PURE__ */ React33.createElement(
1839
+ return /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement(Grid6, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap", ref: rowRefs[0] }, /* @__PURE__ */ React33.createElement(Grid6, { item: true, xs: 6 }, !isShowingGeneralIndicator ? /* @__PURE__ */ React33.createElement(ControlFormLabel, null, label) : /* @__PURE__ */ React33.createElement(ControlLabel, null, label)), /* @__PURE__ */ React33.createElement(Grid6, { item: true, xs: 6 }, /* @__PURE__ */ React33.createElement(Stack7, { direction: "row", alignItems: "center", gap: 1 }, /* @__PURE__ */ React33.createElement(
1807
1840
  SizeControl,
1808
1841
  {
1809
- placeholder: isMixed ? __6("Mixed", "elementor") : void 0,
1842
+ placeholder: isMixed ? __7("Mixed", "elementor") : void 0,
1810
1843
  anchorRef: rowRefs[0]
1811
1844
  }
1812
1845
  ), /* @__PURE__ */ React33.createElement(Tooltip3, { title: tooltipLabel, placement: "top" }, /* @__PURE__ */ React33.createElement(
@@ -1844,7 +1877,7 @@ function EqualUnequalSizesControl({
1844
1877
  propType: multiSizePropType,
1845
1878
  value: getMultiSizeValues(),
1846
1879
  setValue: setNestedProp,
1847
- disabled: multiSizeDisabled
1880
+ isDisabled: () => multiSizeDisabled
1848
1881
  },
1849
1882
  /* @__PURE__ */ React33.createElement(PopoverContent, { p: 1.5 }, /* @__PURE__ */ React33.createElement(PopoverGridContainer, { ref: rowRefs[1] }, /* @__PURE__ */ React33.createElement(MultiSizeValueControl, { item: items[0], rowRef: rowRefs[1] }), /* @__PURE__ */ React33.createElement(MultiSizeValueControl, { item: items[1], rowRef: rowRefs[1] })), /* @__PURE__ */ React33.createElement(PopoverGridContainer, { ref: rowRefs[2] }, /* @__PURE__ */ React33.createElement(MultiSizeValueControl, { item: items[2], rowRef: rowRefs[2] }), /* @__PURE__ */ React33.createElement(MultiSizeValueControl, { item: items[3], rowRef: rowRefs[2] })))
1850
1883
  )
@@ -1852,7 +1885,7 @@ function EqualUnequalSizesControl({
1852
1885
  }
1853
1886
  var MultiSizeValueControl = ({ item, rowRef }) => {
1854
1887
  const isUsingNestedProps = isExperimentActive2("e_v_3_30");
1855
- return /* @__PURE__ */ React33.createElement(PropKeyProvider, { bind: item.bind }, /* @__PURE__ */ React33.createElement(Grid5, { item: true, xs: 6 }, /* @__PURE__ */ React33.createElement(Grid5, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React33.createElement(Grid5, { item: true, xs: 12 }, isUsingNestedProps ? /* @__PURE__ */ React33.createElement(ControlLabel, null, item.label) : /* @__PURE__ */ React33.createElement(ControlFormLabel, null, item.label)), /* @__PURE__ */ React33.createElement(Grid5, { item: true, xs: 12 }, /* @__PURE__ */ React33.createElement(SizeControl, { startIcon: item.icon, anchorRef: rowRef })))));
1888
+ return /* @__PURE__ */ React33.createElement(PropKeyProvider, { bind: item.bind }, /* @__PURE__ */ React33.createElement(Grid6, { item: true, xs: 6 }, /* @__PURE__ */ React33.createElement(Grid6, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React33.createElement(Grid6, { item: true, xs: 12 }, isUsingNestedProps ? /* @__PURE__ */ React33.createElement(ControlLabel, null, item.label) : /* @__PURE__ */ React33.createElement(ControlFormLabel, null, item.label)), /* @__PURE__ */ React33.createElement(Grid6, { item: true, xs: 12 }, /* @__PURE__ */ React33.createElement(SizeControl, { startIcon: item.icon, anchorRef: rowRef })))));
1856
1889
  };
1857
1890
 
1858
1891
  // src/controls/linked-dimensions-control.tsx
@@ -1861,8 +1894,8 @@ import { useRef as useRef7 } from "react";
1861
1894
  import { dimensionsPropTypeUtil, sizePropTypeUtil as sizePropTypeUtil3 } from "@elementor/editor-props";
1862
1895
  import { isExperimentActive as isExperimentActive3 } from "@elementor/editor-v1-adapters";
1863
1896
  import { DetachIcon, LinkIcon, SideBottomIcon, SideLeftIcon, SideRightIcon, SideTopIcon } from "@elementor/icons";
1864
- import { Grid as Grid6, Stack as Stack8, ToggleButton as ToggleButton3, Tooltip as Tooltip4 } from "@elementor/ui";
1865
- import { __ as __7 } from "@wordpress/i18n";
1897
+ import { Grid as Grid7, Stack as Stack8, ToggleButton as ToggleButton3, Tooltip as Tooltip4 } from "@elementor/ui";
1898
+ import { __ as __8 } from "@wordpress/i18n";
1866
1899
  var LinkedDimensionsControl = createControl(
1867
1900
  ({
1868
1901
  label,
@@ -1894,8 +1927,8 @@ var LinkedDimensionsControl = createControl(
1894
1927
  };
1895
1928
  const tooltipLabel = label.toLowerCase();
1896
1929
  const LinkedIcon = isLinked ? LinkIcon : DetachIcon;
1897
- const linkedLabel = __7("Link %s", "elementor").replace("%s", tooltipLabel);
1898
- const unlinkedLabel = __7("Unlink %s", "elementor").replace("%s", tooltipLabel);
1930
+ const linkedLabel = __8("Link %s", "elementor").replace("%s", tooltipLabel);
1931
+ const unlinkedLabel = __8("Unlink %s", "elementor").replace("%s", tooltipLabel);
1899
1932
  const disabled = sizeDisabled || dimensionsDisabled;
1900
1933
  return /* @__PURE__ */ React34.createElement(
1901
1934
  PropProvider,
@@ -1903,7 +1936,7 @@ var LinkedDimensionsControl = createControl(
1903
1936
  propType,
1904
1937
  value: dimensionsValue,
1905
1938
  setValue: setDimensionsValue,
1906
- disabled
1939
+ isDisabled: () => disabled
1907
1940
  },
1908
1941
  /* @__PURE__ */ React34.createElement(Stack8, { direction: "row", gap: 2, flexWrap: "nowrap" }, isUsingNestedProps ? /* @__PURE__ */ React34.createElement(ControlFormLabel, null, label) : /* @__PURE__ */ React34.createElement(ControlLabel, null, label), /* @__PURE__ */ React34.createElement(Tooltip4, { title: isLinked ? unlinkedLabel : linkedLabel, placement: "top" }, /* @__PURE__ */ React34.createElement(
1909
1942
  ToggleButton3,
@@ -1918,7 +1951,7 @@ var LinkedDimensionsControl = createControl(
1918
1951
  },
1919
1952
  /* @__PURE__ */ React34.createElement(LinkedIcon, { fontSize: "tiny" })
1920
1953
  ))),
1921
- getCssMarginProps(isSiteRtl).map((row, index) => /* @__PURE__ */ React34.createElement(Stack8, { direction: "row", gap: 2, flexWrap: "nowrap", key: index, ref: gridRowRefs[index] }, row.map(({ icon, ...props }) => /* @__PURE__ */ React34.createElement(Grid6, { container: true, gap: 0.75, alignItems: "center", key: props.bind }, /* @__PURE__ */ React34.createElement(Grid6, { item: true, xs: 12 }, /* @__PURE__ */ React34.createElement(Label, { ...props })), /* @__PURE__ */ React34.createElement(Grid6, { item: true, xs: 12 }, /* @__PURE__ */ React34.createElement(
1954
+ getCssMarginProps(isSiteRtl).map((row, index) => /* @__PURE__ */ React34.createElement(Stack8, { direction: "row", gap: 2, flexWrap: "nowrap", key: index, ref: gridRowRefs[index] }, row.map(({ icon, ...props }) => /* @__PURE__ */ React34.createElement(Grid7, { container: true, gap: 0.75, alignItems: "center", key: props.bind }, /* @__PURE__ */ React34.createElement(Grid7, { item: true, xs: 12 }, /* @__PURE__ */ React34.createElement(Label, { ...props })), /* @__PURE__ */ React34.createElement(Grid7, { item: true, xs: 12 }, /* @__PURE__ */ React34.createElement(
1922
1955
  Control3,
1923
1956
  {
1924
1957
  bind: props.bind,
@@ -1955,24 +1988,24 @@ function getCssMarginProps(isSiteRtl) {
1955
1988
  [
1956
1989
  {
1957
1990
  bind: "block-start",
1958
- label: __7("Top", "elementor"),
1991
+ label: __8("Top", "elementor"),
1959
1992
  icon: /* @__PURE__ */ React34.createElement(SideTopIcon, { fontSize: "tiny" })
1960
1993
  },
1961
1994
  {
1962
1995
  bind: "inline-end",
1963
- label: isSiteRtl ? __7("Left", "elementor") : __7("Right", "elementor"),
1996
+ label: isSiteRtl ? __8("Left", "elementor") : __8("Right", "elementor"),
1964
1997
  icon: isSiteRtl ? /* @__PURE__ */ React34.createElement(SideLeftIcon, { fontSize: "tiny" }) : /* @__PURE__ */ React34.createElement(SideRightIcon, { fontSize: "tiny" })
1965
1998
  }
1966
1999
  ],
1967
2000
  [
1968
2001
  {
1969
2002
  bind: "block-end",
1970
- label: __7("Bottom", "elementor"),
2003
+ label: __8("Bottom", "elementor"),
1971
2004
  icon: /* @__PURE__ */ React34.createElement(SideBottomIcon, { fontSize: "tiny" })
1972
2005
  },
1973
2006
  {
1974
2007
  bind: "inline-start",
1975
- label: isSiteRtl ? __7("Right", "elementor") : __7("Left", "elementor"),
2008
+ label: isSiteRtl ? __8("Right", "elementor") : __8("Left", "elementor"),
1976
2009
  icon: isSiteRtl ? /* @__PURE__ */ React34.createElement(SideRightIcon, { fontSize: "tiny" }) : /* @__PURE__ */ React34.createElement(SideLeftIcon, { fontSize: "tiny" })
1977
2010
  }
1978
2011
  ]
@@ -1990,9 +2023,9 @@ import * as React35 from "react";
1990
2023
  import { useEffect as useEffect5, useState as useState6 } from "react";
1991
2024
  import { PopoverHeader, PopoverMenuList, PopoverScrollableContent, PopoverSearch } from "@elementor/editor-ui";
1992
2025
  import { TextIcon } from "@elementor/icons";
1993
- import { Box as Box4, Divider as Divider2, Link, Stack as Stack9, Typography as Typography3 } from "@elementor/ui";
2026
+ import { Box as Box4, Divider as Divider2, Link, Stack as Stack9, Typography as Typography4 } from "@elementor/ui";
1994
2027
  import { debounce } from "@elementor/utils";
1995
- import { __ as __8 } from "@wordpress/i18n";
2028
+ import { __ as __9 } from "@wordpress/i18n";
1996
2029
 
1997
2030
  // src/controls/font-family-control/enqueue-font.tsx
1998
2031
  var enqueueFont = (fontFamily, context = "editor") => {
@@ -2037,7 +2070,7 @@ var FontFamilySelector = ({
2037
2070
  return /* @__PURE__ */ React35.createElement(Stack9, null, /* @__PURE__ */ React35.createElement(
2038
2071
  PopoverHeader,
2039
2072
  {
2040
- title: __8("Font Family", "elementor"),
2073
+ title: __9("Font Family", "elementor"),
2041
2074
  onClose: handleClose,
2042
2075
  icon: /* @__PURE__ */ React35.createElement(TextIcon, { fontSize: SIZE2 })
2043
2076
  }
@@ -2046,7 +2079,7 @@ var FontFamilySelector = ({
2046
2079
  {
2047
2080
  value: searchValue,
2048
2081
  onSearch: handleSearch,
2049
- placeholder: __8("Search", "elementor")
2082
+ placeholder: __9("Search", "elementor")
2050
2083
  }
2051
2084
  ), /* @__PURE__ */ React35.createElement(Divider2, null), /* @__PURE__ */ React35.createElement(PopoverScrollableContent, { width: sectionWidth }, filteredFontFamilies.length > 0 ? /* @__PURE__ */ React35.createElement(
2052
2085
  FontList,
@@ -2067,8 +2100,8 @@ var FontFamilySelector = ({
2067
2100
  overflow: "hidden"
2068
2101
  },
2069
2102
  /* @__PURE__ */ React35.createElement(TextIcon, { fontSize: "large" }),
2070
- /* @__PURE__ */ React35.createElement(Box4, { sx: { maxWidth: 160, overflow: "hidden" } }, /* @__PURE__ */ React35.createElement(Typography3, { align: "center", variant: "subtitle2", color: "text.secondary" }, __8("Sorry, nothing matched", "elementor")), /* @__PURE__ */ React35.createElement(
2071
- Typography3,
2103
+ /* @__PURE__ */ React35.createElement(Box4, { sx: { maxWidth: 160, overflow: "hidden" } }, /* @__PURE__ */ React35.createElement(Typography4, { align: "center", variant: "subtitle2", color: "text.secondary" }, __9("Sorry, nothing matched", "elementor")), /* @__PURE__ */ React35.createElement(
2104
+ Typography4,
2072
2105
  {
2073
2106
  variant: "subtitle2",
2074
2107
  color: "text.secondary",
@@ -2083,14 +2116,14 @@ var FontFamilySelector = ({
2083
2116
  /* @__PURE__ */ React35.createElement("span", null, "\u201D.")
2084
2117
  )),
2085
2118
  /* @__PURE__ */ React35.createElement(
2086
- Typography3,
2119
+ Typography4,
2087
2120
  {
2088
2121
  align: "center",
2089
2122
  variant: "caption",
2090
2123
  color: "text.secondary",
2091
2124
  sx: { display: "flex", flexDirection: "column" }
2092
2125
  },
2093
- __8("Try something else.", "elementor"),
2126
+ __9("Try something else.", "elementor"),
2094
2127
  /* @__PURE__ */ React35.createElement(
2095
2128
  Link,
2096
2129
  {
@@ -2099,7 +2132,7 @@ var FontFamilySelector = ({
2099
2132
  component: "button",
2100
2133
  onClick: () => setSearchValue("")
2101
2134
  },
2102
- __8("Clear & try again", "elementor")
2135
+ __9("Clear & try again", "elementor")
2103
2136
  )
2104
2137
  )
2105
2138
  )));
@@ -2136,17 +2169,24 @@ var useDebounce = (fn, delay) => {
2136
2169
  // src/controls/font-family-control/font-family-control.tsx
2137
2170
  var SIZE3 = "tiny";
2138
2171
  var FontFamilyControl = createControl(({ fontFamilies, sectionWidth }) => {
2139
- const { value: fontFamily, setValue: setFontFamily, disabled } = useBoundProp(stringPropTypeUtil5);
2172
+ const { value: fontFamily, setValue: setFontFamily, disabled, placeholder } = useBoundProp(stringPropTypeUtil5);
2140
2173
  const popoverState = usePopupState5({ variant: "popover" });
2174
+ const isShowingPlaceholder = !fontFamily && placeholder;
2141
2175
  return /* @__PURE__ */ React36.createElement(React36.Fragment, null, /* @__PURE__ */ React36.createElement(ControlActions, null, /* @__PURE__ */ React36.createElement(
2142
2176
  UnstableTag2,
2143
2177
  {
2144
2178
  variant: "outlined",
2145
- label: fontFamily,
2179
+ label: fontFamily || placeholder,
2146
2180
  endIcon: /* @__PURE__ */ React36.createElement(ChevronDownIcon2, { fontSize: SIZE3 }),
2147
2181
  ...bindTrigger3(popoverState),
2148
2182
  fullWidth: true,
2149
- disabled
2183
+ disabled,
2184
+ sx: isShowingPlaceholder ? {
2185
+ "& .MuiTag-label": {
2186
+ color: (theme) => theme.palette.text.tertiary
2187
+ },
2188
+ textTransform: "capitalize"
2189
+ } : void 0
2150
2190
  }
2151
2191
  )), /* @__PURE__ */ React36.createElement(
2152
2192
  Popover4,
@@ -2192,23 +2232,24 @@ var UrlControl = createControl(({ placeholder }) => {
2192
2232
  });
2193
2233
 
2194
2234
  // src/controls/link-control.tsx
2195
- import * as React39 from "react";
2235
+ import * as React40 from "react";
2196
2236
  import { useMemo as useMemo3, useState as useState7 } from "react";
2197
2237
  import { getLinkInLinkRestriction, selectElement } from "@elementor/editor-elements";
2198
2238
  import {
2199
- booleanPropTypeUtil,
2239
+ booleanPropTypeUtil as booleanPropTypeUtil2,
2200
2240
  linkPropTypeUtil,
2201
2241
  numberPropTypeUtil as numberPropTypeUtil2,
2202
2242
  stringPropTypeUtil as stringPropTypeUtil6,
2203
2243
  urlPropTypeUtil as urlPropTypeUtil2
2204
2244
  } from "@elementor/editor-props";
2205
2245
  import { InfoTipCard } from "@elementor/editor-ui";
2246
+ import { isExperimentActive as isExperimentActive4 } from "@elementor/editor-v1-adapters";
2206
2247
  import { httpService as httpService2 } from "@elementor/http-client";
2207
2248
  import { AlertTriangleIcon, MinusIcon, PlusIcon as PlusIcon2 } from "@elementor/icons";
2208
2249
  import { useSessionStorage } from "@elementor/session";
2209
- import { Box as Box6, Collapse, Grid as Grid7, IconButton as IconButton3, Infotip, Stack as Stack10, Switch } from "@elementor/ui";
2250
+ import { Box as Box6, Collapse, Grid as Grid8, IconButton as IconButton3, Infotip, Stack as Stack10, Switch as Switch2 } from "@elementor/ui";
2210
2251
  import { debounce as debounce2 } from "@elementor/utils";
2211
- import { __ as __9 } from "@wordpress/i18n";
2252
+ import { __ as __10 } from "@wordpress/i18n";
2212
2253
 
2213
2254
  // src/components/autocomplete.tsx
2214
2255
  import * as React38 from "react";
@@ -2322,10 +2363,33 @@ function _factoryFilter(newValue, options, minInputLength) {
2322
2363
  );
2323
2364
  }
2324
2365
 
2366
+ // src/controls/switch-control.tsx
2367
+ import * as React39 from "react";
2368
+ import { booleanPropTypeUtil } from "@elementor/editor-props";
2369
+ import { Switch } from "@elementor/ui";
2370
+ var SwitchControl = createControl(() => {
2371
+ const { value, setValue, disabled } = useBoundProp(booleanPropTypeUtil);
2372
+ const handleChange = (event) => {
2373
+ setValue(event.target.checked);
2374
+ };
2375
+ return /* @__PURE__ */ React39.createElement("div", { style: { display: "flex", justifyContent: "flex-end" } }, /* @__PURE__ */ React39.createElement(
2376
+ Switch,
2377
+ {
2378
+ checked: !!value,
2379
+ onChange: handleChange,
2380
+ size: "small",
2381
+ disabled,
2382
+ inputProps: {
2383
+ ...disabled ? { style: { opacity: 0 } } : {}
2384
+ }
2385
+ }
2386
+ ));
2387
+ });
2388
+
2325
2389
  // src/controls/link-control.tsx
2326
2390
  var SIZE4 = "tiny";
2327
2391
  var learnMoreButton = {
2328
- label: __9("Learn More", "elementor"),
2392
+ label: __10("Learn More", "elementor"),
2329
2393
  href: "https://go.elementor.com/element-link-inside-link-infotip"
2330
2394
  };
2331
2395
  var LinkControl = createControl((props) => {
@@ -2338,7 +2402,7 @@ var LinkControl = createControl((props) => {
2338
2402
  placeholder,
2339
2403
  minInputLength = 2,
2340
2404
  context: { elementId },
2341
- label = __9("Link", "elementor")
2405
+ label = __10("Link", "elementor")
2342
2406
  } = props || {};
2343
2407
  const [linkInLinkRestriction, setLinkInLinkRestriction] = useState7(getLinkInLinkRestriction(elementId));
2344
2408
  const [options, setOptions] = useState7(
@@ -2401,7 +2465,7 @@ var LinkControl = createControl((props) => {
2401
2465
  ),
2402
2466
  [endpoint]
2403
2467
  );
2404
- return /* @__PURE__ */ React39.createElement(PropProvider, { ...propContext, value, setValue }, /* @__PURE__ */ React39.createElement(Stack10, { gap: 1.5 }, /* @__PURE__ */ React39.createElement(
2468
+ return /* @__PURE__ */ React40.createElement(PropProvider, { ...propContext, value, setValue }, /* @__PURE__ */ React40.createElement(Stack10, { gap: 1.5 }, /* @__PURE__ */ React40.createElement(
2405
2469
  Stack10,
2406
2470
  {
2407
2471
  direction: "row",
@@ -2411,17 +2475,17 @@ var LinkControl = createControl((props) => {
2411
2475
  marginInlineEnd: -0.75
2412
2476
  }
2413
2477
  },
2414
- /* @__PURE__ */ React39.createElement(ControlFormLabel, null, label),
2415
- /* @__PURE__ */ React39.createElement(ConditionalInfoTip, { isVisible: !isActive, linkInLinkRestriction }, /* @__PURE__ */ React39.createElement(
2478
+ /* @__PURE__ */ React40.createElement(ControlFormLabel, null, label),
2479
+ /* @__PURE__ */ React40.createElement(ConditionalInfoTip, { isVisible: !isActive, linkInLinkRestriction }, /* @__PURE__ */ React40.createElement(
2416
2480
  ToggleIconControl,
2417
2481
  {
2418
2482
  disabled: shouldDisableAddingLink,
2419
2483
  active: isActive,
2420
2484
  onIconClick: onEnabledChange,
2421
- label: __9("Toggle link", "elementor")
2485
+ label: __10("Toggle link", "elementor")
2422
2486
  }
2423
2487
  ))
2424
- ), /* @__PURE__ */ React39.createElement(Collapse, { in: isActive, timeout: "auto", unmountOnExit: true }, /* @__PURE__ */ React39.createElement(Stack10, { gap: 1.5 }, /* @__PURE__ */ React39.createElement(PropKeyProvider, { bind: "destination" }, /* @__PURE__ */ React39.createElement(ControlActions, null, /* @__PURE__ */ React39.createElement(
2488
+ ), /* @__PURE__ */ React40.createElement(Collapse, { in: isActive, timeout: "auto", unmountOnExit: true }, /* @__PURE__ */ React40.createElement(Stack10, { gap: 1.5 }, /* @__PURE__ */ React40.createElement(PropKeyProvider, { bind: "destination" }, /* @__PURE__ */ React40.createElement(ControlActions, null, /* @__PURE__ */ React40.createElement(
2425
2489
  Autocomplete,
2426
2490
  {
2427
2491
  options,
@@ -2432,22 +2496,31 @@ var LinkControl = createControl((props) => {
2432
2496
  onTextChange,
2433
2497
  minInputLength
2434
2498
  }
2435
- ))), /* @__PURE__ */ React39.createElement(PropKeyProvider, { bind: "isTargetBlank" }, /* @__PURE__ */ React39.createElement(SwitchControl, { disabled: propContext.disabled || !value }))))));
2499
+ ))), /* @__PURE__ */ React40.createElement(PropKeyProvider, { bind: "isTargetBlank" }, /* @__PURE__ */ React40.createElement(Grid8, { container: true, alignItems: "center", flexWrap: "nowrap", justifyContent: "space-between" }, /* @__PURE__ */ React40.createElement(Grid8, { item: true }, /* @__PURE__ */ React40.createElement(ControlFormLabel, null, __10("Open in a new tab", "elementor"))), /* @__PURE__ */ React40.createElement(Grid8, { item: true, sx: { marginInlineEnd: -1 } }, /* @__PURE__ */ React40.createElement(SwitchControlComponent, { disabled: propContext.disabled || !value }))))))));
2436
2500
  });
2437
2501
  var ToggleIconControl = ({ disabled, active, onIconClick, label }) => {
2438
- return /* @__PURE__ */ React39.createElement(IconButton3, { size: SIZE4, onClick: onIconClick, "aria-label": label, disabled }, active ? /* @__PURE__ */ React39.createElement(MinusIcon, { fontSize: SIZE4 }) : /* @__PURE__ */ React39.createElement(PlusIcon2, { fontSize: SIZE4 }));
2502
+ return /* @__PURE__ */ React40.createElement(IconButton3, { size: SIZE4, onClick: onIconClick, "aria-label": label, disabled }, active ? /* @__PURE__ */ React40.createElement(MinusIcon, { fontSize: SIZE4 }) : /* @__PURE__ */ React40.createElement(PlusIcon2, { fontSize: SIZE4 }));
2439
2503
  };
2440
- var SwitchControl = ({ disabled }) => {
2441
- const { value = false, setValue } = useBoundProp(booleanPropTypeUtil);
2504
+ var SwitchControlComponent = ({ disabled }) => {
2505
+ const { value, setValue } = useBoundProp(booleanPropTypeUtil2);
2506
+ const isVersion331Active = isExperimentActive4("e_v_3_31");
2507
+ if (isVersion331Active) {
2508
+ return /* @__PURE__ */ React40.createElement(SwitchControl, null);
2509
+ }
2442
2510
  const onClick = () => {
2443
2511
  setValue(!value);
2444
2512
  };
2445
- const inputProps = disabled ? {
2446
- style: {
2447
- opacity: 0
2513
+ return /* @__PURE__ */ React40.createElement(
2514
+ Switch2,
2515
+ {
2516
+ checked: value ?? false,
2517
+ onClick,
2518
+ disabled,
2519
+ inputProps: {
2520
+ ...disabled ? { style: { opacity: 0 } } : {}
2521
+ }
2448
2522
  }
2449
- } : {};
2450
- return /* @__PURE__ */ React39.createElement(Grid7, { container: true, alignItems: "center", flexWrap: "nowrap", justifyContent: "space-between" }, /* @__PURE__ */ React39.createElement(Grid7, { item: true }, /* @__PURE__ */ React39.createElement(ControlFormLabel, null, __9("Open in a new tab", "elementor"))), /* @__PURE__ */ React39.createElement(Grid7, { item: true, sx: { marginInlineEnd: -1 } }, /* @__PURE__ */ React39.createElement(Switch, { checked: value, onClick, disabled, inputProps })));
2523
+ );
2451
2524
  };
2452
2525
  async function fetchOptions(ajaxUrl, params) {
2453
2526
  if (!params || !ajaxUrl) {
@@ -2484,38 +2557,38 @@ var ConditionalInfoTip = ({ linkInLinkRestriction, isVisible, children }) => {
2484
2557
  selectElement(elementId);
2485
2558
  }
2486
2559
  };
2487
- return shouldRestrict && isVisible ? /* @__PURE__ */ React39.createElement(
2560
+ return shouldRestrict && isVisible ? /* @__PURE__ */ React40.createElement(
2488
2561
  Infotip,
2489
2562
  {
2490
2563
  placement: "right",
2491
- content: /* @__PURE__ */ React39.createElement(
2564
+ content: /* @__PURE__ */ React40.createElement(
2492
2565
  InfoTipCard,
2493
2566
  {
2494
2567
  content: INFOTIP_CONTENT[reason],
2495
- svgIcon: /* @__PURE__ */ React39.createElement(AlertTriangleIcon, null),
2568
+ svgIcon: /* @__PURE__ */ React40.createElement(AlertTriangleIcon, null),
2496
2569
  learnMoreButton,
2497
2570
  ctaButton: {
2498
- label: __9("Take me there", "elementor"),
2571
+ label: __10("Take me there", "elementor"),
2499
2572
  onClick: handleTakeMeClick
2500
2573
  }
2501
2574
  }
2502
2575
  )
2503
2576
  },
2504
- /* @__PURE__ */ React39.createElement(Box6, null, children)
2505
- ) : /* @__PURE__ */ React39.createElement(React39.Fragment, null, children);
2577
+ /* @__PURE__ */ React40.createElement(Box6, null, children)
2578
+ ) : /* @__PURE__ */ React40.createElement(React40.Fragment, null, children);
2506
2579
  };
2507
2580
  var INFOTIP_CONTENT = {
2508
- descendant: /* @__PURE__ */ React39.createElement(React39.Fragment, null, __9("To add a link to this container,", "elementor"), /* @__PURE__ */ React39.createElement("br", null), __9("first remove the link from the elements inside of it.", "elementor")),
2509
- ancestor: /* @__PURE__ */ React39.createElement(React39.Fragment, null, __9("To add a link to this element,", "elementor"), /* @__PURE__ */ React39.createElement("br", null), __9("first remove the link from its parent container.", "elementor"))
2581
+ descendant: /* @__PURE__ */ React40.createElement(React40.Fragment, null, __10("To add a link to this container,", "elementor"), /* @__PURE__ */ React40.createElement("br", null), __10("first remove the link from the elements inside of it.", "elementor")),
2582
+ ancestor: /* @__PURE__ */ React40.createElement(React40.Fragment, null, __10("To add a link to this element,", "elementor"), /* @__PURE__ */ React40.createElement("br", null), __10("first remove the link from its parent container.", "elementor"))
2510
2583
  };
2511
2584
 
2512
2585
  // src/controls/gap-control.tsx
2513
- import * as React40 from "react";
2586
+ import * as React41 from "react";
2514
2587
  import { useRef as useRef8 } from "react";
2515
2588
  import { layoutDirectionPropTypeUtil, sizePropTypeUtil as sizePropTypeUtil4 } from "@elementor/editor-props";
2516
2589
  import { DetachIcon as DetachIcon2, LinkIcon as LinkIcon2 } from "@elementor/icons";
2517
- import { Grid as Grid8, Stack as Stack11, ToggleButton as ToggleButton4, Tooltip as Tooltip5 } from "@elementor/ui";
2518
- import { __ as __10 } from "@wordpress/i18n";
2590
+ import { Grid as Grid9, Stack as Stack11, ToggleButton as ToggleButton4, Tooltip as Tooltip5 } from "@elementor/ui";
2591
+ import { __ as __11 } from "@wordpress/i18n";
2519
2592
  var GapControl = createControl(({ label }) => {
2520
2593
  const {
2521
2594
  value: directionValue,
@@ -2539,10 +2612,10 @@ var GapControl = createControl(({ label }) => {
2539
2612
  };
2540
2613
  const tooltipLabel = label.toLowerCase();
2541
2614
  const LinkedIcon = isLinked ? LinkIcon2 : DetachIcon2;
2542
- const linkedLabel = __10("Link %s", "elementor").replace("%s", tooltipLabel);
2543
- const unlinkedLabel = __10("Unlink %s", "elementor").replace("%s", tooltipLabel);
2615
+ const linkedLabel = __11("Link %s", "elementor").replace("%s", tooltipLabel);
2616
+ const unlinkedLabel = __11("Unlink %s", "elementor").replace("%s", tooltipLabel);
2544
2617
  const disabled = sizeDisabled || directionDisabled;
2545
- return /* @__PURE__ */ React40.createElement(PropProvider, { propType, value: directionValue, setValue: setDirectionValue }, /* @__PURE__ */ React40.createElement(Stack11, { direction: "row", gap: 2, flexWrap: "nowrap" }, /* @__PURE__ */ React40.createElement(ControlLabel, null, label), /* @__PURE__ */ React40.createElement(Tooltip5, { title: isLinked ? unlinkedLabel : linkedLabel, placement: "top" }, /* @__PURE__ */ React40.createElement(
2618
+ return /* @__PURE__ */ React41.createElement(PropProvider, { propType, value: directionValue, setValue: setDirectionValue }, /* @__PURE__ */ React41.createElement(Stack11, { direction: "row", gap: 2, flexWrap: "nowrap" }, /* @__PURE__ */ React41.createElement(ControlLabel, null, label), /* @__PURE__ */ React41.createElement(Tooltip5, { title: isLinked ? unlinkedLabel : linkedLabel, placement: "top" }, /* @__PURE__ */ React41.createElement(
2546
2619
  ToggleButton4,
2547
2620
  {
2548
2621
  "aria-label": isLinked ? unlinkedLabel : linkedLabel,
@@ -2553,8 +2626,8 @@ var GapControl = createControl(({ label }) => {
2553
2626
  onChange: onLinkToggle,
2554
2627
  disabled
2555
2628
  },
2556
- /* @__PURE__ */ React40.createElement(LinkedIcon, { fontSize: "tiny" })
2557
- ))), /* @__PURE__ */ React40.createElement(Stack11, { direction: "row", gap: 2, flexWrap: "nowrap", ref: stackRef }, /* @__PURE__ */ React40.createElement(Grid8, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React40.createElement(Grid8, { item: true, xs: 12 }, /* @__PURE__ */ React40.createElement(ControlFormLabel, null, __10("Column", "elementor"))), /* @__PURE__ */ React40.createElement(Grid8, { item: true, xs: 12 }, /* @__PURE__ */ React40.createElement(Control4, { bind: "column", isLinked, anchorRef: stackRef }))), /* @__PURE__ */ React40.createElement(Grid8, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React40.createElement(Grid8, { item: true, xs: 12 }, /* @__PURE__ */ React40.createElement(ControlFormLabel, null, __10("Row", "elementor"))), /* @__PURE__ */ React40.createElement(Grid8, { item: true, xs: 12 }, /* @__PURE__ */ React40.createElement(Control4, { bind: "row", isLinked, anchorRef: stackRef })))));
2629
+ /* @__PURE__ */ React41.createElement(LinkedIcon, { fontSize: "tiny" })
2630
+ ))), /* @__PURE__ */ React41.createElement(Stack11, { direction: "row", gap: 2, flexWrap: "nowrap", ref: stackRef }, /* @__PURE__ */ React41.createElement(Grid9, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 12 }, /* @__PURE__ */ React41.createElement(ControlFormLabel, null, __11("Column", "elementor"))), /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 12 }, /* @__PURE__ */ React41.createElement(Control4, { bind: "column", isLinked, anchorRef: stackRef }))), /* @__PURE__ */ React41.createElement(Grid9, { container: true, gap: 0.75, alignItems: "center" }, /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 12 }, /* @__PURE__ */ React41.createElement(ControlFormLabel, null, __11("Row", "elementor"))), /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 12 }, /* @__PURE__ */ React41.createElement(Control4, { bind: "row", isLinked, anchorRef: stackRef })))));
2558
2631
  });
2559
2632
  var Control4 = ({
2560
2633
  bind,
@@ -2562,21 +2635,21 @@ var Control4 = ({
2562
2635
  anchorRef
2563
2636
  }) => {
2564
2637
  if (isLinked) {
2565
- return /* @__PURE__ */ React40.createElement(SizeControl, { anchorRef });
2638
+ return /* @__PURE__ */ React41.createElement(SizeControl, { anchorRef });
2566
2639
  }
2567
- return /* @__PURE__ */ React40.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React40.createElement(SizeControl, { anchorRef }));
2640
+ return /* @__PURE__ */ React41.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React41.createElement(SizeControl, { anchorRef }));
2568
2641
  };
2569
2642
 
2570
2643
  // src/controls/aspect-ratio-control.tsx
2571
- import * as React41 from "react";
2644
+ import * as React42 from "react";
2572
2645
  import { useEffect as useEffect6, useState as useState8 } from "react";
2573
2646
  import { stringPropTypeUtil as stringPropTypeUtil7 } from "@elementor/editor-props";
2574
2647
  import { MenuListItem as MenuListItem4 } from "@elementor/editor-ui";
2575
2648
  import { ArrowsMoveHorizontalIcon, ArrowsMoveVerticalIcon } from "@elementor/icons";
2576
- import { Grid as Grid9, Select as Select3, Stack as Stack12, TextField as TextField8 } from "@elementor/ui";
2577
- import { __ as __11 } from "@wordpress/i18n";
2649
+ import { Grid as Grid10, Select as Select3, Stack as Stack12, TextField as TextField8 } from "@elementor/ui";
2650
+ import { __ as __12 } from "@wordpress/i18n";
2578
2651
  var RATIO_OPTIONS = [
2579
- { label: __11("Auto", "elementor"), value: "auto" },
2652
+ { label: __12("Auto", "elementor"), value: "auto" },
2580
2653
  { label: "1/1", value: "1/1" },
2581
2654
  { label: "4/3", value: "4/3" },
2582
2655
  { label: "3/4", value: "3/4" },
@@ -2635,7 +2708,7 @@ var AspectRatioControl = createControl(({ label }) => {
2635
2708
  setAspectRatioValue(`${customWidth}/${newHeight}`);
2636
2709
  }
2637
2710
  };
2638
- return /* @__PURE__ */ React41.createElement(ControlActions, null, /* @__PURE__ */ React41.createElement(Stack12, { direction: "column", gap: 2 }, /* @__PURE__ */ React41.createElement(Grid9, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 6 }, /* @__PURE__ */ React41.createElement(ControlLabel, null, label)), /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 6 }, /* @__PURE__ */ React41.createElement(
2711
+ return /* @__PURE__ */ React42.createElement(ControlActions, null, /* @__PURE__ */ React42.createElement(Stack12, { direction: "column", gap: 2 }, /* @__PURE__ */ React42.createElement(Grid10, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React42.createElement(Grid10, { item: true, xs: 6 }, /* @__PURE__ */ React42.createElement(ControlLabel, null, label)), /* @__PURE__ */ React42.createElement(Grid10, { item: true, xs: 6 }, /* @__PURE__ */ React42.createElement(
2639
2712
  Select3,
2640
2713
  {
2641
2714
  size: "tiny",
@@ -2646,10 +2719,10 @@ var AspectRatioControl = createControl(({ label }) => {
2646
2719
  onChange: handleSelectChange,
2647
2720
  fullWidth: true
2648
2721
  },
2649
- [...RATIO_OPTIONS, { label: __11("Custom", "elementor"), value: CUSTOM_RATIO }].map(
2650
- ({ label: optionLabel, ...props }) => /* @__PURE__ */ React41.createElement(MenuListItem4, { key: props.value, ...props, value: props.value ?? "" }, optionLabel)
2722
+ [...RATIO_OPTIONS, { label: __12("Custom", "elementor"), value: CUSTOM_RATIO }].map(
2723
+ ({ label: optionLabel, ...props }) => /* @__PURE__ */ React42.createElement(MenuListItem4, { key: props.value, ...props, value: props.value ?? "" }, optionLabel)
2651
2724
  )
2652
- ))), isCustom && /* @__PURE__ */ React41.createElement(Grid9, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 6 }, /* @__PURE__ */ React41.createElement(
2725
+ ))), isCustom && /* @__PURE__ */ React42.createElement(Grid10, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React42.createElement(Grid10, { item: true, xs: 6 }, /* @__PURE__ */ React42.createElement(
2653
2726
  TextField8,
2654
2727
  {
2655
2728
  size: "tiny",
@@ -2659,10 +2732,10 @@ var AspectRatioControl = createControl(({ label }) => {
2659
2732
  value: customWidth,
2660
2733
  onChange: handleCustomWidthChange,
2661
2734
  InputProps: {
2662
- startAdornment: /* @__PURE__ */ React41.createElement(ArrowsMoveHorizontalIcon, { fontSize: "tiny" })
2735
+ startAdornment: /* @__PURE__ */ React42.createElement(ArrowsMoveHorizontalIcon, { fontSize: "tiny" })
2663
2736
  }
2664
2737
  }
2665
- )), /* @__PURE__ */ React41.createElement(Grid9, { item: true, xs: 6 }, /* @__PURE__ */ React41.createElement(
2738
+ )), /* @__PURE__ */ React42.createElement(Grid10, { item: true, xs: 6 }, /* @__PURE__ */ React42.createElement(
2666
2739
  TextField8,
2667
2740
  {
2668
2741
  size: "tiny",
@@ -2672,23 +2745,23 @@ var AspectRatioControl = createControl(({ label }) => {
2672
2745
  value: customHeight,
2673
2746
  onChange: handleCustomHeightChange,
2674
2747
  InputProps: {
2675
- startAdornment: /* @__PURE__ */ React41.createElement(ArrowsMoveVerticalIcon, { fontSize: "tiny" })
2748
+ startAdornment: /* @__PURE__ */ React42.createElement(ArrowsMoveVerticalIcon, { fontSize: "tiny" })
2676
2749
  }
2677
2750
  }
2678
2751
  )))));
2679
2752
  });
2680
2753
 
2681
2754
  // src/controls/svg-media-control.tsx
2682
- import * as React43 from "react";
2755
+ import * as React44 from "react";
2683
2756
  import { useState as useState10 } from "react";
2684
2757
  import { imageSrcPropTypeUtil as imageSrcPropTypeUtil2 } from "@elementor/editor-props";
2685
2758
  import { UploadIcon as UploadIcon2 } from "@elementor/icons";
2686
2759
  import { Button as Button4, Card as Card2, CardMedia as CardMedia2, CardOverlay as CardOverlay2, CircularProgress as CircularProgress3, Stack as Stack13, styled as styled4 } from "@elementor/ui";
2687
2760
  import { useWpMediaAttachment as useWpMediaAttachment2, useWpMediaFrame as useWpMediaFrame2 } from "@elementor/wp-media";
2688
- import { __ as __13 } from "@wordpress/i18n";
2761
+ import { __ as __14 } from "@wordpress/i18n";
2689
2762
 
2690
2763
  // src/components/enable-unfiltered-modal.tsx
2691
- import * as React42 from "react";
2764
+ import * as React43 from "react";
2692
2765
  import { useState as useState9 } from "react";
2693
2766
  import { useCurrentUserCapabilities } from "@elementor/editor-current-user";
2694
2767
  import {
@@ -2702,19 +2775,19 @@ import {
2702
2775
  DialogTitle,
2703
2776
  Divider as Divider3
2704
2777
  } from "@elementor/ui";
2705
- import { __ as __12 } from "@wordpress/i18n";
2706
- var ADMIN_TITLE_TEXT = __12("Enable Unfiltered Uploads", "elementor");
2707
- var ADMIN_CONTENT_TEXT = __12(
2778
+ import { __ as __13 } from "@wordpress/i18n";
2779
+ var ADMIN_TITLE_TEXT = __13("Enable Unfiltered Uploads", "elementor");
2780
+ var ADMIN_CONTENT_TEXT = __13(
2708
2781
  "Before you enable unfiltered files upload, note that such files include a security risk. Elementor does run a process to remove possible malicious code, but there is still risk involved when using such files.",
2709
2782
  "elementor"
2710
2783
  );
2711
- var NON_ADMIN_TITLE_TEXT = __12("Sorry, you can't upload that file yet", "elementor");
2712
- var NON_ADMIN_CONTENT_TEXT = __12(
2784
+ var NON_ADMIN_TITLE_TEXT = __13("Sorry, you can't upload that file yet", "elementor");
2785
+ var NON_ADMIN_CONTENT_TEXT = __13(
2713
2786
  "This is because this file type may pose a security risk. To upload them anyway, ask the site administrator to enable unfiltered file uploads.",
2714
2787
  "elementor"
2715
2788
  );
2716
- var ADMIN_FAILED_CONTENT_TEXT_PT1 = __12("Failed to enable unfiltered files upload.", "elementor");
2717
- var ADMIN_FAILED_CONTENT_TEXT_PT2 = __12(
2789
+ var ADMIN_FAILED_CONTENT_TEXT_PT1 = __13("Failed to enable unfiltered files upload.", "elementor");
2790
+ var ADMIN_FAILED_CONTENT_TEXT_PT2 = __13(
2718
2791
  "You can try again, if the problem persists, please contact support.",
2719
2792
  "elementor"
2720
2793
  );
@@ -2741,9 +2814,9 @@ var EnableUnfilteredModal = (props) => {
2741
2814
  }
2742
2815
  };
2743
2816
  const dialogProps = { ...props, isPending, handleEnable, isError, onClose };
2744
- return canManageOptions ? /* @__PURE__ */ React42.createElement(AdminDialog, { ...dialogProps }) : /* @__PURE__ */ React42.createElement(NonAdminDialog, { ...dialogProps });
2817
+ return canManageOptions ? /* @__PURE__ */ React43.createElement(AdminDialog, { ...dialogProps }) : /* @__PURE__ */ React43.createElement(NonAdminDialog, { ...dialogProps });
2745
2818
  };
2746
- var AdminDialog = ({ open, onClose, handleEnable, isPending, isError }) => /* @__PURE__ */ React42.createElement(Dialog, { open, maxWidth: "sm", onClose: () => onClose(false) }, /* @__PURE__ */ React42.createElement(DialogHeader, { logo: false }, /* @__PURE__ */ React42.createElement(DialogTitle, null, ADMIN_TITLE_TEXT)), /* @__PURE__ */ React42.createElement(Divider3, null), /* @__PURE__ */ React42.createElement(DialogContent, null, /* @__PURE__ */ React42.createElement(DialogContentText, null, isError ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, ADMIN_FAILED_CONTENT_TEXT_PT1, " ", /* @__PURE__ */ React42.createElement("br", null), " ", ADMIN_FAILED_CONTENT_TEXT_PT2) : ADMIN_CONTENT_TEXT)), /* @__PURE__ */ React42.createElement(DialogActions, null, /* @__PURE__ */ React42.createElement(Button3, { size: "medium", color: "secondary", onClick: () => onClose(false) }, __12("Cancel", "elementor")), /* @__PURE__ */ React42.createElement(
2819
+ var AdminDialog = ({ open, onClose, handleEnable, isPending, isError }) => /* @__PURE__ */ React43.createElement(Dialog, { open, maxWidth: "sm", onClose: () => onClose(false) }, /* @__PURE__ */ React43.createElement(DialogHeader, { logo: false }, /* @__PURE__ */ React43.createElement(DialogTitle, null, ADMIN_TITLE_TEXT)), /* @__PURE__ */ React43.createElement(Divider3, null), /* @__PURE__ */ React43.createElement(DialogContent, null, /* @__PURE__ */ React43.createElement(DialogContentText, null, isError ? /* @__PURE__ */ React43.createElement(React43.Fragment, null, ADMIN_FAILED_CONTENT_TEXT_PT1, " ", /* @__PURE__ */ React43.createElement("br", null), " ", ADMIN_FAILED_CONTENT_TEXT_PT2) : ADMIN_CONTENT_TEXT)), /* @__PURE__ */ React43.createElement(DialogActions, null, /* @__PURE__ */ React43.createElement(Button3, { size: "medium", color: "secondary", onClick: () => onClose(false) }, __13("Cancel", "elementor")), /* @__PURE__ */ React43.createElement(
2747
2820
  Button3,
2748
2821
  {
2749
2822
  size: "medium",
@@ -2752,9 +2825,9 @@ var AdminDialog = ({ open, onClose, handleEnable, isPending, isError }) => /* @_
2752
2825
  color: "primary",
2753
2826
  disabled: isPending
2754
2827
  },
2755
- isPending ? /* @__PURE__ */ React42.createElement(CircularProgress2, { size: 24 }) : __12("Enable", "elementor")
2828
+ isPending ? /* @__PURE__ */ React43.createElement(CircularProgress2, { size: 24 }) : __13("Enable", "elementor")
2756
2829
  )));
2757
- var NonAdminDialog = ({ open, onClose }) => /* @__PURE__ */ React42.createElement(Dialog, { open, maxWidth: "sm", onClose: () => onClose(false) }, /* @__PURE__ */ React42.createElement(DialogHeader, { logo: false }, /* @__PURE__ */ React42.createElement(DialogTitle, null, NON_ADMIN_TITLE_TEXT)), /* @__PURE__ */ React42.createElement(Divider3, null), /* @__PURE__ */ React42.createElement(DialogContent, null, /* @__PURE__ */ React42.createElement(DialogContentText, null, NON_ADMIN_CONTENT_TEXT)), /* @__PURE__ */ React42.createElement(DialogActions, null, /* @__PURE__ */ React42.createElement(Button3, { size: "medium", onClick: () => onClose(false), variant: "contained", color: "primary" }, __12("Got it", "elementor"))));
2830
+ var NonAdminDialog = ({ open, onClose }) => /* @__PURE__ */ React43.createElement(Dialog, { open, maxWidth: "sm", onClose: () => onClose(false) }, /* @__PURE__ */ React43.createElement(DialogHeader, { logo: false }, /* @__PURE__ */ React43.createElement(DialogTitle, null, NON_ADMIN_TITLE_TEXT)), /* @__PURE__ */ React43.createElement(Divider3, null), /* @__PURE__ */ React43.createElement(DialogContent, null, /* @__PURE__ */ React43.createElement(DialogContentText, null, NON_ADMIN_CONTENT_TEXT)), /* @__PURE__ */ React43.createElement(DialogActions, null, /* @__PURE__ */ React43.createElement(Button3, { size: "medium", onClick: () => onClose(false), variant: "contained", color: "primary" }, __13("Got it", "elementor"))));
2758
2831
 
2759
2832
  // src/controls/svg-media-control.tsx
2760
2833
  var TILE_SIZE = 8;
@@ -2815,15 +2888,15 @@ var SvgMediaControl = createControl(() => {
2815
2888
  open(openOptions);
2816
2889
  }
2817
2890
  };
2818
- return /* @__PURE__ */ React43.createElement(Stack13, { gap: 1 }, /* @__PURE__ */ React43.createElement(EnableUnfilteredModal, { open: unfilteredModalOpenState, onClose: onCloseUnfilteredModal }), /* @__PURE__ */ React43.createElement(ControlActions, null, /* @__PURE__ */ React43.createElement(StyledCard, { variant: "outlined" }, /* @__PURE__ */ React43.createElement(StyledCardMediaContainer, null, isFetching ? /* @__PURE__ */ React43.createElement(CircularProgress3, { role: "progressbar" }) : /* @__PURE__ */ React43.createElement(
2891
+ return /* @__PURE__ */ React44.createElement(Stack13, { gap: 1 }, /* @__PURE__ */ React44.createElement(EnableUnfilteredModal, { open: unfilteredModalOpenState, onClose: onCloseUnfilteredModal }), /* @__PURE__ */ React44.createElement(ControlActions, null, /* @__PURE__ */ React44.createElement(StyledCard, { variant: "outlined" }, /* @__PURE__ */ React44.createElement(StyledCardMediaContainer, null, isFetching ? /* @__PURE__ */ React44.createElement(CircularProgress3, { role: "progressbar" }) : /* @__PURE__ */ React44.createElement(
2819
2892
  CardMedia2,
2820
2893
  {
2821
2894
  component: "img",
2822
2895
  image: src,
2823
- alt: __13("Preview SVG", "elementor"),
2896
+ alt: __14("Preview SVG", "elementor"),
2824
2897
  sx: { maxHeight: "140px", width: "50px" }
2825
2898
  }
2826
- )), /* @__PURE__ */ React43.createElement(
2899
+ )), /* @__PURE__ */ React44.createElement(
2827
2900
  CardOverlay2,
2828
2901
  {
2829
2902
  sx: {
@@ -2832,7 +2905,7 @@ var SvgMediaControl = createControl(() => {
2832
2905
  }
2833
2906
  }
2834
2907
  },
2835
- /* @__PURE__ */ React43.createElement(Stack13, { gap: 1 }, /* @__PURE__ */ React43.createElement(
2908
+ /* @__PURE__ */ React44.createElement(Stack13, { gap: 1 }, /* @__PURE__ */ React44.createElement(
2836
2909
  Button4,
2837
2910
  {
2838
2911
  size: "tiny",
@@ -2840,46 +2913,46 @@ var SvgMediaControl = createControl(() => {
2840
2913
  variant: "outlined",
2841
2914
  onClick: () => handleClick(MODE_BROWSE)
2842
2915
  },
2843
- __13("Select SVG", "elementor")
2844
- ), /* @__PURE__ */ React43.createElement(
2916
+ __14("Select SVG", "elementor")
2917
+ ), /* @__PURE__ */ React44.createElement(
2845
2918
  Button4,
2846
2919
  {
2847
2920
  size: "tiny",
2848
2921
  variant: "text",
2849
2922
  color: "inherit",
2850
- startIcon: /* @__PURE__ */ React43.createElement(UploadIcon2, null),
2923
+ startIcon: /* @__PURE__ */ React44.createElement(UploadIcon2, null),
2851
2924
  onClick: () => handleClick(MODE_UPLOAD)
2852
2925
  },
2853
- __13("Upload", "elementor")
2926
+ __14("Upload", "elementor")
2854
2927
  ))
2855
2928
  ))));
2856
2929
  });
2857
2930
 
2858
2931
  // src/controls/background-control/background-control.tsx
2859
- import * as React50 from "react";
2932
+ import * as React51 from "react";
2860
2933
  import { backgroundPropTypeUtil } from "@elementor/editor-props";
2861
- import { isExperimentActive as isExperimentActive4 } from "@elementor/editor-v1-adapters";
2934
+ import { isExperimentActive as isExperimentActive5 } from "@elementor/editor-v1-adapters";
2862
2935
  import { Grid as Grid15 } from "@elementor/ui";
2863
- import { __ as __19 } from "@wordpress/i18n";
2936
+ import { __ as __20 } from "@wordpress/i18n";
2864
2937
 
2865
2938
  // src/controls/background-control/background-overlay/background-overlay-repeater-control.tsx
2866
- import * as React49 from "react";
2939
+ import * as React50 from "react";
2867
2940
  import {
2868
2941
  backgroundColorOverlayPropTypeUtil as backgroundColorOverlayPropTypeUtil2,
2869
2942
  backgroundImageOverlayPropTypeUtil as backgroundImageOverlayPropTypeUtil2,
2870
2943
  backgroundOverlayPropTypeUtil,
2871
2944
  colorPropTypeUtil as colorPropTypeUtil3
2872
2945
  } from "@elementor/editor-props";
2873
- import { Box as Box7, CardMedia as CardMedia3, Grid as Grid14, styled as styled5, Tab, TabPanel, Tabs, UnstableColorIndicator as UnstableColorIndicator2 } from "@elementor/ui";
2946
+ import { Box as Box7, CardMedia as CardMedia3, styled as styled5, Tab, TabPanel, Tabs, UnstableColorIndicator as UnstableColorIndicator2 } from "@elementor/ui";
2874
2947
  import { useWpMediaAttachment as useWpMediaAttachment3 } from "@elementor/wp-media";
2875
- import { __ as __18 } from "@wordpress/i18n";
2948
+ import { __ as __19 } from "@wordpress/i18n";
2876
2949
 
2877
2950
  // src/env.ts
2878
2951
  import { parseEnv } from "@elementor/env";
2879
2952
  var { env } = parseEnv("@elementor/editor-controls");
2880
2953
 
2881
2954
  // src/controls/background-control/background-gradient-color-control.tsx
2882
- import * as React44 from "react";
2955
+ import * as React45 from "react";
2883
2956
  import {
2884
2957
  backgroundGradientOverlayPropTypeUtil,
2885
2958
  colorPropTypeUtil as colorPropTypeUtil2,
@@ -2926,7 +2999,7 @@ var BackgroundGradientColorControl = createControl(() => {
2926
2999
  positions: positions?.value.split(" ")
2927
3000
  };
2928
3001
  };
2929
- return /* @__PURE__ */ React44.createElement(ControlActions, null, /* @__PURE__ */ React44.createElement(
3002
+ return /* @__PURE__ */ React45.createElement(ControlActions, null, /* @__PURE__ */ React45.createElement(
2930
3003
  UnstableGradientBox,
2931
3004
  {
2932
3005
  sx: { width: "auto", padding: 1.5 },
@@ -2951,47 +3024,47 @@ var initialBackgroundGradientOverlay = backgroundGradientOverlayPropTypeUtil.cre
2951
3024
  });
2952
3025
 
2953
3026
  // src/controls/background-control/background-overlay/background-image-overlay/background-image-overlay-attachment.tsx
2954
- import * as React45 from "react";
3027
+ import * as React46 from "react";
2955
3028
  import { PinIcon, PinnedOffIcon } from "@elementor/icons";
2956
- import { Grid as Grid10 } from "@elementor/ui";
2957
- import { __ as __14 } from "@wordpress/i18n";
3029
+ import { Grid as Grid11 } from "@elementor/ui";
3030
+ import { __ as __15 } from "@wordpress/i18n";
2958
3031
  var attachmentControlOptions = [
2959
3032
  {
2960
3033
  value: "fixed",
2961
- label: __14("Fixed", "elementor"),
2962
- renderContent: ({ size }) => /* @__PURE__ */ React45.createElement(PinIcon, { fontSize: size }),
3034
+ label: __15("Fixed", "elementor"),
3035
+ renderContent: ({ size }) => /* @__PURE__ */ React46.createElement(PinIcon, { fontSize: size }),
2963
3036
  showTooltip: true
2964
3037
  },
2965
3038
  {
2966
3039
  value: "scroll",
2967
- label: __14("Scroll", "elementor"),
2968
- renderContent: ({ size }) => /* @__PURE__ */ React45.createElement(PinnedOffIcon, { fontSize: size }),
3040
+ label: __15("Scroll", "elementor"),
3041
+ renderContent: ({ size }) => /* @__PURE__ */ React46.createElement(PinnedOffIcon, { fontSize: size }),
2969
3042
  showTooltip: true
2970
3043
  }
2971
3044
  ];
2972
3045
  var BackgroundImageOverlayAttachment = () => {
2973
- return /* @__PURE__ */ React45.createElement(PopoverGridContainer, null, /* @__PURE__ */ React45.createElement(Grid10, { item: true, xs: 6 }, /* @__PURE__ */ React45.createElement(ControlFormLabel, null, __14("Attachment", "elementor"))), /* @__PURE__ */ React45.createElement(Grid10, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end", overflow: "hidden" } }, /* @__PURE__ */ React45.createElement(ToggleControl, { options: attachmentControlOptions })));
3046
+ return /* @__PURE__ */ React46.createElement(PopoverGridContainer, null, /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 6 }, /* @__PURE__ */ React46.createElement(ControlFormLabel, null, __15("Attachment", "elementor"))), /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end", overflow: "hidden" } }, /* @__PURE__ */ React46.createElement(ToggleControl, { options: attachmentControlOptions })));
2974
3047
  };
2975
3048
 
2976
3049
  // src/controls/background-control/background-overlay/background-image-overlay/background-image-overlay-position.tsx
2977
- import * as React46 from "react";
3050
+ import * as React47 from "react";
2978
3051
  import { useRef as useRef9 } from "react";
2979
3052
  import { backgroundImagePositionOffsetPropTypeUtil, stringPropTypeUtil as stringPropTypeUtil9 } from "@elementor/editor-props";
2980
3053
  import { MenuListItem as MenuListItem5 } from "@elementor/editor-ui";
2981
3054
  import { LetterXIcon, LetterYIcon } from "@elementor/icons";
2982
- import { Grid as Grid11, Select as Select4 } from "@elementor/ui";
2983
- import { __ as __15 } from "@wordpress/i18n";
3055
+ import { Grid as Grid12, Select as Select4 } from "@elementor/ui";
3056
+ import { __ as __16 } from "@wordpress/i18n";
2984
3057
  var backgroundPositionOptions = [
2985
- { label: __15("Center center", "elementor"), value: "center center" },
2986
- { label: __15("Center left", "elementor"), value: "center left" },
2987
- { label: __15("Center right", "elementor"), value: "center right" },
2988
- { label: __15("Top center", "elementor"), value: "top center" },
2989
- { label: __15("Top left", "elementor"), value: "top left" },
2990
- { label: __15("Top right", "elementor"), value: "top right" },
2991
- { label: __15("Bottom center", "elementor"), value: "bottom center" },
2992
- { label: __15("Bottom left", "elementor"), value: "bottom left" },
2993
- { label: __15("Bottom right", "elementor"), value: "bottom right" },
2994
- { label: __15("Custom", "elementor"), value: "custom" }
3058
+ { label: __16("Center center", "elementor"), value: "center center" },
3059
+ { label: __16("Center left", "elementor"), value: "center left" },
3060
+ { label: __16("Center right", "elementor"), value: "center right" },
3061
+ { label: __16("Top center", "elementor"), value: "top center" },
3062
+ { label: __16("Top left", "elementor"), value: "top left" },
3063
+ { label: __16("Top right", "elementor"), value: "top right" },
3064
+ { label: __16("Bottom center", "elementor"), value: "bottom center" },
3065
+ { label: __16("Bottom left", "elementor"), value: "bottom left" },
3066
+ { label: __16("Bottom right", "elementor"), value: "bottom right" },
3067
+ { label: __16("Custom", "elementor"), value: "custom" }
2995
3068
  ];
2996
3069
  var BackgroundImageOverlayPosition = () => {
2997
3070
  const backgroundImageOffsetContext = useBoundProp(backgroundImagePositionOffsetPropTypeUtil);
@@ -3006,7 +3079,7 @@ var BackgroundImageOverlayPosition = () => {
3006
3079
  stringPropContext.setValue(value);
3007
3080
  }
3008
3081
  };
3009
- return /* @__PURE__ */ React46.createElement(Grid11, { container: true, spacing: 1.5 }, /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 12 }, /* @__PURE__ */ React46.createElement(PopoverGridContainer, null, /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 6 }, /* @__PURE__ */ React46.createElement(ControlFormLabel, null, __15("Position", "elementor"))), /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end", overflow: "hidden" } }, /* @__PURE__ */ React46.createElement(
3082
+ return /* @__PURE__ */ React47.createElement(Grid12, { container: true, spacing: 1.5 }, /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 12 }, /* @__PURE__ */ React47.createElement(PopoverGridContainer, null, /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 6 }, /* @__PURE__ */ React47.createElement(ControlFormLabel, null, __16("Position", "elementor"))), /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end", overflow: "hidden" } }, /* @__PURE__ */ React47.createElement(
3010
3083
  Select4,
3011
3084
  {
3012
3085
  fullWidth: true,
@@ -3015,59 +3088,59 @@ var BackgroundImageOverlayPosition = () => {
3015
3088
  disabled: stringPropContext.disabled,
3016
3089
  value: (backgroundImageOffsetContext.value ? "custom" : stringPropContext.value) ?? ""
3017
3090
  },
3018
- backgroundPositionOptions.map(({ label, value }) => /* @__PURE__ */ React46.createElement(MenuListItem5, { key: value, value: value ?? "" }, label))
3019
- )))), isCustom ? /* @__PURE__ */ React46.createElement(PropProvider, { ...backgroundImageOffsetContext }, /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 12 }, /* @__PURE__ */ React46.createElement(Grid11, { container: true, spacing: 1.5, ref: rowRef }, /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 6 }, /* @__PURE__ */ React46.createElement(PropKeyProvider, { bind: "x" }, /* @__PURE__ */ React46.createElement(
3091
+ backgroundPositionOptions.map(({ label, value }) => /* @__PURE__ */ React47.createElement(MenuListItem5, { key: value, value: value ?? "" }, label))
3092
+ )))), isCustom ? /* @__PURE__ */ React47.createElement(PropProvider, { ...backgroundImageOffsetContext }, /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 12 }, /* @__PURE__ */ React47.createElement(Grid12, { container: true, spacing: 1.5, ref: rowRef }, /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 6 }, /* @__PURE__ */ React47.createElement(PropKeyProvider, { bind: "x" }, /* @__PURE__ */ React47.createElement(
3020
3093
  SizeControl,
3021
3094
  {
3022
- startIcon: /* @__PURE__ */ React46.createElement(LetterXIcon, { fontSize: "tiny" }),
3095
+ startIcon: /* @__PURE__ */ React47.createElement(LetterXIcon, { fontSize: "tiny" }),
3023
3096
  anchorRef: rowRef
3024
3097
  }
3025
- ))), /* @__PURE__ */ React46.createElement(Grid11, { item: true, xs: 6 }, /* @__PURE__ */ React46.createElement(PropKeyProvider, { bind: "y" }, /* @__PURE__ */ React46.createElement(
3098
+ ))), /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 6 }, /* @__PURE__ */ React47.createElement(PropKeyProvider, { bind: "y" }, /* @__PURE__ */ React47.createElement(
3026
3099
  SizeControl,
3027
3100
  {
3028
- startIcon: /* @__PURE__ */ React46.createElement(LetterYIcon, { fontSize: "tiny" }),
3101
+ startIcon: /* @__PURE__ */ React47.createElement(LetterYIcon, { fontSize: "tiny" }),
3029
3102
  anchorRef: rowRef
3030
3103
  }
3031
3104
  )))))) : null);
3032
3105
  };
3033
3106
 
3034
3107
  // src/controls/background-control/background-overlay/background-image-overlay/background-image-overlay-repeat.tsx
3035
- import * as React47 from "react";
3108
+ import * as React48 from "react";
3036
3109
  import { DotsHorizontalIcon, DotsVerticalIcon, GridDotsIcon, XIcon as XIcon3 } from "@elementor/icons";
3037
- import { Grid as Grid12 } from "@elementor/ui";
3038
- import { __ as __16 } from "@wordpress/i18n";
3110
+ import { Grid as Grid13 } from "@elementor/ui";
3111
+ import { __ as __17 } from "@wordpress/i18n";
3039
3112
  var repeatControlOptions = [
3040
3113
  {
3041
3114
  value: "repeat",
3042
- label: __16("Repeat", "elementor"),
3043
- renderContent: ({ size }) => /* @__PURE__ */ React47.createElement(GridDotsIcon, { fontSize: size }),
3115
+ label: __17("Repeat", "elementor"),
3116
+ renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(GridDotsIcon, { fontSize: size }),
3044
3117
  showTooltip: true
3045
3118
  },
3046
3119
  {
3047
3120
  value: "repeat-x",
3048
- label: __16("Repeat-x", "elementor"),
3049
- renderContent: ({ size }) => /* @__PURE__ */ React47.createElement(DotsHorizontalIcon, { fontSize: size }),
3121
+ label: __17("Repeat-x", "elementor"),
3122
+ renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(DotsHorizontalIcon, { fontSize: size }),
3050
3123
  showTooltip: true
3051
3124
  },
3052
3125
  {
3053
3126
  value: "repeat-y",
3054
- label: __16("Repeat-y", "elementor"),
3055
- renderContent: ({ size }) => /* @__PURE__ */ React47.createElement(DotsVerticalIcon, { fontSize: size }),
3127
+ label: __17("Repeat-y", "elementor"),
3128
+ renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(DotsVerticalIcon, { fontSize: size }),
3056
3129
  showTooltip: true
3057
3130
  },
3058
3131
  {
3059
3132
  value: "no-repeat",
3060
- label: __16("No-repeat", "elementor"),
3061
- renderContent: ({ size }) => /* @__PURE__ */ React47.createElement(XIcon3, { fontSize: size }),
3133
+ label: __17("No-repeat", "elementor"),
3134
+ renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(XIcon3, { fontSize: size }),
3062
3135
  showTooltip: true
3063
3136
  }
3064
3137
  ];
3065
3138
  var BackgroundImageOverlayRepeat = () => {
3066
- return /* @__PURE__ */ React47.createElement(PopoverGridContainer, null, /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 6 }, /* @__PURE__ */ React47.createElement(ControlFormLabel, null, __16("Repeat", "elementor"))), /* @__PURE__ */ React47.createElement(Grid12, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end" } }, /* @__PURE__ */ React47.createElement(ToggleControl, { options: repeatControlOptions })));
3139
+ return /* @__PURE__ */ React48.createElement(PopoverGridContainer, null, /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 6 }, /* @__PURE__ */ React48.createElement(ControlFormLabel, null, __17("Repeat", "elementor"))), /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end" } }, /* @__PURE__ */ React48.createElement(ToggleControl, { options: repeatControlOptions })));
3067
3140
  };
3068
3141
 
3069
3142
  // src/controls/background-control/background-overlay/background-image-overlay/background-image-overlay-size.tsx
3070
- import * as React48 from "react";
3143
+ import * as React49 from "react";
3071
3144
  import { useRef as useRef10 } from "react";
3072
3145
  import { backgroundImageSizeScalePropTypeUtil, stringPropTypeUtil as stringPropTypeUtil10 } from "@elementor/editor-props";
3073
3146
  import {
@@ -3078,31 +3151,31 @@ import {
3078
3151
  LetterAIcon,
3079
3152
  PencilIcon as PencilIcon2
3080
3153
  } from "@elementor/icons";
3081
- import { Grid as Grid13 } from "@elementor/ui";
3082
- import { __ as __17 } from "@wordpress/i18n";
3154
+ import { Grid as Grid14 } from "@elementor/ui";
3155
+ import { __ as __18 } from "@wordpress/i18n";
3083
3156
  var sizeControlOptions = [
3084
3157
  {
3085
3158
  value: "auto",
3086
- label: __17("Auto", "elementor"),
3087
- renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(LetterAIcon, { fontSize: size }),
3159
+ label: __18("Auto", "elementor"),
3160
+ renderContent: ({ size }) => /* @__PURE__ */ React49.createElement(LetterAIcon, { fontSize: size }),
3088
3161
  showTooltip: true
3089
3162
  },
3090
3163
  {
3091
3164
  value: "cover",
3092
- label: __17("Cover", "elementor"),
3093
- renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(ArrowsMaximizeIcon, { fontSize: size }),
3165
+ label: __18("Cover", "elementor"),
3166
+ renderContent: ({ size }) => /* @__PURE__ */ React49.createElement(ArrowsMaximizeIcon, { fontSize: size }),
3094
3167
  showTooltip: true
3095
3168
  },
3096
3169
  {
3097
3170
  value: "contain",
3098
- label: __17("Contain", "elementor"),
3099
- renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(ArrowBarBothIcon, { fontSize: size }),
3171
+ label: __18("Contain", "elementor"),
3172
+ renderContent: ({ size }) => /* @__PURE__ */ React49.createElement(ArrowBarBothIcon, { fontSize: size }),
3100
3173
  showTooltip: true
3101
3174
  },
3102
3175
  {
3103
3176
  value: "custom",
3104
- label: __17("Custom", "elementor"),
3105
- renderContent: ({ size }) => /* @__PURE__ */ React48.createElement(PencilIcon2, { fontSize: size }),
3177
+ label: __18("Custom", "elementor"),
3178
+ renderContent: ({ size }) => /* @__PURE__ */ React49.createElement(PencilIcon2, { fontSize: size }),
3106
3179
  showTooltip: true
3107
3180
  }
3108
3181
  ];
@@ -3118,7 +3191,7 @@ var BackgroundImageOverlaySize = () => {
3118
3191
  stringPropContext.setValue(size);
3119
3192
  }
3120
3193
  };
3121
- return /* @__PURE__ */ React48.createElement(Grid13, { container: true, spacing: 1.5 }, /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 12 }, /* @__PURE__ */ React48.createElement(PopoverGridContainer, null, /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 6 }, /* @__PURE__ */ React48.createElement(ControlFormLabel, null, __17("Size", "elementor"))), /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end" } }, /* @__PURE__ */ React48.createElement(
3194
+ return /* @__PURE__ */ React49.createElement(Grid14, { container: true, spacing: 1.5 }, /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 12 }, /* @__PURE__ */ React49.createElement(PopoverGridContainer, null, /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 6 }, /* @__PURE__ */ React49.createElement(ControlFormLabel, null, __18("Size", "elementor"))), /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 6, sx: { display: "flex", justifyContent: "flex-end" } }, /* @__PURE__ */ React49.createElement(
3122
3195
  ControlToggleButtonGroup,
3123
3196
  {
3124
3197
  exclusive: true,
@@ -3127,17 +3200,17 @@ var BackgroundImageOverlaySize = () => {
3127
3200
  disabled: stringPropContext.disabled,
3128
3201
  value: backgroundImageScaleContext.value ? "custom" : stringPropContext.value
3129
3202
  }
3130
- )))), isCustom ? /* @__PURE__ */ React48.createElement(PropProvider, { ...backgroundImageScaleContext }, /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 12, ref: rowRef }, /* @__PURE__ */ React48.createElement(PopoverGridContainer, null, /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 6 }, /* @__PURE__ */ React48.createElement(PropKeyProvider, { bind: "width" }, /* @__PURE__ */ React48.createElement(
3203
+ )))), isCustom ? /* @__PURE__ */ React49.createElement(PropProvider, { ...backgroundImageScaleContext }, /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 12, ref: rowRef }, /* @__PURE__ */ React49.createElement(PopoverGridContainer, null, /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 6 }, /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "width" }, /* @__PURE__ */ React49.createElement(
3131
3204
  SizeControl,
3132
3205
  {
3133
- startIcon: /* @__PURE__ */ React48.createElement(ArrowsMoveHorizontalIcon2, { fontSize: "tiny" }),
3206
+ startIcon: /* @__PURE__ */ React49.createElement(ArrowsMoveHorizontalIcon2, { fontSize: "tiny" }),
3134
3207
  extendedOptions: ["auto"],
3135
3208
  anchorRef: rowRef
3136
3209
  }
3137
- ))), /* @__PURE__ */ React48.createElement(Grid13, { item: true, xs: 6 }, /* @__PURE__ */ React48.createElement(PropKeyProvider, { bind: "height" }, /* @__PURE__ */ React48.createElement(
3210
+ ))), /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 6 }, /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "height" }, /* @__PURE__ */ React49.createElement(
3138
3211
  SizeControl,
3139
3212
  {
3140
- startIcon: /* @__PURE__ */ React48.createElement(ArrowsMoveVerticalIcon2, { fontSize: "tiny" }),
3213
+ startIcon: /* @__PURE__ */ React49.createElement(ArrowsMoveVerticalIcon2, { fontSize: "tiny" }),
3141
3214
  extendedOptions: ["auto"],
3142
3215
  anchorRef: rowRef
3143
3216
  }
@@ -3238,21 +3311,21 @@ var getInitialBackgroundOverlay = () => ({
3238
3311
  }
3239
3312
  });
3240
3313
  var backgroundResolutionOptions = [
3241
- { label: __18("Thumbnail - 150 x 150", "elementor"), value: "thumbnail" },
3242
- { label: __18("Medium - 300 x 300", "elementor"), value: "medium" },
3243
- { label: __18("Large 1024 x 1024", "elementor"), value: "large" },
3244
- { label: __18("Full", "elementor"), value: "full" }
3314
+ { label: __19("Thumbnail - 150 x 150", "elementor"), value: "thumbnail" },
3315
+ { label: __19("Medium - 300 x 300", "elementor"), value: "medium" },
3316
+ { label: __19("Large 1024 x 1024", "elementor"), value: "large" },
3317
+ { label: __19("Full", "elementor"), value: "full" }
3245
3318
  ];
3246
3319
  var BackgroundOverlayRepeaterControl = createControl(() => {
3247
3320
  const { propType, value: overlayValues, setValue, disabled } = useBoundProp(backgroundOverlayPropTypeUtil);
3248
- return /* @__PURE__ */ React49.createElement(PropProvider, { propType, value: overlayValues, setValue, disabled }, /* @__PURE__ */ React49.createElement(
3321
+ return /* @__PURE__ */ React50.createElement(PropProvider, { propType, value: overlayValues, setValue, isDisabled: () => disabled }, /* @__PURE__ */ React50.createElement(
3249
3322
  Repeater,
3250
3323
  {
3251
3324
  openOnAdd: true,
3252
3325
  disabled,
3253
3326
  values: overlayValues ?? [],
3254
3327
  setValues: setValue,
3255
- label: __18("Overlay", "elementor"),
3328
+ label: __19("Overlay", "elementor"),
3256
3329
  itemSettings: {
3257
3330
  Icon: ItemIcon3,
3258
3331
  Label: ItemLabel3,
@@ -3263,7 +3336,7 @@ var BackgroundOverlayRepeaterControl = createControl(() => {
3263
3336
  ));
3264
3337
  });
3265
3338
  var ItemContent3 = ({ anchorEl = null, bind }) => {
3266
- return /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React49.createElement(Content3, { anchorEl }));
3339
+ return /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React50.createElement(Content3, { anchorEl }));
3267
3340
  };
3268
3341
  var Content3 = ({ anchorEl }) => {
3269
3342
  const { getTabsProps, getTabProps, getTabPanelProps } = useBackgroundTabsHistory({
@@ -3271,27 +3344,27 @@ var Content3 = ({ anchorEl }) => {
3271
3344
  color: initialBackgroundColorOverlay.value,
3272
3345
  gradient: initialBackgroundGradientOverlay.value
3273
3346
  });
3274
- return /* @__PURE__ */ React49.createElement(Box7, { sx: { width: "100%" } }, /* @__PURE__ */ React49.createElement(Box7, { sx: { borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React49.createElement(
3347
+ return /* @__PURE__ */ React50.createElement(Box7, { sx: { width: "100%" } }, /* @__PURE__ */ React50.createElement(Box7, { sx: { borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React50.createElement(
3275
3348
  Tabs,
3276
3349
  {
3277
3350
  size: "small",
3278
3351
  variant: "fullWidth",
3279
3352
  ...getTabsProps(),
3280
- "aria-label": __18("Background Overlay", "elementor")
3353
+ "aria-label": __19("Background Overlay", "elementor")
3281
3354
  },
3282
- /* @__PURE__ */ React49.createElement(Tab, { label: __18("Image", "elementor"), ...getTabProps("image") }),
3283
- /* @__PURE__ */ React49.createElement(Tab, { label: __18("Gradient", "elementor"), ...getTabProps("gradient") }),
3284
- /* @__PURE__ */ React49.createElement(Tab, { label: __18("Color", "elementor"), ...getTabProps("color") })
3285
- )), /* @__PURE__ */ React49.createElement(TabPanel, { sx: { p: 1.5 }, ...getTabPanelProps("image") }, /* @__PURE__ */ React49.createElement(PopoverContent, null, /* @__PURE__ */ React49.createElement(ImageOverlayContent, null))), /* @__PURE__ */ React49.createElement(TabPanel, { sx: { p: 1.5 }, ...getTabPanelProps("gradient") }, /* @__PURE__ */ React49.createElement(BackgroundGradientColorControl, null)), /* @__PURE__ */ React49.createElement(TabPanel, { sx: { p: 1.5 }, ...getTabPanelProps("color") }, /* @__PURE__ */ React49.createElement(PopoverContent, null, /* @__PURE__ */ React49.createElement(ColorOverlayContent, { anchorEl }))));
3355
+ /* @__PURE__ */ React50.createElement(Tab, { label: __19("Image", "elementor"), ...getTabProps("image") }),
3356
+ /* @__PURE__ */ React50.createElement(Tab, { label: __19("Gradient", "elementor"), ...getTabProps("gradient") }),
3357
+ /* @__PURE__ */ React50.createElement(Tab, { label: __19("Color", "elementor"), ...getTabProps("color") })
3358
+ )), /* @__PURE__ */ React50.createElement(TabPanel, { sx: { p: 1.5 }, ...getTabPanelProps("image") }, /* @__PURE__ */ React50.createElement(PopoverContent, null, /* @__PURE__ */ React50.createElement(ImageOverlayContent, null))), /* @__PURE__ */ React50.createElement(TabPanel, { sx: { p: 1.5 }, ...getTabPanelProps("gradient") }, /* @__PURE__ */ React50.createElement(BackgroundGradientColorControl, null)), /* @__PURE__ */ React50.createElement(TabPanel, { sx: { p: 1.5 }, ...getTabPanelProps("color") }, /* @__PURE__ */ React50.createElement(PopoverContent, null, /* @__PURE__ */ React50.createElement(ColorOverlayContent, { anchorEl }))));
3286
3359
  };
3287
3360
  var ItemIcon3 = ({ value }) => {
3288
3361
  switch (value.$$type) {
3289
3362
  case "background-image-overlay":
3290
- return /* @__PURE__ */ React49.createElement(ItemIconImage, { value });
3363
+ return /* @__PURE__ */ React50.createElement(ItemIconImage, { value });
3291
3364
  case "background-color-overlay":
3292
- return /* @__PURE__ */ React49.createElement(ItemIconColor, { value });
3365
+ return /* @__PURE__ */ React50.createElement(ItemIconColor, { value });
3293
3366
  case "background-gradient-overlay":
3294
- return /* @__PURE__ */ React49.createElement(ItemIconGradient, { value });
3367
+ return /* @__PURE__ */ React50.createElement(ItemIconGradient, { value });
3295
3368
  default:
3296
3369
  return null;
3297
3370
  }
@@ -3304,11 +3377,11 @@ var extractColorFrom = (prop) => {
3304
3377
  };
3305
3378
  var ItemIconColor = ({ value: prop }) => {
3306
3379
  const color = extractColorFrom(prop);
3307
- return /* @__PURE__ */ React49.createElement(StyledUnstableColorIndicator, { size: "inherit", component: "span", value: color });
3380
+ return /* @__PURE__ */ React50.createElement(StyledUnstableColorIndicator, { size: "inherit", component: "span", value: color });
3308
3381
  };
3309
3382
  var ItemIconImage = ({ value }) => {
3310
3383
  const { imageUrl } = useImage(value);
3311
- return /* @__PURE__ */ React49.createElement(
3384
+ return /* @__PURE__ */ React50.createElement(
3312
3385
  CardMedia3,
3313
3386
  {
3314
3387
  image: imageUrl,
@@ -3323,41 +3396,41 @@ var ItemIconImage = ({ value }) => {
3323
3396
  };
3324
3397
  var ItemIconGradient = ({ value }) => {
3325
3398
  const gradient = getGradientValue(value);
3326
- return /* @__PURE__ */ React49.createElement(StyledUnstableColorIndicator, { size: "inherit", component: "span", value: gradient });
3399
+ return /* @__PURE__ */ React50.createElement(StyledUnstableColorIndicator, { size: "inherit", component: "span", value: gradient });
3327
3400
  };
3328
3401
  var ItemLabel3 = ({ value }) => {
3329
3402
  switch (value.$$type) {
3330
3403
  case "background-image-overlay":
3331
- return /* @__PURE__ */ React49.createElement(ItemLabelImage, { value });
3404
+ return /* @__PURE__ */ React50.createElement(ItemLabelImage, { value });
3332
3405
  case "background-color-overlay":
3333
- return /* @__PURE__ */ React49.createElement(ItemLabelColor, { value });
3406
+ return /* @__PURE__ */ React50.createElement(ItemLabelColor, { value });
3334
3407
  case "background-gradient-overlay":
3335
- return /* @__PURE__ */ React49.createElement(ItemLabelGradient, { value });
3408
+ return /* @__PURE__ */ React50.createElement(ItemLabelGradient, { value });
3336
3409
  default:
3337
3410
  return null;
3338
3411
  }
3339
3412
  };
3340
3413
  var ItemLabelColor = ({ value: prop }) => {
3341
3414
  const color = extractColorFrom(prop);
3342
- return /* @__PURE__ */ React49.createElement("span", null, color);
3415
+ return /* @__PURE__ */ React50.createElement("span", null, color);
3343
3416
  };
3344
3417
  var ItemLabelImage = ({ value }) => {
3345
3418
  const { imageTitle } = useImage(value);
3346
- return /* @__PURE__ */ React49.createElement("span", null, imageTitle);
3419
+ return /* @__PURE__ */ React50.createElement("span", null, imageTitle);
3347
3420
  };
3348
3421
  var ItemLabelGradient = ({ value }) => {
3349
3422
  if (value.value.type.value === "linear") {
3350
- return /* @__PURE__ */ React49.createElement("span", null, __18("Linear Gradient", "elementor"));
3423
+ return /* @__PURE__ */ React50.createElement("span", null, __19("Linear Gradient", "elementor"));
3351
3424
  }
3352
- return /* @__PURE__ */ React49.createElement("span", null, __18("Radial Gradient", "elementor"));
3425
+ return /* @__PURE__ */ React50.createElement("span", null, __19("Radial Gradient", "elementor"));
3353
3426
  };
3354
3427
  var ColorOverlayContent = ({ anchorEl }) => {
3355
3428
  const propContext = useBoundProp(backgroundColorOverlayPropTypeUtil2);
3356
- return /* @__PURE__ */ React49.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "color" }, /* @__PURE__ */ React49.createElement(ColorControl, { anchorEl })));
3429
+ return /* @__PURE__ */ React50.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "color" }, /* @__PURE__ */ React50.createElement(ColorControl, { anchorEl })));
3357
3430
  };
3358
3431
  var ImageOverlayContent = () => {
3359
3432
  const propContext = useBoundProp(backgroundImageOverlayPropTypeUtil2);
3360
- return /* @__PURE__ */ React49.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "image" }, /* @__PURE__ */ React49.createElement(Grid14, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 12 }, /* @__PURE__ */ React49.createElement(Grid14, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 6 }, /* @__PURE__ */ React49.createElement(ControlFormLabel, null, __18("Resolution", "elementor"))), /* @__PURE__ */ React49.createElement(Grid14, { item: true, xs: 6, sx: { overflow: "hidden" } }, /* @__PURE__ */ React49.createElement(ImageControl, { sizes: backgroundResolutionOptions })))))), /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "position" }, /* @__PURE__ */ React49.createElement(BackgroundImageOverlayPosition, null)), /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "repeat" }, /* @__PURE__ */ React49.createElement(BackgroundImageOverlayRepeat, null)), /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "size" }, /* @__PURE__ */ React49.createElement(BackgroundImageOverlaySize, null)), /* @__PURE__ */ React49.createElement(PropKeyProvider, { bind: "attachment" }, /* @__PURE__ */ React49.createElement(BackgroundImageOverlayAttachment, null)));
3433
+ return /* @__PURE__ */ React50.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "image" }, /* @__PURE__ */ React50.createElement(ImageControl, { sizes: backgroundResolutionOptions })), /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "position" }, /* @__PURE__ */ React50.createElement(BackgroundImageOverlayPosition, null)), /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "repeat" }, /* @__PURE__ */ React50.createElement(BackgroundImageOverlayRepeat, null)), /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "size" }, /* @__PURE__ */ React50.createElement(BackgroundImageOverlaySize, null)), /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "attachment" }, /* @__PURE__ */ React50.createElement(BackgroundImageOverlayAttachment, null)));
3361
3434
  };
3362
3435
  var StyledUnstableColorIndicator = styled5(UnstableColorIndicator2)(({ theme }) => ({
3363
3436
  borderRadius: `${theme.shape.borderRadius / 2}px`
@@ -3395,21 +3468,9 @@ var getGradientValue = (value) => {
3395
3468
  // src/controls/background-control/background-control.tsx
3396
3469
  var BackgroundControl = createControl(() => {
3397
3470
  const propContext = useBoundProp(backgroundPropTypeUtil);
3398
- const isUsingNestedProps = isExperimentActive4("e_v_3_30");
3399
- const colorLabel = __19("Color", "elementor");
3400
- return /* @__PURE__ */ React50.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "background-overlay" }, /* @__PURE__ */ React50.createElement(BackgroundOverlayRepeaterControl, null)), /* @__PURE__ */ React50.createElement(PropKeyProvider, { bind: "color" }, /* @__PURE__ */ React50.createElement(Grid15, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React50.createElement(Grid15, { item: true, xs: 6 }, isUsingNestedProps ? /* @__PURE__ */ React50.createElement(ControlLabel, null, colorLabel) : /* @__PURE__ */ React50.createElement(ControlFormLabel, null, colorLabel)), /* @__PURE__ */ React50.createElement(Grid15, { item: true, xs: 6 }, /* @__PURE__ */ React50.createElement(ColorControl, null)))));
3401
- });
3402
-
3403
- // src/controls/switch-control.tsx
3404
- import * as React51 from "react";
3405
- import { booleanPropTypeUtil as booleanPropTypeUtil2 } from "@elementor/editor-props";
3406
- import { Switch as Switch2 } from "@elementor/ui";
3407
- var SwitchControl2 = createControl(() => {
3408
- const { value, setValue, disabled } = useBoundProp(booleanPropTypeUtil2);
3409
- const handleChange = (event) => {
3410
- setValue(event.target.checked);
3411
- };
3412
- return /* @__PURE__ */ React51.createElement("div", { style: { display: "flex", justifyContent: "flex-end" } }, /* @__PURE__ */ React51.createElement(Switch2, { checked: !!value, onChange: handleChange, size: "small", disabled }));
3471
+ const isUsingNestedProps = isExperimentActive5("e_v_3_30");
3472
+ const colorLabel = __20("Color", "elementor");
3473
+ return /* @__PURE__ */ React51.createElement(PropProvider, { ...propContext }, /* @__PURE__ */ React51.createElement(PropKeyProvider, { bind: "background-overlay" }, /* @__PURE__ */ React51.createElement(BackgroundOverlayRepeaterControl, null)), /* @__PURE__ */ React51.createElement(PropKeyProvider, { bind: "color" }, /* @__PURE__ */ React51.createElement(Grid15, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React51.createElement(Grid15, { item: true, xs: 6 }, isUsingNestedProps ? /* @__PURE__ */ React51.createElement(ControlLabel, null, colorLabel) : /* @__PURE__ */ React51.createElement(ControlFormLabel, null, colorLabel)), /* @__PURE__ */ React51.createElement(Grid15, { item: true, xs: 6 }, /* @__PURE__ */ React51.createElement(ColorControl, null)))));
3413
3474
  });
3414
3475
 
3415
3476
  // src/controls/repeatable-control.tsx
@@ -3448,16 +3509,16 @@ var RepeatableControl = createControl(
3448
3509
  () => createArrayPropUtils(childPropTypeUtil.key, childPropTypeUtil.schema),
3449
3510
  [childPropTypeUtil.key, childPropTypeUtil.schema]
3450
3511
  );
3512
+ const contextValue = useMemo4(
3513
+ () => ({
3514
+ ...childControlConfig,
3515
+ placeholder: placeholder || "",
3516
+ patternLabel: patternLabel || ""
3517
+ }),
3518
+ [childControlConfig, placeholder, patternLabel]
3519
+ );
3451
3520
  const { propType, value, setValue } = useBoundProp(childArrayPropTypeUtil);
3452
- const ItemLabel4 = ({ value: itemValue }) => {
3453
- const pattern = patternLabel || "";
3454
- const finalLabel = interpolate(pattern, itemValue.value);
3455
- if (finalLabel) {
3456
- return /* @__PURE__ */ React52.createElement("span", null, finalLabel);
3457
- }
3458
- return /* @__PURE__ */ React52.createElement(Box8, { component: "span", color: "text.tertiary" }, placeholder);
3459
- };
3460
- return /* @__PURE__ */ React52.createElement(PropProvider, { propType, value, setValue }, /* @__PURE__ */ React52.createElement(RepeatableControlContext.Provider, { value: childControlConfig }, /* @__PURE__ */ React52.createElement(
3521
+ return /* @__PURE__ */ React52.createElement(PropProvider, { propType, value, setValue }, /* @__PURE__ */ React52.createElement(RepeatableControlContext.Provider, { value: contextValue }, /* @__PURE__ */ React52.createElement(
3461
3522
  Repeater,
3462
3523
  {
3463
3524
  openOnAdd: true,
@@ -3486,18 +3547,61 @@ var Content4 = () => {
3486
3547
  return /* @__PURE__ */ React52.createElement(PopoverContent, { p: 1.5 }, /* @__PURE__ */ React52.createElement(PopoverGridContainer, null, /* @__PURE__ */ React52.createElement(ChildControl, { ...props })));
3487
3548
  };
3488
3549
  var interpolate = (template, data) => {
3489
- if (Object.values(data).some((value) => value.value === "" || value === "")) {
3490
- return null;
3550
+ if (!data) {
3551
+ return template;
3491
3552
  }
3492
3553
  return new Function(...Object.keys(data), `return \`${template}\`;`)(...Object.values(data));
3493
3554
  };
3555
+ var getNestedValue = (obj, path) => {
3556
+ return path.split(".").reduce((current, key) => current?.[key], obj);
3557
+ };
3558
+ var isEmptyValue = (val) => {
3559
+ if (typeof val === "string") {
3560
+ return val.trim() === "";
3561
+ }
3562
+ if (Number.isNaN(val)) {
3563
+ return true;
3564
+ }
3565
+ if (Array.isArray(val)) {
3566
+ return val.length === 0;
3567
+ }
3568
+ if (typeof val === "object" && val !== null && Object.keys(val).length === 0) {
3569
+ return true;
3570
+ }
3571
+ return false;
3572
+ };
3573
+ var shouldShowPlaceholder = (pattern, data) => {
3574
+ const propertyPaths = getAllProperties(pattern);
3575
+ const values = propertyPaths.map((path) => getNestedValue(data, path));
3576
+ if (values.length === 0) {
3577
+ return false;
3578
+ }
3579
+ if (values.some((value) => value === null || value === void 0)) {
3580
+ return true;
3581
+ }
3582
+ if (values.every(isEmptyValue)) {
3583
+ return true;
3584
+ }
3585
+ return false;
3586
+ };
3587
+ var ItemLabel4 = ({ value }) => {
3588
+ const { placeholder, patternLabel } = useRepeatableControlContext();
3589
+ const label = shouldShowPlaceholder(patternLabel, value) ? placeholder : interpolate(patternLabel, value);
3590
+ return /* @__PURE__ */ React52.createElement(Box8, { component: "span", color: "text.tertiary" }, label);
3591
+ };
3592
+ var getAllProperties = (pattern) => {
3593
+ const properties = pattern.match(/\$\{([^}]+)\}/g)?.map(
3594
+ (match) => match.slice(2, -1)
3595
+ ) || [];
3596
+ return properties;
3597
+ };
3494
3598
 
3495
3599
  // src/controls/key-value-control.tsx
3496
3600
  import * as React53 from "react";
3497
3601
  import { useMemo as useMemo5, useState as useState11 } from "react";
3498
3602
  import { keyValuePropTypeUtil } from "@elementor/editor-props";
3499
3603
  import { FormHelperText, FormLabel as FormLabel3, Grid as Grid16, TextField as TextField9 } from "@elementor/ui";
3500
- import { __ as __20 } from "@wordpress/i18n";
3604
+ import { __ as __21 } from "@wordpress/i18n";
3501
3605
  var KeyValueControl = createControl((props = {}) => {
3502
3606
  const { value, setValue } = useBoundProp(keyValuePropTypeUtil);
3503
3607
  const [keyError, setKeyError] = useState11(null);
@@ -3506,13 +3610,13 @@ var KeyValueControl = createControl((props = {}) => {
3506
3610
  key: value?.key?.value || "",
3507
3611
  value: value?.value?.value || ""
3508
3612
  });
3509
- const keyLabel = props.keyName || __20("Key", "elementor");
3510
- const valueLabel = props.valueName || __20("Value", "elementor");
3613
+ const keyLabel = props.keyName || __21("Key", "elementor");
3614
+ const valueLabel = props.valueName || __21("Value", "elementor");
3511
3615
  const [keyRegex, valueRegex, errMsg] = useMemo5(
3512
3616
  () => [
3513
3617
  props.regexKey ? new RegExp(props.regexKey) : void 0,
3514
3618
  props.regexValue ? new RegExp(props.regexValue) : void 0,
3515
- props.validationErrorMessage || __20("Invalid Format", "elementor")
3619
+ props.validationErrorMessage || __21("Invalid Format", "elementor")
3516
3620
  ],
3517
3621
  [props.regexKey, props.regexValue, props.validationErrorMessage]
3518
3622
  );
@@ -3584,30 +3688,30 @@ import * as React54 from "react";
3584
3688
  import { useMemo as useMemo6 } from "react";
3585
3689
  import { positionPropTypeUtil, stringPropTypeUtil as stringPropTypeUtil11 } from "@elementor/editor-props";
3586
3690
  import { MenuListItem as MenuListItem6 } from "@elementor/editor-ui";
3587
- import { isExperimentActive as isExperimentActive5 } from "@elementor/editor-v1-adapters";
3691
+ import { isExperimentActive as isExperimentActive6 } from "@elementor/editor-v1-adapters";
3588
3692
  import { LetterXIcon as LetterXIcon2, LetterYIcon as LetterYIcon2 } from "@elementor/icons";
3589
3693
  import { Grid as Grid17, Select as Select5 } from "@elementor/ui";
3590
- import { __ as __21 } from "@wordpress/i18n";
3694
+ import { __ as __22 } from "@wordpress/i18n";
3591
3695
  var positionOptions = [
3592
- { label: __21("Center center", "elementor"), value: "center center" },
3593
- { label: __21("Center left", "elementor"), value: "center left" },
3594
- { label: __21("Center right", "elementor"), value: "center right" },
3595
- { label: __21("Top center", "elementor"), value: "top center" },
3596
- { label: __21("Top left", "elementor"), value: "top left" },
3597
- { label: __21("Top right", "elementor"), value: "top right" },
3598
- { label: __21("Bottom center", "elementor"), value: "bottom center" },
3599
- { label: __21("Bottom left", "elementor"), value: "bottom left" },
3600
- { label: __21("Bottom right", "elementor"), value: "bottom right" }
3696
+ { label: __22("Center center", "elementor"), value: "center center" },
3697
+ { label: __22("Center left", "elementor"), value: "center left" },
3698
+ { label: __22("Center right", "elementor"), value: "center right" },
3699
+ { label: __22("Top center", "elementor"), value: "top center" },
3700
+ { label: __22("Top left", "elementor"), value: "top left" },
3701
+ { label: __22("Top right", "elementor"), value: "top right" },
3702
+ { label: __22("Bottom center", "elementor"), value: "bottom center" },
3703
+ { label: __22("Bottom left", "elementor"), value: "bottom left" },
3704
+ { label: __22("Bottom right", "elementor"), value: "bottom right" }
3601
3705
  ];
3602
3706
  var PositionControl = () => {
3603
3707
  const positionContext = useBoundProp(positionPropTypeUtil);
3604
3708
  const stringPropContext = useBoundProp(stringPropTypeUtil11);
3605
- const isVersion331Active = isExperimentActive5("e_v_3_31");
3709
+ const isVersion331Active = isExperimentActive6("e_v_3_31");
3606
3710
  const isCustom = !!positionContext.value && isVersion331Active;
3607
3711
  const availablePositionOptions = useMemo6(() => {
3608
3712
  const options = [...positionOptions];
3609
3713
  if (isVersion331Active) {
3610
- options.push({ label: __21("Custom", "elementor"), value: "custom" });
3714
+ options.push({ label: __22("Custom", "elementor"), value: "custom" });
3611
3715
  }
3612
3716
  return options;
3613
3717
  }, [isVersion331Active]);
@@ -3619,7 +3723,7 @@ var PositionControl = () => {
3619
3723
  stringPropContext.setValue(value);
3620
3724
  }
3621
3725
  };
3622
- return /* @__PURE__ */ React54.createElement(Grid17, { container: true, spacing: 1.5 }, /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 12 }, /* @__PURE__ */ React54.createElement(Grid17, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 6 }, /* @__PURE__ */ React54.createElement(ControlFormLabel, null, __21("Object position", "elementor"))), /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 6, sx: { overflow: "hidden" } }, /* @__PURE__ */ React54.createElement(
3726
+ return /* @__PURE__ */ React54.createElement(Grid17, { container: true, spacing: 1.5 }, /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 12 }, /* @__PURE__ */ React54.createElement(Grid17, { container: true, gap: 2, alignItems: "center", flexWrap: "nowrap" }, /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 6 }, /* @__PURE__ */ React54.createElement(ControlFormLabel, null, __22("Object position", "elementor"))), /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 6, sx: { overflow: "hidden" } }, /* @__PURE__ */ React54.createElement(
3623
3727
  Select5,
3624
3728
  {
3625
3729
  size: "tiny",
@@ -3631,6 +3735,130 @@ var PositionControl = () => {
3631
3735
  availablePositionOptions.map(({ label, value }) => /* @__PURE__ */ React54.createElement(MenuListItem6, { key: value, value: value ?? "" }, label))
3632
3736
  )))), isCustom && /* @__PURE__ */ React54.createElement(PropProvider, { ...positionContext }, /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 12 }, /* @__PURE__ */ React54.createElement(Grid17, { container: true, spacing: 1.5 }, /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 6 }, /* @__PURE__ */ React54.createElement(PropKeyProvider, { bind: "x" }, /* @__PURE__ */ React54.createElement(SizeControl, { startIcon: /* @__PURE__ */ React54.createElement(LetterXIcon2, { fontSize: "tiny" }) }))), /* @__PURE__ */ React54.createElement(Grid17, { item: true, xs: 6 }, /* @__PURE__ */ React54.createElement(PropKeyProvider, { bind: "y" }, /* @__PURE__ */ React54.createElement(SizeControl, { startIcon: /* @__PURE__ */ React54.createElement(LetterYIcon2, { fontSize: "tiny" }) })))))));
3633
3737
  };
3738
+
3739
+ // src/controls/transform-control/transform-repeater-control.tsx
3740
+ import * as React60 from "react";
3741
+ import { transformPropTypeUtil } from "@elementor/editor-props";
3742
+ import { __ as __26 } from "@wordpress/i18n";
3743
+
3744
+ // src/controls/transform-control/transform-content.tsx
3745
+ import * as React57 from "react";
3746
+ import { Box as Box9, Tab as Tab2, TabPanel as TabPanel2, Tabs as Tabs2, useTabs as useTabs2 } from "@elementor/ui";
3747
+ import { __ as __24 } from "@wordpress/i18n";
3748
+
3749
+ // src/controls/transform-control/functions/move.tsx
3750
+ import * as React56 from "react";
3751
+ import { useRef as useRef12 } from "react";
3752
+ import { moveTransformPropTypeUtil } from "@elementor/editor-props";
3753
+ import { ArrowDownLeftIcon, ArrowDownSmallIcon, ArrowRightIcon } from "@elementor/icons";
3754
+ import { Grid as Grid19 } from "@elementor/ui";
3755
+ import { __ as __23 } from "@wordpress/i18n";
3756
+
3757
+ // src/controls/transform-control/functions/axis-row.tsx
3758
+ import * as React55 from "react";
3759
+ import { Grid as Grid18 } from "@elementor/ui";
3760
+ var AxisRow = ({ label, bindValue, startIcon, anchorRef }) => {
3761
+ return /* @__PURE__ */ React55.createElement(Grid18, { item: true, xs: 12 }, /* @__PURE__ */ React55.createElement(PopoverGridContainer, { ref: anchorRef }, /* @__PURE__ */ React55.createElement(Grid18, { item: true, xs: 6 }, /* @__PURE__ */ React55.createElement(ControlLabel, null, label)), /* @__PURE__ */ React55.createElement(Grid18, { item: true, xs: 6 }, /* @__PURE__ */ React55.createElement(PropKeyProvider, { bind: bindValue }, /* @__PURE__ */ React55.createElement(SizeControl, { anchorRef, startIcon })))));
3762
+ };
3763
+
3764
+ // src/controls/transform-control/functions/move.tsx
3765
+ var moveAxisControls = [
3766
+ {
3767
+ label: __23("Move X", "elementor"),
3768
+ bindValue: "x",
3769
+ startIcon: /* @__PURE__ */ React56.createElement(ArrowRightIcon, { fontSize: "tiny" })
3770
+ },
3771
+ {
3772
+ label: __23("Move Y", "elementor"),
3773
+ bindValue: "y",
3774
+ startIcon: /* @__PURE__ */ React56.createElement(ArrowDownSmallIcon, { fontSize: "tiny" })
3775
+ },
3776
+ {
3777
+ label: __23("Move Z", "elementor"),
3778
+ bindValue: "z",
3779
+ startIcon: /* @__PURE__ */ React56.createElement(ArrowDownLeftIcon, { fontSize: "tiny" })
3780
+ }
3781
+ ];
3782
+ var Move = () => {
3783
+ const context = useBoundProp(moveTransformPropTypeUtil);
3784
+ const rowRef = useRef12(null);
3785
+ return /* @__PURE__ */ React56.createElement(Grid19, { container: true, spacing: 1.5 }, /* @__PURE__ */ React56.createElement(PropProvider, { ...context }, /* @__PURE__ */ React56.createElement(PropKeyProvider, { bind: "transform-move" }, moveAxisControls.map((control) => /* @__PURE__ */ React56.createElement(AxisRow, { key: control.bindValue, ...control, anchorRef: rowRef })))));
3786
+ };
3787
+
3788
+ // src/controls/transform-control/transform-content.tsx
3789
+ var TransformContent = ({ bind }) => {
3790
+ const { getTabsProps, getTabProps, getTabPanelProps } = useTabs2("transform-move");
3791
+ return /* @__PURE__ */ React57.createElement(PropKeyProvider, { bind }, /* @__PURE__ */ React57.createElement(PopoverContent, null, /* @__PURE__ */ React57.createElement(Box9, { sx: { width: "100%" } }, /* @__PURE__ */ React57.createElement(Box9, { sx: { borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React57.createElement(
3792
+ Tabs2,
3793
+ {
3794
+ size: "small",
3795
+ variant: "fullWidth",
3796
+ ...getTabsProps(),
3797
+ "aria-label": __24("Transform", "elementor")
3798
+ },
3799
+ /* @__PURE__ */ React57.createElement(Tab2, { label: __24("Move", "elementor"), ...getTabProps("transform-move") })
3800
+ )), /* @__PURE__ */ React57.createElement(TabPanel2, { sx: { p: 1.5 }, ...getTabPanelProps("transform-move") }, /* @__PURE__ */ React57.createElement(Move, null)))));
3801
+ };
3802
+
3803
+ // src/controls/transform-control/transform-icon.tsx
3804
+ import * as React58 from "react";
3805
+ import { ArrowsMaximizeIcon as ArrowsMaximizeIcon2 } from "@elementor/icons";
3806
+ var TransformIcon = ({ value }) => {
3807
+ switch (value.$$type) {
3808
+ case "transform-move":
3809
+ return /* @__PURE__ */ React58.createElement(ArrowsMaximizeIcon2, { fontSize: "tiny" });
3810
+ default:
3811
+ return null;
3812
+ }
3813
+ };
3814
+
3815
+ // src/controls/transform-control/transform-label.tsx
3816
+ import * as React59 from "react";
3817
+ import { Box as Box10 } from "@elementor/ui";
3818
+ import { __ as __25 } from "@wordpress/i18n";
3819
+ var transformMoveValue = (value) => Object.values(value).map((axis) => `${axis?.value.size}${axis?.value.unit}`).join(", ");
3820
+ var TransformLabel = (props) => {
3821
+ const { $$type, value } = props.value;
3822
+ switch ($$type) {
3823
+ case "transform-move":
3824
+ return /* @__PURE__ */ React59.createElement(Label2, { label: __25("Move", "elementor"), value: transformMoveValue(value) });
3825
+ default:
3826
+ return "";
3827
+ }
3828
+ };
3829
+ var Label2 = ({ label, value }) => {
3830
+ return /* @__PURE__ */ React59.createElement(Box10, { component: "span" }, label, ": ", value);
3831
+ };
3832
+
3833
+ // src/controls/transform-control/transform-repeater-control.tsx
3834
+ var initialTransformValue = {
3835
+ $$type: "transform-move",
3836
+ value: {
3837
+ x: { $$type: "size", value: { size: 0, unit: "px" } },
3838
+ y: { $$type: "size", value: { size: 0, unit: "px" } },
3839
+ z: { $$type: "size", value: { size: 0, unit: "px" } }
3840
+ }
3841
+ };
3842
+ var TransformRepeaterControl = createControl(() => {
3843
+ const { propType, value: transformValues, setValue, disabled } = useBoundProp(transformPropTypeUtil);
3844
+ return /* @__PURE__ */ React60.createElement(PropProvider, { propType, value: transformValues, setValue }, /* @__PURE__ */ React60.createElement(
3845
+ Repeater,
3846
+ {
3847
+ openOnAdd: true,
3848
+ disabled,
3849
+ values: transformValues ?? [],
3850
+ setValues: setValue,
3851
+ label: __26("Transform", "elementor"),
3852
+ showDuplicate: false,
3853
+ itemSettings: {
3854
+ Icon: TransformIcon,
3855
+ Label: TransformLabel,
3856
+ Content: TransformContent,
3857
+ initialValues: initialTransformValue
3858
+ }
3859
+ }
3860
+ ));
3861
+ });
3634
3862
  export {
3635
3863
  AspectRatioControl,
3636
3864
  BackgroundControl,
@@ -3661,10 +3889,11 @@ export {
3661
3889
  SizeControl,
3662
3890
  StrokeControl,
3663
3891
  SvgMediaControl,
3664
- SwitchControl2 as SwitchControl,
3892
+ SwitchControl,
3665
3893
  TextAreaControl,
3666
3894
  TextControl,
3667
3895
  ToggleControl,
3896
+ TransformRepeaterControl,
3668
3897
  UrlControl,
3669
3898
  createControlReplacementsRegistry,
3670
3899
  injectIntoRepeaterItemIcon,