@elementor/editor-canvas 0.11.1 → 0.13.0

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 (44) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/CHANGELOG.md +46 -0
  3. package/dist/index.d.mts +6 -1
  4. package/dist/index.d.ts +6 -1
  5. package/dist/index.js +406 -45
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +419 -46
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +11 -10
  10. package/src/__tests__/__mocks__/styles-schema.ts +72 -3
  11. package/src/__tests__/init-styles-renderer.test.ts +19 -5
  12. package/src/__tests__/mock-attachment-data.ts +15 -0
  13. package/src/__tests__/prop-types.ts +65 -0
  14. package/src/__tests__/settings-props-resolver.test.ts +193 -0
  15. package/src/__tests__/styles-prop-resolver.test.ts +59 -16
  16. package/src/index.ts +1 -0
  17. package/src/init-settings-transformers.ts +19 -0
  18. package/src/init-style-transformers.ts +13 -9
  19. package/src/init-styles-renderer.ts +9 -3
  20. package/src/init.tsx +8 -0
  21. package/src/legacy/create-element-type.ts +84 -0
  22. package/src/legacy/init-legacy-views.ts +22 -0
  23. package/src/legacy/types.ts +60 -0
  24. package/src/settings-transformers-registry.ts +3 -0
  25. package/src/style-commands/__tests__/paste-style.test.ts +554 -0
  26. package/src/style-commands/__tests__/reset-style.test.ts +153 -0
  27. package/src/style-commands/init-style-commands.ts +7 -0
  28. package/src/style-commands/paste-style.ts +53 -0
  29. package/src/style-commands/reset-style.ts +34 -0
  30. package/src/style-commands/undoable-actions/paste-element-style.ts +107 -0
  31. package/src/style-commands/undoable-actions/reset-element-style.ts +60 -0
  32. package/src/style-commands/utils.ts +62 -0
  33. package/src/transformers/settings/array-transformer.ts +5 -0
  34. package/src/transformers/settings/link-transformer.ts +14 -0
  35. package/src/transformers/{styles → shared}/image-src-transformer.ts +2 -2
  36. package/src/transformers/shared/image-transformer.ts +41 -0
  37. package/src/transformers/shared/plain-transformer.ts +5 -0
  38. package/src/transformers/styles/background-color-overlay-transformer.ts +13 -3
  39. package/src/transformers/styles/background-gradient-overlay-transformer.ts +16 -0
  40. package/src/transformers/styles/background-image-overlay-transformer.ts +6 -2
  41. package/src/transformers/styles/color-stop-transformer.ts +10 -0
  42. package/src/transformers/styles/image-attachment-transformer.ts +0 -15
  43. package/src/transformers/styles/image-transformer.ts +0 -34
  44. package/src/transformers/styles/primitive-transformer.ts +0 -3
package/dist/index.mjs CHANGED
@@ -139,18 +139,89 @@ function createTransformersRegistry() {
139
139
  };
140
140
  }
141
141
 
142
- // src/style-transformers-registry.ts
143
- var styleTransformersRegistry = createTransformersRegistry();
142
+ // src/settings-transformers-registry.ts
143
+ var settingsTransformersRegistry = createTransformersRegistry();
144
144
 
145
145
  // src/transformers/create-transformer.ts
146
146
  function createTransformer(cb) {
147
147
  return cb;
148
148
  }
149
149
 
150
+ // src/transformers/settings/array-transformer.ts
151
+ var arrayTransformer = createTransformer((value) => {
152
+ return value.filter(Boolean);
153
+ });
154
+
155
+ // src/transformers/settings/link-transformer.ts
156
+ var linkTransformer = createTransformer(({ destination, isTargetBlank }) => {
157
+ return {
158
+ // The real post URL is not relevant in the Editor.
159
+ href: typeof destination === "number" ? "#post-id-" + destination : destination,
160
+ target: isTargetBlank ? "_blank" : "_self"
161
+ };
162
+ });
163
+
164
+ // src/transformers/shared/image-src-transformer.ts
165
+ var imageSrcTransformer = createTransformer((value) => ({
166
+ id: value.id ?? null,
167
+ url: value.url ?? null
168
+ }));
169
+
170
+ // src/transformers/shared/image-transformer.ts
171
+ import { getMediaAttachment } from "@elementor/wp-media";
172
+ var imageTransformer = createTransformer(async (value) => {
173
+ const { src, size: size2 } = value;
174
+ if (!src?.id) {
175
+ return src?.url ? { src: src.url } : null;
176
+ }
177
+ const attachment = await getMediaAttachment({ id: src.id });
178
+ const sizedAttachment = attachment?.sizes?.[size2 ?? ""];
179
+ if (sizedAttachment) {
180
+ return {
181
+ src: sizedAttachment.url,
182
+ height: sizedAttachment.height,
183
+ width: sizedAttachment.width
184
+ };
185
+ }
186
+ if (attachment) {
187
+ return {
188
+ src: attachment.url,
189
+ height: attachment.height,
190
+ width: attachment.width
191
+ };
192
+ }
193
+ return null;
194
+ });
195
+
196
+ // src/transformers/shared/plain-transformer.ts
197
+ var plainTransformer = createTransformer((value) => {
198
+ return value;
199
+ });
200
+
201
+ // src/init-settings-transformers.ts
202
+ function initSettingsTransformers() {
203
+ settingsTransformersRegistry.register("string", plainTransformer).register("url", plainTransformer).register("number", plainTransformer).register("boolean", plainTransformer).register("classes", arrayTransformer).register("link", linkTransformer).register("image", imageTransformer).register("image-src", imageSrcTransformer).register("image-attachment-id", plainTransformer);
204
+ }
205
+
206
+ // src/style-transformers-registry.ts
207
+ var styleTransformersRegistry = createTransformersRegistry();
208
+
150
209
  // src/transformers/styles/background-color-overlay-transformer.ts
151
- var backgroundColorOverlayTransformer = createTransformer(
152
- (value) => `linear-gradient(${value}, ${value})`
153
- );
210
+ var backgroundColorOverlayTransformer = createTransformer((value) => {
211
+ const { color = null } = value;
212
+ if (!color) {
213
+ return null;
214
+ }
215
+ return `linear-gradient(${color}, ${color})`;
216
+ });
217
+
218
+ // src/transformers/styles/background-gradient-overlay-transformer.ts
219
+ var backgroundGradientOverlayTransformer = createTransformer((value) => {
220
+ if (value.type === "radial") {
221
+ return `radial-gradient(circle at ${value.positions}, ${value.stops})`;
222
+ }
223
+ return `linear-gradient(${value.angle}deg, ${value.stops})`;
224
+ });
154
225
 
155
226
  // src/transformers/styles/background-image-overlay-transformer.ts
156
227
  var DEFAULT_POSITION_VALUE = "0% 0%";
@@ -159,8 +230,9 @@ var backgroundImageOverlayTransformer = createTransformer((value) => {
159
230
  if (!image) {
160
231
  return null;
161
232
  }
233
+ const src = image.src ? `url(${image.src})` : null;
162
234
  const backgroundStyles = [
163
- image,
235
+ src,
164
236
  repeat,
165
237
  attachment,
166
238
  size2 ? `${position || DEFAULT_POSITION_VALUE} / ${size2}` : position
@@ -185,6 +257,11 @@ var backgroundTransformer = createTransformer((value) => {
185
257
  return `${overlays} ${color}`.trim();
186
258
  });
187
259
 
260
+ // src/transformers/styles/color-stop-transformer.ts
261
+ var colorStopTransformer = createTransformer(
262
+ (value) => `${value?.color} ${value?.offset ?? 0}%`
263
+ );
264
+
188
265
  // src/transformers/styles/create-combine-array-transformer.ts
189
266
  var createCombineArrayTransformer = (delimiter) => {
190
267
  return createTransformer((value) => value.filter(Boolean).join(delimiter));
@@ -212,42 +289,6 @@ var createMultiPropsTransformer = (keys, keyGenerator) => {
212
289
  });
213
290
  };
214
291
 
215
- // src/transformers/styles/image-attachment-transformer.ts
216
- import { getMediaAttachment } from "@elementor/wp-media";
217
- var imageAttachmentTransformer = createTransformer(async (value) => {
218
- const attachment = await getMediaAttachment({ id: value });
219
- if (!attachment) {
220
- return null;
221
- }
222
- return attachment;
223
- });
224
-
225
- // src/transformers/styles/image-src-transformer.ts
226
- var imageSrcTransformer = createTransformer((value) => ({
227
- attachment: value.id,
228
- url: value.url
229
- }));
230
-
231
- // src/transformers/styles/image-transformer.ts
232
- var imageTransformer = createTransformer((value) => {
233
- const { src, size: size2 } = value;
234
- if (src?.url) {
235
- return `url(${src.url})`;
236
- }
237
- const sizeUrl = src?.attachment?.sizes?.[size2 ?? ""]?.url;
238
- if (sizeUrl) {
239
- return `url(${sizeUrl})`;
240
- }
241
- const attachmentUrl = src?.attachment?.url;
242
- if (attachmentUrl) {
243
- return `url(${attachmentUrl})`;
244
- }
245
- return null;
246
- });
247
-
248
- // src/transformers/styles/primitive-transformer.ts
249
- var primitiveTransformer = createTransformer((value) => value);
250
-
251
292
  // src/transformers/styles/shadow-transformer.ts
252
293
  var shadowTransformer = createTransformer((value) => {
253
294
  return [value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position].filter(Boolean).join(" ");
@@ -276,7 +317,7 @@ function initStyleTransformers() {
276
317
  ["block-start", "block-end", "inline-start", "inline-end"],
277
318
  ({ propKey, key }) => `${propKey}-${key}`
278
319
  )
279
- ).register("color", primitiveTransformer).register("number", primitiveTransformer).register("string", primitiveTransformer).register("url", primitiveTransformer).register("box-shadow", createCombineArrayTransformer(",")).register("background", backgroundTransformer).register("background-overlay", createCombineArrayTransformer(",")).register("background-color-overlay", backgroundColorOverlayTransformer).register("background-image-overlay", backgroundImageOverlayTransformer).register("background-image-position-offset", backgroundImagePositionOffsetTransformer).register("background-image-size-scale", backgroundImageSizeScaleTransformer).register("image-attachment-id", imageAttachmentTransformer).register("image-src", imageSrcTransformer).register("image", imageTransformer).register(
320
+ ).register("color", plainTransformer).register("number", plainTransformer).register("string", plainTransformer).register("url", plainTransformer).register("box-shadow", createCombineArrayTransformer(",")).register("background", backgroundTransformer).register("background-overlay", createCombineArrayTransformer(",")).register("background-color-overlay", backgroundColorOverlayTransformer).register("background-image-overlay", backgroundImageOverlayTransformer).register("background-gradient-overlay", backgroundGradientOverlayTransformer).register("gradient-color-stop", createCombineArrayTransformer(",")).register("color-stop", colorStopTransformer).register("background-image-position-offset", backgroundImagePositionOffsetTransformer).register("background-image-size-scale", backgroundImageSizeScaleTransformer).register("image-attachment-id", plainTransformer).register("image-src", imageSrcTransformer).register("image", imageTransformer).register(
280
321
  "layout-direction",
281
322
  createMultiPropsTransformer(["row", "column"], ({ propKey, key }) => `${key}-${propKey}`)
282
323
  ).register(
@@ -298,7 +339,7 @@ function initStyleTransformers() {
298
339
  import { getBreakpointsMap } from "@elementor/editor-responsive";
299
340
  import { getStylesSchema } from "@elementor/editor-styles";
300
341
  import { stylesRepository } from "@elementor/editor-styles-repository";
301
- import { __privateListenTo as listenTo, v1ReadyEvent } from "@elementor/editor-v1-adapters";
342
+ import { __privateListenTo as listenTo, registerDataHook, v1ReadyEvent } from "@elementor/editor-v1-adapters";
302
343
 
303
344
  // src/renderers/create-props-resolver.ts
304
345
  import {
@@ -462,7 +503,7 @@ function initStylesRenderer() {
462
503
  schema: getStylesSchema(),
463
504
  onPropResolve: enqueueUsedFonts
464
505
  });
465
- stylesRepository.subscribe(async () => {
506
+ const injectStyleElements = async () => {
466
507
  const styleContainer = getStylesContainer();
467
508
  const styles = stylesRepository.all().reverse();
468
509
  const breakpoints = getBreakpointsMap();
@@ -477,7 +518,9 @@ function initStylesRenderer() {
477
518
  selectorPrefix: SELECTOR_PREFIX,
478
519
  signal: abortController.signal
479
520
  });
480
- });
521
+ };
522
+ stylesRepository.subscribe(injectStyleElements);
523
+ registerDataHook("after", "editor/documents/attach-preview", injectStyleElements);
481
524
  });
482
525
  }
483
526
  function getStylesContainer() {
@@ -503,10 +546,339 @@ function enqueueUsedFonts({ key, value }) {
503
546
  enqueueFont(value);
504
547
  }
505
548
 
549
+ // src/legacy/init-legacy-views.ts
550
+ import { getWidgetsCache } from "@elementor/editor-elements";
551
+ import { __privateListenTo, v1ReadyEvent as v1ReadyEvent2 } from "@elementor/editor-v1-adapters";
552
+
553
+ // src/legacy/create-element-type.ts
554
+ function createElementType(type) {
555
+ const legacyWindow = window;
556
+ return class extends legacyWindow.elementor.modules.elements.types.Widget {
557
+ getType() {
558
+ return type;
559
+ }
560
+ getView() {
561
+ return createElementView();
562
+ }
563
+ };
564
+ }
565
+ function createElementView() {
566
+ const legacyWindow = window;
567
+ return class extends legacyWindow.elementor.modules.elements.views.Widget {
568
+ // Dispatch `render` event so the overlay layer will be updated
569
+ onRender(...args) {
570
+ super.onRender(...args);
571
+ this.#dispatchEvent("elementor/preview/atomic-widget/render");
572
+ }
573
+ // Dispatch `destroy` event so the overlay layer will be updated
574
+ onDestroy(...args) {
575
+ super.onDestroy(...args);
576
+ this.#dispatchEvent("elementor/preview/atomic-widget/destroy");
577
+ }
578
+ attributes() {
579
+ return {
580
+ ...super.attributes(),
581
+ // Mark the widget as atomic, so external APIs (such as the overlay layer) can reference it.
582
+ "data-atomic": "",
583
+ // Make the wrapper is non-existent in terms of CSS to mimic the frontend DOM tree.
584
+ style: "display: contents !important;"
585
+ };
586
+ }
587
+ // Removes behaviors that are not needed for atomic widgets (that are implemented in the overlay layer).
588
+ behaviors() {
589
+ const disabledBehaviors = ["InlineEditing", "Draggable", "Resizable"];
590
+ const behaviorsAsEntries = Object.entries(super.behaviors()).filter(
591
+ ([key]) => !disabledBehaviors.includes(key)
592
+ );
593
+ return Object.fromEntries(behaviorsAsEntries);
594
+ }
595
+ // Change the drag handle because the $el is not the draggable element (`display: contents`).
596
+ getDomElement() {
597
+ return this.$el.find(":first-child");
598
+ }
599
+ // Remove the overlay, so we can use the new overlay layer.
600
+ getHandlesOverlay() {
601
+ return null;
602
+ }
603
+ #dispatchEvent(eventType) {
604
+ window.top?.dispatchEvent(
605
+ new CustomEvent(eventType, {
606
+ detail: { id: this.model.get("id") }
607
+ })
608
+ );
609
+ }
610
+ getContextMenuGroups() {
611
+ return super.getContextMenuGroups().filter((group) => group.name !== "save");
612
+ }
613
+ };
614
+ }
615
+
616
+ // src/legacy/init-legacy-views.ts
617
+ function initLegacyViews() {
618
+ __privateListenTo(v1ReadyEvent2(), () => {
619
+ const config = getWidgetsCache() ?? {};
620
+ const legacyWindow = window;
621
+ Object.entries(config).forEach(([type, element]) => {
622
+ if (!element.atomic) {
623
+ return;
624
+ }
625
+ const ElementType = createElementType(type);
626
+ legacyWindow.elementor.elementsManager.registerElementType(new ElementType());
627
+ });
628
+ });
629
+ }
630
+
631
+ // src/style-commands/paste-style.ts
632
+ import {
633
+ __privateListenTo as listenTo2,
634
+ blockCommand,
635
+ commandStartEvent
636
+ } from "@elementor/editor-v1-adapters";
637
+
638
+ // src/style-commands/undoable-actions/paste-element-style.ts
639
+ import {
640
+ createElementStyle,
641
+ deleteElementStyle,
642
+ getElementStyles,
643
+ updateElementStyle
644
+ } from "@elementor/editor-elements";
645
+ import { LOCAL_STYLES_RESERVED_LABEL } from "@elementor/editor-styles-repository";
646
+ import { undoable } from "@elementor/editor-v1-adapters";
647
+ import { __ as __2 } from "@wordpress/i18n";
648
+
649
+ // src/style-commands/utils.ts
650
+ import { getElementLabel, getWidgetsCache as getWidgetsCache2 } from "@elementor/editor-elements";
651
+ import { CLASSES_PROP_KEY } from "@elementor/editor-props";
652
+ import { __ } from "@wordpress/i18n";
653
+ function hasAtomicWidgets(args) {
654
+ const { containers = [args.container] } = args;
655
+ return containers.some(isAtomicWidget);
656
+ }
657
+ function isAtomicWidget(container) {
658
+ if (!container) {
659
+ return false;
660
+ }
661
+ return Boolean(getContainerSchema(container));
662
+ }
663
+ function getClassesProp(container) {
664
+ const propsSchema = getContainerSchema(container);
665
+ if (!propsSchema) {
666
+ return null;
667
+ }
668
+ const [propKey] = Object.entries(propsSchema).find(
669
+ ([, propType]) => propType.kind === "plain" && propType.key === CLASSES_PROP_KEY
670
+ ) ?? [];
671
+ return propKey ?? null;
672
+ }
673
+ function getContainerSchema(container) {
674
+ const type = container?.model.get("widgetType") || container?.model.get("elType");
675
+ const widgetsCache = getWidgetsCache2();
676
+ const elementType = widgetsCache?.[type];
677
+ return elementType?.atomic_props_schema ?? null;
678
+ }
679
+ function getClipboardElements(storageKey = "clipboard") {
680
+ try {
681
+ const storedData = JSON.parse(localStorage.getItem("elementor") ?? "{}");
682
+ return storedData[storageKey]?.elements;
683
+ } catch {
684
+ return void 0;
685
+ }
686
+ }
687
+ function getTitleForContainers(containers) {
688
+ return containers.length > 1 ? __("Elements", "elementor") : getElementLabel(containers[0].id);
689
+ }
690
+
691
+ // src/style-commands/undoable-actions/paste-element-style.ts
692
+ var undoablePasteElementStyle = () => undoable(
693
+ {
694
+ do: ({ containers, newStyle }) => {
695
+ return containers.map((container) => {
696
+ const elementId = container.id;
697
+ const classesProp = getClassesProp(container);
698
+ if (!classesProp) {
699
+ return null;
700
+ }
701
+ const originalStyles = getElementStyles(container.id);
702
+ const [styleId, styleDef] = Object.entries(originalStyles ?? {})[0] ?? [];
703
+ const originalStyle = Object.keys(styleDef ?? {}).length ? styleDef : null;
704
+ const revertData = {
705
+ styleId,
706
+ originalStyle
707
+ };
708
+ if (styleId) {
709
+ newStyle.variants.forEach(({ meta, props }) => {
710
+ updateElementStyle({
711
+ elementId,
712
+ styleId,
713
+ meta,
714
+ props
715
+ });
716
+ });
717
+ } else {
718
+ const [firstVariant] = newStyle.variants;
719
+ const additionalVariants = newStyle.variants.slice(1);
720
+ revertData.styleId = createElementStyle({
721
+ elementId,
722
+ classesProp,
723
+ label: LOCAL_STYLES_RESERVED_LABEL,
724
+ ...firstVariant,
725
+ additionalVariants
726
+ });
727
+ }
728
+ return revertData;
729
+ });
730
+ },
731
+ undo: ({ containers }, revertDataItems) => {
732
+ containers.forEach((container, index) => {
733
+ const revertData = revertDataItems[index];
734
+ if (!revertData) {
735
+ return;
736
+ }
737
+ if (!revertData.originalStyle) {
738
+ deleteElementStyle(container.id, revertData.styleId);
739
+ return;
740
+ }
741
+ const classesProp = getClassesProp(container);
742
+ if (!classesProp) {
743
+ return;
744
+ }
745
+ const [firstVariant] = revertData.originalStyle.variants;
746
+ const additionalVariants = revertData.originalStyle.variants.slice(1);
747
+ createElementStyle({
748
+ elementId: container.id,
749
+ classesProp,
750
+ label: LOCAL_STYLES_RESERVED_LABEL,
751
+ styleId: revertData.styleId,
752
+ ...firstVariant,
753
+ additionalVariants
754
+ });
755
+ });
756
+ }
757
+ },
758
+ {
759
+ title: ({ containers }) => getTitleForContainers(containers),
760
+ subtitle: __2("Style Pasted", "elementor")
761
+ }
762
+ );
763
+
764
+ // src/style-commands/paste-style.ts
765
+ function initPasteStyleCommand() {
766
+ const pasteElementStyleCommand = undoablePasteElementStyle();
767
+ blockCommand({
768
+ command: "document/elements/paste-style",
769
+ condition: hasAtomicWidgets
770
+ });
771
+ listenTo2(
772
+ commandStartEvent("document/elements/paste-style"),
773
+ (e) => pasteStyles(e.args, pasteElementStyleCommand)
774
+ );
775
+ }
776
+ function pasteStyles(args, pasteCallback) {
777
+ const { containers = [args.container], storageKey } = args;
778
+ const clipboardElements = getClipboardElements(storageKey);
779
+ const [clipboardElement] = clipboardElements ?? [];
780
+ if (!clipboardElement) {
781
+ return;
782
+ }
783
+ const elementStyles = clipboardElement.styles;
784
+ const elementStyle = Object.values(elementStyles ?? {})[0];
785
+ if (!elementStyle) {
786
+ return;
787
+ }
788
+ const atomicContainers = containers.filter(isAtomicWidget);
789
+ if (!atomicContainers.length) {
790
+ return;
791
+ }
792
+ pasteCallback({ containers: atomicContainers, newStyle: elementStyle });
793
+ }
794
+
795
+ // src/style-commands/reset-style.ts
796
+ import {
797
+ __privateListenTo as listenTo3,
798
+ blockCommand as blockCommand2,
799
+ commandStartEvent as commandStartEvent2
800
+ } from "@elementor/editor-v1-adapters";
801
+
802
+ // src/style-commands/undoable-actions/reset-element-style.ts
803
+ import { createElementStyle as createElementStyle2, deleteElementStyle as deleteElementStyle2, getElementStyles as getElementStyles2 } from "@elementor/editor-elements";
804
+ import { LOCAL_STYLES_RESERVED_LABEL as LOCAL_STYLES_RESERVED_LABEL2 } from "@elementor/editor-styles-repository";
805
+ import { undoable as undoable2 } from "@elementor/editor-v1-adapters";
806
+ import { __ as __3 } from "@wordpress/i18n";
807
+ var undoableResetElementStyle = () => undoable2(
808
+ {
809
+ do: ({ containers }) => {
810
+ return containers.map((container) => {
811
+ const elementId = container.model.get("id");
812
+ const containerStyles = getElementStyles2(elementId);
813
+ Object.keys(containerStyles ?? {}).forEach(
814
+ (styleId) => deleteElementStyle2(elementId, styleId)
815
+ );
816
+ return containerStyles;
817
+ });
818
+ },
819
+ undo: ({ containers }, revertDataItems) => {
820
+ containers.forEach((container, index) => {
821
+ const classesProp = getClassesProp(container);
822
+ if (!classesProp) {
823
+ return;
824
+ }
825
+ const elementId = container.model.get("id");
826
+ const containerStyles = revertDataItems[index];
827
+ Object.entries(containerStyles ?? {}).forEach(([styleId, style]) => {
828
+ const [firstVariant] = style.variants;
829
+ const additionalVariants = style.variants.slice(1);
830
+ createElementStyle2({
831
+ elementId,
832
+ classesProp,
833
+ styleId,
834
+ label: LOCAL_STYLES_RESERVED_LABEL2,
835
+ ...firstVariant,
836
+ additionalVariants
837
+ });
838
+ });
839
+ });
840
+ }
841
+ },
842
+ {
843
+ title: ({ containers }) => getTitleForContainers(containers),
844
+ subtitle: __3("Style Reset", "elementor")
845
+ }
846
+ );
847
+
848
+ // src/style-commands/reset-style.ts
849
+ function initResetStyleCommand() {
850
+ const resetElementStyles = undoableResetElementStyle();
851
+ blockCommand2({
852
+ command: "document/elements/reset-style",
853
+ condition: hasAtomicWidgets
854
+ });
855
+ listenTo3(
856
+ commandStartEvent2("document/elements/reset-style"),
857
+ (e) => resetStyles(e.args, resetElementStyles)
858
+ );
859
+ }
860
+ function resetStyles(args, resetElementStyles) {
861
+ const { containers = [args.container] } = args;
862
+ const atomicContainers = containers.filter(isAtomicWidget);
863
+ if (!atomicContainers.length) {
864
+ return;
865
+ }
866
+ resetElementStyles({ containers: atomicContainers });
867
+ }
868
+
869
+ // src/style-commands/init-style-commands.ts
870
+ function initStyleCommands() {
871
+ initPasteStyleCommand();
872
+ initResetStyleCommand();
873
+ }
874
+
506
875
  // src/init.tsx
507
876
  function init() {
508
877
  initStyleTransformers();
509
878
  initStylesRenderer();
879
+ initStyleCommands();
880
+ initLegacyViews();
881
+ initSettingsTransformers();
510
882
  injectIntoTop({
511
883
  id: "elements-overlays",
512
884
  component: ElementsOverlays
@@ -516,6 +888,7 @@ function init() {
516
888
  // src/index.ts
517
889
  init();
518
890
  export {
891
+ settingsTransformersRegistry,
519
892
  styleTransformersRegistry
520
893
  };
521
894
  //# sourceMappingURL=index.mjs.map