@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.
- package/.turbo/turbo-build.log +10 -10
- package/CHANGELOG.md +46 -0
- package/dist/index.d.mts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +406 -45
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +419 -46
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -10
- package/src/__tests__/__mocks__/styles-schema.ts +72 -3
- 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 +59 -16
- package/src/index.ts +1 -0
- package/src/init-settings-transformers.ts +19 -0
- package/src/init-style-transformers.ts +13 -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-gradient-overlay-transformer.ts +16 -0
- package/src/transformers/styles/background-image-overlay-transformer.ts +6 -2
- package/src/transformers/styles/color-stop-transformer.ts +10 -0
- 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,89 @@ 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
|
+
});
|
|
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
|
-
|
|
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",
|
|
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
|
-
|
|
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
|