@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.js +160 -98
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +160 -98
- package/dist/index.mjs.map +1 -1
- package/package.json +22 -22
- package/src/components/component-properties-panel/properties-group.tsx +1 -0
- package/src/components/component-properties-panel/property-item.tsx +3 -0
- package/src/components/overridable-props/overridable-prop-form.tsx +35 -4
- package/src/components/overridable-props/overridable-prop-indicator.tsx +1 -0
- package/src/components/overridable-props/utils/validate-prop-label.ts +38 -0
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
937
|
-
const
|
|
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 ?
|
|
940
|
-
const ctaLabel = isCreate ?
|
|
941
|
-
|
|
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:
|
|
994
|
+
placeholder: __5("Enter value", "elementor"),
|
|
958
995
|
value: propLabel ?? "",
|
|
959
|
-
onChange: (e) =>
|
|
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(
|
|
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":
|
|
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" } },
|
|
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 ?
|
|
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
|
-
|
|
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
|
|
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
|
|
1317
|
-
var
|
|
1318
|
-
EMPTY_NAME:
|
|
1319
|
-
DUPLICATE_NAME:
|
|
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
|
|
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
|
|
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(
|
|
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" },
|
|
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":
|
|
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:
|
|
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":
|
|
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,
|
|
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
|
|
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":
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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: () =>
|
|
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
|
|
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:
|
|
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" },
|
|
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 },
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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,
|
|
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:
|
|
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:
|
|
2283
|
+
message: __17("Component name is required.", "elementor")
|
|
2223
2284
|
}).refine((value) => value.length >= MIN_NAME_LENGTH, {
|
|
2224
|
-
message:
|
|
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
|
|
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,
|
|
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
|
-
|
|
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" } },
|
|
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:
|
|
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 },
|
|
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
|
-
|
|
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 },
|
|
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" },
|
|
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
|
-
|
|
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 },
|
|
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" },
|
|
2677
|
-
/* @__PURE__ */ React17.createElement(Typography9, { align: "center", variant: "caption", color: "inherit" }, /* @__PURE__ */ React17.createElement(Link3, { color: "secondary", variant: "caption", component: "button", onClick: clearSearch },
|
|
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
|
|
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
|
|
2783
|
+
import { __ as __21 } from "@wordpress/i18n";
|
|
2723
2784
|
var NON_ATOMIC_ELEMENT_ALERT = {
|
|
2724
2785
|
type: "default",
|
|
2725
|
-
message:
|
|
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:
|
|
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:
|
|
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 =
|
|
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:
|
|
3053
|
-
name:
|
|
3054
|
-
cancel:
|
|
3055
|
-
create:
|
|
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
|
|
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":
|
|
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
|
|
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 =
|
|
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" },
|
|
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 },
|
|
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
|
|
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
|
|
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" },
|
|
3469
|
-
/* @__PURE__ */ React23.createElement(Typography12, { align: "center", variant: "caption", maxWidth: "170px" },
|
|
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" }),
|
|
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 =
|
|
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
|
|
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
|
|
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 ?
|
|
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:
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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:
|
|
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:
|
|
4900
|
+
label: __30("Components", "elementor"),
|
|
4839
4901
|
component: Components,
|
|
4840
4902
|
position: 1
|
|
4841
4903
|
});
|