@elementor/editor-components 3.33.0-299 → 3.33.0-301
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 +196 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +183 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +18 -16
- package/src/components/overridable-props/indicator.tsx +81 -0
- package/src/components/overridable-props/overridable-prop-indicator.tsx +95 -0
- package/src/init.ts +9 -0
- package/src/prop-types/component-overridable-prop-type.ts +15 -0
- package/src/store/store.ts +6 -0
- package/src/types.ts +27 -1
package/dist/index.js
CHANGED
|
@@ -37,12 +37,13 @@ module.exports = __toCommonJS(index_exports);
|
|
|
37
37
|
// src/init.ts
|
|
38
38
|
var import_editor = require("@elementor/editor");
|
|
39
39
|
var import_editor_canvas6 = require("@elementor/editor-canvas");
|
|
40
|
-
var
|
|
40
|
+
var import_editor_documents4 = require("@elementor/editor-documents");
|
|
41
|
+
var import_editor_editing_panel2 = require("@elementor/editor-editing-panel");
|
|
41
42
|
var import_editor_elements_panel = require("@elementor/editor-elements-panel");
|
|
42
43
|
var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
|
|
43
44
|
var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
|
|
44
|
-
var
|
|
45
|
-
var
|
|
45
|
+
var import_store22 = require("@elementor/store");
|
|
46
|
+
var import_i18n10 = require("@wordpress/i18n");
|
|
46
47
|
|
|
47
48
|
// src/component-instance-transformer.ts
|
|
48
49
|
var import_editor_canvas = require("@elementor/editor-canvas");
|
|
@@ -155,6 +156,7 @@ var selectLoadStatus = (state) => state[SLICE_NAME].loadStatus;
|
|
|
155
156
|
var selectStylesDefinitions = (state) => state[SLICE_NAME].styles ?? {};
|
|
156
157
|
var selectUnpublishedData = (state) => state[SLICE_NAME].unpublishedData;
|
|
157
158
|
var getCreatedThisSession = (state) => state[SLICE_NAME].createdThisSession;
|
|
159
|
+
var selectComponent = (state, componentId) => state[SLICE_NAME].data.find((component) => component.id === componentId);
|
|
158
160
|
var selectComponents = (0, import_store2.__createSelector)(
|
|
159
161
|
selectData,
|
|
160
162
|
selectUnpublishedData,
|
|
@@ -175,6 +177,10 @@ var selectCreatedThisSession = (0, import_store2.__createSelector)(
|
|
|
175
177
|
getCreatedThisSession,
|
|
176
178
|
(createdThisSession) => createdThisSession
|
|
177
179
|
);
|
|
180
|
+
var selectOverridableProps = (0, import_store2.__createSelector)(
|
|
181
|
+
selectComponent,
|
|
182
|
+
(component) => component?.overridableProps
|
|
183
|
+
);
|
|
178
184
|
|
|
179
185
|
// src/utils/component-document-data.ts
|
|
180
186
|
var getComponentDocumentData = async (id) => {
|
|
@@ -1220,11 +1226,170 @@ var EditModeDialog = ({ lockedBy }) => {
|
|
|
1220
1226
|
)), /* @__PURE__ */ React10.createElement(import_ui6.DialogActions, null, /* @__PURE__ */ React10.createElement(import_ui6.Button, { color: "secondary", variant: "contained", onClick: import_editor_ui3.closeDialog }, (0, import_i18n6.__)("Close", "elementor"))))));
|
|
1221
1227
|
};
|
|
1222
1228
|
|
|
1229
|
+
// src/components/overridable-props/overridable-prop-indicator.tsx
|
|
1230
|
+
var React12 = __toESM(require("react"));
|
|
1231
|
+
var import_editor_controls = require("@elementor/editor-controls");
|
|
1232
|
+
var import_editor_documents2 = require("@elementor/editor-documents");
|
|
1233
|
+
var import_editor_editing_panel = require("@elementor/editor-editing-panel");
|
|
1234
|
+
var import_store13 = require("@elementor/store");
|
|
1235
|
+
var import_ui8 = require("@elementor/ui");
|
|
1236
|
+
var import_i18n8 = require("@wordpress/i18n");
|
|
1237
|
+
|
|
1238
|
+
// src/prop-types/component-overridable-prop-type.ts
|
|
1239
|
+
var import_editor_props = require("@elementor/editor-props");
|
|
1240
|
+
var import_schema2 = require("@elementor/schema");
|
|
1241
|
+
var componentOverridablePropTypeUtil = (0, import_editor_props.createPropUtils)(
|
|
1242
|
+
"overridable",
|
|
1243
|
+
import_schema2.z.object({
|
|
1244
|
+
override_key: import_schema2.z.string(),
|
|
1245
|
+
default_value: import_schema2.z.object({
|
|
1246
|
+
$$type: import_schema2.z.string(),
|
|
1247
|
+
value: import_schema2.z.unknown()
|
|
1248
|
+
}).nullable()
|
|
1249
|
+
})
|
|
1250
|
+
);
|
|
1251
|
+
|
|
1252
|
+
// src/components/overridable-props/indicator.tsx
|
|
1253
|
+
var React11 = __toESM(require("react"));
|
|
1254
|
+
var import_react7 = require("react");
|
|
1255
|
+
var import_icons6 = require("@elementor/icons");
|
|
1256
|
+
var import_ui7 = require("@elementor/ui");
|
|
1257
|
+
var import_i18n7 = require("@wordpress/i18n");
|
|
1258
|
+
var SIZE = "tiny";
|
|
1259
|
+
var IconContainer = (0, import_ui7.styled)(import_ui7.Box)`
|
|
1260
|
+
pointer-events: none;
|
|
1261
|
+
opacity: 0;
|
|
1262
|
+
transition: opacity 0.2s ease-in-out;
|
|
1263
|
+
|
|
1264
|
+
& > svg {
|
|
1265
|
+
position: absolute;
|
|
1266
|
+
top: 50%;
|
|
1267
|
+
left: 50%;
|
|
1268
|
+
transform: translate( -50%, -50% );
|
|
1269
|
+
width: 10px;
|
|
1270
|
+
height: 10px;
|
|
1271
|
+
fill: ${({ theme }) => theme.palette.primary.contrastText};
|
|
1272
|
+
stroke: ${({ theme }) => theme.palette.primary.contrastText};
|
|
1273
|
+
stroke-width: 2px;
|
|
1274
|
+
}
|
|
1275
|
+
`;
|
|
1276
|
+
var Content = (0, import_ui7.styled)(import_ui7.Box)`
|
|
1277
|
+
position: relative;
|
|
1278
|
+
display: flex;
|
|
1279
|
+
align-items: center;
|
|
1280
|
+
justify-content: center;
|
|
1281
|
+
cursor: pointer;
|
|
1282
|
+
width: 16px;
|
|
1283
|
+
height: 16px;
|
|
1284
|
+
margin-inline: ${({ theme }) => theme.spacing(0.5)};
|
|
1285
|
+
|
|
1286
|
+
&:before {
|
|
1287
|
+
content: '';
|
|
1288
|
+
display: block;
|
|
1289
|
+
position: absolute;
|
|
1290
|
+
top: 50%;
|
|
1291
|
+
left: 50%;
|
|
1292
|
+
transform: translate( -50%, -50% ) rotate( 45deg );
|
|
1293
|
+
width: 5px;
|
|
1294
|
+
height: 5px;
|
|
1295
|
+
border-radius: 1px;
|
|
1296
|
+
background-color: ${({ theme }) => theme.palette.primary.main};
|
|
1297
|
+
transition: all 0.1s ease-in-out;
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
&:hover,
|
|
1301
|
+
&.enlarged {
|
|
1302
|
+
&:before {
|
|
1303
|
+
width: 12px;
|
|
1304
|
+
height: 12px;
|
|
1305
|
+
border-radius: 2px;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
.icon {
|
|
1309
|
+
opacity: 1;
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
`;
|
|
1313
|
+
var Indicator = (0, import_react7.forwardRef)(({ triggerProps, isOpen, isOverridable }, ref) => /* @__PURE__ */ React11.createElement(Content, { ref, ...triggerProps, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React11.createElement(
|
|
1314
|
+
IconContainer,
|
|
1315
|
+
{
|
|
1316
|
+
className: "icon",
|
|
1317
|
+
"aria-label": isOverridable ? (0, import_i18n7.__)("Overridable property", "elementor") : (0, import_i18n7.__)("Make prop overridable", "elementor")
|
|
1318
|
+
},
|
|
1319
|
+
isOverridable ? /* @__PURE__ */ React11.createElement(import_icons6.CheckIcon, { fontSize: SIZE }) : /* @__PURE__ */ React11.createElement(import_icons6.PlusIcon, { fontSize: SIZE })
|
|
1320
|
+
)));
|
|
1321
|
+
|
|
1322
|
+
// src/components/overridable-props/overridable-prop-indicator.tsx
|
|
1323
|
+
var FORBIDDEN_KEYS = ["_cssid", "attributes"];
|
|
1324
|
+
function OverridablePropIndicator() {
|
|
1325
|
+
const { bind, value } = (0, import_editor_controls.useBoundProp)();
|
|
1326
|
+
const currentDocument = (0, import_editor_documents2.getV1CurrentDocument)();
|
|
1327
|
+
if (currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE || !currentDocument.id) {
|
|
1328
|
+
return null;
|
|
1329
|
+
}
|
|
1330
|
+
if (!isPropAllowed(bind)) {
|
|
1331
|
+
return null;
|
|
1332
|
+
}
|
|
1333
|
+
const overridableProps = selectOverridableProps((0, import_store13.__getState)(), currentDocument.id);
|
|
1334
|
+
const isOverridable = componentOverridablePropTypeUtil.isValid(value);
|
|
1335
|
+
return /* @__PURE__ */ React12.createElement(
|
|
1336
|
+
Content2,
|
|
1337
|
+
{
|
|
1338
|
+
componentId: currentDocument.id,
|
|
1339
|
+
isOverridable,
|
|
1340
|
+
overridableProps
|
|
1341
|
+
}
|
|
1342
|
+
);
|
|
1343
|
+
}
|
|
1344
|
+
function Content2({ isOverridable, overridableProps }) {
|
|
1345
|
+
const {
|
|
1346
|
+
element: { id: elementId }
|
|
1347
|
+
} = (0, import_editor_editing_panel.useElement)();
|
|
1348
|
+
const { bind } = (0, import_editor_controls.useBoundProp)();
|
|
1349
|
+
const popupState = (0, import_ui8.usePopupState)({
|
|
1350
|
+
variant: "popover"
|
|
1351
|
+
});
|
|
1352
|
+
const triggerProps = (0, import_ui8.bindTrigger)(popupState);
|
|
1353
|
+
const popoverProps = (0, import_ui8.bindPopover)(popupState);
|
|
1354
|
+
const overridableConfig = Object.values(overridableProps?.props ?? {}).find(
|
|
1355
|
+
(prop) => prop.elementId === elementId && prop.propKey === bind
|
|
1356
|
+
);
|
|
1357
|
+
return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(import_ui8.Tooltip, { placement: "top", title: (0, import_i18n8.__)("Override Property", "elementor") }, /* @__PURE__ */ React12.createElement(
|
|
1358
|
+
Indicator,
|
|
1359
|
+
{
|
|
1360
|
+
triggerProps,
|
|
1361
|
+
isOpen: !!popoverProps.open,
|
|
1362
|
+
isOverridable
|
|
1363
|
+
}
|
|
1364
|
+
)), /* @__PURE__ */ React12.createElement(
|
|
1365
|
+
import_ui8.Popover,
|
|
1366
|
+
{
|
|
1367
|
+
disableScrollLock: true,
|
|
1368
|
+
anchorOrigin: {
|
|
1369
|
+
vertical: "bottom",
|
|
1370
|
+
horizontal: "right"
|
|
1371
|
+
},
|
|
1372
|
+
transformOrigin: {
|
|
1373
|
+
vertical: "top",
|
|
1374
|
+
horizontal: "right"
|
|
1375
|
+
},
|
|
1376
|
+
PaperProps: {
|
|
1377
|
+
sx: { my: 2.5 }
|
|
1378
|
+
},
|
|
1379
|
+
...popoverProps
|
|
1380
|
+
},
|
|
1381
|
+
JSON.stringify(overridableConfig)
|
|
1382
|
+
));
|
|
1383
|
+
}
|
|
1384
|
+
function isPropAllowed(bind) {
|
|
1385
|
+
return !FORBIDDEN_KEYS.includes(bind);
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1223
1388
|
// src/create-component-type.ts
|
|
1224
1389
|
var import_editor_canvas5 = require("@elementor/editor-canvas");
|
|
1225
|
-
var
|
|
1390
|
+
var import_editor_documents3 = require("@elementor/editor-documents");
|
|
1226
1391
|
var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
|
|
1227
|
-
var
|
|
1392
|
+
var import_i18n9 = require("@wordpress/i18n");
|
|
1228
1393
|
var TYPE = "e-component";
|
|
1229
1394
|
function createComponentType(options) {
|
|
1230
1395
|
const legacyWindow = window;
|
|
@@ -1242,7 +1407,7 @@ function createComponentView(options) {
|
|
|
1242
1407
|
legacyWindow = window;
|
|
1243
1408
|
eventsManagerConfig = this.legacyWindow.elementorCommon.eventsManager.config;
|
|
1244
1409
|
isComponentCurrentlyEdited() {
|
|
1245
|
-
const currentDocument = (0,
|
|
1410
|
+
const currentDocument = (0, import_editor_documents3.getCurrentDocument)();
|
|
1246
1411
|
return currentDocument?.id === this.getComponentId();
|
|
1247
1412
|
}
|
|
1248
1413
|
afterSettingsResolve(settings) {
|
|
@@ -1283,7 +1448,7 @@ function createComponentView(options) {
|
|
|
1283
1448
|
{
|
|
1284
1449
|
name: "edit component",
|
|
1285
1450
|
icon: "eicon-edit",
|
|
1286
|
-
title: () => (0,
|
|
1451
|
+
title: () => (0, import_i18n9.__)("Edit Component", "elementor"),
|
|
1287
1452
|
isEnabled: () => true,
|
|
1288
1453
|
callback: (_, eventData) => this.editComponent(eventData)
|
|
1289
1454
|
}
|
|
@@ -1359,22 +1524,22 @@ function setInactiveRecursively(model) {
|
|
|
1359
1524
|
}
|
|
1360
1525
|
|
|
1361
1526
|
// src/populate-store.ts
|
|
1362
|
-
var
|
|
1363
|
-
var
|
|
1527
|
+
var import_react8 = require("react");
|
|
1528
|
+
var import_store15 = require("@elementor/store");
|
|
1364
1529
|
function PopulateStore() {
|
|
1365
|
-
(0,
|
|
1366
|
-
(0,
|
|
1530
|
+
(0, import_react8.useEffect)(() => {
|
|
1531
|
+
(0, import_store15.__dispatch)(loadComponents());
|
|
1367
1532
|
}, []);
|
|
1368
1533
|
return null;
|
|
1369
1534
|
}
|
|
1370
1535
|
|
|
1371
1536
|
// src/store/components-styles-provider.ts
|
|
1372
1537
|
var import_editor_styles_repository = require("@elementor/editor-styles-repository");
|
|
1373
|
-
var
|
|
1538
|
+
var import_store16 = require("@elementor/store");
|
|
1374
1539
|
var componentsStylesProvider = (0, import_editor_styles_repository.createStylesProvider)({
|
|
1375
1540
|
key: "components-styles",
|
|
1376
1541
|
priority: 100,
|
|
1377
|
-
subscribe: (cb) => (0,
|
|
1542
|
+
subscribe: (cb) => (0, import_store16.__subscribeWithSelector)(
|
|
1378
1543
|
(state) => state[SLICE_NAME],
|
|
1379
1544
|
() => {
|
|
1380
1545
|
cb();
|
|
@@ -1382,29 +1547,29 @@ var componentsStylesProvider = (0, import_editor_styles_repository.createStylesP
|
|
|
1382
1547
|
),
|
|
1383
1548
|
actions: {
|
|
1384
1549
|
all: () => {
|
|
1385
|
-
return selectFlatStyles((0,
|
|
1550
|
+
return selectFlatStyles((0, import_store16.__getState)());
|
|
1386
1551
|
},
|
|
1387
1552
|
get: (id) => {
|
|
1388
|
-
return selectFlatStyles((0,
|
|
1553
|
+
return selectFlatStyles((0, import_store16.__getState)()).find((style) => style.id === id) ?? null;
|
|
1389
1554
|
}
|
|
1390
1555
|
}
|
|
1391
1556
|
});
|
|
1392
1557
|
|
|
1393
1558
|
// src/store/remove-component-styles.ts
|
|
1394
|
-
var
|
|
1559
|
+
var import_store18 = require("@elementor/store");
|
|
1395
1560
|
function removeComponentStyles(id) {
|
|
1396
1561
|
apiClient.invalidateComponentConfigCache(id);
|
|
1397
|
-
(0,
|
|
1562
|
+
(0, import_store18.__dispatch)(slice.actions.removeStyles({ id }));
|
|
1398
1563
|
}
|
|
1399
1564
|
|
|
1400
1565
|
// src/sync/create-components-before-save.ts
|
|
1401
1566
|
var import_editor_elements5 = require("@elementor/editor-elements");
|
|
1402
|
-
var
|
|
1567
|
+
var import_store20 = require("@elementor/store");
|
|
1403
1568
|
async function createComponentsBeforeSave({
|
|
1404
1569
|
container,
|
|
1405
1570
|
status
|
|
1406
1571
|
}) {
|
|
1407
|
-
const unpublishedComponents = selectUnpublishedComponents((0,
|
|
1572
|
+
const unpublishedComponents = selectUnpublishedComponents((0, import_store20.__getState)());
|
|
1408
1573
|
if (!unpublishedComponents.length) {
|
|
1409
1574
|
return;
|
|
1410
1575
|
}
|
|
@@ -1412,7 +1577,7 @@ async function createComponentsBeforeSave({
|
|
|
1412
1577
|
const uidToComponentId = await createComponents(unpublishedComponents, status);
|
|
1413
1578
|
const elements = container.model.get("elements").toJSON();
|
|
1414
1579
|
updateComponentInstances(elements, uidToComponentId);
|
|
1415
|
-
(0,
|
|
1580
|
+
(0, import_store20.__dispatch)(
|
|
1416
1581
|
slice.actions.add(
|
|
1417
1582
|
unpublishedComponents.map((component) => ({
|
|
1418
1583
|
id: uidToComponentId.get(component.uid),
|
|
@@ -1421,7 +1586,7 @@ async function createComponentsBeforeSave({
|
|
|
1421
1586
|
}))
|
|
1422
1587
|
)
|
|
1423
1588
|
);
|
|
1424
|
-
(0,
|
|
1589
|
+
(0, import_store20.__dispatch)(slice.actions.resetUnpublished());
|
|
1425
1590
|
} catch (error) {
|
|
1426
1591
|
throw new Error(`Failed to publish components and update component instances: ${error}`);
|
|
1427
1592
|
}
|
|
@@ -1507,13 +1672,13 @@ var beforeSave = ({ container, status }) => {
|
|
|
1507
1672
|
var COMPONENT_DOCUMENT_TYPE2 = "elementor_component";
|
|
1508
1673
|
function init() {
|
|
1509
1674
|
import_editor_styles_repository2.stylesRepository.register(componentsStylesProvider);
|
|
1510
|
-
(0,
|
|
1675
|
+
(0, import_store22.__registerSlice)(slice);
|
|
1511
1676
|
(0, import_editor_canvas6.registerElementType)(
|
|
1512
1677
|
TYPE,
|
|
1513
1678
|
(options) => createComponentType({ ...options, showLockedByModal: openEditModeDialog })
|
|
1514
1679
|
);
|
|
1515
1680
|
(0, import_editor_v1_adapters6.registerDataHook)("dependency", "editor/documents/close", (args) => {
|
|
1516
|
-
const document = (0,
|
|
1681
|
+
const document = (0, import_editor_documents4.getV1CurrentDocument)();
|
|
1517
1682
|
if (document.config.type === COMPONENT_DOCUMENT_TYPE2) {
|
|
1518
1683
|
args.mode = "autosave";
|
|
1519
1684
|
}
|
|
@@ -1523,7 +1688,7 @@ function init() {
|
|
|
1523
1688
|
window.elementorCommon.__beforeSave = beforeSave;
|
|
1524
1689
|
(0, import_editor_elements_panel.injectTab)({
|
|
1525
1690
|
id: "components",
|
|
1526
|
-
label: (0,
|
|
1691
|
+
label: (0, import_i18n10.__)("Components", "elementor"),
|
|
1527
1692
|
component: Components
|
|
1528
1693
|
});
|
|
1529
1694
|
(0, import_editor.injectIntoTop)({
|
|
@@ -1539,12 +1704,18 @@ function init() {
|
|
|
1539
1704
|
component: EditComponent
|
|
1540
1705
|
});
|
|
1541
1706
|
(0, import_editor_v1_adapters6.__privateListenTo)((0, import_editor_v1_adapters6.commandStartEvent)("editor/documents/attach-preview"), () => {
|
|
1542
|
-
const { id, config } = (0,
|
|
1707
|
+
const { id, config } = (0, import_editor_documents4.getV1CurrentDocument)();
|
|
1543
1708
|
if (id) {
|
|
1544
1709
|
removeComponentStyles(id);
|
|
1545
1710
|
}
|
|
1546
1711
|
loadComponentsStyles(config?.elements ?? []);
|
|
1547
1712
|
});
|
|
1713
|
+
(0, import_editor_editing_panel2.registerFieldIndicator)({
|
|
1714
|
+
fieldType: import_editor_editing_panel2.FIELD_TYPE.SETTINGS,
|
|
1715
|
+
id: "component-overridable-prop",
|
|
1716
|
+
priority: 1,
|
|
1717
|
+
indicator: OverridablePropIndicator
|
|
1718
|
+
});
|
|
1548
1719
|
import_editor_canvas6.settingsTransformersRegistry.register("component-instance", componentInstanceTransformer);
|
|
1549
1720
|
import_editor_canvas6.settingsTransformersRegistry.register("overridable", componentOverridableTransformer);
|
|
1550
1721
|
}
|