@elementor/editor-canvas 0.12.0 → 0.13.1

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 (42) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/CHANGELOG.md +40 -0
  3. package/dist/index.d.mts +6 -1
  4. package/dist/index.d.ts +6 -1
  5. package/dist/index.js +393 -45
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +406 -46
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +11 -10
  10. package/src/__tests__/__mocks__/styles-schema.ts +10 -1
  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 +8 -16
  16. package/src/index.ts +1 -0
  17. package/src/init-settings-transformers.ts +19 -0
  18. package/src/init-style-transformers.ts +8 -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-image-overlay-transformer.ts +6 -2
  40. package/src/transformers/styles/image-attachment-transformer.ts +0 -15
  41. package/src/transformers/styles/image-transformer.ts +0 -34
  42. package/src/transformers/styles/primitive-transformer.ts +0 -3
package/dist/index.mjs CHANGED
@@ -139,18 +139,81 @@ 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
+ });
154
217
 
155
218
  // src/transformers/styles/background-gradient-overlay-transformer.ts
156
219
  var backgroundGradientOverlayTransformer = createTransformer((value) => {
@@ -167,8 +230,9 @@ var backgroundImageOverlayTransformer = createTransformer((value) => {
167
230
  if (!image) {
168
231
  return null;
169
232
  }
233
+ const src = image.src ? `url(${image.src})` : null;
170
234
  const backgroundStyles = [
171
- image,
235
+ src,
172
236
  repeat,
173
237
  attachment,
174
238
  size2 ? `${position || DEFAULT_POSITION_VALUE} / ${size2}` : position
@@ -225,42 +289,6 @@ var createMultiPropsTransformer = (keys, keyGenerator) => {
225
289
  });
226
290
  };
227
291
 
228
- // src/transformers/styles/image-attachment-transformer.ts
229
- import { getMediaAttachment } from "@elementor/wp-media";
230
- var imageAttachmentTransformer = createTransformer(async (value) => {
231
- const attachment = await getMediaAttachment({ id: value });
232
- if (!attachment) {
233
- return null;
234
- }
235
- return attachment;
236
- });
237
-
238
- // src/transformers/styles/image-src-transformer.ts
239
- var imageSrcTransformer = createTransformer((value) => ({
240
- attachment: value.id,
241
- url: value.url
242
- }));
243
-
244
- // src/transformers/styles/image-transformer.ts
245
- var imageTransformer = createTransformer((value) => {
246
- const { src, size: size2 } = value;
247
- if (src?.url) {
248
- return `url(${src.url})`;
249
- }
250
- const sizeUrl = src?.attachment?.sizes?.[size2 ?? ""]?.url;
251
- if (sizeUrl) {
252
- return `url(${sizeUrl})`;
253
- }
254
- const attachmentUrl = src?.attachment?.url;
255
- if (attachmentUrl) {
256
- return `url(${attachmentUrl})`;
257
- }
258
- return null;
259
- });
260
-
261
- // src/transformers/styles/primitive-transformer.ts
262
- var primitiveTransformer = createTransformer((value) => value);
263
-
264
292
  // src/transformers/styles/shadow-transformer.ts
265
293
  var shadowTransformer = createTransformer((value) => {
266
294
  return [value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position].filter(Boolean).join(" ");
@@ -289,7 +317,7 @@ function initStyleTransformers() {
289
317
  ["block-start", "block-end", "inline-start", "inline-end"],
290
318
  ({ propKey, key }) => `${propKey}-${key}`
291
319
  )
292
- ).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-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", 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(
293
321
  "layout-direction",
294
322
  createMultiPropsTransformer(["row", "column"], ({ propKey, key }) => `${key}-${propKey}`)
295
323
  ).register(
@@ -311,7 +339,7 @@ function initStyleTransformers() {
311
339
  import { getBreakpointsMap } from "@elementor/editor-responsive";
312
340
  import { getStylesSchema } from "@elementor/editor-styles";
313
341
  import { stylesRepository } from "@elementor/editor-styles-repository";
314
- import { __privateListenTo as listenTo, v1ReadyEvent } from "@elementor/editor-v1-adapters";
342
+ import { __privateListenTo as listenTo, registerDataHook, v1ReadyEvent } from "@elementor/editor-v1-adapters";
315
343
 
316
344
  // src/renderers/create-props-resolver.ts
317
345
  import {
@@ -475,7 +503,7 @@ function initStylesRenderer() {
475
503
  schema: getStylesSchema(),
476
504
  onPropResolve: enqueueUsedFonts
477
505
  });
478
- stylesRepository.subscribe(async () => {
506
+ const injectStyleElements = async () => {
479
507
  const styleContainer = getStylesContainer();
480
508
  const styles = stylesRepository.all().reverse();
481
509
  const breakpoints = getBreakpointsMap();
@@ -490,7 +518,9 @@ function initStylesRenderer() {
490
518
  selectorPrefix: SELECTOR_PREFIX,
491
519
  signal: abortController.signal
492
520
  });
493
- });
521
+ };
522
+ stylesRepository.subscribe(injectStyleElements);
523
+ registerDataHook("after", "editor/documents/attach-preview", injectStyleElements);
494
524
  });
495
525
  }
496
526
  function getStylesContainer() {
@@ -516,10 +546,339 @@ function enqueueUsedFonts({ key, value }) {
516
546
  enqueueFont(value);
517
547
  }
518
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
+
519
875
  // src/init.tsx
520
876
  function init() {
521
877
  initStyleTransformers();
522
878
  initStylesRenderer();
879
+ initStyleCommands();
880
+ initLegacyViews();
881
+ initSettingsTransformers();
523
882
  injectIntoTop({
524
883
  id: "elements-overlays",
525
884
  component: ElementsOverlays
@@ -529,6 +888,7 @@ function init() {
529
888
  // src/index.ts
530
889
  init();
531
890
  export {
891
+ settingsTransformersRegistry,
532
892
  styleTransformersRegistry
533
893
  };
534
894
  //# sourceMappingURL=index.mjs.map