@elementor/editor-components 3.35.0-431 → 3.35.0-432

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 registerDataHook2 } from "@elementor/editor-v1-adapters";
19
19
  import { __registerSlice as registerSlice } from "@elementor/store";
20
- import { __ as __29 } from "@wordpress/i18n";
20
+ import { __ as __30 } from "@wordpress/i18n";
21
21
 
22
22
  // src/component-instance-transformer.ts
23
23
  import { createTransformer } from "@elementor/editor-canvas";
@@ -356,7 +356,7 @@ import { getV1DocumentsManager as getV1DocumentsManager3 } from "@elementor/edit
356
356
  import { ArrowLeftIcon, ComponentsFilledIcon } from "@elementor/icons";
357
357
  import { __getState as getState9 } from "@elementor/store";
358
358
  import { Box as Box7, Divider as Divider2, IconButton as IconButton4, Stack as Stack6, Tooltip as Tooltip3, Typography as Typography6 } from "@elementor/ui";
359
- import { __ as __11 } from "@wordpress/i18n";
359
+ import { __ as __12 } from "@wordpress/i18n";
360
360
 
361
361
  // src/hooks/use-navigate-back.ts
362
362
  import { useCallback } from "react";
@@ -440,7 +440,7 @@ import { useSelectedElement } from "@elementor/editor-elements";
440
440
  import { __createPanel as createPanel, Panel } from "@elementor/editor-panels";
441
441
  import { ThemeProvider } from "@elementor/editor-ui";
442
442
  import { Alert, Box as Box5, ErrorBoundary } from "@elementor/ui";
443
- import { __ as __9 } from "@wordpress/i18n";
443
+ import { __ as __10 } from "@wordpress/i18n";
444
444
 
445
445
  // src/components/component-properties-panel/component-properties-panel-content.tsx
446
446
  import * as React7 from "react";
@@ -450,7 +450,7 @@ import { PanelBody, PanelHeader, PanelHeaderTitle } from "@elementor/editor-pane
450
450
  import { ComponentPropListIcon as ComponentPropListIcon2, FolderPlusIcon, XIcon as XIcon2 } from "@elementor/icons";
451
451
  import { Divider, IconButton as IconButton3, List as List2, Stack as Stack5, Tooltip as Tooltip2 } from "@elementor/ui";
452
452
  import { generateUniqueId as generateUniqueId2 } from "@elementor/utils";
453
- import { __ as __8 } from "@wordpress/i18n";
453
+ import { __ as __9 } from "@wordpress/i18n";
454
454
 
455
455
  // src/store/actions/add-overridable-group.ts
456
456
  import { __dispatch as dispatch, __getState as getState2 } from "@elementor/store";
@@ -914,7 +914,7 @@ import {
914
914
  Typography as Typography5,
915
915
  usePopupState as usePopupState2
916
916
  } from "@elementor/ui";
917
- import { __ as __5 } from "@wordpress/i18n";
917
+ import { __ as __6 } from "@wordpress/i18n";
918
918
 
919
919
  // src/components/component-properties-panel/property-item.tsx
920
920
  import * as React5 from "react";
@@ -927,18 +927,55 @@ import * as React3 from "react";
927
927
  import { useState as useState2 } from "react";
928
928
  import { Form, MenuListItem } from "@elementor/editor-ui";
929
929
  import { Button as Button2, FormLabel, Grid, Select, Stack as Stack3, TextField, Typography as Typography3 } from "@elementor/ui";
930
+ import { __ as __5 } from "@wordpress/i18n";
931
+
932
+ // src/components/overridable-props/utils/validate-prop-label.ts
930
933
  import { __ as __4 } from "@wordpress/i18n";
934
+ var ERROR_MESSAGES = {
935
+ EMPTY_NAME: __4("Property name is required", "elementor"),
936
+ DUPLICATE_NAME: __4("Property name already exists", "elementor")
937
+ };
938
+ function validatePropLabel(label, existingLabels, currentLabel) {
939
+ const trimmedLabel = label.trim();
940
+ if (!trimmedLabel) {
941
+ return { isValid: false, errorMessage: ERROR_MESSAGES.EMPTY_NAME };
942
+ }
943
+ const normalizedLabel = trimmedLabel.toLowerCase();
944
+ const normalizedCurrentLabel = currentLabel?.trim().toLowerCase();
945
+ const isDuplicate = existingLabels.some((existingLabel) => {
946
+ const normalizedExisting = existingLabel.trim().toLowerCase();
947
+ if (normalizedCurrentLabel && normalizedExisting === normalizedCurrentLabel) {
948
+ return false;
949
+ }
950
+ return normalizedExisting === normalizedLabel;
951
+ });
952
+ if (isDuplicate) {
953
+ return { isValid: false, errorMessage: ERROR_MESSAGES.DUPLICATE_NAME };
954
+ }
955
+ return { isValid: true, errorMessage: null };
956
+ }
957
+
958
+ // src/components/overridable-props/overridable-prop-form.tsx
931
959
  var SIZE = "tiny";
932
- var DEFAULT_GROUP = { value: null, label: __4("Default", "elementor") };
933
- function OverridablePropForm({ onSubmit, groups, currentValue, sx }) {
960
+ var DEFAULT_GROUP = { value: null, label: __5("Default", "elementor") };
961
+ function OverridablePropForm({ onSubmit, groups, currentValue, existingLabels = [], sx }) {
934
962
  const [propLabel, setPropLabel] = useState2(currentValue?.label ?? null);
935
963
  const [group, setGroup] = useState2(currentValue?.groupId ?? groups?.[0]?.value ?? null);
936
- const name = __4("Name", "elementor");
937
- const groupName = __4("Group Name", "elementor");
964
+ const [error, setError] = useState2(null);
965
+ const name = __5("Name", "elementor");
966
+ const groupName = __5("Group Name", "elementor");
938
967
  const isCreate = currentValue === void 0;
939
- const title = isCreate ? __4("Create new property", "elementor") : __4("Update property", "elementor");
940
- const ctaLabel = isCreate ? __4("Create", "elementor") : __4("Update", "elementor");
941
- return /* @__PURE__ */ React3.createElement(Form, { onSubmit: () => onSubmit({ label: propLabel ?? "", group }) }, /* @__PURE__ */ React3.createElement(Stack3, { alignItems: "start", sx: { width: "268px", ...sx } }, /* @__PURE__ */ React3.createElement(
968
+ const title = isCreate ? __5("Create new property", "elementor") : __5("Update property", "elementor");
969
+ const ctaLabel = isCreate ? __5("Create", "elementor") : __5("Update", "elementor");
970
+ const handleSubmit = () => {
971
+ const validationResult = validatePropLabel(propLabel ?? "", existingLabels, currentValue?.label);
972
+ if (!validationResult.isValid) {
973
+ setError(validationResult.errorMessage);
974
+ return;
975
+ }
976
+ onSubmit({ label: propLabel ?? "", group });
977
+ };
978
+ return /* @__PURE__ */ React3.createElement(Form, { onSubmit: handleSubmit }, /* @__PURE__ */ React3.createElement(Stack3, { alignItems: "start", sx: { width: "268px", ...sx } }, /* @__PURE__ */ React3.createElement(
942
979
  Stack3,
943
980
  {
944
981
  direction: "row",
@@ -954,9 +991,20 @@ function OverridablePropForm({ onSubmit, groups, currentValue, sx }) {
954
991
  name,
955
992
  size: SIZE,
956
993
  fullWidth: true,
957
- placeholder: __4("Enter value", "elementor"),
994
+ placeholder: __5("Enter value", "elementor"),
958
995
  value: propLabel ?? "",
959
- onChange: (e) => setPropLabel(e.target.value)
996
+ onChange: (e) => {
997
+ const newValue = e.target.value;
998
+ setPropLabel(newValue);
999
+ const validationResult = validatePropLabel(
1000
+ newValue,
1001
+ existingLabels,
1002
+ currentValue?.label
1003
+ );
1004
+ setError(validationResult.errorMessage);
1005
+ },
1006
+ error: Boolean(error),
1007
+ helperText: error
960
1008
  }
961
1009
  ))), /* @__PURE__ */ React3.createElement(Grid, { container: true, gap: 0.75, alignItems: "start", px: 1.5, mb: 1.5 }, /* @__PURE__ */ React3.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React3.createElement(FormLabel, { size: "tiny" }, groupName)), /* @__PURE__ */ React3.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React3.createElement(
962
1010
  Select,
@@ -976,7 +1024,17 @@ function OverridablePropForm({ onSubmit, groups, currentValue, sx }) {
976
1024
  }
977
1025
  },
978
1026
  (groups ?? [DEFAULT_GROUP]).map(({ label: groupLabel, ...props }) => /* @__PURE__ */ React3.createElement(MenuListItem, { key: props.value, ...props, value: props.value ?? "" }, groupLabel))
979
- ))), /* @__PURE__ */ React3.createElement(Stack3, { direction: "row", justifyContent: "flex-end", alignSelf: "end", mt: 1.5, py: 1, px: 1.5 }, /* @__PURE__ */ React3.createElement(Button2, { type: "submit", disabled: !propLabel, variant: "contained", color: "primary", size: "small" }, ctaLabel))));
1027
+ ))), /* @__PURE__ */ React3.createElement(Stack3, { direction: "row", justifyContent: "flex-end", alignSelf: "end", mt: 1.5, py: 1, px: 1.5 }, /* @__PURE__ */ React3.createElement(
1028
+ Button2,
1029
+ {
1030
+ type: "submit",
1031
+ disabled: !propLabel || Boolean(error),
1032
+ variant: "contained",
1033
+ color: "primary",
1034
+ size: "small"
1035
+ },
1036
+ ctaLabel
1037
+ ))));
980
1038
  }
981
1039
 
982
1040
  // src/components/component-properties-panel/sortable.tsx
@@ -1054,6 +1112,7 @@ function PropertyItem({
1054
1112
  sortableTriggerProps,
1055
1113
  isDragPlaceholder,
1056
1114
  groups,
1115
+ existingLabels,
1057
1116
  onDelete,
1058
1117
  onUpdate
1059
1118
  }) {
@@ -1129,6 +1188,7 @@ function PropertyItem({
1129
1188
  onSubmit: handleSubmit,
1130
1189
  currentValue: prop,
1131
1190
  groups,
1191
+ existingLabels,
1132
1192
  sx: { width: "100%" }
1133
1193
  }
1134
1194
  )
@@ -1239,7 +1299,7 @@ function PropertiesGroup({
1239
1299
  className: "group-menu",
1240
1300
  size: "tiny",
1241
1301
  sx: { p: 0.25, visibility: isThisGroupEditing ? "visible" : void 0 },
1242
- "aria-label": __5("Group actions", "elementor"),
1302
+ "aria-label": __6("Group actions", "elementor"),
1243
1303
  ...bindTrigger2(popupState)
1244
1304
  },
1245
1305
  /* @__PURE__ */ React6.createElement(DotsVerticalIcon, { fontSize: "tiny" })
@@ -1251,6 +1311,7 @@ function PropertiesGroup({
1251
1311
  sortableTriggerProps: { ...triggerProps, style: triggerStyle },
1252
1312
  isDragPlaceholder: isItemDragPlaceholder,
1253
1313
  groups: allGroups,
1314
+ existingLabels: Object.values(props).map((p) => p.label),
1254
1315
  onDelete: onPropertyDelete,
1255
1316
  onUpdate: (data) => onPropertyUpdate(prop.overrideKey, data)
1256
1317
  }
@@ -1262,11 +1323,11 @@ function PropertiesGroup({
1262
1323
  anchorOrigin: { vertical: "bottom", horizontal: "right" },
1263
1324
  transformOrigin: { vertical: "top", horizontal: "right" }
1264
1325
  },
1265
- /* @__PURE__ */ React6.createElement(MenuListItem2, { sx: { minWidth: "160px" }, onClick: handleRenameClick }, /* @__PURE__ */ React6.createElement(Typography5, { variant: "caption", sx: { color: "text.primary" } }, __5("Rename", "elementor"))),
1326
+ /* @__PURE__ */ React6.createElement(MenuListItem2, { sx: { minWidth: "160px" }, onClick: handleRenameClick }, /* @__PURE__ */ React6.createElement(Typography5, { variant: "caption", sx: { color: "text.primary" } }, __6("Rename", "elementor"))),
1266
1327
  /* @__PURE__ */ React6.createElement(
1267
1328
  Tooltip,
1268
1329
  {
1269
- title: hasProperties ? __5("To delete the group, first remove all the properties", "elementor") : "",
1330
+ title: hasProperties ? __6("To delete the group, first remove all the properties", "elementor") : "",
1270
1331
  placement: "right"
1271
1332
  },
1272
1333
  /* @__PURE__ */ React6.createElement("span", null, /* @__PURE__ */ React6.createElement(MenuListItem2, { onClick: handleDeleteClick, disabled: hasProperties }, /* @__PURE__ */ React6.createElement(
@@ -1275,7 +1336,7 @@ function PropertiesGroup({
1275
1336
  variant: "caption",
1276
1337
  sx: { color: hasProperties ? "text.disabled" : "error.light" }
1277
1338
  },
1278
- __5("Delete", "elementor")
1339
+ __6("Delete", "elementor")
1279
1340
  )))
1280
1341
  )
1281
1342
  )
@@ -1286,7 +1347,7 @@ function PropertiesGroup({
1286
1347
  import { useState as useState3 } from "react";
1287
1348
  import { setDocumentModifiedStatus } from "@elementor/editor-documents";
1288
1349
  import { useEditable } from "@elementor/editor-ui";
1289
- import { __ as __7 } from "@wordpress/i18n";
1350
+ import { __ as __8 } from "@wordpress/i18n";
1290
1351
 
1291
1352
  // src/store/actions/rename-overridable-group.ts
1292
1353
  import { __dispatch as dispatch7, __getState as getState8 } from "@elementor/store";
@@ -1313,19 +1374,19 @@ function renameOverridableGroup({ componentId, groupId, label }) {
1313
1374
  }
1314
1375
 
1315
1376
  // src/components/component-properties-panel/utils/validate-group-label.ts
1316
- import { __ as __6 } from "@wordpress/i18n";
1317
- var ERROR_MESSAGES = {
1318
- EMPTY_NAME: __6("Group name is required", "elementor"),
1319
- DUPLICATE_NAME: __6("Group name already exists", "elementor")
1377
+ import { __ as __7 } from "@wordpress/i18n";
1378
+ var ERROR_MESSAGES2 = {
1379
+ EMPTY_NAME: __7("Group name is required", "elementor"),
1380
+ DUPLICATE_NAME: __7("Group name already exists", "elementor")
1320
1381
  };
1321
1382
  function validateGroupLabel(label, existingGroups) {
1322
1383
  const trimmedLabel = label.trim();
1323
1384
  if (!trimmedLabel) {
1324
- return ERROR_MESSAGES.EMPTY_NAME;
1385
+ return ERROR_MESSAGES2.EMPTY_NAME;
1325
1386
  }
1326
1387
  const isDuplicate = Object.values(existingGroups).some((group) => group.label === trimmedLabel);
1327
1388
  if (isDuplicate) {
1328
- return ERROR_MESSAGES.DUPLICATE_NAME;
1389
+ return ERROR_MESSAGES2.DUPLICATE_NAME;
1329
1390
  }
1330
1391
  return "";
1331
1392
  }
@@ -1345,7 +1406,7 @@ function useCurrentEditableItem() {
1345
1406
  };
1346
1407
  const handleSubmit = (newLabel) => {
1347
1408
  if (!editingGroupId || !currentComponentId) {
1348
- throw new Error(__7("Group ID or component ID is missing", "elementor"));
1409
+ throw new Error(__8("Group ID or component ID is missing", "elementor"));
1349
1410
  }
1350
1411
  renameOverridableGroup({
1351
1412
  componentId: currentComponentId,
@@ -1453,20 +1514,20 @@ function ComponentPropertiesPanelContent({ onClose }) {
1453
1514
  deleteOverridableGroup({ componentId: currentComponentId, groupId });
1454
1515
  setDocumentModifiedStatus2(true);
1455
1516
  };
1456
- return /* @__PURE__ */ React7.createElement(React7.Fragment, null, /* @__PURE__ */ React7.createElement(PanelHeader, { sx: { justifyContent: "start", pl: 1.5, pr: 1, py: 1 } }, /* @__PURE__ */ React7.createElement(Stack5, { direction: "row", alignItems: "center", gap: 0.5, flexGrow: 1 }, /* @__PURE__ */ React7.createElement(ComponentPropListIcon2, { fontSize: "tiny" }), /* @__PURE__ */ React7.createElement(PanelHeaderTitle, { variant: "subtitle2" }, __8("Component properties", "elementor"))), !showEmptyState && /* @__PURE__ */ React7.createElement(Tooltip2, { title: __8("Add new group", "elementor") }, /* @__PURE__ */ React7.createElement(
1517
+ return /* @__PURE__ */ React7.createElement(React7.Fragment, null, /* @__PURE__ */ React7.createElement(PanelHeader, { sx: { justifyContent: "start", pl: 1.5, pr: 1, py: 1 } }, /* @__PURE__ */ React7.createElement(Stack5, { direction: "row", alignItems: "center", gap: 0.5, flexGrow: 1 }, /* @__PURE__ */ React7.createElement(ComponentPropListIcon2, { fontSize: "tiny" }), /* @__PURE__ */ React7.createElement(PanelHeaderTitle, { variant: "subtitle2" }, __9("Component properties", "elementor"))), !showEmptyState && /* @__PURE__ */ React7.createElement(Tooltip2, { title: __9("Add new group", "elementor") }, /* @__PURE__ */ React7.createElement(
1457
1518
  IconButton3,
1458
1519
  {
1459
1520
  size: "tiny",
1460
- "aria-label": __8("Add new group", "elementor"),
1521
+ "aria-label": __9("Add new group", "elementor"),
1461
1522
  onClick: handleAddGroupClick
1462
1523
  },
1463
1524
  /* @__PURE__ */ React7.createElement(FolderPlusIcon, { fontSize: "tiny" })
1464
- )), /* @__PURE__ */ React7.createElement(Tooltip2, { title: __8("Close panel", "elementor") }, /* @__PURE__ */ React7.createElement(
1525
+ )), /* @__PURE__ */ React7.createElement(Tooltip2, { title: __9("Close panel", "elementor") }, /* @__PURE__ */ React7.createElement(
1465
1526
  IconButton3,
1466
1527
  {
1467
1528
  ref: introductionRef,
1468
1529
  size: "tiny",
1469
- "aria-label": __8("Close panel", "elementor"),
1530
+ "aria-label": __9("Close panel", "elementor"),
1470
1531
  onClick: onClose
1471
1532
  },
1472
1533
  /* @__PURE__ */ React7.createElement(XIcon2, { fontSize: "tiny" })
@@ -1512,14 +1573,14 @@ function ComponentPropertiesPanel() {
1512
1573
  }
1513
1574
  )))));
1514
1575
  }
1515
- var ErrorBoundaryFallback = () => /* @__PURE__ */ React8.createElement(Box5, { role: "alert", sx: { minHeight: "100%", p: 2 } }, /* @__PURE__ */ React8.createElement(Alert, { severity: "error", sx: { mb: 2, maxWidth: 400, textAlign: "center" } }, /* @__PURE__ */ React8.createElement("strong", null, __9("Something went wrong", "elementor"))));
1576
+ var ErrorBoundaryFallback = () => /* @__PURE__ */ React8.createElement(Box5, { role: "alert", sx: { minHeight: "100%", p: 2 } }, /* @__PURE__ */ React8.createElement(Alert, { severity: "error", sx: { mb: 2, maxWidth: 400, textAlign: "center" } }, /* @__PURE__ */ React8.createElement("strong", null, __10("Something went wrong", "elementor"))));
1516
1577
 
1517
1578
  // src/components/component-panel-header/component-badge.tsx
1518
1579
  import * as React9 from "react";
1519
1580
  import { useEffect, useRef as useRef2 } from "react";
1520
1581
  import { ComponentPropListIcon as ComponentPropListIcon3 } from "@elementor/icons";
1521
1582
  import { Badge, Box as Box6, keyframes, styled as styled2, ToggleButton } from "@elementor/ui";
1522
- import { __ as __10 } from "@wordpress/i18n";
1583
+ import { __ as __11 } from "@wordpress/i18n";
1523
1584
  var ComponentsBadge = React9.forwardRef(
1524
1585
  ({ overridesCount, onClick }, ref) => {
1525
1586
  const prevCount = usePrevious(overridesCount);
@@ -1541,7 +1602,7 @@ var ComponentsBadge = React9.forwardRef(
1541
1602
  value: "overrides",
1542
1603
  size: "tiny",
1543
1604
  onClick,
1544
- "aria-label": __10("View overrides", "elementor")
1605
+ "aria-label": __11("View overrides", "elementor")
1545
1606
  },
1546
1607
  /* @__PURE__ */ React9.createElement(ComponentPropListIcon3, { fontSize: "tiny" })
1547
1608
  )
@@ -1604,7 +1665,7 @@ var ComponentPanelHeader = () => {
1604
1665
  justifyContent: "space-between",
1605
1666
  sx: { height: 48, pl: 1.5, pr: 2, py: 1 }
1606
1667
  },
1607
- /* @__PURE__ */ React10.createElement(Stack6, { direction: "row", alignItems: "center" }, /* @__PURE__ */ React10.createElement(Tooltip3, { title: __11("Back", "elementor") }, /* @__PURE__ */ React10.createElement(IconButton4, { size: "tiny", onClick: onBack, "aria-label": __11("Back", "elementor") }, /* @__PURE__ */ React10.createElement(ArrowLeftIcon, { fontSize: "tiny" }))), /* @__PURE__ */ React10.createElement(Stack6, { direction: "row", alignItems: "center", gap: 0.5 }, /* @__PURE__ */ React10.createElement(ComponentsFilledIcon, { fontSize: "tiny", stroke: "currentColor" }), /* @__PURE__ */ React10.createElement(Typography6, { variant: "caption", sx: { fontWeight: 500 } }, componentName))),
1668
+ /* @__PURE__ */ React10.createElement(Stack6, { direction: "row", alignItems: "center" }, /* @__PURE__ */ React10.createElement(Tooltip3, { title: __12("Back", "elementor") }, /* @__PURE__ */ React10.createElement(IconButton4, { size: "tiny", onClick: onBack, "aria-label": __12("Back", "elementor") }, /* @__PURE__ */ React10.createElement(ArrowLeftIcon, { fontSize: "tiny" }))), /* @__PURE__ */ React10.createElement(Stack6, { direction: "row", alignItems: "center", gap: 0.5 }, /* @__PURE__ */ React10.createElement(ComponentsFilledIcon, { fontSize: "tiny", stroke: "currentColor" }), /* @__PURE__ */ React10.createElement(Typography6, { variant: "caption", sx: { fontWeight: 500 } }, componentName))),
1608
1669
  /* @__PURE__ */ React10.createElement(ComponentsBadge, { overridesCount, ref: anchorRef, onClick: openPropertiesPanel })
1609
1670
  ), /* @__PURE__ */ React10.createElement(Divider2, null), /* @__PURE__ */ React10.createElement(
1610
1671
  ComponentIntroduction,
@@ -1643,7 +1704,7 @@ var useComponents = () => {
1643
1704
  import * as React12 from "react";
1644
1705
  import { SearchIcon } from "@elementor/icons";
1645
1706
  import { Box as Box8, InputAdornment, Stack as Stack7, TextField as TextField2 } from "@elementor/ui";
1646
- import { __ as __12 } from "@wordpress/i18n";
1707
+ import { __ as __13 } from "@wordpress/i18n";
1647
1708
 
1648
1709
  // src/components/components-tab/search-provider.tsx
1649
1710
  import * as React11 from "react";
@@ -1678,7 +1739,7 @@ var ComponentSearch = () => {
1678
1739
  fullWidth: true,
1679
1740
  size: "tiny",
1680
1741
  value: inputValue,
1681
- placeholder: __12("Search", "elementor"),
1742
+ placeholder: __13("Search", "elementor"),
1682
1743
  onChange: (e) => handleChange(e.target.value),
1683
1744
  InputProps: {
1684
1745
  startAdornment: /* @__PURE__ */ React12.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React12.createElement(SearchIcon, { fontSize: "tiny" }))
@@ -1693,7 +1754,7 @@ import { useState as useState7 } from "react";
1693
1754
  import { getAngieSdk } from "@elementor/editor-mcp";
1694
1755
  import { AIIcon, ComponentsIcon as ComponentsIcon2 } from "@elementor/icons";
1695
1756
  import { Box as Box11, Button as Button4, Divider as Divider3, Link as Link3, List as List3, Stack as Stack10, Typography as Typography9 } from "@elementor/ui";
1696
- import { __ as __19 } from "@wordpress/i18n";
1757
+ import { __ as __20 } from "@wordpress/i18n";
1697
1758
 
1698
1759
  // src/store/actions/rename-component.ts
1699
1760
  import { getV1DocumentsManager as getV1DocumentsManager4, setDocumentModifiedStatus as setDocumentModifiedStatus3 } from "@elementor/editor-documents";
@@ -1706,7 +1767,7 @@ import {
1706
1767
  } from "@elementor/editor-canvas";
1707
1768
  import { getCurrentDocument } from "@elementor/editor-documents";
1708
1769
  import { __getState as getState11 } from "@elementor/store";
1709
- import { __ as __13 } from "@wordpress/i18n";
1770
+ import { __ as __14 } from "@wordpress/i18n";
1710
1771
 
1711
1772
  // src/utils/tracking.ts
1712
1773
  import { getMixpanel } from "@elementor/mixpanel";
@@ -1859,7 +1920,7 @@ function createComponentView(options) {
1859
1920
  action: {
1860
1921
  name: "edit component",
1861
1922
  icon: "eicon-edit",
1862
- title: () => __13("Edit Component", "elementor"),
1923
+ title: () => __14("Edit Component", "elementor"),
1863
1924
  isEnabled: () => true,
1864
1925
  callback: (_, eventData) => this.editComponent(eventData)
1865
1926
  }
@@ -2020,7 +2081,7 @@ import {
2020
2081
  Infotip,
2021
2082
  Typography as Typography7
2022
2083
  } from "@elementor/ui";
2023
- import { __ as __14 } from "@wordpress/i18n";
2084
+ import { __ as __15 } from "@wordpress/i18n";
2024
2085
  var ANGIE_INSTALL_URL = "/wp-admin/plugin-install.php?tab=plugin-information&plugin=angie";
2025
2086
  var PLACEHOLDER_IMAGE_URL = "https://assets.elementor.com/packages/v1/images/components-angie-promo.svg";
2026
2087
  var AngiePromotionModal = ({ children, open, onClose }) => {
@@ -2034,7 +2095,7 @@ function AngiePromotionCard({ onClose }) {
2034
2095
  return /* @__PURE__ */ React13.createElement(ClickAwayListener, { disableReactTree: true, mouseEvent: "onMouseDown", touchEvent: "onTouchStart", onClickAway: onClose }, /* @__PURE__ */ React13.createElement(Card, { elevation: 0, sx: { maxWidth: 296 } }, /* @__PURE__ */ React13.createElement(
2035
2096
  CardHeader,
2036
2097
  {
2037
- title: __14("Add new component with AI", "elementor"),
2098
+ title: __15("Add new component with AI", "elementor"),
2038
2099
  titleTypographyProps: { variant: "subtitle2" },
2039
2100
  action: /* @__PURE__ */ React13.createElement(CloseButton, { slotProps: { icon: { fontSize: "tiny" } }, onClick: onClose })
2040
2101
  }
@@ -2046,10 +2107,10 @@ function AngiePromotionCard({ onClose }) {
2046
2107
  alt: "",
2047
2108
  sx: { width: "100%", aspectRatio: "16 / 9" }
2048
2109
  }
2049
- ), /* @__PURE__ */ React13.createElement(CardContent, null, /* @__PURE__ */ React13.createElement(Typography7, { variant: "body2", color: "text.secondary" }, __14(
2110
+ ), /* @__PURE__ */ React13.createElement(CardContent, null, /* @__PURE__ */ React13.createElement(Typography7, { variant: "body2", color: "text.secondary" }, __15(
2050
2111
  "Angie our AI assistant can easily create new components and save you the hassle of doing it yourself",
2051
2112
  "elementor"
2052
- ))), /* @__PURE__ */ React13.createElement(CardActions, { sx: { justifyContent: "flex-end" } }, /* @__PURE__ */ React13.createElement(Button3, { size: "medium", variant: "contained", color: "accent", onClick: handleCtaClick }, __14("Get Angie", "elementor")))));
2113
+ ))), /* @__PURE__ */ React13.createElement(CardActions, { sx: { justifyContent: "flex-end" } }, /* @__PURE__ */ React13.createElement(Button3, { size: "medium", variant: "contained", color: "accent", onClick: handleCtaClick }, __15("Get Angie", "elementor")))));
2053
2114
  }
2054
2115
 
2055
2116
  // src/components/components-tab/components-item.tsx
@@ -2072,17 +2133,17 @@ import {
2072
2133
  Typography as Typography8,
2073
2134
  usePopupState as usePopupState3
2074
2135
  } from "@elementor/ui";
2075
- import { __ as __18 } from "@wordpress/i18n";
2136
+ import { __ as __19 } from "@wordpress/i18n";
2076
2137
 
2077
2138
  // src/store/actions/archive-component.ts
2078
2139
  import { setDocumentModifiedStatus as setDocumentModifiedStatus4 } from "@elementor/editor-documents";
2079
2140
  import { notify } from "@elementor/editor-notifications";
2080
2141
  import { __dispatch as dispatch9 } from "@elementor/store";
2081
- import { __ as __15 } from "@wordpress/i18n";
2142
+ import { __ as __16 } from "@wordpress/i18n";
2082
2143
  var successNotification = (componentId, componentName) => ({
2083
2144
  type: "success",
2084
2145
  /* translators: %s: component name */
2085
- message: __15("Successfully deleted component %s", "elementor").replace("%s", componentName),
2146
+ message: __16("Successfully deleted component %s", "elementor").replace("%s", componentName),
2086
2147
  id: `success-archived-components-notification-${componentId}`
2087
2148
  });
2088
2149
  var archiveComponent = (componentId, componentName) => {
@@ -2204,14 +2265,14 @@ import { __getState as getState14 } from "@elementor/store";
2204
2265
 
2205
2266
  // src/components/create-component-form/utils/component-form-schema.ts
2206
2267
  import { z } from "@elementor/schema";
2207
- import { __ as __16 } from "@wordpress/i18n";
2268
+ import { __ as __17 } from "@wordpress/i18n";
2208
2269
  var MIN_NAME_LENGTH = 2;
2209
2270
  var MAX_NAME_LENGTH = 50;
2210
- var baseComponentSchema = z.string().trim().max(MAX_NAME_LENGTH, __16("Component name is too long. Please keep it under 50 characters.", "elementor"));
2271
+ var baseComponentSchema = z.string().trim().max(MAX_NAME_LENGTH, __17("Component name is too long. Please keep it under 50 characters.", "elementor"));
2211
2272
  var createBaseComponentSchema = (existingNames) => {
2212
2273
  return z.object({
2213
2274
  componentName: baseComponentSchema.refine((value) => !existingNames.includes(value), {
2214
- message: __16("Component name already exists", "elementor")
2275
+ message: __17("Component name already exists", "elementor")
2215
2276
  })
2216
2277
  });
2217
2278
  };
@@ -2219,9 +2280,9 @@ var createSubmitComponentSchema = (existingNames) => {
2219
2280
  const baseSchema = createBaseComponentSchema(existingNames);
2220
2281
  return baseSchema.extend({
2221
2282
  componentName: baseSchema.shape.componentName.refine((value) => value.length > 0, {
2222
- message: __16("Component name is required.", "elementor")
2283
+ message: __17("Component name is required.", "elementor")
2223
2284
  }).refine((value) => value.length >= MIN_NAME_LENGTH, {
2224
- message: __16("Component name is too short. Please enter at least 2 characters.", "elementor")
2285
+ message: __17("Component name is too short. Please enter at least 2 characters.", "elementor")
2225
2286
  })
2226
2287
  });
2227
2288
  };
@@ -2319,9 +2380,9 @@ var createComponentModel2 = (component) => {
2319
2380
  // src/components/components-tab/delete-confirmation-dialog.tsx
2320
2381
  import * as React14 from "react";
2321
2382
  import { ConfirmationDialog } from "@elementor/editor-ui";
2322
- import { __ as __17 } from "@wordpress/i18n";
2383
+ import { __ as __18 } from "@wordpress/i18n";
2323
2384
  function DeleteConfirmationDialog({ open, onClose, onConfirm }) {
2324
- return /* @__PURE__ */ React14.createElement(ConfirmationDialog, { open, onClose }, /* @__PURE__ */ React14.createElement(ConfirmationDialog.Title, null, __17("Delete this component?", "elementor")), /* @__PURE__ */ React14.createElement(ConfirmationDialog.Content, null, /* @__PURE__ */ React14.createElement(ConfirmationDialog.ContentText, null, __17(
2385
+ return /* @__PURE__ */ React14.createElement(ConfirmationDialog, { open, onClose }, /* @__PURE__ */ React14.createElement(ConfirmationDialog.Title, null, __18("Delete this component?", "elementor")), /* @__PURE__ */ React14.createElement(ConfirmationDialog.Content, null, /* @__PURE__ */ React14.createElement(ConfirmationDialog.ContentText, null, __18(
2325
2386
  "Existing instances on your pages will remain functional. You will no longer find this component in your list.",
2326
2387
  "elementor"
2327
2388
  ))), /* @__PURE__ */ React14.createElement(ConfirmationDialog.Actions, { onClose, onConfirm }));
@@ -2449,9 +2510,9 @@ var ComponentItem = ({ component, renameComponent: renameComponent2 }) => {
2449
2510
  openEditMode();
2450
2511
  }
2451
2512
  },
2452
- __18("Rename", "elementor")
2513
+ __19("Rename", "elementor")
2453
2514
  ),
2454
- /* @__PURE__ */ React15.createElement(MenuListItem3, { sx: { minWidth: "160px" }, onClick: handleDeleteClick }, /* @__PURE__ */ React15.createElement(Typography8, { variant: "caption", sx: { color: "error.light" } }, __18("Delete", "elementor")))
2515
+ /* @__PURE__ */ React15.createElement(MenuListItem3, { sx: { minWidth: "160px" }, onClick: handleDeleteClick }, /* @__PURE__ */ React15.createElement(Typography8, { variant: "caption", sx: { color: "error.light" } }, __19("Delete", "elementor")))
2455
2516
  ), /* @__PURE__ */ React15.createElement(
2456
2517
  DeleteConfirmationDialog,
2457
2518
  {
@@ -2577,7 +2638,7 @@ var EmptyState = () => {
2577
2638
  const sdk = getAngieSdk();
2578
2639
  if (sdk.isAngieReady()) {
2579
2640
  sdk.triggerAngie({
2580
- prompt: __19(
2641
+ prompt: __20(
2581
2642
  "Create a [hero/testimonial/product card/CTA/feature] component for my [business type]. Include [describe what you want]",
2582
2643
  "elementor"
2583
2644
  ),
@@ -2597,7 +2658,7 @@ var EmptyState = () => {
2597
2658
  gap: 2,
2598
2659
  overflow: "hidden"
2599
2660
  },
2600
- /* @__PURE__ */ React17.createElement(Stack10, { alignItems: "center", gap: 1 }, /* @__PURE__ */ React17.createElement(ComponentsIcon2, { fontSize: "large", sx: { color: "text.secondary" } }), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "subtitle2", color: "text.secondary", sx: SUBTITLE_OVERRIDE_SX }, __19("No components yet", "elementor")), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "secondary", sx: { maxWidth: 200 } }, __19("Components are reusable blocks that sync across your site.", "elementor"), /* @__PURE__ */ React17.createElement("br", null), __19("Create once, use everywhere.", "elementor")), /* @__PURE__ */ React17.createElement(
2661
+ /* @__PURE__ */ React17.createElement(Stack10, { alignItems: "center", gap: 1 }, /* @__PURE__ */ React17.createElement(ComponentsIcon2, { fontSize: "large", sx: { color: "text.secondary" } }), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "subtitle2", color: "text.secondary", sx: SUBTITLE_OVERRIDE_SX }, __20("No components yet", "elementor")), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "secondary", sx: { maxWidth: 200 } }, __20("Components are reusable blocks that sync across your site.", "elementor"), /* @__PURE__ */ React17.createElement("br", null), __20("Create once, use everywhere.", "elementor")), /* @__PURE__ */ React17.createElement(
2601
2662
  Link3,
2602
2663
  {
2603
2664
  href: LEARN_MORE_URL,
@@ -2606,13 +2667,13 @@ var EmptyState = () => {
2606
2667
  variant: "caption",
2607
2668
  color: "info.main"
2608
2669
  },
2609
- __19("Learn more about components", "elementor")
2670
+ __20("Learn more about components", "elementor")
2610
2671
  )),
2611
2672
  /* @__PURE__ */ React17.createElement(Divider3, { sx: { width: "100%" } }),
2612
- /* @__PURE__ */ React17.createElement(Stack10, { alignItems: "center", gap: 1, width: "100%" }, /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "subtitle2", color: "text.secondary", sx: SUBTITLE_OVERRIDE_SX }, __19("Create your first one:", "elementor")), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "secondary", sx: { maxWidth: 228 } }, __19(
2673
+ /* @__PURE__ */ React17.createElement(Stack10, { alignItems: "center", gap: 1, width: "100%" }, /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "subtitle2", color: "text.secondary", sx: SUBTITLE_OVERRIDE_SX }, __20("Create your first one:", "elementor")), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "secondary", sx: { maxWidth: 228 } }, __20(
2613
2674
  'Right-click any div-block or flexbox on your canvas or structure and select "Create component"',
2614
2675
  "elementor"
2615
- )), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "secondary" }, __19("Or", "elementor")), /* @__PURE__ */ React17.createElement(AngiePromotionModal, { open: isAngieModalOpen, onClose: () => setIsAngieModalOpen(false) }, /* @__PURE__ */ React17.createElement(
2676
+ )), /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "secondary" }, __20("Or", "elementor")), /* @__PURE__ */ React17.createElement(AngiePromotionModal, { open: isAngieModalOpen, onClose: () => setIsAngieModalOpen(false) }, /* @__PURE__ */ React17.createElement(
2616
2677
  Button4,
2617
2678
  {
2618
2679
  color: "secondary",
@@ -2621,7 +2682,7 @@ var EmptyState = () => {
2621
2682
  onClick: handleCreateWithAI,
2622
2683
  endIcon: /* @__PURE__ */ React17.createElement(AIIcon, null)
2623
2684
  },
2624
- __19("Create component with AI", "elementor")
2685
+ __20("Create component with AI", "elementor")
2625
2686
  )))
2626
2687
  );
2627
2688
  };
@@ -2645,7 +2706,7 @@ var EmptySearchResult = () => {
2645
2706
  width: "100%"
2646
2707
  }
2647
2708
  },
2648
- /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "subtitle2", color: "inherit", sx: SUBTITLE_OVERRIDE_SX }, __19("Sorry, nothing matched", "elementor")),
2709
+ /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "subtitle2", color: "inherit", sx: SUBTITLE_OVERRIDE_SX }, __20("Sorry, nothing matched", "elementor")),
2649
2710
  searchValue && /* @__PURE__ */ React17.createElement(
2650
2711
  Typography9,
2651
2712
  {
@@ -2673,8 +2734,8 @@ var EmptySearchResult = () => {
2673
2734
  /* @__PURE__ */ React17.createElement("span", null, "\u201D.")
2674
2735
  )
2675
2736
  ),
2676
- /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "inherit" }, __19("Try something else.", "elementor")),
2677
- /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "inherit" }, /* @__PURE__ */ React17.createElement(Link3, { color: "secondary", variant: "caption", component: "button", onClick: clearSearch }, __19("Clear & try again", "elementor")))
2737
+ /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "inherit" }, __20("Try something else.", "elementor")),
2738
+ /* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "inherit" }, /* @__PURE__ */ React17.createElement(Link3, { color: "secondary", variant: "caption", component: "button", onClick: clearSearch }, __20("Clear & try again", "elementor")))
2678
2739
  );
2679
2740
  };
2680
2741
  var useFilteredComponents = () => {
@@ -2711,7 +2772,7 @@ import { Form as FormElement, ThemeProvider as ThemeProvider3 } from "@elementor
2711
2772
  import { ComponentsIcon as ComponentsIcon3 } from "@elementor/icons";
2712
2773
  import { __getState as getState15 } from "@elementor/store";
2713
2774
  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";
2714
- import { __ as __21 } from "@wordpress/i18n";
2775
+ import { __ as __22 } from "@wordpress/i18n";
2715
2776
 
2716
2777
  // src/prevent-non-atomic-nesting.ts
2717
2778
  import { isAtomicWidget } from "@elementor/editor-canvas";
@@ -2719,10 +2780,10 @@ import { getAllDescendants as getAllDescendants2, getElementType } from "@elemen
2719
2780
  import { notify as notify2 } from "@elementor/editor-notifications";
2720
2781
  import { blockCommand } from "@elementor/editor-v1-adapters";
2721
2782
  import { __getStore as getStore } from "@elementor/store";
2722
- import { __ as __20 } from "@wordpress/i18n";
2783
+ import { __ as __21 } from "@wordpress/i18n";
2723
2784
  var NON_ATOMIC_ELEMENT_ALERT = {
2724
2785
  type: "default",
2725
- message: __20("This widget isn't compatible with components. Use atomic elements instead.", "elementor"),
2786
+ message: __21("This widget isn't compatible with components. Use atomic elements instead.", "elementor"),
2726
2787
  id: "non-atomic-element-blocked"
2727
2788
  };
2728
2789
  function initNonAtomicNestingPrevention() {
@@ -2942,7 +3003,7 @@ function CreateComponentForm() {
2942
3003
  if (nonAtomicElements.length > 0) {
2943
3004
  notify3({
2944
3005
  type: "default",
2945
- message: __21(
3006
+ message: __22(
2946
3007
  "Components require atomic elements only. Remove widgets to create this component.",
2947
3008
  "elementor"
2948
3009
  ),
@@ -2981,12 +3042,12 @@ function CreateComponentForm() {
2981
3042
  }
2982
3043
  notify3({
2983
3044
  type: "success",
2984
- message: __21("Component created successfully.", "elementor"),
3045
+ message: __22("Component created successfully.", "elementor"),
2985
3046
  id: `component-saved-successfully-${uid}`
2986
3047
  });
2987
3048
  resetAndClosePopup();
2988
3049
  } catch {
2989
- const errorMessage = __21("Failed to create component. Please try again.", "elementor");
3050
+ const errorMessage = __22("Failed to create component. Please try again.", "elementor");
2990
3051
  notify3({
2991
3052
  type: "error",
2992
3053
  message: errorMessage,
@@ -3049,10 +3110,10 @@ var Form2 = ({
3049
3110
  }
3050
3111
  };
3051
3112
  const texts = {
3052
- heading: __21("Create component", "elementor"),
3053
- name: __21("Name", "elementor"),
3054
- cancel: __21("Cancel", "elementor"),
3055
- create: __21("Create", "elementor")
3113
+ heading: __22("Create component", "elementor"),
3114
+ name: __22("Name", "elementor"),
3115
+ cancel: __22("Cancel", "elementor"),
3116
+ create: __22("Create", "elementor")
3056
3117
  };
3057
3118
  const nameInputId = "component-name";
3058
3119
  return /* @__PURE__ */ React19.createElement(FormElement, { onSubmit: handleSubmit }, /* @__PURE__ */ React19.createElement(Stack11, { alignItems: "start", width: "268px" }, /* @__PURE__ */ React19.createElement(
@@ -3108,7 +3169,7 @@ function updateCurrentComponent({
3108
3169
  import * as React20 from "react";
3109
3170
  import { useEffect as useEffect4 } from "react";
3110
3171
  import { createPortal } from "react-dom";
3111
- import { __ as __22 } from "@wordpress/i18n";
3172
+ import { __ as __23 } from "@wordpress/i18n";
3112
3173
 
3113
3174
  // src/hooks/use-canvas-document.ts
3114
3175
  import { getCanvasIframeDocument } from "@elementor/editor-canvas";
@@ -3230,7 +3291,7 @@ function Backdrop({ canvas, element, onClose }) {
3230
3291
  onKeyDown: handleKeyDown,
3231
3292
  role: "button",
3232
3293
  tabIndex: 0,
3233
- "aria-label": __22("Exit component editing mode", "elementor")
3294
+ "aria-label": __23("Exit component editing mode", "elementor")
3234
3295
  }
3235
3296
  );
3236
3297
  }
@@ -3361,18 +3422,18 @@ import * as React22 from "react";
3361
3422
  import { closeDialog, openDialog } from "@elementor/editor-ui";
3362
3423
  import { InfoCircleFilledIcon } from "@elementor/icons";
3363
3424
  import { Box as Box12, Button as Button6, DialogActions, DialogContent, DialogHeader, Icon, Stack as Stack12, Typography as Typography11 } from "@elementor/ui";
3364
- import { __ as __23 } from "@wordpress/i18n";
3425
+ import { __ as __24 } from "@wordpress/i18n";
3365
3426
  var openEditModeDialog = (lockedBy) => {
3366
3427
  openDialog({
3367
3428
  component: /* @__PURE__ */ React22.createElement(EditModeDialog, { lockedBy })
3368
3429
  });
3369
3430
  };
3370
3431
  var EditModeDialog = ({ lockedBy }) => {
3371
- const content = __23("%s is currently editing this document", "elementor").replace("%s", lockedBy);
3372
- 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" }, __23(
3432
+ const content = __24("%s is currently editing this document", "elementor").replace("%s", lockedBy);
3433
+ 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(
3373
3434
  "You can wait for them to finish or reach out to coordinate your changes together.",
3374
3435
  "elementor"
3375
- )), /* @__PURE__ */ React22.createElement(DialogActions, null, /* @__PURE__ */ React22.createElement(Button6, { color: "secondary", variant: "contained", onClick: closeDialog }, __23("Close", "elementor"))))));
3436
+ )), /* @__PURE__ */ React22.createElement(DialogActions, null, /* @__PURE__ */ React22.createElement(Button6, { color: "secondary", variant: "contained", onClick: closeDialog }, __24("Close", "elementor"))))));
3376
3437
  };
3377
3438
 
3378
3439
  // src/components/instance-editing-panel/instance-editing-panel.tsx
@@ -3383,7 +3444,7 @@ import { useSelectedElement as useSelectedElement2 } from "@elementor/editor-ele
3383
3444
  import { PanelBody as PanelBody2, PanelHeader as PanelHeader2, PanelHeaderTitle as PanelHeaderTitle2 } from "@elementor/editor-panels";
3384
3445
  import { ComponentsIcon as ComponentsIcon4, PencilIcon as PencilIcon2 } from "@elementor/icons";
3385
3446
  import { IconButton as IconButton6, Stack as Stack17, Tooltip as Tooltip4 } from "@elementor/ui";
3386
- import { __ as __25 } from "@wordpress/i18n";
3447
+ import { __ as __26 } from "@wordpress/i18n";
3387
3448
 
3388
3449
  // src/hooks/use-component-instance-settings.ts
3389
3450
  import { useElement } from "@elementor/editor-editing-panel";
@@ -3452,7 +3513,7 @@ function useComponentInstanceSettings() {
3452
3513
  import * as React23 from "react";
3453
3514
  import { ComponentPropListIcon as ComponentPropListIcon4, PencilIcon } from "@elementor/icons";
3454
3515
  import { Button as Button7, Stack as Stack13, Typography as Typography12 } from "@elementor/ui";
3455
- import { __ as __24 } from "@wordpress/i18n";
3516
+ import { __ as __25 } from "@wordpress/i18n";
3456
3517
  var EmptyState2 = ({ onEditComponent }) => {
3457
3518
  return /* @__PURE__ */ React23.createElement(
3458
3519
  Stack13,
@@ -3465,12 +3526,12 @@ var EmptyState2 = ({ onEditComponent }) => {
3465
3526
  gap: 1.5
3466
3527
  },
3467
3528
  /* @__PURE__ */ React23.createElement(ComponentPropListIcon4, { fontSize: "large" }),
3468
- /* @__PURE__ */ React23.createElement(Typography12, { align: "center", variant: "subtitle2" }, __24("No properties yet", "elementor")),
3469
- /* @__PURE__ */ React23.createElement(Typography12, { align: "center", variant: "caption", maxWidth: "170px" }, __24(
3529
+ /* @__PURE__ */ React23.createElement(Typography12, { align: "center", variant: "subtitle2" }, __25("No properties yet", "elementor")),
3530
+ /* @__PURE__ */ React23.createElement(Typography12, { align: "center", variant: "caption", maxWidth: "170px" }, __25(
3470
3531
  "Edit the component to add properties, manage them or update the design across all instances.",
3471
3532
  "elementor"
3472
3533
  )),
3473
- /* @__PURE__ */ React23.createElement(Button7, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React23.createElement(PencilIcon, { fontSize: "small" }), __24("Edit component", "elementor"))
3534
+ /* @__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"))
3474
3535
  );
3475
3536
  };
3476
3537
 
@@ -3748,7 +3809,7 @@ function InstanceEditingPanel() {
3748
3809
  if (!componentId || !overridableProps || !component) {
3749
3810
  return null;
3750
3811
  }
3751
- const panelTitle = __25("Edit %s", "elementor").replace("%s", component.name);
3812
+ const panelTitle = __26("Edit %s", "elementor").replace("%s", component.name);
3752
3813
  const handleEditComponent = () => switchToComponent(componentId, componentInstanceId);
3753
3814
  const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
3754
3815
  const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
@@ -3834,7 +3895,7 @@ import { useBoundProp as useBoundProp3 } from "@elementor/editor-controls";
3834
3895
  import { useElement as useElement3 } from "@elementor/editor-editing-panel";
3835
3896
  import { getWidgetsCache as getWidgetsCache3 } from "@elementor/editor-elements";
3836
3897
  import { bindPopover as bindPopover2, bindTrigger as bindTrigger4, Popover as Popover4, Tooltip as Tooltip5, usePopupState as usePopupState4 } from "@elementor/ui";
3837
- import { __ as __27 } from "@wordpress/i18n";
3898
+ import { __ as __28 } from "@wordpress/i18n";
3838
3899
 
3839
3900
  // src/store/actions/set-overridable-prop.ts
3840
3901
  import { __dispatch as dispatch14, __getState as getState17 } from "@elementor/store";
@@ -3905,7 +3966,7 @@ import * as React30 from "react";
3905
3966
  import { forwardRef as forwardRef2 } from "react";
3906
3967
  import { CheckIcon, PlusIcon } from "@elementor/icons";
3907
3968
  import { Box as Box14, styled as styled4 } from "@elementor/ui";
3908
- import { __ as __26 } from "@wordpress/i18n";
3969
+ import { __ as __27 } from "@wordpress/i18n";
3909
3970
  var SIZE2 = "tiny";
3910
3971
  var IconContainer = styled4(Box14)`
3911
3972
  pointer-events: none;
@@ -3965,7 +4026,7 @@ var Indicator2 = forwardRef2(({ isOpen, isOverridable, ...props }, ref) => /* @_
3965
4026
  IconContainer,
3966
4027
  {
3967
4028
  className: "icon",
3968
- "aria-label": isOverridable ? __26("Overridable property", "elementor") : __26("Make prop overridable", "elementor")
4029
+ "aria-label": isOverridable ? __27("Overridable property", "elementor") : __27("Make prop overridable", "elementor")
3969
4030
  },
3970
4031
  isOverridable ? /* @__PURE__ */ React30.createElement(CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React30.createElement(PlusIcon, { fontSize: SIZE2 })
3971
4032
  )));
@@ -4036,7 +4097,7 @@ function Content2({ componentId, overridableProps }) {
4036
4097
  popupState.close();
4037
4098
  };
4038
4099
  const overridableConfig = overridableValue ? getOverridableProp({ componentId, overrideKey: overridableValue.override_key }) : void 0;
4039
- return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(Tooltip5, { placement: "top", title: __27("Override Property", "elementor") }, /* @__PURE__ */ React31.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React31.createElement(
4100
+ 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(
4040
4101
  Popover4,
4041
4102
  {
4042
4103
  disableScrollLock: true,
@@ -4061,6 +4122,7 @@ function Content2({ componentId, overridableProps }) {
4061
4122
  value: groupId,
4062
4123
  label: overridableProps.groups.items[groupId].label
4063
4124
  })),
4125
+ existingLabels: Object.values(overridableProps?.props ?? {}).map((prop) => prop.label),
4064
4126
  currentValue: overridableConfig
4065
4127
  }
4066
4128
  )
@@ -4184,7 +4246,7 @@ var OutputSchema = {
4184
4246
  message: z6.string().optional().describe("Additional information about the operation result"),
4185
4247
  component_uid: z6.string().optional().describe("The unique identifier of the newly created component (only present on success)")
4186
4248
  };
4187
- var ERROR_MESSAGES2 = {
4249
+ var ERROR_MESSAGES3 = {
4188
4250
  ELEMENT_NOT_FOUND: "Element not found. Use 'list-elements' to get valid element IDs.",
4189
4251
  ELEMENT_NOT_ONE_OF_TYPES: (validTypes) => `Element is not one of the following types: ${validTypes.join(", ")}`,
4190
4252
  ELEMENT_IS_LOCKED: "Cannot save a locked element as a component."
@@ -4194,15 +4256,15 @@ var handleSaveAsComponent = async (params) => {
4194
4256
  const validElementTypes = getValidElementTypes();
4195
4257
  const container = getContainer4(elementId);
4196
4258
  if (!container) {
4197
- throw new Error(ERROR_MESSAGES2.ELEMENT_NOT_FOUND);
4259
+ throw new Error(ERROR_MESSAGES3.ELEMENT_NOT_FOUND);
4198
4260
  }
4199
4261
  const elType = container.model.get("elType");
4200
4262
  if (!validElementTypes.includes(elType)) {
4201
- throw new Error(ERROR_MESSAGES2.ELEMENT_NOT_ONE_OF_TYPES(validElementTypes));
4263
+ throw new Error(ERROR_MESSAGES3.ELEMENT_NOT_ONE_OF_TYPES(validElementTypes));
4202
4264
  }
4203
4265
  const element = container.model.toJSON({ remove: ["default"] });
4204
4266
  if (element?.isLocked) {
4205
- throw new Error(ERROR_MESSAGES2.ELEMENT_IS_LOCKED);
4267
+ throw new Error(ERROR_MESSAGES3.ELEMENT_IS_LOCKED);
4206
4268
  }
4207
4269
  const overridableProps = overridablePropsInput ? enrichOverridableProps(overridablePropsInput, element) : void 0;
4208
4270
  if (overridableProps) {
@@ -4499,11 +4561,11 @@ import { getAllDescendants as getAllDescendants4 } from "@elementor/editor-eleme
4499
4561
  import { notify as notify4 } from "@elementor/editor-notifications";
4500
4562
  import { blockCommand as blockCommand2 } from "@elementor/editor-v1-adapters";
4501
4563
  import { __getState as getState19 } from "@elementor/store";
4502
- import { __ as __28 } from "@wordpress/i18n";
4564
+ import { __ as __29 } from "@wordpress/i18n";
4503
4565
  var COMPONENT_TYPE = "e-component";
4504
4566
  var COMPONENT_CIRCULAR_NESTING_ALERT = {
4505
4567
  type: "default",
4506
- message: __28("Can't add this component - components that contain each other can't be nested.", "elementor"),
4568
+ message: __29("Can't add this component - components that contain each other can't be nested.", "elementor"),
4507
4569
  id: "circular-component-nesting-blocked"
4508
4570
  };
4509
4571
  function initCircularNestingPrevention() {
@@ -4835,7 +4897,7 @@ function init() {
4835
4897
  window.elementorCommon.__beforeSave = beforeSave;
4836
4898
  injectTab({
4837
4899
  id: "components",
4838
- label: __29("Components", "elementor"),
4900
+ label: __30("Components", "elementor"),
4839
4901
  component: Components,
4840
4902
  position: 1
4841
4903
  });