@elementor/editor-components 3.33.0-299 → 3.33.0-300

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 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 import_editor_documents3 = require("@elementor/editor-documents");
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 import_store20 = require("@elementor/store");
45
- var import_i18n8 = require("@wordpress/i18n");
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 import_editor_documents2 = require("@elementor/editor-documents");
1390
+ var import_editor_documents3 = require("@elementor/editor-documents");
1226
1391
  var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
1227
- var import_i18n7 = require("@wordpress/i18n");
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, import_editor_documents2.getCurrentDocument)();
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, import_i18n7.__)("Edit Component", "elementor"),
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 import_react7 = require("react");
1363
- var import_store13 = require("@elementor/store");
1527
+ var import_react8 = require("react");
1528
+ var import_store15 = require("@elementor/store");
1364
1529
  function PopulateStore() {
1365
- (0, import_react7.useEffect)(() => {
1366
- (0, import_store13.__dispatch)(loadComponents());
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 import_store14 = require("@elementor/store");
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, import_store14.__subscribeWithSelector)(
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, import_store14.__getState)());
1550
+ return selectFlatStyles((0, import_store16.__getState)());
1386
1551
  },
1387
1552
  get: (id) => {
1388
- return selectFlatStyles((0, import_store14.__getState)()).find((style) => style.id === id) ?? null;
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 import_store16 = require("@elementor/store");
1559
+ var import_store18 = require("@elementor/store");
1395
1560
  function removeComponentStyles(id) {
1396
1561
  apiClient.invalidateComponentConfigCache(id);
1397
- (0, import_store16.__dispatch)(slice.actions.removeStyles({ id }));
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 import_store18 = require("@elementor/store");
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, import_store18.__getState)());
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, import_store18.__dispatch)(
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, import_store18.__dispatch)(slice.actions.resetUnpublished());
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, import_store20.__registerSlice)(slice);
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, import_editor_documents3.getV1CurrentDocument)();
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, import_i18n8.__)("Components", "elementor"),
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, import_editor_documents3.getV1CurrentDocument)();
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
  }