@elementor/editor-components 4.0.0-543 → 4.0.0-545

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.
Files changed (25) hide show
  1. package/dist/index.js +739 -590
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.mjs +676 -527
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +22 -22
  6. package/src/components/component-panel-header/component-panel-header.tsx +2 -2
  7. package/src/components/component-properties-panel/component-properties-panel-content.tsx +2 -2
  8. package/src/components/component-properties-panel/use-current-editable-item.ts +1 -2
  9. package/src/components/edit-component/edit-component.tsx +3 -0
  10. package/src/components/instance-editing-panel/instance-editing-panel.tsx +11 -9
  11. package/src/components/instance-editing-panel/override-prop-control.tsx +60 -44
  12. package/src/components/instance-editing-panel/override-props-group.tsx +3 -10
  13. package/src/components/instance-editing-panel/use-resolved-origin-value.tsx +6 -19
  14. package/src/components/overridable-props/overridable-prop-indicator.tsx +3 -2
  15. package/src/hooks/use-sanitize-overridable-props.ts +31 -0
  16. package/src/provider/component-instance-context.tsx +21 -0
  17. package/src/store/actions/create-unpublished-component.ts +12 -2
  18. package/src/store/actions/reset-sanitized-components.ts +7 -0
  19. package/src/store/actions/update-component-sanitized-attribute.ts +8 -0
  20. package/src/store/store.ts +35 -0
  21. package/src/sync/handle-component-edit-mode-container.ts +1 -1
  22. package/src/utils/filter-valid-overridable-props.ts +84 -0
  23. package/src/utils/overridable-props-utils.ts +58 -0
  24. package/src/utils/tracking.ts +5 -1
  25. package/src/components/component-panel-header/use-overridable-props.ts +0 -14
package/dist/index.js CHANGED
@@ -44,7 +44,7 @@ var import_editor_elements_panel = require("@elementor/editor-elements-panel");
44
44
  var import_editor_panels5 = require("@elementor/editor-panels");
45
45
  var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
46
46
  var import_editor_v1_adapters12 = require("@elementor/editor-v1-adapters");
47
- var import_store82 = require("@elementor/store");
47
+ var import_store85 = require("@elementor/store");
48
48
  var import_i18n31 = require("@wordpress/i18n");
49
49
 
50
50
  // src/component-instance-transformer.ts
@@ -127,7 +127,8 @@ var initialState = {
127
127
  archivedThisSession: [],
128
128
  path: [],
129
129
  currentComponentId: null,
130
- updatedComponentNames: {}
130
+ updatedComponentNames: {},
131
+ sanitized: {}
131
132
  };
132
133
  var SLICE_NAME = "components";
133
134
  var slice = (0, import_store2.__createSlice)({
@@ -201,6 +202,17 @@ var slice = (0, import_store2.__createSlice)({
201
202
  },
202
203
  cleanUpdatedComponentNames: (state) => {
203
204
  state.updatedComponentNames = {};
205
+ },
206
+ updateComponentSanitizedAttribute: (state, {
207
+ payload: { componentId, attribute }
208
+ }) => {
209
+ if (!state.sanitized[componentId]) {
210
+ state.sanitized[componentId] = {};
211
+ }
212
+ state.sanitized[componentId][attribute] = true;
213
+ },
214
+ resetSanitizedComponents: (state) => {
215
+ state.sanitized = {};
204
216
  }
205
217
  },
206
218
  extraReducers: (builder) => {
@@ -303,6 +315,16 @@ var selectUpdatedComponentNames = (0, import_store2.__createSelector)(
303
315
  title
304
316
  }))
305
317
  );
318
+ var useSanitizedComponents = () => {
319
+ return (0, import_store2.__useSelector)((state) => state[SLICE_NAME].sanitized);
320
+ };
321
+ var useIsSanitizedComponent = (componentId, key) => {
322
+ const sanitizedComponents = useSanitizedComponents();
323
+ if (!componentId) {
324
+ return false;
325
+ }
326
+ return !!sanitizedComponents[componentId]?.[key];
327
+ };
306
328
 
307
329
  // src/utils/component-document-data.ts
308
330
  var import_editor_documents = require("@elementor/editor-documents");
@@ -389,7 +411,7 @@ var import_editor_documents7 = require("@elementor/editor-documents");
389
411
  var import_editor_panels3 = require("@elementor/editor-panels");
390
412
  var import_editor_ui6 = require("@elementor/editor-ui");
391
413
  var import_icons7 = require("@elementor/icons");
392
- var import_store29 = require("@elementor/store");
414
+ var import_store32 = require("@elementor/store");
393
415
  var import_ui10 = require("@elementor/ui");
394
416
  var import_i18n13 = require("@wordpress/i18n");
395
417
 
@@ -468,11 +490,26 @@ function useNavigateBack() {
468
490
  }, [path, documentsManager]);
469
491
  }
470
492
 
493
+ // src/store/actions/delete-overridable-prop.ts
494
+ var import_store11 = require("@elementor/store");
495
+
496
+ // src/utils/revert-overridable-settings.ts
497
+ var import_editor_elements2 = require("@elementor/editor-elements");
498
+
499
+ // src/create-component-type.ts
500
+ var import_editor_canvas4 = require("@elementor/editor-canvas");
501
+ var import_editor_documents4 = require("@elementor/editor-documents");
502
+ var import_store9 = require("@elementor/store");
503
+ var import_i18n = require("@wordpress/i18n");
504
+
471
505
  // src/utils/tracking.ts
472
506
  var import_events = require("@elementor/events");
473
507
  var import_store7 = require("@elementor/store");
474
508
  var FEATURE_NAME = "Components";
475
509
  var trackComponentEvent = ({ action, source, ...data }) => {
510
+ if (source === "system") {
511
+ return;
512
+ }
476
513
  const { dispatchEvent, config } = (0, import_events.getMixpanel)();
477
514
  if (!config?.names?.components?.[action]) {
478
515
  return;
@@ -504,289 +541,47 @@ var onElementDrop = (_args, element) => {
504
541
  });
505
542
  };
506
543
 
507
- // src/components/component-properties-panel/component-properties-panel.tsx
508
- var React8 = __toESM(require("react"));
509
- var import_editor_editing_panel = require("@elementor/editor-editing-panel");
510
- var import_editor_elements4 = require("@elementor/editor-elements");
511
- var import_editor_panels2 = require("@elementor/editor-panels");
512
- var import_editor_ui5 = require("@elementor/editor-ui");
513
- var import_ui8 = require("@elementor/ui");
514
- var import_i18n11 = require("@wordpress/i18n");
515
-
516
- // src/components/component-properties-panel/component-properties-panel-content.tsx
517
- var React7 = __toESM(require("react"));
518
- var import_react5 = require("react");
519
- var import_editor_documents6 = require("@elementor/editor-documents");
520
- var import_editor_panels = require("@elementor/editor-panels");
521
- var import_icons5 = require("@elementor/icons");
522
- var import_ui7 = require("@elementor/ui");
523
- var import_utils2 = require("@elementor/utils");
524
- var import_i18n10 = require("@wordpress/i18n");
525
-
526
- // src/store/actions/add-overridable-group.ts
527
- var import_store9 = require("@elementor/store");
528
- function addOverridableGroup({
529
- componentId,
530
- groupId,
531
- label,
532
- source
533
- }) {
534
- const currentComponent = selectCurrentComponent((0, import_store9.__getState)());
535
- const overridableProps = selectOverridableProps((0, import_store9.__getState)(), componentId);
536
- if (!overridableProps) {
537
- return;
538
- }
539
- const newGroup = {
540
- id: groupId,
541
- label,
542
- props: []
543
- };
544
- (0, import_store9.__dispatch)(
545
- slice.actions.setOverridableProps({
546
- componentId,
547
- overridableProps: {
548
- ...overridableProps,
549
- groups: {
550
- ...overridableProps.groups,
551
- items: {
552
- ...overridableProps.groups.items,
553
- [groupId]: newGroup
554
- },
555
- order: [groupId, ...overridableProps.groups.order]
556
- }
557
- }
558
- })
559
- );
560
- trackComponentEvent({
561
- action: "propertiesGroupCreated",
562
- source,
563
- component_uid: currentComponent?.uid,
564
- group_name: label
544
+ // src/create-component-type.ts
545
+ var COMPONENT_WIDGET_TYPE = "e-component";
546
+ var updateGroups = (groups, config) => {
547
+ const disableMap = new Map(Object.entries(config.disable ?? {}));
548
+ const addMap = new Map(Object.entries(config.add ?? {}));
549
+ return groups.map((group) => {
550
+ const disabledActions = disableMap.get(group.name) ?? [];
551
+ const addConfig = addMap.get(group.name);
552
+ const updatedActions = group.actions.map(
553
+ (action) => disabledActions.includes(action.name) ? { ...action, isEnabled: () => false } : action
554
+ );
555
+ if (addConfig) {
556
+ updatedActions.splice(addConfig.index, 0, addConfig.action);
557
+ }
558
+ return { ...group, actions: updatedActions };
565
559
  });
566
- return newGroup;
567
- }
568
-
569
- // src/store/actions/delete-overridable-group.ts
570
- var import_store11 = require("@elementor/store");
571
-
572
- // src/store/utils/groups-transformers.ts
573
- var import_utils = require("@elementor/utils");
574
- var import_i18n = require("@wordpress/i18n");
575
- function removePropFromAllGroups(groups, propKey) {
576
- return {
577
- ...groups,
578
- items: Object.fromEntries(
579
- Object.entries(groups.items).map(([groupId, group]) => [
580
- groupId,
581
- {
582
- ...group,
583
- props: group.props.filter((p) => p !== propKey)
584
- }
585
- ])
586
- )
587
- };
588
- }
589
- function addPropToGroup(groups, groupId, propKey) {
590
- const group = groups.items[groupId];
591
- if (!group) {
592
- return groups;
593
- }
594
- if (group.props.includes(propKey)) {
595
- return groups;
596
- }
597
- return {
598
- ...groups,
599
- items: {
600
- ...groups.items,
601
- [groupId]: {
602
- ...group,
603
- props: [...group.props, propKey]
604
- }
560
+ };
561
+ function createComponentType(options) {
562
+ const legacyWindow = window;
563
+ const WidgetType = legacyWindow.elementor.modules.elements.types.Widget;
564
+ const view = createComponentView({ ...options });
565
+ return class extends WidgetType {
566
+ getType() {
567
+ return options.type;
605
568
  }
606
- };
607
- }
608
- function movePropBetweenGroups(groups, propKey, fromGroupId, toGroupId) {
609
- if (fromGroupId === toGroupId) {
610
- return groups;
611
- }
612
- const withoutProp = removePropFromGroup(groups, fromGroupId, propKey);
613
- return addPropToGroup(withoutProp, toGroupId, propKey);
614
- }
615
- function removePropFromGroup(groups, groupId, propKey) {
616
- const group = groups.items[groupId];
617
- if (!group) {
618
- return groups;
619
- }
620
- return {
621
- ...groups,
622
- items: {
623
- ...groups.items,
624
- [groupId]: {
625
- ...group,
626
- props: group.props.filter((p) => p !== propKey)
627
- }
569
+ getView() {
570
+ return view;
628
571
  }
629
- };
630
- }
631
- function resolveOrCreateGroup(groups, requestedGroupId) {
632
- if (requestedGroupId && groups.items[requestedGroupId]) {
633
- return { groups, groupId: requestedGroupId };
634
- }
635
- if (!requestedGroupId && groups.order.length > 0) {
636
- return { groups, groupId: groups.order[0] };
637
- }
638
- return createGroup(groups, requestedGroupId);
639
- }
640
- function createGroup(groups, groupId, label) {
641
- const newGroupId = groupId || (0, import_utils.generateUniqueId)("group");
642
- const newLabel = label || (0, import_i18n.__)("Default", "elementor");
643
- return {
644
- groups: {
645
- ...groups,
646
- items: {
647
- ...groups.items,
648
- [newGroupId]: {
649
- id: newGroupId,
650
- label: newLabel,
651
- props: []
652
- }
653
- },
654
- order: [...groups.order, newGroupId]
655
- },
656
- groupId: newGroupId
657
- };
658
- }
659
- function removePropsFromState(overridableProps, propsToRemove) {
660
- const overrideKeysToRemove = propsToRemove.map((prop) => prop.overrideKey);
661
- const remainingProps = Object.fromEntries(
662
- Object.entries(overridableProps.props).filter(([, prop]) => !propsToRemove.includes(prop))
663
- );
664
- const updatedGroupItems = Object.fromEntries(
665
- Object.entries(overridableProps.groups.items).map(
666
- ([groupId, group]) => [
667
- groupId,
668
- {
669
- ...group,
670
- props: group.props.filter((prop) => !overrideKeysToRemove.includes(prop))
671
- }
672
- ]
673
- )
674
- );
675
- return {
676
- props: remainingProps,
677
- groups: {
678
- items: updatedGroupItems,
679
- order: overridableProps.groups.order.filter((groupId) => !overrideKeysToRemove.includes(groupId))
572
+ getModel() {
573
+ return createComponentModel();
680
574
  }
681
575
  };
682
576
  }
683
- function ensureGroupInOrder(groups, groupId) {
684
- if (groups.order.includes(groupId)) {
685
- return groups;
686
- }
687
- return {
688
- ...groups,
689
- order: [...groups.order, groupId]
690
- };
691
- }
692
- function deleteGroup(groups, groupId) {
693
- const { [groupId]: removed, ...remainingItems } = groups.items;
694
- return {
695
- items: remainingItems,
696
- order: groups.order.filter((id2) => id2 !== groupId)
697
- };
698
- }
699
- function renameGroup(groups, groupId, newLabel) {
700
- const group = groups.items[groupId];
701
- if (!group) {
702
- return groups;
703
- }
704
- return {
705
- ...groups,
706
- items: {
707
- ...groups.items,
708
- [groupId]: {
709
- ...group,
710
- label: newLabel
711
- }
712
- }
713
- };
714
- }
715
-
716
- // src/store/actions/delete-overridable-group.ts
717
- function deleteOverridableGroup({ componentId, groupId }) {
718
- const overridableProps = selectOverridableProps((0, import_store11.__getState)(), componentId);
719
- if (!overridableProps) {
720
- return false;
721
- }
722
- const group = overridableProps.groups.items[groupId];
723
- if (!group || group.props.length > 0) {
724
- return false;
725
- }
726
- const updatedGroups = deleteGroup(overridableProps.groups, groupId);
727
- (0, import_store11.__dispatch)(
728
- slice.actions.setOverridableProps({
729
- componentId,
730
- overridableProps: {
731
- ...overridableProps,
732
- groups: updatedGroups
733
- }
734
- })
735
- );
736
- return true;
737
- }
738
-
739
- // src/store/actions/delete-overridable-prop.ts
740
- var import_store15 = require("@elementor/store");
741
-
742
- // src/utils/revert-overridable-settings.ts
743
- var import_editor_elements2 = require("@elementor/editor-elements");
744
-
745
- // src/create-component-type.ts
746
- var import_editor_canvas4 = require("@elementor/editor-canvas");
747
- var import_editor_documents4 = require("@elementor/editor-documents");
748
- var import_store13 = require("@elementor/store");
749
- var import_i18n2 = require("@wordpress/i18n");
750
- var COMPONENT_WIDGET_TYPE = "e-component";
751
- var updateGroups = (groups, config) => {
752
- const disableMap = new Map(Object.entries(config.disable ?? {}));
753
- const addMap = new Map(Object.entries(config.add ?? {}));
754
- return groups.map((group) => {
755
- const disabledActions = disableMap.get(group.name) ?? [];
756
- const addConfig = addMap.get(group.name);
757
- const updatedActions = group.actions.map(
758
- (action) => disabledActions.includes(action.name) ? { ...action, isEnabled: () => false } : action
759
- );
760
- if (addConfig) {
761
- updatedActions.splice(addConfig.index, 0, addConfig.action);
762
- }
763
- return { ...group, actions: updatedActions };
764
- });
765
- };
766
- function createComponentType(options) {
767
- const legacyWindow = window;
768
- const WidgetType = legacyWindow.elementor.modules.elements.types.Widget;
769
- const view = createComponentView({ ...options });
770
- return class extends WidgetType {
771
- getType() {
772
- return options.type;
773
- }
774
- getView() {
775
- return view;
776
- }
777
- getModel() {
778
- return createComponentModel();
779
- }
780
- };
781
- }
782
- function createComponentView(options) {
783
- const legacyWindow = window;
784
- return class extends (0, import_editor_canvas4.createTemplatedElementView)(options) {
785
- eventsManagerConfig = legacyWindow.elementorCommon.eventsManager.config;
786
- #componentRenderContext;
787
- isComponentCurrentlyEdited() {
788
- const currentDocument = (0, import_editor_documents4.getCurrentDocument)();
789
- return currentDocument?.id === this.getComponentId();
577
+ function createComponentView(options) {
578
+ const legacyWindow = window;
579
+ return class extends (0, import_editor_canvas4.createTemplatedElementView)(options) {
580
+ eventsManagerConfig = legacyWindow.elementorCommon.eventsManager.config;
581
+ #componentRenderContext;
582
+ isComponentCurrentlyEdited() {
583
+ const currentDocument = (0, import_editor_documents4.getCurrentDocument)();
584
+ return currentDocument?.id === this.getComponentId();
790
585
  }
791
586
  getRenderContext() {
792
587
  const namespaceKey = this.getNamespaceKey();
@@ -859,7 +654,7 @@ function createComponentView(options) {
859
654
  action: {
860
655
  name: "edit component",
861
656
  icon: "eicon-edit",
862
- title: () => (0, import_i18n2.__)("Edit Component", "elementor"),
657
+ title: () => (0, import_i18n.__)("Edit Component", "elementor"),
863
658
  isEnabled: () => true,
864
659
  callback: (_, eventData) => this.editComponent(eventData)
865
660
  }
@@ -964,7 +759,7 @@ function createComponentModel() {
964
759
  }
965
760
  const componentUid = editorSettings?.component_uid;
966
761
  if (componentUid) {
967
- const component = selectComponentByUid((0, import_store13.__getState)(), componentUid);
762
+ const component = selectComponentByUid((0, import_store9.__getState)(), componentUid);
968
763
  if (component?.name) {
969
764
  return component.name;
970
765
  }
@@ -1131,85 +926,444 @@ function revertComponentInstanceSettings(settings) {
1131
926
  })
1132
927
  };
1133
928
  }
1134
- function revertAllOverridablesInContainer(container) {
1135
- (0, import_editor_elements2.getAllDescendants)(container).forEach((element) => {
1136
- if (element.model.get("widgetType") === COMPONENT_WIDGET_TYPE) {
1137
- revertComponentInstanceOverridesInElement(element);
1138
- } else {
1139
- revertElementSettings(element);
929
+ function revertAllOverridablesInContainer(container) {
930
+ (0, import_editor_elements2.getAllDescendants)(container).forEach((element) => {
931
+ if (element.model.get("widgetType") === COMPONENT_WIDGET_TYPE) {
932
+ revertComponentInstanceOverridesInElement(element);
933
+ } else {
934
+ revertElementSettings(element);
935
+ }
936
+ });
937
+ }
938
+ function revertComponentInstanceOverridesInElement(element) {
939
+ const settings = element.settings?.toJSON() ?? {};
940
+ const componentInstance = componentInstancePropTypeUtil.extract(settings.component_instance);
941
+ const overrides = componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides);
942
+ if (!overrides?.length) {
943
+ return;
944
+ }
945
+ const revertedOverrides = revertComponentInstanceOverrides(overrides);
946
+ const updatedSetting = componentInstancePropTypeUtil.create({
947
+ ...componentInstance,
948
+ overrides: componentInstanceOverridesPropTypeUtil.create(revertedOverrides)
949
+ });
950
+ (0, import_editor_elements2.updateElementSettings)({
951
+ id: element.id,
952
+ props: { component_instance: updatedSetting },
953
+ withHistory: false
954
+ });
955
+ }
956
+ function revertElementSettings(element) {
957
+ const settings = element.settings?.toJSON() ?? {};
958
+ const { hasChanges, settings: revertedSettings } = revertOverridablePropsFromSettings(settings);
959
+ if (!hasChanges) {
960
+ return;
961
+ }
962
+ (0, import_editor_elements2.updateElementSettings)({
963
+ id: element.id,
964
+ props: revertedSettings,
965
+ withHistory: false
966
+ });
967
+ }
968
+
969
+ // src/store/utils/groups-transformers.ts
970
+ var import_utils = require("@elementor/utils");
971
+ var import_i18n2 = require("@wordpress/i18n");
972
+ function removePropFromAllGroups(groups, propKey) {
973
+ return {
974
+ ...groups,
975
+ items: Object.fromEntries(
976
+ Object.entries(groups.items).map(([groupId, group]) => [
977
+ groupId,
978
+ {
979
+ ...group,
980
+ props: group.props.filter((p) => p !== propKey)
981
+ }
982
+ ])
983
+ )
984
+ };
985
+ }
986
+ function addPropToGroup(groups, groupId, propKey) {
987
+ const group = groups.items[groupId];
988
+ if (!group) {
989
+ return groups;
990
+ }
991
+ if (group.props.includes(propKey)) {
992
+ return groups;
993
+ }
994
+ return {
995
+ ...groups,
996
+ items: {
997
+ ...groups.items,
998
+ [groupId]: {
999
+ ...group,
1000
+ props: [...group.props, propKey]
1001
+ }
1002
+ }
1003
+ };
1004
+ }
1005
+ function movePropBetweenGroups(groups, propKey, fromGroupId, toGroupId) {
1006
+ if (fromGroupId === toGroupId) {
1007
+ return groups;
1008
+ }
1009
+ const withoutProp = removePropFromGroup(groups, fromGroupId, propKey);
1010
+ return addPropToGroup(withoutProp, toGroupId, propKey);
1011
+ }
1012
+ function removePropFromGroup(groups, groupId, propKey) {
1013
+ const group = groups.items[groupId];
1014
+ if (!group) {
1015
+ return groups;
1016
+ }
1017
+ return {
1018
+ ...groups,
1019
+ items: {
1020
+ ...groups.items,
1021
+ [groupId]: {
1022
+ ...group,
1023
+ props: group.props.filter((p) => p !== propKey)
1024
+ }
1025
+ }
1026
+ };
1027
+ }
1028
+ function resolveOrCreateGroup(groups, requestedGroupId) {
1029
+ if (requestedGroupId && groups.items[requestedGroupId]) {
1030
+ return { groups, groupId: requestedGroupId };
1031
+ }
1032
+ if (!requestedGroupId && groups.order.length > 0) {
1033
+ return { groups, groupId: groups.order[0] };
1034
+ }
1035
+ return createGroup(groups, requestedGroupId);
1036
+ }
1037
+ function createGroup(groups, groupId, label) {
1038
+ const newGroupId = groupId || (0, import_utils.generateUniqueId)("group");
1039
+ const newLabel = label || (0, import_i18n2.__)("Default", "elementor");
1040
+ return {
1041
+ groups: {
1042
+ ...groups,
1043
+ items: {
1044
+ ...groups.items,
1045
+ [newGroupId]: {
1046
+ id: newGroupId,
1047
+ label: newLabel,
1048
+ props: []
1049
+ }
1050
+ },
1051
+ order: [...groups.order, newGroupId]
1052
+ },
1053
+ groupId: newGroupId
1054
+ };
1055
+ }
1056
+ function removePropsFromState(overridableProps, propsToRemove) {
1057
+ const overrideKeysToRemove = propsToRemove.map((prop) => prop.overrideKey);
1058
+ const remainingProps = Object.fromEntries(
1059
+ Object.entries(overridableProps.props).filter(([, prop]) => !propsToRemove.includes(prop))
1060
+ );
1061
+ const updatedGroupItems = Object.fromEntries(
1062
+ Object.entries(overridableProps.groups.items).map(
1063
+ ([groupId, group]) => [
1064
+ groupId,
1065
+ {
1066
+ ...group,
1067
+ props: group.props.filter((prop) => !overrideKeysToRemove.includes(prop))
1068
+ }
1069
+ ]
1070
+ )
1071
+ );
1072
+ return {
1073
+ props: remainingProps,
1074
+ groups: {
1075
+ items: updatedGroupItems,
1076
+ order: overridableProps.groups.order.filter((groupId) => !overrideKeysToRemove.includes(groupId))
1077
+ }
1078
+ };
1079
+ }
1080
+ function ensureGroupInOrder(groups, groupId) {
1081
+ if (groups.order.includes(groupId)) {
1082
+ return groups;
1083
+ }
1084
+ return {
1085
+ ...groups,
1086
+ order: [...groups.order, groupId]
1087
+ };
1088
+ }
1089
+ function deleteGroup(groups, groupId) {
1090
+ const { [groupId]: removed, ...remainingItems } = groups.items;
1091
+ return {
1092
+ items: remainingItems,
1093
+ order: groups.order.filter((id2) => id2 !== groupId)
1094
+ };
1095
+ }
1096
+ function renameGroup(groups, groupId, newLabel) {
1097
+ const group = groups.items[groupId];
1098
+ if (!group) {
1099
+ return groups;
1100
+ }
1101
+ return {
1102
+ ...groups,
1103
+ items: {
1104
+ ...groups.items,
1105
+ [groupId]: {
1106
+ ...group,
1107
+ label: newLabel
1108
+ }
1109
+ }
1110
+ };
1111
+ }
1112
+
1113
+ // src/store/actions/delete-overridable-prop.ts
1114
+ function deleteOverridableProp({ componentId, propKey, source }) {
1115
+ const overridableProps = selectOverridableProps((0, import_store11.__getState)(), componentId);
1116
+ if (!overridableProps) {
1117
+ return;
1118
+ }
1119
+ const prop = overridableProps.props[propKey];
1120
+ if (!prop) {
1121
+ return;
1122
+ }
1123
+ revertElementOverridableSetting(prop.elementId, prop.propKey, prop.originValue, propKey);
1124
+ const { [propKey]: removedProp, ...remainingProps } = overridableProps.props;
1125
+ const updatedGroups = removePropFromAllGroups(overridableProps.groups, propKey);
1126
+ (0, import_store11.__dispatch)(
1127
+ slice.actions.setOverridableProps({
1128
+ componentId,
1129
+ overridableProps: {
1130
+ ...overridableProps,
1131
+ props: remainingProps,
1132
+ groups: updatedGroups
1133
+ }
1134
+ })
1135
+ );
1136
+ const currentComponent = selectCurrentComponent((0, import_store11.__getState)());
1137
+ trackComponentEvent({
1138
+ action: "propertyRemoved",
1139
+ source,
1140
+ component_uid: currentComponent?.uid,
1141
+ property_id: removedProp.overrideKey,
1142
+ property_path: removedProp.propKey,
1143
+ property_name: removedProp.label,
1144
+ element_type: removedProp.widgetType ?? removedProp.elType
1145
+ });
1146
+ }
1147
+
1148
+ // src/store/actions/update-component-sanitized-attribute.ts
1149
+ var import_store13 = require("@elementor/store");
1150
+ function updateComponentSanitizedAttribute(componentId, attribute) {
1151
+ (0, import_store13.__dispatch)(slice.actions.updateComponentSanitizedAttribute({ componentId, attribute }));
1152
+ }
1153
+
1154
+ // src/utils/filter-valid-overridable-props.ts
1155
+ var import_editor_elements3 = require("@elementor/editor-elements");
1156
+
1157
+ // src/components/overridable-props/utils/get-overridable-prop.ts
1158
+ var import_store15 = require("@elementor/store");
1159
+ function getOverridableProp({
1160
+ componentId,
1161
+ overrideKey
1162
+ }) {
1163
+ const overridableProps = selectOverridableProps((0, import_store15.__getState)(), componentId);
1164
+ if (!overridableProps) {
1165
+ return void 0;
1166
+ }
1167
+ return overridableProps.props[overrideKey];
1168
+ }
1169
+
1170
+ // src/utils/overridable-props-utils.ts
1171
+ function getMatchingOverride(overrides, overrideKey) {
1172
+ return overrides?.find((override) => {
1173
+ const overridableValue = componentOverridablePropTypeUtil.extract(override);
1174
+ if (overridableValue) {
1175
+ const overrideValue = componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value);
1176
+ return overrideValue?.override_key === overrideKey;
1177
+ }
1178
+ return override.value.override_key === overrideKey;
1179
+ }) ?? null;
1180
+ }
1181
+ function extractInnerOverrideInfo(override) {
1182
+ if (!override) {
1183
+ return null;
1184
+ }
1185
+ const overridableValue = componentOverridablePropTypeUtil.extract(override);
1186
+ const innerOverride = overridableValue ? componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value) : componentInstanceOverridePropTypeUtil.extract(override);
1187
+ if (!innerOverride) {
1188
+ return null;
1189
+ }
1190
+ const {
1191
+ schema_source: schemaSource,
1192
+ override_key: innerOverrideKey,
1193
+ override_value: overrideValue
1194
+ } = innerOverride;
1195
+ const componentId = schemaSource?.id;
1196
+ if (!componentId || !innerOverrideKey) {
1197
+ return null;
1198
+ }
1199
+ return { componentId, innerOverrideKey, overrideValue };
1200
+ }
1201
+
1202
+ // src/utils/filter-valid-overridable-props.ts
1203
+ function filterValidOverridableProps(overridableProps) {
1204
+ const validProps = {};
1205
+ for (const [key, prop] of Object.entries(overridableProps.props)) {
1206
+ if (isExposedPropValid(prop)) {
1207
+ validProps[key] = prop;
1208
+ }
1209
+ }
1210
+ const validPropKeys = new Set(Object.keys(validProps));
1211
+ const filteredGroups = {
1212
+ items: Object.fromEntries(
1213
+ Object.entries(overridableProps.groups.items).map(([groupId, group]) => [
1214
+ groupId,
1215
+ { ...group, props: group.props.filter((propKey) => validPropKeys.has(propKey)) }
1216
+ ])
1217
+ ),
1218
+ order: overridableProps.groups.order
1219
+ };
1220
+ return { props: validProps, groups: filteredGroups };
1221
+ }
1222
+ function isExposedPropValid(prop) {
1223
+ if (!prop.originPropFields) {
1224
+ return true;
1225
+ }
1226
+ const setting = (0, import_editor_elements3.getElementSetting)(prop.elementId, "component_instance");
1227
+ const componentInstance = componentInstancePropTypeUtil.extract(setting);
1228
+ if (!componentInstance?.component_id?.value) {
1229
+ return false;
1230
+ }
1231
+ const overrides = componentInstanceOverridesPropTypeUtil.extract(componentInstance.overrides) ?? void 0;
1232
+ const matchingOverride = findOverrideByOuterKey(overrides, prop.overrideKey);
1233
+ const innerOverrideInfo = extractInnerOverrideInfo(matchingOverride);
1234
+ if (!innerOverrideInfo) {
1235
+ return false;
1236
+ }
1237
+ const { componentId, innerOverrideKey } = innerOverrideInfo;
1238
+ const innerOverridableProp = getOverridableProp({ componentId, overrideKey: innerOverrideKey });
1239
+ if (!innerOverridableProp) {
1240
+ return false;
1241
+ }
1242
+ return isExposedPropValid(innerOverridableProp);
1243
+ }
1244
+ function findOverrideByOuterKey(overrides, outerKey) {
1245
+ if (!overrides) {
1246
+ return null;
1247
+ }
1248
+ return overrides.find((override) => {
1249
+ const overridableValue = componentOverridablePropTypeUtil.extract(override);
1250
+ if (overridableValue) {
1251
+ return overridableValue.override_key === outerKey;
1140
1252
  }
1141
- });
1253
+ return override.value.override_key === outerKey;
1254
+ }) ?? null;
1142
1255
  }
1143
- function revertComponentInstanceOverridesInElement(element) {
1144
- const settings = element.settings?.toJSON() ?? {};
1145
- const componentInstance = componentInstancePropTypeUtil.extract(settings.component_instance);
1146
- const overrides = componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides);
1147
- if (!overrides?.length) {
1148
- return;
1256
+
1257
+ // src/hooks/use-sanitize-overridable-props.ts
1258
+ function useSanitizeOverridableProps(componentId) {
1259
+ const overridableProps = useOverridableProps(componentId);
1260
+ const isSanitized = useIsSanitizedComponent(componentId, "overridableProps");
1261
+ if (!overridableProps || !componentId) {
1262
+ return void 0;
1149
1263
  }
1150
- const revertedOverrides = revertComponentInstanceOverrides(overrides);
1151
- const updatedSetting = componentInstancePropTypeUtil.create({
1152
- ...componentInstance,
1153
- overrides: componentInstanceOverridesPropTypeUtil.create(revertedOverrides)
1154
- });
1155
- (0, import_editor_elements2.updateElementSettings)({
1156
- id: element.id,
1157
- props: { component_instance: updatedSetting },
1158
- withHistory: false
1159
- });
1160
- }
1161
- function revertElementSettings(element) {
1162
- const settings = element.settings?.toJSON() ?? {};
1163
- const { hasChanges, settings: revertedSettings } = revertOverridablePropsFromSettings(settings);
1164
- if (!hasChanges) {
1165
- return;
1264
+ if (isSanitized) {
1265
+ return overridableProps;
1166
1266
  }
1167
- (0, import_editor_elements2.updateElementSettings)({
1168
- id: element.id,
1169
- props: revertedSettings,
1170
- withHistory: false
1267
+ const filteredOverridableProps = filterValidOverridableProps(overridableProps);
1268
+ const originalPropsArray = Object.entries(overridableProps.props ?? {});
1269
+ const propsToDelete = originalPropsArray.filter(([key]) => !filteredOverridableProps.props[key]);
1270
+ propsToDelete.forEach(([key]) => {
1271
+ deleteOverridableProp({ componentId, propKey: key, source: "system" });
1171
1272
  });
1273
+ updateComponentSanitizedAttribute(componentId, "overridableProps");
1274
+ return filteredOverridableProps;
1172
1275
  }
1173
1276
 
1174
- // src/store/actions/delete-overridable-prop.ts
1175
- function deleteOverridableProp({ componentId, propKey, source }) {
1176
- const overridableProps = selectOverridableProps((0, import_store15.__getState)(), componentId);
1277
+ // src/components/component-properties-panel/component-properties-panel.tsx
1278
+ var React8 = __toESM(require("react"));
1279
+ var import_editor_editing_panel = require("@elementor/editor-editing-panel");
1280
+ var import_editor_elements5 = require("@elementor/editor-elements");
1281
+ var import_editor_panels2 = require("@elementor/editor-panels");
1282
+ var import_editor_ui5 = require("@elementor/editor-ui");
1283
+ var import_ui8 = require("@elementor/ui");
1284
+ var import_i18n11 = require("@wordpress/i18n");
1285
+
1286
+ // src/components/component-properties-panel/component-properties-panel-content.tsx
1287
+ var React7 = __toESM(require("react"));
1288
+ var import_react5 = require("react");
1289
+ var import_editor_documents6 = require("@elementor/editor-documents");
1290
+ var import_editor_panels = require("@elementor/editor-panels");
1291
+ var import_icons5 = require("@elementor/icons");
1292
+ var import_ui7 = require("@elementor/ui");
1293
+ var import_utils2 = require("@elementor/utils");
1294
+ var import_i18n10 = require("@wordpress/i18n");
1295
+
1296
+ // src/store/actions/add-overridable-group.ts
1297
+ var import_store18 = require("@elementor/store");
1298
+ function addOverridableGroup({
1299
+ componentId,
1300
+ groupId,
1301
+ label,
1302
+ source
1303
+ }) {
1304
+ const currentComponent = selectCurrentComponent((0, import_store18.__getState)());
1305
+ const overridableProps = selectOverridableProps((0, import_store18.__getState)(), componentId);
1177
1306
  if (!overridableProps) {
1178
1307
  return;
1179
1308
  }
1180
- const prop = overridableProps.props[propKey];
1181
- if (!prop) {
1182
- return;
1183
- }
1184
- revertElementOverridableSetting(prop.elementId, prop.propKey, prop.originValue, propKey);
1185
- const { [propKey]: removedProp, ...remainingProps } = overridableProps.props;
1186
- const updatedGroups = removePropFromAllGroups(overridableProps.groups, propKey);
1187
- (0, import_store15.__dispatch)(
1309
+ const newGroup = {
1310
+ id: groupId,
1311
+ label,
1312
+ props: []
1313
+ };
1314
+ (0, import_store18.__dispatch)(
1188
1315
  slice.actions.setOverridableProps({
1189
1316
  componentId,
1190
1317
  overridableProps: {
1191
1318
  ...overridableProps,
1192
- props: remainingProps,
1193
- groups: updatedGroups
1319
+ groups: {
1320
+ ...overridableProps.groups,
1321
+ items: {
1322
+ ...overridableProps.groups.items,
1323
+ [groupId]: newGroup
1324
+ },
1325
+ order: [groupId, ...overridableProps.groups.order]
1326
+ }
1194
1327
  }
1195
1328
  })
1196
1329
  );
1197
- const currentComponent = selectCurrentComponent((0, import_store15.__getState)());
1198
1330
  trackComponentEvent({
1199
- action: "propertyRemoved",
1331
+ action: "propertiesGroupCreated",
1200
1332
  source,
1201
1333
  component_uid: currentComponent?.uid,
1202
- property_id: removedProp.overrideKey,
1203
- property_path: removedProp.propKey,
1204
- property_name: removedProp.label,
1205
- element_type: removedProp.widgetType ?? removedProp.elType
1334
+ group_name: label
1206
1335
  });
1336
+ return newGroup;
1337
+ }
1338
+
1339
+ // src/store/actions/delete-overridable-group.ts
1340
+ var import_store20 = require("@elementor/store");
1341
+ function deleteOverridableGroup({ componentId, groupId }) {
1342
+ const overridableProps = selectOverridableProps((0, import_store20.__getState)(), componentId);
1343
+ if (!overridableProps) {
1344
+ return false;
1345
+ }
1346
+ const group = overridableProps.groups.items[groupId];
1347
+ if (!group || group.props.length > 0) {
1348
+ return false;
1349
+ }
1350
+ const updatedGroups = deleteGroup(overridableProps.groups, groupId);
1351
+ (0, import_store20.__dispatch)(
1352
+ slice.actions.setOverridableProps({
1353
+ componentId,
1354
+ overridableProps: {
1355
+ ...overridableProps,
1356
+ groups: updatedGroups
1357
+ }
1358
+ })
1359
+ );
1360
+ return true;
1207
1361
  }
1208
1362
 
1209
1363
  // src/store/actions/reorder-group-props.ts
1210
- var import_store17 = require("@elementor/store");
1364
+ var import_store22 = require("@elementor/store");
1211
1365
  function reorderGroupProps({ componentId, groupId, newPropsOrder }) {
1212
- const overridableProps = selectOverridableProps((0, import_store17.__getState)(), componentId);
1366
+ const overridableProps = selectOverridableProps((0, import_store22.__getState)(), componentId);
1213
1367
  if (!overridableProps) {
1214
1368
  return;
1215
1369
  }
@@ -1217,7 +1371,7 @@ function reorderGroupProps({ componentId, groupId, newPropsOrder }) {
1217
1371
  if (!group) {
1218
1372
  return;
1219
1373
  }
1220
- (0, import_store17.__dispatch)(
1374
+ (0, import_store22.__dispatch)(
1221
1375
  slice.actions.setOverridableProps({
1222
1376
  componentId,
1223
1377
  overridableProps: {
@@ -1238,13 +1392,13 @@ function reorderGroupProps({ componentId, groupId, newPropsOrder }) {
1238
1392
  }
1239
1393
 
1240
1394
  // src/store/actions/reorder-overridable-groups.ts
1241
- var import_store19 = require("@elementor/store");
1395
+ var import_store24 = require("@elementor/store");
1242
1396
  function reorderOverridableGroups({ componentId, newOrder }) {
1243
- const overridableProps = selectOverridableProps((0, import_store19.__getState)(), componentId);
1397
+ const overridableProps = selectOverridableProps((0, import_store24.__getState)(), componentId);
1244
1398
  if (!overridableProps) {
1245
1399
  return;
1246
1400
  }
1247
- (0, import_store19.__dispatch)(
1401
+ (0, import_store24.__dispatch)(
1248
1402
  slice.actions.setOverridableProps({
1249
1403
  componentId,
1250
1404
  overridableProps: {
@@ -1259,14 +1413,14 @@ function reorderOverridableGroups({ componentId, newOrder }) {
1259
1413
  }
1260
1414
 
1261
1415
  // src/store/actions/update-overridable-prop-params.ts
1262
- var import_store21 = require("@elementor/store");
1416
+ var import_store26 = require("@elementor/store");
1263
1417
  function updateOverridablePropParams({
1264
1418
  componentId,
1265
1419
  overrideKey,
1266
1420
  label,
1267
1421
  groupId
1268
1422
  }) {
1269
- const overridableProps = selectOverridableProps((0, import_store21.__getState)(), componentId);
1423
+ const overridableProps = selectOverridableProps((0, import_store26.__getState)(), componentId);
1270
1424
  if (!overridableProps) {
1271
1425
  return;
1272
1426
  }
@@ -1282,7 +1436,7 @@ function updateOverridablePropParams({
1282
1436
  groupId: newGroupId
1283
1437
  };
1284
1438
  const updatedGroups = movePropBetweenGroups(overridableProps.groups, overrideKey, oldGroupId, newGroupId);
1285
- (0, import_store21.__dispatch)(
1439
+ (0, import_store26.__dispatch)(
1286
1440
  slice.actions.setOverridableProps({
1287
1441
  componentId,
1288
1442
  overridableProps: {
@@ -1298,17 +1452,6 @@ function updateOverridablePropParams({
1298
1452
  return updatedProp;
1299
1453
  }
1300
1454
 
1301
- // src/components/component-panel-header/use-overridable-props.ts
1302
- var import_store23 = require("@elementor/store");
1303
- function useOverridableProps2(componentId) {
1304
- return (0, import_store23.__useSelector)((state) => {
1305
- if (!componentId) {
1306
- return void 0;
1307
- }
1308
- return selectOverridableProps(state, componentId);
1309
- });
1310
- }
1311
-
1312
1455
  // src/components/component-properties-panel/properties-empty-state.tsx
1313
1456
  var React2 = __toESM(require("react"));
1314
1457
  var import_react2 = require("react");
@@ -1418,7 +1561,7 @@ var import_i18n7 = require("@wordpress/i18n");
1418
1561
 
1419
1562
  // src/components/component-properties-panel/property-item.tsx
1420
1563
  var React5 = __toESM(require("react"));
1421
- var import_editor_elements3 = require("@elementor/editor-elements");
1564
+ var import_editor_elements4 = require("@elementor/editor-elements");
1422
1565
  var import_icons3 = require("@elementor/icons");
1423
1566
  var import_ui5 = require("@elementor/ui");
1424
1567
 
@@ -1691,7 +1834,7 @@ function PropertyItem({
1691
1834
  }
1692
1835
  function getElementIcon(prop) {
1693
1836
  const elType = prop.elType === "widget" ? prop.widgetType : prop.elType;
1694
- const widgetsCache = (0, import_editor_elements3.getWidgetsCache)();
1837
+ const widgetsCache = (0, import_editor_elements4.getWidgetsCache)();
1695
1838
  if (!widgetsCache) {
1696
1839
  return "eicon-apps";
1697
1840
  }
@@ -1850,9 +1993,9 @@ var import_editor_ui4 = require("@elementor/editor-ui");
1850
1993
  var import_i18n9 = require("@wordpress/i18n");
1851
1994
 
1852
1995
  // src/store/actions/rename-overridable-group.ts
1853
- var import_store25 = require("@elementor/store");
1996
+ var import_store28 = require("@elementor/store");
1854
1997
  function renameOverridableGroup({ componentId, groupId, label }) {
1855
- const overridableProps = selectOverridableProps((0, import_store25.__getState)(), componentId);
1998
+ const overridableProps = selectOverridableProps((0, import_store28.__getState)(), componentId);
1856
1999
  if (!overridableProps) {
1857
2000
  return false;
1858
2001
  }
@@ -1861,7 +2004,7 @@ function renameOverridableGroup({ componentId, groupId, label }) {
1861
2004
  return false;
1862
2005
  }
1863
2006
  const updatedGroups = renameGroup(overridableProps.groups, groupId, label);
1864
- (0, import_store25.__dispatch)(
2007
+ (0, import_store28.__dispatch)(
1865
2008
  slice.actions.setOverridableProps({
1866
2009
  componentId,
1867
2010
  overridableProps: {
@@ -1895,7 +2038,7 @@ function validateGroupLabel(label, existingGroups) {
1895
2038
  function useCurrentEditableItem() {
1896
2039
  const [editingGroupId, setEditingGroupId] = (0, import_react4.useState)(null);
1897
2040
  const currentComponentId = useCurrentComponentId();
1898
- const overridableProps = useOverridableProps2(currentComponentId);
2041
+ const overridableProps = useOverridableProps(currentComponentId);
1899
2042
  const allGroupsRecord = overridableProps?.groups?.items ?? {};
1900
2043
  const currentGroup = editingGroupId ? allGroupsRecord[editingGroupId] : null;
1901
2044
  const validateLabel = (newLabel) => {
@@ -1958,7 +2101,7 @@ function generateUniqueLabel(groups) {
1958
2101
  // src/components/component-properties-panel/component-properties-panel-content.tsx
1959
2102
  function ComponentPropertiesPanelContent({ onClose }) {
1960
2103
  const currentComponentId = useCurrentComponentId();
1961
- const overridableProps = useOverridableProps2(currentComponentId);
2104
+ const overridableProps = useSanitizeOverridableProps(currentComponentId);
1962
2105
  const [isAddingGroup, setIsAddingGroup] = (0, import_react5.useState)(false);
1963
2106
  const introductionRef = (0, import_react5.useRef)(null);
1964
2107
  const groupLabelEditable = useCurrentEditableItem();
@@ -2062,7 +2205,7 @@ var { panel, usePanelActions } = (0, import_editor_panels2.__createPanel)({
2062
2205
  component: ComponentPropertiesPanel
2063
2206
  });
2064
2207
  function ComponentPropertiesPanel() {
2065
- const { element, elementType } = (0, import_editor_elements4.useSelectedElement)();
2208
+ const { element, elementType } = (0, import_editor_elements5.useSelectedElement)();
2066
2209
  const { close: closePanel } = usePanelActions();
2067
2210
  const { open: openEditingPanel } = (0, import_editor_editing_panel.usePanelActions)();
2068
2211
  if (!element || !elementType) {
@@ -2145,7 +2288,7 @@ var slideUp = import_ui9.keyframes`
2145
2288
  var MESSAGE_KEY = "components-properties-introduction";
2146
2289
  var ComponentPanelHeader = () => {
2147
2290
  const { id: currentComponentId, uid: componentUid } = useCurrentComponent() ?? { id: null, uid: null };
2148
- const overridableProps = useOverridableProps2(currentComponentId);
2291
+ const overridableProps = useSanitizeOverridableProps(currentComponentId);
2149
2292
  const onBack = useNavigateBack();
2150
2293
  const componentName = getComponentName();
2151
2294
  const [isMessageSuppressed, suppressMessage] = (0, import_editor_current_user.useSuppressedMessage)(MESSAGE_KEY);
@@ -2194,7 +2337,7 @@ var ComponentPanelHeader = () => {
2194
2337
  ));
2195
2338
  };
2196
2339
  function getComponentName() {
2197
- const state = (0, import_store29.__getState)();
2340
+ const state = (0, import_store32.__getState)();
2198
2341
  const path = state[SLICE_NAME].path;
2199
2342
  const { instanceTitle } = path.at(-1) ?? {};
2200
2343
  if (instanceTitle) {
@@ -2210,10 +2353,10 @@ var React18 = __toESM(require("react"));
2210
2353
  var import_editor_ui10 = require("@elementor/editor-ui");
2211
2354
 
2212
2355
  // src/hooks/use-components.ts
2213
- var import_store31 = require("@elementor/store");
2356
+ var import_store34 = require("@elementor/store");
2214
2357
  var useComponents = () => {
2215
- const components = (0, import_store31.__useSelector)(selectComponents);
2216
- const isLoading = (0, import_store31.__useSelector)(selectLoadIsPending);
2358
+ const components = (0, import_store34.__useSelector)(selectComponents);
2359
+ const isLoading = (0, import_store34.__useSelector)(selectLoadIsPending);
2217
2360
  return { components, isLoading };
2218
2361
  };
2219
2362
 
@@ -2296,11 +2439,11 @@ var useComponentsPermissions = () => {
2296
2439
 
2297
2440
  // src/store/actions/rename-component.ts
2298
2441
  var import_editor_documents8 = require("@elementor/editor-documents");
2299
- var import_editor_elements5 = require("@elementor/editor-elements");
2300
- var import_store33 = require("@elementor/store");
2442
+ var import_editor_elements6 = require("@elementor/editor-elements");
2443
+ var import_store36 = require("@elementor/store");
2301
2444
  var TITLE_EXTERNAL_CHANGE_COMMAND = "title_external_change";
2302
2445
  var renameComponent = (componentUid, newName) => {
2303
- (0, import_store33.__dispatch)(slice.actions.rename({ componentUid, name: newName }));
2446
+ (0, import_store36.__dispatch)(slice.actions.rename({ componentUid, name: newName }));
2304
2447
  (0, import_editor_documents8.setDocumentModifiedStatus)(true);
2305
2448
  refreshComponentInstanceTitles(componentUid);
2306
2449
  };
@@ -2319,7 +2462,7 @@ function getDocumentContainer() {
2319
2462
  return documentsManager?.getCurrent()?.container;
2320
2463
  }
2321
2464
  function findComponentInstancesByUid(documentContainer, componentUid) {
2322
- const allDescendants = (0, import_editor_elements5.getAllDescendants)(documentContainer);
2465
+ const allDescendants = (0, import_editor_elements6.getAllDescendants)(documentContainer);
2323
2466
  return allDescendants.filter((element) => {
2324
2467
  const widgetType = element.model.get("widgetType");
2325
2468
  const editorSettings = element.model.get("editor_settings");
@@ -2332,7 +2475,7 @@ function findComponentInstancesByUid(documentContainer, componentUid) {
2332
2475
  var React14 = __toESM(require("react"));
2333
2476
  var import_react8 = require("react");
2334
2477
  var import_editor_canvas5 = require("@elementor/editor-canvas");
2335
- var import_editor_elements8 = require("@elementor/editor-elements");
2478
+ var import_editor_elements9 = require("@elementor/editor-elements");
2336
2479
  var import_editor_ui8 = require("@elementor/editor-ui");
2337
2480
  var import_icons9 = require("@elementor/icons");
2338
2481
  var import_ui12 = require("@elementor/ui");
@@ -2341,7 +2484,7 @@ var import_i18n18 = require("@wordpress/i18n");
2341
2484
  // src/store/actions/archive-component.ts
2342
2485
  var import_editor_documents9 = require("@elementor/editor-documents");
2343
2486
  var import_editor_notifications = require("@elementor/editor-notifications");
2344
- var import_store35 = require("@elementor/store");
2487
+ var import_store38 = require("@elementor/store");
2345
2488
  var import_i18n15 = require("@wordpress/i18n");
2346
2489
  var successNotification = (componentId, componentName) => ({
2347
2490
  type: "success",
@@ -2350,7 +2493,7 @@ var successNotification = (componentId, componentName) => ({
2350
2493
  id: `success-archived-components-notification-${componentId}`
2351
2494
  });
2352
2495
  var archiveComponent = (componentId, componentName) => {
2353
- (0, import_store35.__dispatch)(slice.actions.archive(componentId));
2496
+ (0, import_store38.__dispatch)(slice.actions.archive(componentId));
2354
2497
  (0, import_editor_documents9.setDocumentModifiedStatus)(true);
2355
2498
  (0, import_editor_notifications.notify)(successNotification(componentId, componentName));
2356
2499
  };
@@ -2402,7 +2545,7 @@ async function getDocumentsMap(ids, cache) {
2402
2545
  }
2403
2546
 
2404
2547
  // src/store/actions/load-components-overridable-props.ts
2405
- var import_store37 = require("@elementor/store");
2548
+ var import_store40 = require("@elementor/store");
2406
2549
  function loadComponentsOverridableProps(componentIds) {
2407
2550
  if (!componentIds.length) {
2408
2551
  return;
@@ -2410,7 +2553,7 @@ function loadComponentsOverridableProps(componentIds) {
2410
2553
  return Promise.all(componentIds.map(loadComponentOverrides));
2411
2554
  }
2412
2555
  async function loadComponentOverrides(componentId) {
2413
- const isOverridablePropsLoaded = selectIsOverridablePropsLoaded((0, import_store37.__getState)(), componentId);
2556
+ const isOverridablePropsLoaded = selectIsOverridablePropsLoaded((0, import_store40.__getState)(), componentId);
2414
2557
  if (isOverridablePropsLoaded) {
2415
2558
  return;
2416
2559
  }
@@ -2418,7 +2561,7 @@ async function loadComponentOverrides(componentId) {
2418
2561
  if (!overridableProps) {
2419
2562
  return;
2420
2563
  }
2421
- (0, import_store37.__dispatch)(
2564
+ (0, import_store40.__dispatch)(
2422
2565
  slice.actions.setOverridableProps({
2423
2566
  componentId,
2424
2567
  overridableProps
@@ -2427,12 +2570,12 @@ async function loadComponentOverrides(componentId) {
2427
2570
  }
2428
2571
 
2429
2572
  // src/store/actions/load-components-styles.ts
2430
- var import_store39 = require("@elementor/store");
2573
+ var import_store42 = require("@elementor/store");
2431
2574
  function loadComponentsStyles(documents) {
2432
2575
  if (!documents.size) {
2433
2576
  return;
2434
2577
  }
2435
- const knownComponents = selectStyles((0, import_store39.__getState)());
2578
+ const knownComponents = selectStyles((0, import_store42.__getState)());
2436
2579
  const unknownDocuments = new Map([...documents.entries()].filter(([id2]) => !knownComponents[id2]));
2437
2580
  if (!unknownDocuments.size) {
2438
2581
  return;
@@ -2443,7 +2586,7 @@ function addStyles(documents) {
2443
2586
  const styles = Object.fromEntries(
2444
2587
  [...documents.entries()].map(([id2, document]) => [id2, extractStylesFromDocument(document)])
2445
2588
  );
2446
- (0, import_store39.__dispatch)(slice.actions.addStyles(styles));
2589
+ (0, import_store42.__dispatch)(slice.actions.addStyles(styles));
2447
2590
  }
2448
2591
  function extractStylesFromDocument(document) {
2449
2592
  if (!document.elements?.length) {
@@ -2473,7 +2616,7 @@ function updateDocumentState(documents) {
2473
2616
  }
2474
2617
 
2475
2618
  // src/utils/component-name-validation.ts
2476
- var import_store41 = require("@elementor/store");
2619
+ var import_store44 = require("@elementor/store");
2477
2620
 
2478
2621
  // src/components/create-component-form/utils/component-form-schema.ts
2479
2622
  var import_schema5 = require("@elementor/schema");
@@ -2501,7 +2644,7 @@ var createSubmitComponentSchema = (existingNames) => {
2501
2644
 
2502
2645
  // src/utils/component-name-validation.ts
2503
2646
  function validateComponentName(label) {
2504
- const existingComponentTitles = selectComponents((0, import_store41.__getState)())?.map(({ name }) => name) ?? [];
2647
+ const existingComponentTitles = selectComponents((0, import_store44.__getState)())?.map(({ name }) => name) ?? [];
2505
2648
  const schema = createSubmitComponentSchema(existingComponentTitles);
2506
2649
  const result = schema.safeParse({ componentName: label.toLowerCase() });
2507
2650
  if (result.success) {
@@ -2519,9 +2662,9 @@ function validateComponentName(label) {
2519
2662
  }
2520
2663
 
2521
2664
  // src/utils/get-container-for-new-element.ts
2522
- var import_editor_elements6 = require("@elementor/editor-elements");
2665
+ var import_editor_elements7 = require("@elementor/editor-elements");
2523
2666
  var getContainerForNewElement = () => {
2524
- const currentDocumentContainer = (0, import_editor_elements6.getCurrentDocumentContainer)();
2667
+ const currentDocumentContainer = (0, import_editor_elements7.getCurrentDocumentContainer)();
2525
2668
  const selectedElement = getSelectedElementContainer();
2526
2669
  let container, options;
2527
2670
  if (selectedElement) {
@@ -2547,17 +2690,17 @@ var getContainerForNewElement = () => {
2547
2690
  return { container: container ?? currentDocumentContainer, options };
2548
2691
  };
2549
2692
  function getSelectedElementContainer() {
2550
- const selectedElements = (0, import_editor_elements6.getSelectedElements)();
2693
+ const selectedElements = (0, import_editor_elements7.getSelectedElements)();
2551
2694
  if (selectedElements.length !== 1) {
2552
2695
  return void 0;
2553
2696
  }
2554
- return (0, import_editor_elements6.getContainer)(selectedElements[0].id);
2697
+ return (0, import_editor_elements7.getContainer)(selectedElements[0].id);
2555
2698
  }
2556
2699
 
2557
2700
  // src/components/create-component-form/utils/replace-element-with-component.ts
2558
- var import_editor_elements7 = require("@elementor/editor-elements");
2701
+ var import_editor_elements8 = require("@elementor/editor-elements");
2559
2702
  var replaceElementWithComponent = async (element, component) => {
2560
- return await (0, import_editor_elements7.replaceElement)({
2703
+ return await (0, import_editor_elements8.replaceElement)({
2561
2704
  currentElement: element,
2562
2705
  newElement: createComponentModel2(component),
2563
2706
  withHistory: false
@@ -2746,7 +2889,7 @@ var addComponentToPage = (model) => {
2746
2889
  throw new Error(`Can't find container to drop new component instance at`);
2747
2890
  }
2748
2891
  loadComponentsAssets([model]);
2749
- (0, import_editor_elements8.dropElement)({
2892
+ (0, import_editor_elements9.dropElement)({
2750
2893
  containerId: container.id,
2751
2894
  model,
2752
2895
  options: { ...options, useHistory: false, scrollIntoView: true }
@@ -2984,25 +3127,25 @@ var OVERRIDABLE_PROP_REPLACEMENT_ID = "overridable-prop";
2984
3127
  // src/components/create-component-form/create-component-form.tsx
2985
3128
  var React19 = __toESM(require("react"));
2986
3129
  var import_react10 = require("react");
2987
- var import_editor_elements11 = require("@elementor/editor-elements");
3130
+ var import_editor_elements12 = require("@elementor/editor-elements");
2988
3131
  var import_editor_notifications3 = require("@elementor/editor-notifications");
2989
3132
  var import_editor_ui11 = require("@elementor/editor-ui");
2990
3133
  var import_icons11 = require("@elementor/icons");
2991
- var import_store47 = require("@elementor/store");
3134
+ var import_store50 = require("@elementor/store");
2992
3135
  var import_ui16 = require("@elementor/ui");
2993
3136
  var import_i18n23 = require("@wordpress/i18n");
2994
3137
 
2995
3138
  // src/prevent-non-atomic-nesting.ts
2996
3139
  var import_editor_canvas6 = require("@elementor/editor-canvas");
2997
- var import_editor_elements9 = require("@elementor/editor-elements");
3140
+ var import_editor_elements10 = require("@elementor/editor-elements");
2998
3141
  var import_editor_notifications2 = require("@elementor/editor-notifications");
2999
3142
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
3000
3143
  var import_i18n21 = require("@wordpress/i18n");
3001
3144
 
3002
3145
  // src/utils/is-editing-component.ts
3003
- var import_store43 = require("@elementor/store");
3146
+ var import_store46 = require("@elementor/store");
3004
3147
  function isEditingComponent() {
3005
- const state = (0, import_store43.__getStore)()?.getState();
3148
+ const state = (0, import_store46.__getStore)()?.getState();
3006
3149
  if (!state) {
3007
3150
  return false;
3008
3151
  }
@@ -3030,7 +3173,7 @@ function initNonAtomicNestingPrevention() {
3030
3173
  });
3031
3174
  }
3032
3175
  function isElementAtomic(elementType) {
3033
- return (0, import_editor_elements9.getElementType)(elementType) !== null;
3176
+ return (0, import_editor_elements10.getElementType)(elementType) !== null;
3034
3177
  }
3035
3178
  function blockNonAtomicCreate(args) {
3036
3179
  if (!isEditingComponent()) {
@@ -3056,7 +3199,7 @@ function blockNonAtomicMove(args) {
3056
3199
  if (!container) {
3057
3200
  return false;
3058
3201
  }
3059
- const allElements = (0, import_editor_elements9.getAllDescendants)(container);
3202
+ const allElements = (0, import_editor_elements10.getAllDescendants)(container);
3060
3203
  return allElements.some((element) => !(0, import_editor_canvas6.isAtomicWidget)(element));
3061
3204
  });
3062
3205
  if (hasNonAtomicElement) {
@@ -3111,9 +3254,9 @@ function findNonAtomicElementsInElement(element) {
3111
3254
  }
3112
3255
 
3113
3256
  // src/store/actions/create-unpublished-component.ts
3114
- var import_editor_elements10 = require("@elementor/editor-elements");
3257
+ var import_editor_elements11 = require("@elementor/editor-elements");
3115
3258
  var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
3116
- var import_store45 = require("@elementor/store");
3259
+ var import_store48 = require("@elementor/store");
3117
3260
  var import_utils4 = require("@elementor/utils");
3118
3261
  var import_i18n22 = require("@wordpress/i18n");
3119
3262
  async function createUnpublishedComponent({
@@ -3127,21 +3270,21 @@ async function createUnpublishedComponent({
3127
3270
  const generatedUid = uid ?? (0, import_utils4.generateUniqueId)("component");
3128
3271
  const componentBase = { uid: generatedUid, name };
3129
3272
  const elementDataWithOverridablesReverted = revertAllOverridablesInElementData(element);
3130
- const container = (0, import_editor_elements10.getContainer)(element.id);
3273
+ const container = (0, import_editor_elements11.getContainer)(element.id);
3131
3274
  const modelFromContainer = container?.model?.toJSON?.();
3132
3275
  const originalElement = {
3133
3276
  model: modelFromContainer ?? element,
3134
3277
  parentId: container?.parent?.id ?? "",
3135
3278
  index: container?.view?._index ?? 0
3136
3279
  };
3137
- (0, import_store45.__dispatch)(
3280
+ (0, import_store48.__dispatch)(
3138
3281
  slice.actions.addUnpublished({
3139
3282
  ...componentBase,
3140
3283
  elements: [elementDataWithOverridablesReverted],
3141
3284
  overridableProps
3142
3285
  })
3143
3286
  );
3144
- (0, import_store45.__dispatch)(slice.actions.addCreatedThisSession(generatedUid));
3287
+ (0, import_store48.__dispatch)(slice.actions.addCreatedThisSession(generatedUid));
3145
3288
  const componentInstance = await replaceElementWithComponent(element, componentBase);
3146
3289
  trackComponentEvent({
3147
3290
  action: "created",
@@ -3154,20 +3297,27 @@ async function createUnpublishedComponent({
3154
3297
  await (0, import_editor_v1_adapters4.__privateRunCommand)("document/save/auto");
3155
3298
  } catch (error) {
3156
3299
  restoreOriginalElement(originalElement, componentInstance.id);
3157
- (0, import_store45.__dispatch)(slice.actions.removeUnpublished(generatedUid));
3158
- (0, import_store45.__dispatch)(slice.actions.removeCreatedThisSession(generatedUid));
3300
+ (0, import_store48.__dispatch)(slice.actions.removeUnpublished(generatedUid));
3301
+ (0, import_store48.__dispatch)(slice.actions.removeCreatedThisSession(generatedUid));
3159
3302
  throw error;
3160
3303
  }
3161
3304
  return { uid: generatedUid, instanceId: componentInstance.id };
3162
3305
  }
3163
3306
  function restoreOriginalElement(originalElement, componentInstanceId) {
3164
- (0, import_editor_elements10.deleteElement)({ elementId: componentInstanceId, options: { useHistory: false } });
3307
+ const componentContainer = (0, import_editor_elements11.getContainer)(componentInstanceId);
3308
+ if (componentContainer) {
3309
+ (0, import_editor_elements11.deleteElement)({ container: componentContainer, options: { useHistory: false } });
3310
+ }
3311
+ const parentContainer = (0, import_editor_elements11.getContainer)(originalElement.parentId);
3312
+ if (!parentContainer) {
3313
+ return;
3314
+ }
3165
3315
  const clonedModel = structuredClone(originalElement.model);
3166
- (0, import_editor_elements10.createElements)({
3316
+ (0, import_editor_elements11.createElements)({
3167
3317
  title: (0, import_i18n22.__)("Restore Element", "elementor"),
3168
3318
  elements: [
3169
3319
  {
3170
- containerId: originalElement.parentId,
3320
+ container: parentContainer,
3171
3321
  model: clonedModel,
3172
3322
  options: { at: originalElement.index }
3173
3323
  }
@@ -3268,7 +3418,7 @@ function CreateComponentForm() {
3268
3418
  (0, import_editor_notifications3.notify)(notification);
3269
3419
  return;
3270
3420
  }
3271
- setElement({ element: event.detail.element, elementLabel: (0, import_editor_elements11.getElementLabel)(event.detail.element.id) });
3421
+ setElement({ element: event.detail.element, elementLabel: (0, import_editor_elements12.getElementLabel)(event.detail.element.id) });
3272
3422
  setAnchorPosition(event.detail.anchorPosition);
3273
3423
  eventData.current = getComponentEventData(event.detail.element, event.detail.options);
3274
3424
  trackComponentEvent({
@@ -3293,7 +3443,7 @@ function CreateComponentForm() {
3293
3443
  eventData: eventData.current,
3294
3444
  source: "user"
3295
3445
  });
3296
- const publishedComponentId = selectComponentByUid((0, import_store47.__getState)(), uid)?.id;
3446
+ const publishedComponentId = selectComponentByUid((0, import_store50.__getState)(), uid)?.id;
3297
3447
  if (publishedComponentId) {
3298
3448
  switchToComponent(publishedComponentId, instanceId);
3299
3449
  } else {
@@ -3441,22 +3591,28 @@ var React21 = __toESM(require("react"));
3441
3591
  var import_react13 = require("react");
3442
3592
  var import_editor_documents12 = require("@elementor/editor-documents");
3443
3593
  var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
3444
- var import_store51 = require("@elementor/store");
3594
+ var import_store56 = require("@elementor/store");
3445
3595
  var import_utils6 = require("@elementor/utils");
3446
3596
 
3597
+ // src/store/actions/reset-sanitized-components.ts
3598
+ var import_store52 = require("@elementor/store");
3599
+ function resetSanitizedComponents() {
3600
+ (0, import_store52.__dispatch)(slice.actions.resetSanitizedComponents());
3601
+ }
3602
+
3447
3603
  // src/store/actions/update-current-component.ts
3448
3604
  var import_editor_documents11 = require("@elementor/editor-documents");
3449
- var import_store49 = require("@elementor/store");
3605
+ var import_store54 = require("@elementor/store");
3450
3606
  function updateCurrentComponent({
3451
3607
  path,
3452
3608
  currentComponentId
3453
3609
  }) {
3454
- const dispatch20 = (0, import_store49.__getStore)()?.dispatch;
3455
- if (!dispatch20) {
3610
+ const dispatch22 = (0, import_store54.__getStore)()?.dispatch;
3611
+ if (!dispatch22) {
3456
3612
  return;
3457
3613
  }
3458
- dispatch20(slice.actions.setPath(path));
3459
- dispatch20(slice.actions.setCurrentComponentId(currentComponentId));
3614
+ dispatch22(slice.actions.setPath(path));
3615
+ dispatch22(slice.actions.setCurrentComponentId(currentComponentId));
3460
3616
  }
3461
3617
 
3462
3618
  // src/components/edit-component/component-modal.tsx
@@ -3647,7 +3803,7 @@ function EditComponent() {
3647
3803
  function useHandleDocumentSwitches() {
3648
3804
  const documentsManager = (0, import_editor_documents12.getV1DocumentsManager)();
3649
3805
  const currentComponentId = useCurrentComponentId();
3650
- const path = (0, import_store51.__useSelector)(selectPath);
3806
+ const path = (0, import_store56.__useSelector)(selectPath);
3651
3807
  (0, import_react13.useEffect)(() => {
3652
3808
  return (0, import_editor_v1_adapters6.__privateListenTo)((0, import_editor_v1_adapters6.commandEndEvent)("editor/documents/open"), () => {
3653
3809
  const nextDocument = documentsManager.getCurrent();
@@ -3657,6 +3813,7 @@ function useHandleDocumentSwitches() {
3657
3813
  if (currentComponentId) {
3658
3814
  apiClient.unlockComponent(currentComponentId);
3659
3815
  }
3816
+ resetSanitizedComponents();
3660
3817
  const isComponent2 = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;
3661
3818
  if (!isComponent2) {
3662
3819
  updateCurrentComponent({ path: [], currentComponentId: null });
@@ -3752,10 +3909,10 @@ var EditModeDialog = ({ lockedBy }) => {
3752
3909
  };
3753
3910
 
3754
3911
  // src/components/instance-editing-panel/instance-editing-panel.tsx
3755
- var React28 = __toESM(require("react"));
3912
+ var React29 = __toESM(require("react"));
3756
3913
  var import_editor_controls4 = require("@elementor/editor-controls");
3757
3914
  var import_editor_editing_panel5 = require("@elementor/editor-editing-panel");
3758
- var import_editor_elements16 = require("@elementor/editor-elements");
3915
+ var import_editor_elements17 = require("@elementor/editor-elements");
3759
3916
  var import_editor_panels4 = require("@elementor/editor-panels");
3760
3917
  var import_editor_ui14 = require("@elementor/editor-ui");
3761
3918
  var import_icons14 = require("@elementor/icons");
@@ -3764,15 +3921,26 @@ var import_i18n27 = require("@wordpress/i18n");
3764
3921
 
3765
3922
  // src/hooks/use-component-instance-settings.ts
3766
3923
  var import_editor_editing_panel2 = require("@elementor/editor-editing-panel");
3767
- var import_editor_elements12 = require("@elementor/editor-elements");
3924
+ var import_editor_elements13 = require("@elementor/editor-elements");
3768
3925
  function useComponentInstanceSettings() {
3769
3926
  const { element } = (0, import_editor_editing_panel2.useElement)();
3770
- const settings = (0, import_editor_elements12.useElementSetting)(element.id, "component_instance");
3927
+ const settings = (0, import_editor_elements13.useElementSetting)(element.id, "component_instance");
3771
3928
  return componentInstancePropTypeUtil.extract(settings);
3772
3929
  }
3773
3930
 
3774
- // src/components/instance-editing-panel/empty-state.tsx
3931
+ // src/provider/component-instance-context.tsx
3775
3932
  var React23 = __toESM(require("react"));
3933
+ var import_react14 = require("react");
3934
+ var ComponentInstanceContext = (0, import_react14.createContext)(null);
3935
+ function ComponentInstanceProvider({ children, ...props }) {
3936
+ return /* @__PURE__ */ React23.createElement(ComponentInstanceContext.Provider, { value: props }, children);
3937
+ }
3938
+ var useComponentId = () => (0, import_react14.useContext)(ComponentInstanceContext)?.componentId;
3939
+ var useComponentInstanceOverrides = () => (0, import_react14.useContext)(ComponentInstanceContext)?.overrides;
3940
+ var useComponentOverridableProps = () => (0, import_react14.useContext)(ComponentInstanceContext)?.overridableProps;
3941
+
3942
+ // src/components/instance-editing-panel/empty-state.tsx
3943
+ var React24 = __toESM(require("react"));
3776
3944
  var import_icons13 = require("@elementor/icons");
3777
3945
  var import_ui18 = require("@elementor/ui");
3778
3946
  var import_i18n26 = require("@wordpress/i18n");
@@ -3785,7 +3953,7 @@ var EmptyState2 = ({ onEditComponent }) => {
3785
3953
  "With your current role, you cannot edit this component. Contact an administrator to add properties.",
3786
3954
  "elementor"
3787
3955
  );
3788
- return /* @__PURE__ */ React23.createElement(
3956
+ return /* @__PURE__ */ React24.createElement(
3789
3957
  import_ui18.Stack,
3790
3958
  {
3791
3959
  alignItems: "center",
@@ -3795,31 +3963,31 @@ var EmptyState2 = ({ onEditComponent }) => {
3795
3963
  sx: { p: 2.5, pt: 8, pb: 5.5, mt: 1 },
3796
3964
  gap: 1.5
3797
3965
  },
3798
- /* @__PURE__ */ React23.createElement(import_icons13.ComponentPropListIcon, { fontSize: "large" }),
3799
- /* @__PURE__ */ React23.createElement(import_ui18.Typography, { align: "center", variant: "subtitle2" }, (0, import_i18n26.__)("No properties yet", "elementor")),
3800
- /* @__PURE__ */ React23.createElement(import_ui18.Typography, { align: "center", variant: "caption", maxWidth: "170px" }, message),
3801
- canEdit && /* @__PURE__ */ React23.createElement(import_ui18.Button, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React23.createElement(import_icons13.PencilIcon, { fontSize: "small" }), (0, import_i18n26.__)("Edit component", "elementor"))
3966
+ /* @__PURE__ */ React24.createElement(import_icons13.ComponentPropListIcon, { fontSize: "large" }),
3967
+ /* @__PURE__ */ React24.createElement(import_ui18.Typography, { align: "center", variant: "subtitle2" }, (0, import_i18n26.__)("No properties yet", "elementor")),
3968
+ /* @__PURE__ */ React24.createElement(import_ui18.Typography, { align: "center", variant: "caption", maxWidth: "170px" }, message),
3969
+ canEdit && /* @__PURE__ */ React24.createElement(import_ui18.Button, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React24.createElement(import_icons13.PencilIcon, { fontSize: "small" }), (0, import_i18n26.__)("Edit component", "elementor"))
3802
3970
  );
3803
3971
  };
3804
3972
 
3805
3973
  // src/components/instance-editing-panel/override-props-group.tsx
3806
- var React27 = __toESM(require("react"));
3807
- var import_react15 = require("react");
3974
+ var React28 = __toESM(require("react"));
3975
+ var import_react16 = require("react");
3808
3976
  var import_editor_editing_panel4 = require("@elementor/editor-editing-panel");
3809
3977
  var import_editor_ui13 = require("@elementor/editor-ui");
3810
3978
  var import_ui21 = require("@elementor/ui");
3811
3979
 
3812
3980
  // src/components/instance-editing-panel/override-prop-control.tsx
3813
- var React26 = __toESM(require("react"));
3981
+ var React27 = __toESM(require("react"));
3814
3982
  var import_editor_controls3 = require("@elementor/editor-controls");
3815
3983
  var import_editor_editing_panel3 = require("@elementor/editor-editing-panel");
3816
- var import_editor_elements15 = require("@elementor/editor-elements");
3984
+ var import_editor_elements16 = require("@elementor/editor-elements");
3817
3985
  var import_ui20 = require("@elementor/ui");
3818
3986
 
3819
3987
  // src/hooks/use-controls-by-widget-type.ts
3820
- var import_editor_elements13 = require("@elementor/editor-elements");
3988
+ var import_editor_elements14 = require("@elementor/editor-elements");
3821
3989
  function useControlsByWidgetType(type) {
3822
- const elementType = (0, import_editor_elements13.getElementType)(type);
3990
+ const elementType = (0, import_editor_elements14.getElementType)(type);
3823
3991
  if (!elementType) {
3824
3992
  return {};
3825
3993
  }
@@ -3848,17 +4016,17 @@ function getControlsByBind(controls) {
3848
4016
  }
3849
4017
 
3850
4018
  // src/provider/overridable-prop-context.tsx
3851
- var React24 = __toESM(require("react"));
3852
- var import_react14 = require("react");
3853
- var OverridablePropContext = (0, import_react14.createContext)(null);
4019
+ var React25 = __toESM(require("react"));
4020
+ var import_react15 = require("react");
4021
+ var OverridablePropContext = (0, import_react15.createContext)(null);
3854
4022
  function OverridablePropProvider({ children, ...props }) {
3855
- return /* @__PURE__ */ React24.createElement(OverridablePropContext.Provider, { value: props }, children);
4023
+ return /* @__PURE__ */ React25.createElement(OverridablePropContext.Provider, { value: props }, children);
3856
4024
  }
3857
- var useOverridablePropValue = () => (0, import_react14.useContext)(OverridablePropContext)?.value;
3858
- var useComponentInstanceElement = () => (0, import_react14.useContext)(OverridablePropContext)?.componentInstanceElement;
4025
+ var useOverridablePropValue = () => (0, import_react15.useContext)(OverridablePropContext)?.value;
4026
+ var useComponentInstanceElement = () => (0, import_react15.useContext)(OverridablePropContext)?.componentInstanceElement;
3859
4027
 
3860
4028
  // src/store/actions/update-overridable-prop.ts
3861
- var import_store53 = require("@elementor/store");
4029
+ var import_store58 = require("@elementor/store");
3862
4030
 
3863
4031
  // src/utils/resolve-override-prop-value.ts
3864
4032
  var resolveOverridePropValue = (originalPropValue) => {
@@ -3893,7 +4061,7 @@ function getOverrideValue(overrideProp) {
3893
4061
 
3894
4062
  // src/store/actions/update-overridable-prop.ts
3895
4063
  function updateOverridableProp(componentId, propValue, originPropFields) {
3896
- const overridableProps = selectOverridableProps((0, import_store53.__getState)(), componentId);
4064
+ const overridableProps = selectOverridableProps((0, import_store58.__getState)(), componentId);
3897
4065
  if (!overridableProps) {
3898
4066
  return;
3899
4067
  }
@@ -3918,7 +4086,7 @@ function updateOverridableProp(componentId, propValue, originPropFields) {
3918
4086
  }
3919
4087
  }
3920
4088
  };
3921
- (0, import_store53.__dispatch)(
4089
+ (0, import_store58.__dispatch)(
3922
4090
  slice.actions.setOverridableProps({
3923
4091
  componentId,
3924
4092
  overridableProps: newOverridableProps
@@ -3927,7 +4095,7 @@ function updateOverridableProp(componentId, propValue, originPropFields) {
3927
4095
  }
3928
4096
 
3929
4097
  // src/utils/get-prop-type-for-component-override.ts
3930
- var import_editor_elements14 = require("@elementor/editor-elements");
4098
+ var import_editor_elements15 = require("@elementor/editor-elements");
3931
4099
  var getPropTypeForComponentOverride = (overridableProp) => {
3932
4100
  if (overridableProp.originPropFields) {
3933
4101
  return getPropType(overridableProp.originPropFields);
@@ -3939,16 +4107,16 @@ var getPropTypeForComponentOverride = (overridableProp) => {
3939
4107
  });
3940
4108
  };
3941
4109
  function getPropType({ widgetType, propKey }) {
3942
- const widgetPropsSchema = (0, import_editor_elements14.getWidgetsCache)()?.[widgetType]?.atomic_props_schema;
4110
+ const widgetPropsSchema = (0, import_editor_elements15.getWidgetsCache)()?.[widgetType]?.atomic_props_schema;
3943
4111
  return widgetPropsSchema?.[propKey];
3944
4112
  }
3945
4113
 
3946
4114
  // src/components/control-label.tsx
3947
- var React25 = __toESM(require("react"));
4115
+ var React26 = __toESM(require("react"));
3948
4116
  var import_editor_controls2 = require("@elementor/editor-controls");
3949
4117
  var import_ui19 = require("@elementor/ui");
3950
4118
  var ControlLabel = ({ children, ...props }) => {
3951
- return /* @__PURE__ */ React25.createElement(import_ui19.Stack, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React25.createElement(import_editor_controls2.ControlFormLabel, { ...props }, children), /* @__PURE__ */ React25.createElement(import_editor_controls2.ControlAdornments, null));
4119
+ return /* @__PURE__ */ React26.createElement(import_ui19.Stack, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React26.createElement(import_editor_controls2.ControlFormLabel, { ...props }, children), /* @__PURE__ */ React26.createElement(import_editor_controls2.ControlAdornments, null));
3952
4120
  };
3953
4121
 
3954
4122
  // src/components/errors.ts
@@ -3959,9 +4127,9 @@ var OverrideControlInnerElementNotFoundError = (0, import_utils7.createError)({
3959
4127
  });
3960
4128
 
3961
4129
  // src/components/instance-editing-panel/use-resolved-origin-value.tsx
3962
- var import_store55 = require("@elementor/store");
4130
+ var import_store60 = require("@elementor/store");
3963
4131
  function useResolvedOriginValue(override, overridableProp) {
3964
- const components = (0, import_store55.__useSelector)(selectData);
4132
+ const components = (0, import_store60.__useSelector)(selectData);
3965
4133
  return resolveOriginValue(components, override, overridableProp);
3966
4134
  }
3967
4135
  function resolveOriginValue(components, matchingOverride, overridableProp) {
@@ -3982,17 +4150,12 @@ function resolveOriginValue(components, matchingOverride, overridableProp) {
3982
4150
  return null;
3983
4151
  }
3984
4152
  function getOriginFromOverride(components, override) {
3985
- const overridableValue = componentOverridablePropTypeUtil.extract(override);
3986
- const innerOverride = overridableValue ? componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value) : componentInstanceOverridePropTypeUtil.extract(override);
3987
- if (!innerOverride) {
3988
- return null;
3989
- }
3990
- const { schema_source: schemaSource, override_key: overrideKey, override_value: overrideValue } = innerOverride;
3991
- const componentId = schemaSource?.id;
3992
- if (!componentId || !overrideKey) {
4153
+ const innerOverrideInfo = extractInnerOverrideInfo(override);
4154
+ if (!innerOverrideInfo) {
3993
4155
  return null;
3994
4156
  }
3995
- const prop = getOverridableProp(components, componentId, overrideKey);
4157
+ const { componentId, innerOverrideKey, overrideValue } = innerOverrideInfo;
4158
+ const prop = getOverridableProp({ componentId, overrideKey: innerOverrideKey });
3996
4159
  if (hasValue(prop?.originValue)) {
3997
4160
  return prop.originValue;
3998
4161
  }
@@ -4039,39 +4202,52 @@ function findOriginValueByElementId(components, targetElementId, targetPropKey,
4039
4202
  function hasValue(value) {
4040
4203
  return value !== null && value !== void 0;
4041
4204
  }
4042
- function getOverridableProp(components, componentId, overrideKey) {
4043
- const component = components.find(({ id: id2 }) => id2 === componentId);
4044
- return component?.overridableProps?.props?.[overrideKey];
4045
- }
4046
4205
 
4047
4206
  // src/components/instance-editing-panel/override-prop-control.tsx
4048
- function OverridePropControl({ overridableProp, overrides }) {
4049
- return /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React26.createElement(OverrideControl, { overridableProp, overrides }));
4207
+ function OverridePropControl({ overrideKey }) {
4208
+ const overridableProps = useComponentOverridableProps();
4209
+ const overridableProp = overridableProps?.props[overrideKey];
4210
+ if (!overridableProp) {
4211
+ return null;
4212
+ }
4213
+ return /* @__PURE__ */ React27.createElement(import_editor_editing_panel3.SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React27.createElement(OverrideControl, { overridableProp }));
4050
4214
  }
4051
- function OverrideControl({ overridableProp, overrides }) {
4215
+ function OverrideControl({ overridableProp }) {
4052
4216
  const componentInstanceElement = (0, import_editor_editing_panel3.useElement)();
4053
- const componentId = useCurrentComponentId();
4054
4217
  const { value: instanceValue, setValue: setInstanceValue } = (0, import_editor_controls3.useBoundProp)(componentInstancePropTypeUtil);
4218
+ const wrappingComponentId = useCurrentComponentId();
4219
+ const componentId = useComponentId();
4220
+ const overridableProps = useComponentOverridableProps();
4221
+ const overrides = useComponentInstanceOverrides();
4055
4222
  const controls = useControlsByWidgetType(
4056
4223
  overridableProp?.originPropFields?.widgetType ?? overridableProp.widgetType
4057
4224
  );
4058
4225
  const controlReplacements = (0, import_editor_controls3.getControlReplacements)();
4059
4226
  const matchingOverride = getMatchingOverride(overrides, overridableProp.overrideKey);
4060
4227
  const recursiveOriginValue = useResolvedOriginValue(matchingOverride, overridableProp);
4228
+ if (!componentId) {
4229
+ throw new Error("Component ID is required");
4230
+ }
4231
+ if (!overridableProps) {
4232
+ throw new Error("Component has no overridable props");
4233
+ }
4061
4234
  const propType = getPropTypeForComponentOverride(overridableProp);
4062
4235
  if (!propType) {
4063
4236
  return null;
4064
4237
  }
4065
- const componentInstanceId = instanceValue.component_id?.value;
4066
- if (!componentInstanceId) {
4067
- throw new Error("Component ID is required");
4068
- }
4069
4238
  const resolvedOverrideValue = matchingOverride ? resolveOverridePropValue(matchingOverride) : null;
4070
4239
  const propValue = resolvedOverrideValue ?? recursiveOriginValue ?? overridableProp.originValue;
4071
4240
  const value = {
4072
4241
  [overridableProp.overrideKey]: propValue
4073
4242
  };
4074
4243
  const setValue = (newValue) => {
4244
+ if (!overridableProps) {
4245
+ setInstanceValue({
4246
+ ...instanceValue,
4247
+ overrides: void 0
4248
+ });
4249
+ return;
4250
+ }
4075
4251
  const newPropValue = getTempNewValueForDynamicProp(
4076
4252
  propType,
4077
4253
  propValue,
@@ -4081,9 +4257,9 @@ function OverrideControl({ overridableProp, overrides }) {
4081
4257
  matchingOverride,
4082
4258
  overrideKey: overridableProp.overrideKey,
4083
4259
  overrideValue: newPropValue,
4084
- componentId: componentInstanceId
4260
+ componentId
4085
4261
  });
4086
- let newOverrides = overrides?.map((override) => override === matchingOverride ? newOverrideValue : override) ?? [];
4262
+ let newOverrides = (overrides ?? []).filter((override) => isValidOverride(overridableProps, override)).map((override) => override === matchingOverride ? newOverrideValue : override);
4087
4263
  if (!matchingOverride) {
4088
4264
  newOverrides = [...newOverrides, newOverrideValue];
4089
4265
  }
@@ -4092,13 +4268,13 @@ function OverrideControl({ overridableProp, overrides }) {
4092
4268
  overrides: componentInstanceOverridesPropTypeUtil.create(newOverrides)
4093
4269
  });
4094
4270
  const overridableValue = componentOverridablePropTypeUtil.extract(newOverrideValue);
4095
- if (overridableValue && componentId) {
4271
+ if (overridableValue && wrappingComponentId) {
4096
4272
  if (overridableProp.originPropFields) {
4097
- updateOverridableProp(componentId, overridableValue, overridableProp.originPropFields);
4273
+ updateOverridableProp(wrappingComponentId, overridableValue, overridableProp.originPropFields);
4098
4274
  return;
4099
4275
  }
4100
4276
  const { elType: elType2, widgetType: widgetType2, propKey: propKey2, elementId: elementId2 } = overridableProp;
4101
- updateOverridableProp(componentId, overridableValue, { elType: elType2, widgetType: widgetType2, propKey: propKey2, elementId: elementId2 });
4277
+ updateOverridableProp(wrappingComponentId, overridableValue, { elType: elType2, widgetType: widgetType2, propKey: propKey2, elementId: elementId2 });
4102
4278
  }
4103
4279
  };
4104
4280
  const { control, controlProps, layout } = getControlParams(
@@ -4107,14 +4283,14 @@ function OverrideControl({ overridableProp, overrides }) {
4107
4283
  overridableProp.label
4108
4284
  );
4109
4285
  const { elementId, widgetType, elType, propKey } = overridableProp.originPropFields ?? overridableProp;
4110
- const elementContainer = (0, import_editor_elements15.getContainer)(elementId);
4286
+ const elementContainer = (0, import_editor_elements16.getContainer)(elementId);
4111
4287
  if (!elementContainer) {
4112
4288
  throw new OverrideControlInnerElementNotFoundError({
4113
- context: { componentId: componentInstanceId, elementId }
4289
+ context: { componentId, elementId }
4114
4290
  });
4115
4291
  }
4116
4292
  const type = elType === "widget" ? widgetType : elType;
4117
- const elementType = (0, import_editor_elements15.getElementType)(type);
4293
+ const elementType = (0, import_editor_elements16.getElementType)(type);
4118
4294
  if (!elementType) {
4119
4295
  return null;
4120
4296
  }
@@ -4123,13 +4299,13 @@ function OverrideControl({ overridableProp, overrides }) {
4123
4299
  [overridableProp.overrideKey]: propType
4124
4300
  }
4125
4301
  });
4126
- return /* @__PURE__ */ React26.createElement(
4302
+ return /* @__PURE__ */ React27.createElement(
4127
4303
  OverridablePropProvider,
4128
4304
  {
4129
4305
  value: componentOverridablePropTypeUtil.extract(matchingOverride) ?? void 0,
4130
4306
  componentInstanceElement
4131
4307
  },
4132
- /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.ElementProvider, { element: { id: elementId, type }, elementType }, /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.SettingsField, { bind: propKey, propDisplayName: overridableProp.label }, /* @__PURE__ */ React26.createElement(
4308
+ /* @__PURE__ */ React27.createElement(import_editor_editing_panel3.ElementProvider, { element: { id: elementId, type }, elementType }, /* @__PURE__ */ React27.createElement(import_editor_editing_panel3.SettingsField, { bind: propKey, propDisplayName: overridableProp.label }, /* @__PURE__ */ React27.createElement(
4133
4309
  import_editor_controls3.PropProvider,
4134
4310
  {
4135
4311
  propType: propTypeSchema,
@@ -4139,7 +4315,7 @@ function OverrideControl({ overridableProp, overrides }) {
4139
4315
  return false;
4140
4316
  }
4141
4317
  },
4142
- /* @__PURE__ */ React26.createElement(import_editor_controls3.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React26.createElement(import_editor_controls3.ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ React26.createElement(import_ui20.Stack, { direction: "column", gap: 1, mb: 1.5 }, layout !== "custom" && /* @__PURE__ */ React26.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ React26.createElement(OriginalControl, { control, controlProps }))))
4318
+ /* @__PURE__ */ React27.createElement(import_editor_controls3.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React27.createElement(import_editor_controls3.ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ React27.createElement(import_ui20.Stack, { direction: "column", gap: 1, mb: 1.5 }, layout !== "custom" && /* @__PURE__ */ React27.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ React27.createElement(OriginalControl, { control, controlProps }))))
4143
4319
  )))
4144
4320
  );
4145
4321
  }
@@ -4150,19 +4326,6 @@ function getTempNewValueForDynamicProp(propType, propValue, newPropValue) {
4150
4326
  }
4151
4327
  return newPropValue;
4152
4328
  }
4153
- function getMatchingOverride(overrides, overrideKey) {
4154
- const result = overrides?.find((override) => {
4155
- const overridableValue = componentOverridablePropTypeUtil.extract(override);
4156
- let comparedOverrideKey = null;
4157
- if (overridableValue) {
4158
- comparedOverrideKey = overridableValue.origin_value?.value?.override_key;
4159
- } else {
4160
- comparedOverrideKey = override.value.override_key;
4161
- }
4162
- return comparedOverrideKey === overrideKey;
4163
- }) ?? null;
4164
- return result;
4165
- }
4166
4329
  function createOverrideValue({
4167
4330
  matchingOverride,
4168
4331
  overrideKey,
@@ -4211,7 +4374,7 @@ function getControlParams(controls, originPropFields, label) {
4211
4374
  }
4212
4375
  function OriginalControl({ control, controlProps }) {
4213
4376
  const { value } = control;
4214
- return /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.BaseControl, { type: value.type, props: controlProps });
4377
+ return /* @__PURE__ */ React27.createElement(import_editor_editing_panel3.BaseControl, { type: value.type, props: controlProps });
4215
4378
  }
4216
4379
  function getControlLayout(control) {
4217
4380
  return control.value.meta?.layout || import_editor_editing_panel3.controlsRegistry.getLayout(control.value.type);
@@ -4231,18 +4394,22 @@ function populateChildControlProps(props) {
4231
4394
  }
4232
4395
  return props;
4233
4396
  }
4397
+ function isValidOverride(overridableProps, override) {
4398
+ const overridableKey = componentOverridablePropTypeUtil.isValid(override) ? override.value.origin_value?.value.override_key : override.value.override_key;
4399
+ return !!overridableProps.props[overridableKey];
4400
+ }
4234
4401
 
4235
4402
  // src/components/instance-editing-panel/override-props-group.tsx
4236
- function OverridePropsGroup({ group, props, overrides }) {
4403
+ function OverridePropsGroup({ group }) {
4237
4404
  const [isOpen, setIsOpen] = (0, import_editor_editing_panel4.useStateByElement)(group.id, true);
4238
4405
  const handleClick = () => {
4239
4406
  setIsOpen(!isOpen);
4240
4407
  };
4241
- const id2 = (0, import_react15.useId)();
4408
+ const id2 = (0, import_react16.useId)();
4242
4409
  const labelId = `label-${id2}`;
4243
4410
  const contentId = `content-${id2}`;
4244
4411
  const title = group.label;
4245
- return /* @__PURE__ */ React27.createElement(import_ui21.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ React27.createElement(
4412
+ return /* @__PURE__ */ React28.createElement(import_ui21.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ React28.createElement(
4246
4413
  import_ui21.ListItemButton,
4247
4414
  {
4248
4415
  id: labelId,
@@ -4252,7 +4419,7 @@ function OverridePropsGroup({ group, props, overrides }) {
4252
4419
  p: 0,
4253
4420
  sx: { "&:hover": { backgroundColor: "transparent" } }
4254
4421
  },
4255
- /* @__PURE__ */ React27.createElement(import_ui21.Stack, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React27.createElement(
4422
+ /* @__PURE__ */ React28.createElement(import_ui21.Stack, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React28.createElement(
4256
4423
  import_ui21.ListItemText,
4257
4424
  {
4258
4425
  secondary: title,
@@ -4260,15 +4427,8 @@ function OverridePropsGroup({ group, props, overrides }) {
4260
4427
  sx: { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 }
4261
4428
  }
4262
4429
  )),
4263
- /* @__PURE__ */ React27.createElement(import_editor_ui13.CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
4264
- ), /* @__PURE__ */ React27.createElement(import_ui21.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React27.createElement(import_ui21.Stack, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React27.createElement(
4265
- OverridePropControl,
4266
- {
4267
- key: overrideKey,
4268
- overridableProp: props[overrideKey],
4269
- overrides
4270
- }
4271
- )))));
4430
+ /* @__PURE__ */ React28.createElement(import_editor_ui13.CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
4431
+ ), /* @__PURE__ */ React28.createElement(import_ui21.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React28.createElement(import_ui21.Stack, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React28.createElement(OverridePropControl, { key: overrideKey, overrideKey })))));
4272
4432
  }
4273
4433
 
4274
4434
  // src/components/instance-editing-panel/instance-editing-panel.tsx
@@ -4278,8 +4438,8 @@ function InstanceEditingPanel() {
4278
4438
  const componentId = settings?.component_id?.value;
4279
4439
  const overrides = settings?.overrides?.value;
4280
4440
  const component = useComponent(componentId ?? null);
4281
- const overridableProps = useOverridableProps(componentId ?? null);
4282
- const componentInstanceId = (0, import_editor_elements16.useSelectedElement)()?.element?.id ?? null;
4441
+ const overridableProps = useSanitizeOverridableProps(componentId ?? null);
4442
+ const componentInstanceId = (0, import_editor_elements17.useSelectedElement)()?.element?.id ?? null;
4283
4443
  if (!componentId || !overridableProps || !component) {
4284
4444
  return null;
4285
4445
  }
@@ -4288,18 +4448,20 @@ function InstanceEditingPanel() {
4288
4448
  const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
4289
4449
  const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
4290
4450
  const isEmpty = groups.length === 0 || Object.keys(overridableProps.props).length === 0;
4291
- return /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement(import_editor_panels4.PanelHeader, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React28.createElement(import_ui22.Stack, { direction: "row", alignItems: "center", flexGrow: 1, gap: 1, maxWidth: "100%" }, /* @__PURE__ */ React28.createElement(import_icons14.ComponentsIcon, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React28.createElement(import_editor_ui14.EllipsisWithTooltip, { title: component.name, as: import_editor_panels4.PanelHeaderTitle, sx: { flexGrow: 1 } }), canEdit && /* @__PURE__ */ React28.createElement(import_ui22.Tooltip, { title: panelTitle }, /* @__PURE__ */ React28.createElement(import_ui22.IconButton, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React28.createElement(import_icons14.PencilIcon, { fontSize: "tiny" }))))), /* @__PURE__ */ React28.createElement(import_editor_panels4.PanelBody, null, /* @__PURE__ */ React28.createElement(import_editor_controls4.ControlAdornmentsProvider, { items: (0, import_editor_editing_panel5.getFieldIndicators)("settings") }, isEmpty ? /* @__PURE__ */ React28.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React28.createElement(import_ui22.Stack, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React28.createElement(React28.Fragment, { key: group.id + componentInstanceId }, /* @__PURE__ */ React28.createElement(
4292
- OverridePropsGroup,
4451
+ return /* @__PURE__ */ React29.createElement(
4452
+ ComponentInstanceProvider,
4293
4453
  {
4294
- group,
4295
- props: overridableProps.props,
4296
- overrides
4297
- }
4298
- ), /* @__PURE__ */ React28.createElement(import_ui22.Divider, null)))))));
4454
+ componentId,
4455
+ overrides,
4456
+ overridableProps
4457
+ },
4458
+ /* @__PURE__ */ React29.createElement(import_editor_panels4.PanelHeader, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React29.createElement(import_ui22.Stack, { direction: "row", alignItems: "center", flexGrow: 1, gap: 1, maxWidth: "100%" }, /* @__PURE__ */ React29.createElement(import_icons14.ComponentsIcon, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React29.createElement(import_editor_ui14.EllipsisWithTooltip, { title: component.name, as: import_editor_panels4.PanelHeaderTitle, sx: { flexGrow: 1 } }), canEdit && /* @__PURE__ */ React29.createElement(import_ui22.Tooltip, { title: panelTitle }, /* @__PURE__ */ React29.createElement(import_ui22.IconButton, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React29.createElement(import_icons14.PencilIcon, { fontSize: "tiny" }))))),
4459
+ /* @__PURE__ */ React29.createElement(import_editor_panels4.PanelBody, null, /* @__PURE__ */ React29.createElement(import_editor_controls4.ControlAdornmentsProvider, { items: (0, import_editor_editing_panel5.getFieldIndicators)("settings") }, isEmpty ? /* @__PURE__ */ React29.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React29.createElement(import_ui22.Stack, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React29.createElement(React29.Fragment, { key: group.id + componentInstanceId }, /* @__PURE__ */ React29.createElement(OverridePropsGroup, { group }), /* @__PURE__ */ React29.createElement(import_ui22.Divider, null))))))
4460
+ );
4299
4461
  }
4300
4462
 
4301
4463
  // src/components/overridable-props/overridable-prop-control.tsx
4302
- var React29 = __toESM(require("react"));
4464
+ var React30 = __toESM(require("react"));
4303
4465
  var import_editor_controls5 = require("@elementor/editor-controls");
4304
4466
  var import_editor_editing_panel6 = require("@elementor/editor-editing-panel");
4305
4467
  function OverridablePropControl({
@@ -4344,7 +4506,7 @@ function OverridablePropControl({
4344
4506
  });
4345
4507
  const propValue = isComponentInstance2 ? (value.origin_value?.value).override_value : value.origin_value;
4346
4508
  const objectPlaceholder = placeholder ? { [bind]: placeholder } : void 0;
4347
- return /* @__PURE__ */ React29.createElement(OverridablePropProvider, { value }, /* @__PURE__ */ React29.createElement(
4509
+ return /* @__PURE__ */ React30.createElement(OverridablePropProvider, { value }, /* @__PURE__ */ React30.createElement(
4348
4510
  import_editor_controls5.PropProvider,
4349
4511
  {
4350
4512
  ...propContext,
@@ -4355,7 +4517,7 @@ function OverridablePropControl({
4355
4517
  },
4356
4518
  placeholder: objectPlaceholder
4357
4519
  },
4358
- /* @__PURE__ */ React29.createElement(import_editor_controls5.PropKeyProvider, { bind }, /* @__PURE__ */ React29.createElement(import_editor_controls5.ControlReplacementsProvider, { replacements: filteredReplacements }, /* @__PURE__ */ React29.createElement(ControlWithReplacements, { OriginalControl: OriginalControl2, props })))
4520
+ /* @__PURE__ */ React30.createElement(import_editor_controls5.PropKeyProvider, { bind }, /* @__PURE__ */ React30.createElement(import_editor_controls5.ControlReplacementsProvider, { replacements: filteredReplacements }, /* @__PURE__ */ React30.createElement(ControlWithReplacements, { OriginalControl: OriginalControl2, props })))
4359
4521
  ));
4360
4522
  }
4361
4523
  function ControlWithReplacements({
@@ -4365,21 +4527,21 @@ function ControlWithReplacements({
4365
4527
  const { ControlToRender, isReplaced } = (0, import_editor_controls5.useControlReplacement)(OriginalControl2);
4366
4528
  if (isReplaced) {
4367
4529
  const ReplacementControl = ControlToRender;
4368
- return /* @__PURE__ */ React29.createElement(ReplacementControl, { ...props, OriginalControl: OriginalControl2 });
4530
+ return /* @__PURE__ */ React30.createElement(ReplacementControl, { ...props, OriginalControl: OriginalControl2 });
4369
4531
  }
4370
- return /* @__PURE__ */ React29.createElement(OriginalControl2, { ...props });
4532
+ return /* @__PURE__ */ React30.createElement(OriginalControl2, { ...props });
4371
4533
  }
4372
4534
 
4373
4535
  // src/components/overridable-props/overridable-prop-indicator.tsx
4374
- var React31 = __toESM(require("react"));
4536
+ var React32 = __toESM(require("react"));
4375
4537
  var import_editor_controls6 = require("@elementor/editor-controls");
4376
4538
  var import_editor_editing_panel7 = require("@elementor/editor-editing-panel");
4377
- var import_editor_elements17 = require("@elementor/editor-elements");
4539
+ var import_editor_elements18 = require("@elementor/editor-elements");
4378
4540
  var import_ui24 = require("@elementor/ui");
4379
4541
  var import_i18n29 = require("@wordpress/i18n");
4380
4542
 
4381
4543
  // src/store/actions/set-overridable-prop.ts
4382
- var import_store60 = require("@elementor/store");
4544
+ var import_store65 = require("@elementor/store");
4383
4545
  var import_utils8 = require("@elementor/utils");
4384
4546
  function setOverridableProp({
4385
4547
  componentId,
@@ -4394,7 +4556,7 @@ function setOverridableProp({
4394
4556
  originPropFields,
4395
4557
  source
4396
4558
  }) {
4397
- const overridableProps = selectOverridableProps((0, import_store60.__getState)(), componentId);
4559
+ const overridableProps = selectOverridableProps((0, import_store65.__getState)(), componentId);
4398
4560
  if (!overridableProps) {
4399
4561
  return;
4400
4562
  }
@@ -4431,7 +4593,7 @@ function setOverridableProp({
4431
4593
  if (isChangingGroups) {
4432
4594
  groups = removePropFromGroup(groups, existingOverridableProp.groupId, overridableProp.overrideKey);
4433
4595
  }
4434
- (0, import_store60.__dispatch)(
4596
+ (0, import_store65.__dispatch)(
4435
4597
  slice.actions.setOverridableProps({
4436
4598
  componentId,
4437
4599
  overridableProps: {
@@ -4442,7 +4604,7 @@ function setOverridableProp({
4442
4604
  );
4443
4605
  const isNewProperty = !existingOverridableProp;
4444
4606
  if (isNewProperty) {
4445
- const currentComponent = selectCurrentComponent((0, import_store60.__getState)());
4607
+ const currentComponent = selectCurrentComponent((0, import_store65.__getState)());
4446
4608
  trackComponentEvent({
4447
4609
  action: "propertyExposed",
4448
4610
  source,
@@ -4457,8 +4619,8 @@ function setOverridableProp({
4457
4619
  }
4458
4620
 
4459
4621
  // src/components/overridable-props/indicator.tsx
4460
- var React30 = __toESM(require("react"));
4461
- var import_react16 = require("react");
4622
+ var React31 = __toESM(require("react"));
4623
+ var import_react17 = require("react");
4462
4624
  var import_icons15 = require("@elementor/icons");
4463
4625
  var import_ui23 = require("@elementor/ui");
4464
4626
  var import_i18n28 = require("@wordpress/i18n");
@@ -4517,37 +4679,24 @@ var Content = (0, import_ui23.styled)(import_ui23.Box)`
4517
4679
  }
4518
4680
  }
4519
4681
  `;
4520
- var Indicator2 = (0, import_react16.forwardRef)(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */ React30.createElement(Content, { ref, ...props, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React30.createElement(
4682
+ var Indicator2 = (0, import_react17.forwardRef)(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */ React31.createElement(Content, { ref, ...props, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React31.createElement(
4521
4683
  IconContainer,
4522
4684
  {
4523
4685
  className: "icon",
4524
4686
  "aria-label": isOverridable ? (0, import_i18n28.__)("Overridable property", "elementor") : (0, import_i18n28.__)("Make prop overridable", "elementor")
4525
4687
  },
4526
- isOverridable ? /* @__PURE__ */ React30.createElement(import_icons15.CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React30.createElement(import_icons15.PlusIcon, { fontSize: SIZE2 })
4688
+ isOverridable ? /* @__PURE__ */ React31.createElement(import_icons15.CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React31.createElement(import_icons15.PlusIcon, { fontSize: SIZE2 })
4527
4689
  )));
4528
4690
 
4529
- // src/components/overridable-props/utils/get-overridable-prop.ts
4530
- var import_store62 = require("@elementor/store");
4531
- function getOverridableProp2({
4532
- componentId,
4533
- overrideKey
4534
- }) {
4535
- const overridableProps = selectOverridableProps((0, import_store62.__getState)(), componentId);
4536
- if (!overridableProps) {
4537
- return void 0;
4538
- }
4539
- return overridableProps.props[overrideKey];
4540
- }
4541
-
4542
4691
  // src/components/overridable-props/overridable-prop-indicator.tsx
4543
4692
  function OverridablePropIndicator() {
4544
4693
  const { propType } = (0, import_editor_controls6.useBoundProp)();
4545
4694
  const componentId = useCurrentComponentId();
4546
- const overridableProps = useOverridableProps(componentId);
4695
+ const overridableProps = useSanitizeOverridableProps(componentId);
4547
4696
  if (!isPropAllowed(propType) || !componentId || !overridableProps) {
4548
4697
  return null;
4549
4698
  }
4550
- return /* @__PURE__ */ React31.createElement(Content2, { componentId, overridableProps });
4699
+ return /* @__PURE__ */ React32.createElement(Content2, { componentId, overridableProps });
4551
4700
  }
4552
4701
  function Content2({ componentId, overridableProps }) {
4553
4702
  const {
@@ -4566,7 +4715,7 @@ function Content2({ componentId, overridableProps }) {
4566
4715
  });
4567
4716
  const triggerProps = (0, import_ui24.bindTrigger)(popupState);
4568
4717
  const popoverProps = (0, import_ui24.bindPopover)(popupState);
4569
- const { elType } = (0, import_editor_elements17.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
4718
+ const { elType } = (0, import_editor_elements18.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
4570
4719
  const handleSubmit = ({ label, group }) => {
4571
4720
  const propTypeDefault = propType.default ?? {};
4572
4721
  const originValue = resolveOverridePropValue(overridableValue?.origin_value) ?? value ?? propTypeDefault;
@@ -4592,8 +4741,8 @@ function Content2({ componentId, overridableProps }) {
4592
4741
  }
4593
4742
  popupState.close();
4594
4743
  };
4595
- const overridableConfig = overridableValue ? getOverridableProp2({ componentId, overrideKey: overridableValue.override_key }) : void 0;
4596
- return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(import_ui24.Tooltip, { placement: "top", title: (0, import_i18n29.__)("Override Property", "elementor") }, /* @__PURE__ */ React31.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React31.createElement(
4744
+ const overridableConfig = overridableValue ? getOverridableProp({ componentId, overrideKey: overridableValue.override_key }) : void 0;
4745
+ return /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement(import_ui24.Tooltip, { placement: "top", title: (0, import_i18n29.__)("Override Property", "elementor") }, /* @__PURE__ */ React32.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React32.createElement(
4597
4746
  import_ui24.Popover,
4598
4747
  {
4599
4748
  disableScrollLock: true,
@@ -4610,7 +4759,7 @@ function Content2({ componentId, overridableProps }) {
4610
4759
  },
4611
4760
  ...popoverProps
4612
4761
  },
4613
- /* @__PURE__ */ React31.createElement(
4762
+ /* @__PURE__ */ React32.createElement(
4614
4763
  OverridablePropForm,
4615
4764
  {
4616
4765
  onSubmit: handleSubmit,
@@ -4633,7 +4782,7 @@ var import_editor_mcp2 = require("@elementor/editor-mcp");
4633
4782
 
4634
4783
  // src/mcp/save-as-component-tool.ts
4635
4784
  var import_editor_canvas7 = require("@elementor/editor-canvas");
4636
- var import_editor_elements18 = require("@elementor/editor-elements");
4785
+ var import_editor_elements19 = require("@elementor/editor-elements");
4637
4786
  var import_editor_mcp = require("@elementor/editor-mcp");
4638
4787
  var import_http_client2 = require("@elementor/http-client");
4639
4788
  var import_schema6 = require("@elementor/schema");
@@ -4678,7 +4827,7 @@ var handleSaveAsComponent = async (params) => {
4678
4827
  overridable_props: overridablePropsInput
4679
4828
  } = params;
4680
4829
  const validElementTypes = getValidElementTypes();
4681
- const container = (0, import_editor_elements18.getContainer)(elementId);
4830
+ const container = (0, import_editor_elements19.getContainer)(elementId);
4682
4831
  if (!container) {
4683
4832
  throw new Error(ERROR_MESSAGES3.ELEMENT_NOT_FOUND);
4684
4833
  }
@@ -4744,7 +4893,7 @@ function enrichOverridableProps(input, rootElement, propertGroups) {
4744
4893
  }
4745
4894
  const elType = element.elType;
4746
4895
  const widgetType = element.widgetType || element.elType;
4747
- const elementType = (0, import_editor_elements18.getElementType)(widgetType);
4896
+ const elementType = (0, import_editor_elements19.getElementType)(widgetType);
4748
4897
  if (!elementType) {
4749
4898
  throw new Error(
4750
4899
  `Element type "${widgetType}" is not atomic or does not have a settings schema. Cannot expose property "${propKey}" for element "${elementId}".`
@@ -4815,7 +4964,7 @@ function findElementById(root, targetId) {
4815
4964
  return null;
4816
4965
  }
4817
4966
  function getValidElementTypes() {
4818
- const types = (0, import_editor_elements18.getWidgetsCache)();
4967
+ const types = (0, import_editor_elements19.getWidgetsCache)();
4819
4968
  if (!types) {
4820
4969
  return [];
4821
4970
  }
@@ -4995,20 +5144,20 @@ function initMcp() {
4995
5144
  }
4996
5145
 
4997
5146
  // src/populate-store.ts
4998
- var import_react17 = require("react");
4999
- var import_store65 = require("@elementor/store");
5147
+ var import_react18 = require("react");
5148
+ var import_store68 = require("@elementor/store");
5000
5149
  function PopulateStore() {
5001
- (0, import_react17.useEffect)(() => {
5002
- (0, import_store65.__dispatch)(loadComponents());
5150
+ (0, import_react18.useEffect)(() => {
5151
+ (0, import_store68.__dispatch)(loadComponents());
5003
5152
  }, []);
5004
5153
  return null;
5005
5154
  }
5006
5155
 
5007
5156
  // src/prevent-circular-nesting.ts
5008
- var import_editor_elements19 = require("@elementor/editor-elements");
5157
+ var import_editor_elements20 = require("@elementor/editor-elements");
5009
5158
  var import_editor_notifications4 = require("@elementor/editor-notifications");
5010
5159
  var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
5011
- var import_store66 = require("@elementor/store");
5160
+ var import_store69 = require("@elementor/store");
5012
5161
  var import_i18n30 = require("@wordpress/i18n");
5013
5162
  var COMPONENT_TYPE = "e-component";
5014
5163
  var COMPONENT_CIRCULAR_NESTING_ALERT = {
@@ -5034,7 +5183,7 @@ function wouldCreateCircularNesting(componentIdToAdd) {
5034
5183
  if (componentIdToAdd === void 0) {
5035
5184
  return false;
5036
5185
  }
5037
- const state = (0, import_store66.__getState)();
5186
+ const state = (0, import_store69.__getState)();
5038
5187
  const currentComponentId = selectCurrentComponentId(state);
5039
5188
  const path = selectPath(state);
5040
5189
  if (currentComponentId === null) {
@@ -5100,7 +5249,7 @@ function blockCircularMove(args) {
5100
5249
  if (!container) {
5101
5250
  return false;
5102
5251
  }
5103
- const allElements = (0, import_editor_elements19.getAllDescendants)(container);
5252
+ const allElements = (0, import_editor_elements20.getAllDescendants)(container);
5104
5253
  return allElements.some((element) => {
5105
5254
  const componentId = extractComponentIdFromContainer(element);
5106
5255
  if (componentId === null) {
@@ -5132,19 +5281,19 @@ function blockCircularPaste(args) {
5132
5281
  }
5133
5282
 
5134
5283
  // src/store/actions/remove-component-styles.ts
5135
- var import_store68 = require("@elementor/store");
5284
+ var import_store71 = require("@elementor/store");
5136
5285
  function removeComponentStyles(id2) {
5137
5286
  apiClient.invalidateComponentConfigCache(id2);
5138
- (0, import_store68.__dispatch)(slice.actions.removeStyles({ id: id2 }));
5287
+ (0, import_store71.__dispatch)(slice.actions.removeStyles({ id: id2 }));
5139
5288
  }
5140
5289
 
5141
5290
  // src/store/components-styles-provider.ts
5142
5291
  var import_editor_styles_repository = require("@elementor/editor-styles-repository");
5143
- var import_store70 = require("@elementor/store");
5292
+ var import_store73 = require("@elementor/store");
5144
5293
  var componentsStylesProvider = (0, import_editor_styles_repository.createStylesProvider)({
5145
5294
  key: "components-styles",
5146
5295
  priority: 100,
5147
- subscribe: (cb) => (0, import_store70.__subscribeWithSelector)(
5296
+ subscribe: (cb) => (0, import_store73.__subscribeWithSelector)(
5148
5297
  (state) => state[SLICE_NAME],
5149
5298
  () => {
5150
5299
  cb();
@@ -5152,29 +5301,29 @@ var componentsStylesProvider = (0, import_editor_styles_repository.createStylesP
5152
5301
  ),
5153
5302
  actions: {
5154
5303
  all: () => {
5155
- return selectFlatStyles((0, import_store70.__getState)());
5304
+ return selectFlatStyles((0, import_store73.__getState)());
5156
5305
  },
5157
5306
  get: (id2) => {
5158
- return selectFlatStyles((0, import_store70.__getState)()).find((style) => style.id === id2) ?? null;
5307
+ return selectFlatStyles((0, import_store73.__getState)()).find((style) => style.id === id2) ?? null;
5159
5308
  }
5160
5309
  }
5161
5310
  });
5162
5311
 
5163
5312
  // src/sync/create-components-before-save.ts
5164
- var import_editor_elements20 = require("@elementor/editor-elements");
5165
- var import_store72 = require("@elementor/store");
5313
+ var import_editor_elements21 = require("@elementor/editor-elements");
5314
+ var import_store75 = require("@elementor/store");
5166
5315
  async function createComponentsBeforeSave({
5167
5316
  elements,
5168
5317
  status
5169
5318
  }) {
5170
- const unpublishedComponents = selectUnpublishedComponents((0, import_store72.__getState)());
5319
+ const unpublishedComponents = selectUnpublishedComponents((0, import_store75.__getState)());
5171
5320
  if (!unpublishedComponents.length) {
5172
5321
  return;
5173
5322
  }
5174
5323
  try {
5175
5324
  const uidToComponentId = await createComponents(unpublishedComponents, status);
5176
5325
  updateComponentInstances(elements, uidToComponentId);
5177
- (0, import_store72.__dispatch)(
5326
+ (0, import_store75.__dispatch)(
5178
5327
  slice.actions.add(
5179
5328
  unpublishedComponents.map((component) => ({
5180
5329
  id: uidToComponentId.get(component.uid),
@@ -5184,10 +5333,10 @@ async function createComponentsBeforeSave({
5184
5333
  }))
5185
5334
  )
5186
5335
  );
5187
- (0, import_store72.__dispatch)(slice.actions.resetUnpublished());
5336
+ (0, import_store75.__dispatch)(slice.actions.resetUnpublished());
5188
5337
  } catch (error) {
5189
5338
  const failedUids = unpublishedComponents.map((component) => component.uid);
5190
- (0, import_store72.__dispatch)(slice.actions.removeUnpublished(failedUids));
5339
+ (0, import_store75.__dispatch)(slice.actions.removeUnpublished(failedUids));
5191
5340
  throw new Error(`Failed to publish components: ${error}`);
5192
5341
  }
5193
5342
  }
@@ -5231,7 +5380,7 @@ function shouldUpdateElement(element, uidToComponentId) {
5231
5380
  return { shouldUpdate: false, newComponentId: null };
5232
5381
  }
5233
5382
  function updateElementComponentId(elementId, componentId) {
5234
- (0, import_editor_elements20.updateElementSettings)({
5383
+ (0, import_editor_elements21.updateElementSettings)({
5235
5384
  id: elementId,
5236
5385
  props: {
5237
5386
  component_instance: {
@@ -5261,7 +5410,7 @@ async function publishDraftComponentsInPageBeforeSave({ status, elements }) {
5261
5410
  }
5262
5411
 
5263
5412
  // src/sync/set-component-overridable-props-settings-before-save.ts
5264
- var import_store74 = require("@elementor/store");
5413
+ var import_store77 = require("@elementor/store");
5265
5414
  var setComponentOverridablePropsSettingsBeforeSave = ({
5266
5415
  container
5267
5416
  }) => {
@@ -5269,7 +5418,7 @@ var setComponentOverridablePropsSettingsBeforeSave = ({
5269
5418
  if (!currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE) {
5270
5419
  return;
5271
5420
  }
5272
- const overridableProps = selectOverridableProps((0, import_store74.__getState)(), currentDocument.id);
5421
+ const overridableProps = selectOverridableProps((0, import_store77.__getState)(), currentDocument.id);
5273
5422
  if (overridableProps) {
5274
5423
  container.settings.set("overridable_props", overridableProps);
5275
5424
  }
@@ -5277,7 +5426,7 @@ var setComponentOverridablePropsSettingsBeforeSave = ({
5277
5426
 
5278
5427
  // src/sync/update-archived-component-before-save.ts
5279
5428
  var import_editor_notifications5 = require("@elementor/editor-notifications");
5280
- var import_store76 = require("@elementor/store");
5429
+ var import_store79 = require("@elementor/store");
5281
5430
  var failedNotification = (message) => ({
5282
5431
  type: "error",
5283
5432
  message: `Failed to archive components: ${message}`,
@@ -5285,7 +5434,7 @@ var failedNotification = (message) => ({
5285
5434
  });
5286
5435
  var updateArchivedComponentBeforeSave = async (status) => {
5287
5436
  try {
5288
- const archivedComponents = selectArchivedThisSession((0, import_store76.__getState)());
5437
+ const archivedComponents = selectArchivedThisSession((0, import_store79.__getState)());
5289
5438
  if (!archivedComponents.length) {
5290
5439
  return;
5291
5440
  }
@@ -5300,15 +5449,15 @@ var updateArchivedComponentBeforeSave = async (status) => {
5300
5449
  };
5301
5450
 
5302
5451
  // src/sync/update-component-title-before-save.ts
5303
- var import_store78 = require("@elementor/store");
5452
+ var import_store81 = require("@elementor/store");
5304
5453
  var updateComponentTitleBeforeSave = async (status) => {
5305
- const updatedComponentNames = selectUpdatedComponentNames((0, import_store78.__getState)());
5454
+ const updatedComponentNames = selectUpdatedComponentNames((0, import_store81.__getState)());
5306
5455
  if (!updatedComponentNames.length) {
5307
5456
  return;
5308
5457
  }
5309
5458
  const result = await apiClient.updateComponentTitle(updatedComponentNames, status);
5310
5459
  if (result.failedIds.length === 0) {
5311
- (0, import_store78.__dispatch)(slice.actions.cleanUpdatedComponentNames());
5460
+ (0, import_store81.__dispatch)(slice.actions.cleanUpdatedComponentNames());
5312
5461
  }
5313
5462
  };
5314
5463
 
@@ -5334,12 +5483,12 @@ var updateExistingComponentsBeforeSave = async ({
5334
5483
  };
5335
5484
 
5336
5485
  // src/sync/cleanup-overridable-props-on-delete.ts
5337
- var import_editor_elements21 = require("@elementor/editor-elements");
5486
+ var import_editor_elements22 = require("@elementor/editor-elements");
5338
5487
  var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
5339
- var import_store80 = require("@elementor/store");
5488
+ var import_store83 = require("@elementor/store");
5340
5489
  function initCleanupOverridablePropsOnDelete() {
5341
5490
  (0, import_editor_v1_adapters8.registerDataHook)("dependency", "document/elements/delete", (args) => {
5342
- const state = (0, import_store80.__getState)();
5491
+ const state = (0, import_store83.__getState)();
5343
5492
  if (!state) {
5344
5493
  return true;
5345
5494
  }
@@ -5370,7 +5519,7 @@ function initCleanupOverridablePropsOnDelete() {
5370
5519
  for (const propKey of propKeysToDelete) {
5371
5520
  updatedGroups = removePropFromAllGroups(updatedGroups, propKey);
5372
5521
  }
5373
- (0, import_store80.__dispatch)(
5522
+ (0, import_store83.__dispatch)(
5374
5523
  slice.actions.setOverridableProps({
5375
5524
  componentId: currentComponentId,
5376
5525
  overridableProps: {
@@ -5384,12 +5533,12 @@ function initCleanupOverridablePropsOnDelete() {
5384
5533
  });
5385
5534
  }
5386
5535
  function collectDeletedElementIds(containers) {
5387
- const elementIds = containers.filter(Boolean).flatMap((container) => [container, ...(0, import_editor_elements21.getAllDescendants)(container)]).map((element) => element.model?.get?.("id") ?? element.id).filter((id2) => Boolean(id2));
5536
+ const elementIds = containers.filter(Boolean).flatMap((container) => [container, ...(0, import_editor_elements22.getAllDescendants)(container)]).map((element) => element.model?.get?.("id") ?? element.id).filter((id2) => Boolean(id2));
5388
5537
  return elementIds;
5389
5538
  }
5390
5539
 
5391
5540
  // src/sync/handle-component-edit-mode-container.ts
5392
- var import_editor_elements22 = require("@elementor/editor-elements");
5541
+ var import_editor_elements23 = require("@elementor/editor-elements");
5393
5542
  var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
5394
5543
  var V4_DEFAULT_CONTAINER_TYPE = "e-flexbox";
5395
5544
  function initHandleComponentEditModeContainer() {
@@ -5439,11 +5588,11 @@ function initRedirectDropIntoComponent() {
5439
5588
  });
5440
5589
  }
5441
5590
  function createEmptyTopLevelContainer(container) {
5442
- const newContainer = (0, import_editor_elements22.createElement)({
5443
- containerId: container.id,
5591
+ const newContainer = (0, import_editor_elements23.createElement)({
5592
+ container,
5444
5593
  model: { elType: V4_DEFAULT_CONTAINER_TYPE }
5445
5594
  });
5446
- (0, import_editor_elements22.selectElement)(newContainer.id);
5595
+ (0, import_editor_elements23.selectElement)(newContainer.id);
5447
5596
  }
5448
5597
  function getComponentContainer(container) {
5449
5598
  const topLevelElement = container.children?.[0];
@@ -5516,7 +5665,7 @@ function revertOverridablesInStorage(storageKey) {
5516
5665
  // src/init.ts
5517
5666
  function init() {
5518
5667
  import_editor_styles_repository2.stylesRepository.register(componentsStylesProvider);
5519
- (0, import_store82.__registerSlice)(slice);
5668
+ (0, import_store85.__registerSlice)(slice);
5520
5669
  (0, import_editor_panels5.__registerPanel)(panel);
5521
5670
  (0, import_editor_canvas8.registerElementType)(
5522
5671
  COMPONENT_WIDGET_TYPE,