@elementor/editor-components 3.35.0-461 → 3.35.0-462

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -17,7 +17,7 @@ import { __registerPanel as registerPanel } from "@elementor/editor-panels";
17
17
  import { stylesRepository } from "@elementor/editor-styles-repository";
18
18
  import { registerDataHook as registerDataHook4 } from "@elementor/editor-v1-adapters";
19
19
  import { __registerSlice as registerSlice } from "@elementor/store";
20
- import { __ as __30 } from "@wordpress/i18n";
20
+ import { __ as __31 } from "@wordpress/i18n";
21
21
 
22
22
  // src/component-instance-transformer.ts
23
23
  import { createTransformer } from "@elementor/editor-canvas";
@@ -1683,7 +1683,7 @@ function getComponentName() {
1683
1683
  }
1684
1684
 
1685
1685
  // src/components/components-tab/components.tsx
1686
- import * as React18 from "react";
1686
+ import * as React19 from "react";
1687
1687
  import { ThemeProvider as ThemeProvider2 } from "@elementor/editor-ui";
1688
1688
 
1689
1689
  // src/hooks/use-components.ts
@@ -1694,6 +1694,17 @@ var useComponents = () => {
1694
1694
  return { components, isLoading };
1695
1695
  };
1696
1696
 
1697
+ // src/utils/is-pro-user.ts
1698
+ function isProUser() {
1699
+ const extendedWindow = window;
1700
+ const hasPro = extendedWindow.elementor?.helpers?.hasPro?.() ?? false;
1701
+ if (!hasPro) {
1702
+ return false;
1703
+ }
1704
+ const isProActive = extendedWindow.elementorPro?.config?.isActive ?? false;
1705
+ return isProActive;
1706
+ }
1707
+
1697
1708
  // src/components/components-tab/component-search.tsx
1698
1709
  import * as React12 from "react";
1699
1710
  import { SearchIcon } from "@elementor/icons";
@@ -2783,14 +2794,26 @@ var useFilteredComponents = () => {
2783
2794
  };
2784
2795
  };
2785
2796
 
2797
+ // src/components/components-tab/components-pro-notification.tsx
2798
+ import * as React18 from "react";
2799
+ import { InfoAlert } from "@elementor/editor-ui";
2800
+ import { Box as Box12, Typography as Typography10 } from "@elementor/ui";
2801
+ import { __ as __21 } from "@wordpress/i18n";
2802
+ function ComponentsProNotification() {
2803
+ return /* @__PURE__ */ React18.createElement(Box12, { sx: { px: 2 } }, /* @__PURE__ */ React18.createElement(InfoAlert, null, /* @__PURE__ */ React18.createElement(Typography10, { variant: "caption", component: "span" }, /* @__PURE__ */ React18.createElement(Typography10, { variant: "caption", component: "span", fontWeight: "bold" }, __21("Try Components for free:", "elementor")), " ", __21(
2804
+ "Soon Components will be part of the Pro subscription, but what you create now will remain on your site.",
2805
+ "elementor"
2806
+ ))));
2807
+ }
2808
+
2786
2809
  // src/components/components-tab/components.tsx
2787
2810
  var ComponentsContent = () => {
2788
2811
  const { components, isLoading } = useComponents();
2789
2812
  const hasComponents = !isLoading && components.length > 0;
2790
- return /* @__PURE__ */ React18.createElement(React18.Fragment, null, hasComponents && /* @__PURE__ */ React18.createElement(ComponentSearch, null), /* @__PURE__ */ React18.createElement(ComponentsList, null));
2813
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, hasComponents && /* @__PURE__ */ React19.createElement(ComponentSearch, null), hasComponents && !isProUser() && /* @__PURE__ */ React19.createElement(ComponentsProNotification, null), /* @__PURE__ */ React19.createElement(ComponentsList, null));
2791
2814
  };
2792
2815
  var Components = () => {
2793
- return /* @__PURE__ */ React18.createElement(ThemeProvider2, null, /* @__PURE__ */ React18.createElement(SearchProvider, { localStorageKey: "elementor-components-search" }, /* @__PURE__ */ React18.createElement(ComponentsContent, null)));
2816
+ return /* @__PURE__ */ React19.createElement(ThemeProvider2, null, /* @__PURE__ */ React19.createElement(SearchProvider, { localStorageKey: "elementor-components-search" }, /* @__PURE__ */ React19.createElement(ComponentsContent, null)));
2794
2817
  };
2795
2818
 
2796
2819
  // src/components/consts.ts
@@ -2798,15 +2821,15 @@ var COMPONENT_DOCUMENT_TYPE = "elementor_component";
2798
2821
  var OVERRIDABLE_PROP_REPLACEMENT_ID = "overridable-prop";
2799
2822
 
2800
2823
  // src/components/create-component-form/create-component-form.tsx
2801
- import * as React19 from "react";
2824
+ import * as React20 from "react";
2802
2825
  import { useEffect as useEffect2, useMemo as useMemo3, useRef as useRef5, useState as useState9 } from "react";
2803
2826
  import { getElementLabel } from "@elementor/editor-elements";
2804
2827
  import { notify as notify3 } from "@elementor/editor-notifications";
2805
2828
  import { Form as FormElement, ThemeProvider as ThemeProvider3 } from "@elementor/editor-ui";
2806
2829
  import { ComponentsIcon as ComponentsIcon3 } from "@elementor/icons";
2807
2830
  import { __getState as getState15 } from "@elementor/store";
2808
- import { Button as Button5, FormLabel as FormLabel2, Grid as Grid2, Popover as Popover3, Stack as Stack11, TextField as TextField3, Typography as Typography10 } from "@elementor/ui";
2809
- import { __ as __22 } from "@wordpress/i18n";
2831
+ import { Button as Button5, FormLabel as FormLabel2, Grid as Grid2, Popover as Popover3, Stack as Stack11, TextField as TextField3, Typography as Typography11 } from "@elementor/ui";
2832
+ import { __ as __23 } from "@wordpress/i18n";
2810
2833
 
2811
2834
  // src/prevent-non-atomic-nesting.ts
2812
2835
  import { isAtomicWidget } from "@elementor/editor-canvas";
@@ -2814,10 +2837,10 @@ import { getAllDescendants as getAllDescendants2, getElementType } from "@elemen
2814
2837
  import { notify as notify2 } from "@elementor/editor-notifications";
2815
2838
  import { blockCommand } from "@elementor/editor-v1-adapters";
2816
2839
  import { __getStore as getStore } from "@elementor/store";
2817
- import { __ as __21 } from "@wordpress/i18n";
2840
+ import { __ as __22 } from "@wordpress/i18n";
2818
2841
  var NON_ATOMIC_ELEMENT_ALERT = {
2819
2842
  type: "default",
2820
- message: __21("This widget isn't compatible with components. Use atomic elements instead.", "elementor"),
2843
+ message: __22("This widget isn't compatible with components. Use atomic elements instead.", "elementor"),
2821
2844
  id: "non-atomic-element-blocked"
2822
2845
  };
2823
2846
  function initNonAtomicNestingPrevention() {
@@ -3037,7 +3060,7 @@ function CreateComponentForm() {
3037
3060
  if (nonAtomicElements.length > 0) {
3038
3061
  notify3({
3039
3062
  type: "default",
3040
- message: __22(
3063
+ message: __23(
3041
3064
  "Components require atomic elements only. Remove widgets to create this component.",
3042
3065
  "elementor"
3043
3066
  ),
@@ -3076,12 +3099,12 @@ function CreateComponentForm() {
3076
3099
  }
3077
3100
  notify3({
3078
3101
  type: "success",
3079
- message: __22("Component created successfully.", "elementor"),
3102
+ message: __23("Component created successfully.", "elementor"),
3080
3103
  id: `component-saved-successfully-${uid}`
3081
3104
  });
3082
3105
  resetAndClosePopup();
3083
3106
  } catch {
3084
- const errorMessage = __22("Failed to create component. Please try again.", "elementor");
3107
+ const errorMessage = __23("Failed to create component. Please try again.", "elementor");
3085
3108
  notify3({
3086
3109
  type: "error",
3087
3110
  message: errorMessage,
@@ -3100,7 +3123,7 @@ function CreateComponentForm() {
3100
3123
  ...eventData.current
3101
3124
  });
3102
3125
  };
3103
- return /* @__PURE__ */ React19.createElement(ThemeProvider3, null, /* @__PURE__ */ React19.createElement(
3126
+ return /* @__PURE__ */ React20.createElement(ThemeProvider3, null, /* @__PURE__ */ React20.createElement(
3104
3127
  Popover3,
3105
3128
  {
3106
3129
  open: element !== null,
@@ -3108,7 +3131,7 @@ function CreateComponentForm() {
3108
3131
  anchorReference: "anchorPosition",
3109
3132
  anchorPosition
3110
3133
  },
3111
- element !== null && /* @__PURE__ */ React19.createElement(
3134
+ element !== null && /* @__PURE__ */ React20.createElement(
3112
3135
  Form2,
3113
3136
  {
3114
3137
  initialValues: { componentName: element.elementLabel },
@@ -3144,13 +3167,13 @@ var Form2 = ({
3144
3167
  }
3145
3168
  };
3146
3169
  const texts = {
3147
- heading: __22("Create component", "elementor"),
3148
- name: __22("Name", "elementor"),
3149
- cancel: __22("Cancel", "elementor"),
3150
- create: __22("Create", "elementor")
3170
+ heading: __23("Create component", "elementor"),
3171
+ name: __23("Name", "elementor"),
3172
+ cancel: __23("Cancel", "elementor"),
3173
+ create: __23("Create", "elementor")
3151
3174
  };
3152
3175
  const nameInputId = "component-name";
3153
- return /* @__PURE__ */ React19.createElement(FormElement, { onSubmit: handleSubmit }, /* @__PURE__ */ React19.createElement(Stack11, { alignItems: "start", width: "268px" }, /* @__PURE__ */ React19.createElement(
3176
+ return /* @__PURE__ */ React20.createElement(FormElement, { onSubmit: handleSubmit }, /* @__PURE__ */ React20.createElement(Stack11, { alignItems: "start", width: "268px" }, /* @__PURE__ */ React20.createElement(
3154
3177
  Stack11,
3155
3178
  {
3156
3179
  direction: "row",
@@ -3159,9 +3182,9 @@ var Form2 = ({
3159
3182
  px: 1.5,
3160
3183
  sx: { columnGap: 0.5, borderBottom: "1px solid", borderColor: "divider", width: "100%" }
3161
3184
  },
3162
- /* @__PURE__ */ React19.createElement(ComponentsIcon3, { fontSize: FONT_SIZE }),
3163
- /* @__PURE__ */ React19.createElement(Typography10, { variant: "caption", sx: { color: "text.primary", fontWeight: "500", lineHeight: 1 } }, texts.heading)
3164
- ), /* @__PURE__ */ React19.createElement(Grid2, { container: true, gap: 0.75, alignItems: "start", p: 1.5 }, /* @__PURE__ */ React19.createElement(Grid2, { item: true, xs: 12 }, /* @__PURE__ */ React19.createElement(FormLabel2, { htmlFor: nameInputId, size: "tiny" }, texts.name)), /* @__PURE__ */ React19.createElement(Grid2, { item: true, xs: 12 }, /* @__PURE__ */ React19.createElement(
3185
+ /* @__PURE__ */ React20.createElement(ComponentsIcon3, { fontSize: FONT_SIZE }),
3186
+ /* @__PURE__ */ React20.createElement(Typography11, { variant: "caption", sx: { color: "text.primary", fontWeight: "500", lineHeight: 1 } }, texts.heading)
3187
+ ), /* @__PURE__ */ React20.createElement(Grid2, { container: true, gap: 0.75, alignItems: "start", p: 1.5 }, /* @__PURE__ */ React20.createElement(Grid2, { item: true, xs: 12 }, /* @__PURE__ */ React20.createElement(FormLabel2, { htmlFor: nameInputId, size: "tiny" }, texts.name)), /* @__PURE__ */ React20.createElement(Grid2, { item: true, xs: 12 }, /* @__PURE__ */ React20.createElement(
3165
3188
  TextField3,
3166
3189
  {
3167
3190
  id: nameInputId,
@@ -3173,11 +3196,11 @@ var Form2 = ({
3173
3196
  error: Boolean(errors.componentName),
3174
3197
  helperText: errors.componentName
3175
3198
  }
3176
- ))), /* @__PURE__ */ React19.createElement(Stack11, { direction: "row", justifyContent: "flex-end", alignSelf: "end", py: 1, px: 1.5 }, /* @__PURE__ */ React19.createElement(Button5, { onClick: closePopup, color: "secondary", variant: "text", size: "small" }, texts.cancel), /* @__PURE__ */ React19.createElement(Button5, { type: "submit", disabled: !isValid, variant: "contained", color: "primary", size: "small" }, texts.create))));
3199
+ ))), /* @__PURE__ */ React20.createElement(Stack11, { direction: "row", justifyContent: "flex-end", alignSelf: "end", py: 1, px: 1.5 }, /* @__PURE__ */ React20.createElement(Button5, { onClick: closePopup, color: "secondary", variant: "text", size: "small" }, texts.cancel), /* @__PURE__ */ React20.createElement(Button5, { type: "submit", disabled: !isValid, variant: "contained", color: "primary", size: "small" }, texts.create))));
3177
3200
  };
3178
3201
 
3179
3202
  // src/components/edit-component/edit-component.tsx
3180
- import * as React21 from "react";
3203
+ import * as React22 from "react";
3181
3204
  import { useEffect as useEffect5 } from "react";
3182
3205
  import { getV1DocumentsManager as getV1DocumentsManager5 } from "@elementor/editor-documents";
3183
3206
  import { __privateListenTo as listenTo, commandEndEvent as commandEndEvent2 } from "@elementor/editor-v1-adapters";
@@ -3200,10 +3223,10 @@ function updateCurrentComponent({
3200
3223
  }
3201
3224
 
3202
3225
  // src/components/edit-component/component-modal.tsx
3203
- import * as React20 from "react";
3226
+ import * as React21 from "react";
3204
3227
  import { useEffect as useEffect4 } from "react";
3205
3228
  import { createPortal } from "react-dom";
3206
- import { __ as __23 } from "@wordpress/i18n";
3229
+ import { __ as __24 } from "@wordpress/i18n";
3207
3230
 
3208
3231
  // src/hooks/use-canvas-document.ts
3209
3232
  import {
@@ -3296,7 +3319,7 @@ function ComponentModal({ element, onClose }) {
3296
3319
  return null;
3297
3320
  }
3298
3321
  return createPortal(
3299
- /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(BlockEditPage, null), /* @__PURE__ */ React20.createElement(Backdrop, { canvas: canvasDocument, element, onClose })),
3322
+ /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement(BlockEditPage, null), /* @__PURE__ */ React21.createElement(Backdrop, { canvas: canvasDocument, element, onClose })),
3300
3323
  canvasDocument.body
3301
3324
  );
3302
3325
  }
@@ -3320,7 +3343,7 @@ function Backdrop({ canvas, element, onClose }) {
3320
3343
  onClose();
3321
3344
  }
3322
3345
  };
3323
- return /* @__PURE__ */ React20.createElement(
3346
+ return /* @__PURE__ */ React21.createElement(
3324
3347
  "div",
3325
3348
  {
3326
3349
  style: backdropStyle,
@@ -3328,7 +3351,7 @@ function Backdrop({ canvas, element, onClose }) {
3328
3351
  onKeyDown: handleKeyDown,
3329
3352
  role: "button",
3330
3353
  tabIndex: 0,
3331
- "aria-label": __23("Exit component editing mode", "elementor")
3354
+ "aria-label": __24("Exit component editing mode", "elementor")
3332
3355
  }
3333
3356
  );
3334
3357
  }
@@ -3372,7 +3395,7 @@ function BlockEditPage() {
3372
3395
  }
3373
3396
  }
3374
3397
  `;
3375
- return /* @__PURE__ */ React20.createElement("style", { "data-e-style-id": "e-block-v3-document-handles-styles" }, blockV3DocumentHandlesStyles);
3398
+ return /* @__PURE__ */ React21.createElement("style", { "data-e-style-id": "e-block-v3-document-handles-styles" }, blockV3DocumentHandlesStyles);
3376
3399
  }
3377
3400
 
3378
3401
  // src/components/edit-component/edit-component.tsx
@@ -3385,7 +3408,7 @@ function EditComponent() {
3385
3408
  if (!elementDom) {
3386
3409
  return null;
3387
3410
  }
3388
- return /* @__PURE__ */ React21.createElement(ComponentModal, { element: elementDom, onClose });
3411
+ return /* @__PURE__ */ React22.createElement(ComponentModal, { element: elementDom, onClose });
3389
3412
  }
3390
3413
  function useHandleDocumentSwitches() {
3391
3414
  const documentsManager = getV1DocumentsManager5();
@@ -3455,26 +3478,26 @@ function getComponentDOMElement(id2) {
3455
3478
  }
3456
3479
 
3457
3480
  // src/components/in-edit-mode.tsx
3458
- import * as React22 from "react";
3481
+ import * as React23 from "react";
3459
3482
  import { closeDialog, openDialog } from "@elementor/editor-ui";
3460
3483
  import { InfoCircleFilledIcon } from "@elementor/icons";
3461
- import { Box as Box12, Button as Button6, DialogActions, DialogContent, DialogHeader, Icon, Stack as Stack12, Typography as Typography11 } from "@elementor/ui";
3462
- import { __ as __24 } from "@wordpress/i18n";
3484
+ import { Box as Box13, Button as Button6, DialogActions, DialogContent, DialogHeader, Icon, Stack as Stack12, Typography as Typography12 } from "@elementor/ui";
3485
+ import { __ as __25 } from "@wordpress/i18n";
3463
3486
  var openEditModeDialog = (lockedBy) => {
3464
3487
  openDialog({
3465
- component: /* @__PURE__ */ React22.createElement(EditModeDialog, { lockedBy })
3488
+ component: /* @__PURE__ */ React23.createElement(EditModeDialog, { lockedBy })
3466
3489
  });
3467
3490
  };
3468
3491
  var EditModeDialog = ({ lockedBy }) => {
3469
- const content = __24("%s is currently editing this document", "elementor").replace("%s", lockedBy);
3470
- return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(DialogHeader, { logo: false }, /* @__PURE__ */ React22.createElement(Box12, { display: "flex", alignItems: "center", gap: 1 }, /* @__PURE__ */ React22.createElement(Icon, { color: "secondary" }, /* @__PURE__ */ React22.createElement(InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ React22.createElement(Typography11, { variant: "subtitle1" }, content))), /* @__PURE__ */ React22.createElement(DialogContent, null, /* @__PURE__ */ React22.createElement(Stack12, { spacing: 2, direction: "column" }, /* @__PURE__ */ React22.createElement(Typography11, { variant: "body2" }, __24(
3492
+ const content = __25("%s is currently editing this document", "elementor").replace("%s", lockedBy);
3493
+ return /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement(DialogHeader, { logo: false }, /* @__PURE__ */ React23.createElement(Box13, { display: "flex", alignItems: "center", gap: 1 }, /* @__PURE__ */ React23.createElement(Icon, { color: "secondary" }, /* @__PURE__ */ React23.createElement(InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ React23.createElement(Typography12, { variant: "subtitle1" }, content))), /* @__PURE__ */ React23.createElement(DialogContent, null, /* @__PURE__ */ React23.createElement(Stack12, { spacing: 2, direction: "column" }, /* @__PURE__ */ React23.createElement(Typography12, { variant: "body2" }, __25(
3471
3494
  "You can wait for them to finish or reach out to coordinate your changes together.",
3472
3495
  "elementor"
3473
- )), /* @__PURE__ */ React22.createElement(DialogActions, null, /* @__PURE__ */ React22.createElement(Button6, { color: "secondary", variant: "contained", onClick: closeDialog }, __24("Close", "elementor"))))));
3496
+ )), /* @__PURE__ */ React23.createElement(DialogActions, null, /* @__PURE__ */ React23.createElement(Button6, { color: "secondary", variant: "contained", onClick: closeDialog }, __25("Close", "elementor"))))));
3474
3497
  };
3475
3498
 
3476
3499
  // src/components/instance-editing-panel/instance-editing-panel.tsx
3477
- import * as React28 from "react";
3500
+ import * as React29 from "react";
3478
3501
  import { ControlAdornmentsProvider } from "@elementor/editor-controls";
3479
3502
  import { getFieldIndicators } from "@elementor/editor-editing-panel";
3480
3503
  import { useSelectedElement as useSelectedElement2 } from "@elementor/editor-elements";
@@ -3482,7 +3505,7 @@ import { PanelBody as PanelBody2, PanelHeader as PanelHeader2, PanelHeaderTitle
3482
3505
  import { EllipsisWithTooltip as EllipsisWithTooltip2 } from "@elementor/editor-ui";
3483
3506
  import { ComponentsIcon as ComponentsIcon4, PencilIcon as PencilIcon2 } from "@elementor/icons";
3484
3507
  import { Divider as Divider4, IconButton as IconButton6, Stack as Stack17, Tooltip as Tooltip4 } from "@elementor/ui";
3485
- import { __ as __26 } from "@wordpress/i18n";
3508
+ import { __ as __27 } from "@wordpress/i18n";
3486
3509
 
3487
3510
  // src/hooks/use-component-instance-settings.ts
3488
3511
  import { useElement } from "@elementor/editor-editing-panel";
@@ -3548,20 +3571,20 @@ function useComponentInstanceSettings() {
3548
3571
  }
3549
3572
 
3550
3573
  // src/components/instance-editing-panel/empty-state.tsx
3551
- import * as React23 from "react";
3574
+ import * as React24 from "react";
3552
3575
  import { ComponentPropListIcon as ComponentPropListIcon4, PencilIcon } from "@elementor/icons";
3553
- import { Button as Button7, Stack as Stack13, Typography as Typography12 } from "@elementor/ui";
3554
- import { __ as __25 } from "@wordpress/i18n";
3576
+ import { Button as Button7, Stack as Stack13, Typography as Typography13 } from "@elementor/ui";
3577
+ import { __ as __26 } from "@wordpress/i18n";
3555
3578
  var EmptyState2 = ({ onEditComponent }) => {
3556
3579
  const { canEdit } = useComponentsPermissions();
3557
- const message = canEdit ? __25(
3580
+ const message = canEdit ? __26(
3558
3581
  "Edit the component to add properties, manage them or update the design across all instances.",
3559
3582
  "elementor"
3560
- ) : __25(
3583
+ ) : __26(
3561
3584
  "With your current role, you cannot edit this component. Contact an administrator to add properties.",
3562
3585
  "elementor"
3563
3586
  );
3564
- return /* @__PURE__ */ React23.createElement(
3587
+ return /* @__PURE__ */ React24.createElement(
3565
3588
  Stack13,
3566
3589
  {
3567
3590
  alignItems: "center",
@@ -3571,22 +3594,22 @@ var EmptyState2 = ({ onEditComponent }) => {
3571
3594
  sx: { p: 2.5, pt: 8, pb: 5.5, mt: 1 },
3572
3595
  gap: 1.5
3573
3596
  },
3574
- /* @__PURE__ */ React23.createElement(ComponentPropListIcon4, { fontSize: "large" }),
3575
- /* @__PURE__ */ React23.createElement(Typography12, { align: "center", variant: "subtitle2" }, __25("No properties yet", "elementor")),
3576
- /* @__PURE__ */ React23.createElement(Typography12, { align: "center", variant: "caption", maxWidth: "170px" }, message),
3577
- canEdit && /* @__PURE__ */ React23.createElement(Button7, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React23.createElement(PencilIcon, { fontSize: "small" }), __25("Edit component", "elementor"))
3597
+ /* @__PURE__ */ React24.createElement(ComponentPropListIcon4, { fontSize: "large" }),
3598
+ /* @__PURE__ */ React24.createElement(Typography13, { align: "center", variant: "subtitle2" }, __26("No properties yet", "elementor")),
3599
+ /* @__PURE__ */ React24.createElement(Typography13, { align: "center", variant: "caption", maxWidth: "170px" }, message),
3600
+ canEdit && /* @__PURE__ */ React24.createElement(Button7, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React24.createElement(PencilIcon, { fontSize: "small" }), __26("Edit component", "elementor"))
3578
3601
  );
3579
3602
  };
3580
3603
 
3581
3604
  // src/components/instance-editing-panel/override-props-group.tsx
3582
- import * as React27 from "react";
3605
+ import * as React28 from "react";
3583
3606
  import { useId } from "react";
3584
3607
  import { useStateByElement } from "@elementor/editor-editing-panel";
3585
3608
  import { CollapseIcon } from "@elementor/editor-ui";
3586
- import { Box as Box13, Collapse, ListItemButton as ListItemButton3, ListItemText, Stack as Stack16 } from "@elementor/ui";
3609
+ import { Box as Box14, Collapse, ListItemButton as ListItemButton3, ListItemText, Stack as Stack16 } from "@elementor/ui";
3587
3610
 
3588
3611
  // src/components/instance-editing-panel/override-prop-control.tsx
3589
- import * as React26 from "react";
3612
+ import * as React27 from "react";
3590
3613
  import { ControlReplacementsProvider, PropKeyProvider, PropProvider, useBoundProp } from "@elementor/editor-controls";
3591
3614
  import {
3592
3615
  BaseControl,
@@ -3632,11 +3655,11 @@ function getControlsByBind(controls) {
3632
3655
  }
3633
3656
 
3634
3657
  // src/provider/overridable-prop-context.tsx
3635
- import * as React24 from "react";
3658
+ import * as React25 from "react";
3636
3659
  import { createContext as createContext2, useContext as useContext2 } from "react";
3637
3660
  var OverridablePropContext = createContext2(null);
3638
3661
  function OverridablePropProvider({ children, ...props }) {
3639
- return /* @__PURE__ */ React24.createElement(OverridablePropContext.Provider, { value: props }, children);
3662
+ return /* @__PURE__ */ React25.createElement(OverridablePropContext.Provider, { value: props }, children);
3640
3663
  }
3641
3664
  var useOverridablePropValue = () => useContext2(OverridablePropContext)?.value;
3642
3665
  var useComponentInstanceElement = () => useContext2(OverridablePropContext)?.componentInstanceElement;
@@ -3730,11 +3753,11 @@ function getPropType({ widgetType, propKey }) {
3730
3753
  }
3731
3754
 
3732
3755
  // src/components/control-label.tsx
3733
- import * as React25 from "react";
3756
+ import * as React26 from "react";
3734
3757
  import { ControlAdornments, ControlFormLabel } from "@elementor/editor-controls";
3735
3758
  import { Stack as Stack14 } from "@elementor/ui";
3736
3759
  var ControlLabel = ({ children, ...props }) => {
3737
- return /* @__PURE__ */ React25.createElement(Stack14, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React25.createElement(ControlFormLabel, { ...props }, children), /* @__PURE__ */ React25.createElement(ControlAdornments, null));
3760
+ return /* @__PURE__ */ React26.createElement(Stack14, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React26.createElement(ControlFormLabel, { ...props }, children), /* @__PURE__ */ React26.createElement(ControlAdornments, null));
3738
3761
  };
3739
3762
 
3740
3763
  // src/components/errors.ts
@@ -3746,7 +3769,7 @@ var OverrideControlInnerElementNotFoundError = createError({
3746
3769
 
3747
3770
  // src/components/instance-editing-panel/override-prop-control.tsx
3748
3771
  function OverridePropControl({ overridableProp, overrides }) {
3749
- return /* @__PURE__ */ React26.createElement(SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React26.createElement(OverrideControl, { overridableProp, overrides }));
3772
+ return /* @__PURE__ */ React27.createElement(SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React27.createElement(OverrideControl, { overridableProp, overrides }));
3750
3773
  }
3751
3774
  function OverrideControl({ overridableProp, overrides }) {
3752
3775
  const componentInstanceElement = useElement2();
@@ -3817,13 +3840,13 @@ function OverrideControl({ overridableProp, overrides }) {
3817
3840
  if (!elementType) {
3818
3841
  return null;
3819
3842
  }
3820
- return /* @__PURE__ */ React26.createElement(
3843
+ return /* @__PURE__ */ React27.createElement(
3821
3844
  OverridablePropProvider,
3822
3845
  {
3823
3846
  value: componentOverridablePropTypeUtil.extract(matchingOverride) ?? void 0,
3824
3847
  componentInstanceElement
3825
3848
  },
3826
- /* @__PURE__ */ React26.createElement(ElementProvider2, { element: { id: elementId, type }, elementType }, /* @__PURE__ */ React26.createElement(SettingsField, { bind: propKey, propDisplayName: overridableProp.label }, /* @__PURE__ */ React26.createElement(
3849
+ /* @__PURE__ */ React27.createElement(ElementProvider2, { element: { id: elementId, type }, elementType }, /* @__PURE__ */ React27.createElement(SettingsField, { bind: propKey, propDisplayName: overridableProp.label }, /* @__PURE__ */ React27.createElement(
3827
3850
  PropProvider,
3828
3851
  {
3829
3852
  propType: propTypeSchema,
@@ -3833,7 +3856,7 @@ function OverrideControl({ overridableProp, overrides }) {
3833
3856
  return false;
3834
3857
  }
3835
3858
  },
3836
- /* @__PURE__ */ React26.createElement(PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React26.createElement(ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ React26.createElement(Stack15, { direction: "column", gap: 1, mb: 1.5 }, layout !== "custom" && /* @__PURE__ */ React26.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ React26.createElement(OriginalControl, { control, controlProps }))))
3859
+ /* @__PURE__ */ React27.createElement(PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React27.createElement(ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ React27.createElement(Stack15, { direction: "column", gap: 1, mb: 1.5 }, layout !== "custom" && /* @__PURE__ */ React27.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ React27.createElement(OriginalControl, { control, controlProps }))))
3837
3860
  )))
3838
3861
  );
3839
3862
  }
@@ -3897,7 +3920,7 @@ function getControlParams(controls, originPropFields, label) {
3897
3920
  }
3898
3921
  function OriginalControl({ control, controlProps }) {
3899
3922
  const { value } = control;
3900
- return /* @__PURE__ */ React26.createElement(BaseControl, { type: value.type, props: controlProps });
3923
+ return /* @__PURE__ */ React27.createElement(BaseControl, { type: value.type, props: controlProps });
3901
3924
  }
3902
3925
  function getControlLayout(control) {
3903
3926
  return control.value.meta?.layout || controlsRegistry.getLayout(control.value.type);
@@ -3928,7 +3951,7 @@ function OverridePropsGroup({ group, props, overrides }) {
3928
3951
  const labelId = `label-${id2}`;
3929
3952
  const contentId = `content-${id2}`;
3930
3953
  const title = group.label;
3931
- return /* @__PURE__ */ React27.createElement(Box13, { "aria-label": `${title} section` }, /* @__PURE__ */ React27.createElement(
3954
+ return /* @__PURE__ */ React28.createElement(Box14, { "aria-label": `${title} section` }, /* @__PURE__ */ React28.createElement(
3932
3955
  ListItemButton3,
3933
3956
  {
3934
3957
  id: labelId,
@@ -3938,7 +3961,7 @@ function OverridePropsGroup({ group, props, overrides }) {
3938
3961
  p: 0,
3939
3962
  sx: { "&:hover": { backgroundColor: "transparent" } }
3940
3963
  },
3941
- /* @__PURE__ */ React27.createElement(Stack16, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React27.createElement(
3964
+ /* @__PURE__ */ React28.createElement(Stack16, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React28.createElement(
3942
3965
  ListItemText,
3943
3966
  {
3944
3967
  secondary: title,
@@ -3946,8 +3969,8 @@ function OverridePropsGroup({ group, props, overrides }) {
3946
3969
  sx: { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 }
3947
3970
  }
3948
3971
  )),
3949
- /* @__PURE__ */ React27.createElement(CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
3950
- ), /* @__PURE__ */ React27.createElement(Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React27.createElement(Stack16, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React27.createElement(
3972
+ /* @__PURE__ */ React28.createElement(CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
3973
+ ), /* @__PURE__ */ React28.createElement(Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React28.createElement(Stack16, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React28.createElement(
3951
3974
  OverridePropControl,
3952
3975
  {
3953
3976
  key: overrideKey,
@@ -3969,23 +3992,23 @@ function InstanceEditingPanel() {
3969
3992
  if (!componentId || !overridableProps || !component) {
3970
3993
  return null;
3971
3994
  }
3972
- const panelTitle = __26("Edit %s", "elementor").replace("%s", component.name);
3995
+ const panelTitle = __27("Edit %s", "elementor").replace("%s", component.name);
3973
3996
  const handleEditComponent = () => switchToComponent(componentId, componentInstanceId);
3974
3997
  const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
3975
3998
  const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
3976
3999
  const isEmpty = groups.length === 0 || Object.keys(overridableProps.props).length === 0;
3977
- return /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement(PanelHeader2, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React28.createElement(Stack17, { direction: "row", alignItems: "center", flexGrow: 1, gap: 1, maxWidth: "100%" }, /* @__PURE__ */ React28.createElement(ComponentsIcon4, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React28.createElement(EllipsisWithTooltip2, { title: component.name, as: PanelHeaderTitle2 }), canEdit && /* @__PURE__ */ React28.createElement(Tooltip4, { title: panelTitle }, /* @__PURE__ */ React28.createElement(IconButton6, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React28.createElement(PencilIcon2, { fontSize: "tiny" }))))), /* @__PURE__ */ React28.createElement(PanelBody2, null, /* @__PURE__ */ React28.createElement(ControlAdornmentsProvider, { items: getFieldIndicators("settings") }, isEmpty ? /* @__PURE__ */ React28.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React28.createElement(Stack17, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React28.createElement(React28.Fragment, { key: group.id }, /* @__PURE__ */ React28.createElement(
4000
+ return /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(PanelHeader2, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React29.createElement(Stack17, { direction: "row", alignItems: "center", flexGrow: 1, gap: 1, maxWidth: "100%" }, /* @__PURE__ */ React29.createElement(ComponentsIcon4, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React29.createElement(EllipsisWithTooltip2, { title: component.name, as: PanelHeaderTitle2 }), canEdit && /* @__PURE__ */ React29.createElement(Tooltip4, { title: panelTitle }, /* @__PURE__ */ React29.createElement(IconButton6, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React29.createElement(PencilIcon2, { fontSize: "tiny" }))))), /* @__PURE__ */ React29.createElement(PanelBody2, null, /* @__PURE__ */ React29.createElement(ControlAdornmentsProvider, { items: getFieldIndicators("settings") }, isEmpty ? /* @__PURE__ */ React29.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React29.createElement(Stack17, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React29.createElement(React29.Fragment, { key: group.id }, /* @__PURE__ */ React29.createElement(
3978
4001
  OverridePropsGroup,
3979
4002
  {
3980
4003
  group,
3981
4004
  props: overridableProps.props,
3982
4005
  overrides
3983
4006
  }
3984
- ), /* @__PURE__ */ React28.createElement(Divider4, null)))))));
4007
+ ), /* @__PURE__ */ React29.createElement(Divider4, null)))))));
3985
4008
  }
3986
4009
 
3987
4010
  // src/components/overridable-props/overridable-prop-control.tsx
3988
- import * as React29 from "react";
4011
+ import * as React30 from "react";
3989
4012
  import {
3990
4013
  ControlReplacementsProvider as ControlReplacementsProvider2,
3991
4014
  createControl,
@@ -4037,7 +4060,7 @@ function OverridablePropControl({
4037
4060
  });
4038
4061
  const propValue = isComponentInstance2 ? (value.origin_value?.value).override_value : value.origin_value;
4039
4062
  const objectPlaceholder = placeholder ? { [bind]: placeholder } : void 0;
4040
- return /* @__PURE__ */ React29.createElement(OverridablePropProvider, { value }, /* @__PURE__ */ React29.createElement(
4063
+ return /* @__PURE__ */ React30.createElement(OverridablePropProvider, { value }, /* @__PURE__ */ React30.createElement(
4041
4064
  PropProvider2,
4042
4065
  {
4043
4066
  ...propContext,
@@ -4048,17 +4071,17 @@ function OverridablePropControl({
4048
4071
  },
4049
4072
  placeholder: objectPlaceholder
4050
4073
  },
4051
- /* @__PURE__ */ React29.createElement(PropKeyProvider2, { bind }, /* @__PURE__ */ React29.createElement(ControlReplacementsProvider2, { replacements: filteredReplacements }, /* @__PURE__ */ React29.createElement(Control, { ...props })))
4074
+ /* @__PURE__ */ React30.createElement(PropKeyProvider2, { bind }, /* @__PURE__ */ React30.createElement(ControlReplacementsProvider2, { replacements: filteredReplacements }, /* @__PURE__ */ React30.createElement(Control, { ...props })))
4052
4075
  ));
4053
4076
  }
4054
4077
 
4055
4078
  // src/components/overridable-props/overridable-prop-indicator.tsx
4056
- import * as React31 from "react";
4079
+ import * as React32 from "react";
4057
4080
  import { useBoundProp as useBoundProp3 } from "@elementor/editor-controls";
4058
4081
  import { useElement as useElement4 } from "@elementor/editor-editing-panel";
4059
4082
  import { getWidgetsCache as getWidgetsCache3 } from "@elementor/editor-elements";
4060
4083
  import { bindPopover as bindPopover2, bindTrigger as bindTrigger4, Popover as Popover4, Tooltip as Tooltip5, usePopupState as usePopupState4 } from "@elementor/ui";
4061
- import { __ as __28 } from "@wordpress/i18n";
4084
+ import { __ as __29 } from "@wordpress/i18n";
4062
4085
 
4063
4086
  // src/store/actions/set-overridable-prop.ts
4064
4087
  import { __dispatch as dispatch14, __getState as getState17 } from "@elementor/store";
@@ -4125,13 +4148,13 @@ function setOverridableProp({
4125
4148
  }
4126
4149
 
4127
4150
  // src/components/overridable-props/indicator.tsx
4128
- import * as React30 from "react";
4151
+ import * as React31 from "react";
4129
4152
  import { forwardRef as forwardRef2 } from "react";
4130
4153
  import { CheckIcon, PlusIcon } from "@elementor/icons";
4131
- import { Box as Box14, styled as styled4 } from "@elementor/ui";
4132
- import { __ as __27 } from "@wordpress/i18n";
4154
+ import { Box as Box15, styled as styled4 } from "@elementor/ui";
4155
+ import { __ as __28 } from "@wordpress/i18n";
4133
4156
  var SIZE2 = "tiny";
4134
- var IconContainer = styled4(Box14)`
4157
+ var IconContainer = styled4(Box15)`
4135
4158
  pointer-events: none;
4136
4159
  opacity: 0;
4137
4160
  transition: opacity 0.2s ease-in-out;
@@ -4148,7 +4171,7 @@ var IconContainer = styled4(Box14)`
4148
4171
  stroke-width: 2px;
4149
4172
  }
4150
4173
  `;
4151
- var Content = styled4(Box14)`
4174
+ var Content = styled4(Box15)`
4152
4175
  position: relative;
4153
4176
  display: flex;
4154
4177
  align-items: center;
@@ -4185,13 +4208,13 @@ var Content = styled4(Box14)`
4185
4208
  }
4186
4209
  }
4187
4210
  `;
4188
- var Indicator2 = forwardRef2(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */ React30.createElement(Content, { ref, ...props, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React30.createElement(
4211
+ var Indicator2 = forwardRef2(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */ React31.createElement(Content, { ref, ...props, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React31.createElement(
4189
4212
  IconContainer,
4190
4213
  {
4191
4214
  className: "icon",
4192
- "aria-label": isOverridable ? __27("Overridable property", "elementor") : __27("Make prop overridable", "elementor")
4215
+ "aria-label": isOverridable ? __28("Overridable property", "elementor") : __28("Make prop overridable", "elementor")
4193
4216
  },
4194
- isOverridable ? /* @__PURE__ */ React30.createElement(CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React30.createElement(PlusIcon, { fontSize: SIZE2 })
4217
+ isOverridable ? /* @__PURE__ */ React31.createElement(CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React31.createElement(PlusIcon, { fontSize: SIZE2 })
4195
4218
  )));
4196
4219
 
4197
4220
  // src/components/overridable-props/utils/get-overridable-prop.ts
@@ -4215,7 +4238,7 @@ function OverridablePropIndicator() {
4215
4238
  if (!isPropAllowed(propType) || !componentId || !overridableProps) {
4216
4239
  return null;
4217
4240
  }
4218
- return /* @__PURE__ */ React31.createElement(Content2, { componentId, overridableProps });
4241
+ return /* @__PURE__ */ React32.createElement(Content2, { componentId, overridableProps });
4219
4242
  }
4220
4243
  function Content2({ componentId, overridableProps }) {
4221
4244
  const {
@@ -4260,7 +4283,7 @@ function Content2({ componentId, overridableProps }) {
4260
4283
  popupState.close();
4261
4284
  };
4262
4285
  const overridableConfig = overridableValue ? getOverridableProp({ componentId, overrideKey: overridableValue.override_key }) : void 0;
4263
- return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(Tooltip5, { placement: "top", title: __28("Override Property", "elementor") }, /* @__PURE__ */ React31.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React31.createElement(
4286
+ return /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement(Tooltip5, { placement: "top", title: __29("Override Property", "elementor") }, /* @__PURE__ */ React32.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React32.createElement(
4264
4287
  Popover4,
4265
4288
  {
4266
4289
  disableScrollLock: true,
@@ -4277,7 +4300,7 @@ function Content2({ componentId, overridableProps }) {
4277
4300
  },
4278
4301
  ...popoverProps
4279
4302
  },
4280
- /* @__PURE__ */ React31.createElement(
4303
+ /* @__PURE__ */ React32.createElement(
4281
4304
  OverridablePropForm,
4282
4305
  {
4283
4306
  onSubmit: handleSubmit,
@@ -4645,11 +4668,11 @@ import { getAllDescendants as getAllDescendants3 } from "@elementor/editor-eleme
4645
4668
  import { notify as notify4 } from "@elementor/editor-notifications";
4646
4669
  import { blockCommand as blockCommand2 } from "@elementor/editor-v1-adapters";
4647
4670
  import { __getState as getState19 } from "@elementor/store";
4648
- import { __ as __29 } from "@wordpress/i18n";
4671
+ import { __ as __30 } from "@wordpress/i18n";
4649
4672
  var COMPONENT_TYPE = "e-component";
4650
4673
  var COMPONENT_CIRCULAR_NESTING_ALERT = {
4651
4674
  type: "default",
4652
- message: __29("Can't add this component - components that contain each other can't be nested.", "elementor"),
4675
+ message: __30("Can't add this component - components that contain each other can't be nested.", "elementor"),
4653
4676
  id: "circular-component-nesting-blocked"
4654
4677
  };
4655
4678
  function initCircularNestingPrevention() {
@@ -5128,7 +5151,7 @@ function init() {
5128
5151
  window.elementorCommon.__beforeSave = beforeSave;
5129
5152
  injectTab({
5130
5153
  id: "components",
5131
- label: __30("Components", "elementor"),
5154
+ label: __31("Components", "elementor"),
5132
5155
  component: Components,
5133
5156
  position: 1
5134
5157
  });