@elementor/editor-canvas 0.12.0 → 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.
- package/.turbo/turbo-build.log +10 -10
- package/CHANGELOG.md +32 -0
- package/dist/index.d.mts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +393 -45
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +406 -46
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -10
- package/src/__tests__/__mocks__/styles-schema.ts +10 -1
- package/src/__tests__/init-styles-renderer.test.ts +19 -5
- package/src/__tests__/mock-attachment-data.ts +15 -0
- package/src/__tests__/prop-types.ts +65 -0
- package/src/__tests__/settings-props-resolver.test.ts +193 -0
- package/src/__tests__/styles-prop-resolver.test.ts +8 -16
- package/src/index.ts +1 -0
- package/src/init-settings-transformers.ts +19 -0
- package/src/init-style-transformers.ts +8 -9
- package/src/init-styles-renderer.ts +9 -3
- package/src/init.tsx +8 -0
- package/src/legacy/create-element-type.ts +84 -0
- package/src/legacy/init-legacy-views.ts +22 -0
- package/src/legacy/types.ts +60 -0
- package/src/settings-transformers-registry.ts +3 -0
- package/src/style-commands/__tests__/paste-style.test.ts +554 -0
- package/src/style-commands/__tests__/reset-style.test.ts +153 -0
- package/src/style-commands/init-style-commands.ts +7 -0
- package/src/style-commands/paste-style.ts +53 -0
- package/src/style-commands/reset-style.ts +34 -0
- package/src/style-commands/undoable-actions/paste-element-style.ts +107 -0
- package/src/style-commands/undoable-actions/reset-element-style.ts +60 -0
- package/src/style-commands/utils.ts +62 -0
- package/src/transformers/settings/array-transformer.ts +5 -0
- package/src/transformers/settings/link-transformer.ts +14 -0
- package/src/transformers/{styles → shared}/image-src-transformer.ts +2 -2
- package/src/transformers/shared/image-transformer.ts +41 -0
- package/src/transformers/shared/plain-transformer.ts +5 -0
- package/src/transformers/styles/background-color-overlay-transformer.ts +13 -3
- package/src/transformers/styles/background-image-overlay-transformer.ts +6 -2
- package/src/transformers/styles/image-attachment-transformer.ts +0 -15
- package/src/transformers/styles/image-transformer.ts +0 -34
- 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/
|
|
143
|
-
var
|
|
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
|
-
|
|
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
|
-
|
|
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",
|
|
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
|
-
|
|
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
|