@elementor/editor-canvas 0.15.4 → 0.18.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 +61 -0
- package/dist/index.d.mts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +455 -289
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +445 -277
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -7
- package/src/__tests__/styles-prop-resolver.test.ts +1 -0
- package/src/components/__tests__/style-renderer.test.tsx +65 -0
- package/src/components/style-renderer.tsx +30 -0
- package/src/hooks/__tests__/use-style-items.test.ts +133 -0
- package/src/hooks/__tests__/use-style-prop-resolver.test.ts +51 -0
- package/src/hooks/use-floating-on-element.ts +2 -2
- package/src/hooks/use-on-mount.ts +13 -0
- package/src/hooks/use-style-items.ts +78 -0
- package/src/hooks/use-style-prop-resolver.ts +22 -0
- package/src/hooks/use-style-renderer.ts +19 -0
- package/src/index.ts +2 -3
- package/src/init.tsx +9 -2
- package/src/legacy/create-element-type.ts +14 -0
- package/src/legacy/create-templated-element-type.ts +1 -1
- package/src/legacy/types.ts +9 -0
- package/src/prevent-link-in-link-commands.ts +132 -0
- package/src/renderers/__tests__/{render-styles.test.ts → create-styles-renderer.test.ts} +35 -19
- package/src/renderers/{render-styles.ts → create-styles-renderer.ts} +35 -32
- package/src/style-commands/__tests__/paste-style.test.ts +5 -5
- package/src/style-commands/__tests__/reset-style.test.ts +2 -2
- package/src/style-commands/undoable-actions/paste-element-style.ts +3 -3
- package/src/style-commands/undoable-actions/reset-element-style.ts +2 -2
- package/src/sync/{get-canvas-iframe-body.ts → get-canvas-iframe-head.ts} +2 -2
- package/src/sync/types.ts +7 -0
- package/src/utils/abort-previous-runs.ts +16 -0
- package/src/__tests__/init-styles-renderer.test.ts +0 -112
- package/src/init-styles-renderer.ts +0 -84
- /package/src/{legacy → utils}/__tests__/signalized-process.test.ts +0 -0
- /package/src/{legacy → utils}/signalized-process.ts +0 -0
package/dist/index.js
CHANGED
|
@@ -30,6 +30,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
|
+
createTransformer: () => createTransformer,
|
|
34
|
+
init: () => init,
|
|
33
35
|
settingsTransformersRegistry: () => settingsTransformersRegistry,
|
|
34
36
|
styleTransformersRegistry: () => styleTransformersRegistry
|
|
35
37
|
});
|
|
@@ -97,8 +99,8 @@ function useFloatingOnElement({ element, isSelected }) {
|
|
|
97
99
|
(0, import_react3.size)({
|
|
98
100
|
apply({ elements, rects }) {
|
|
99
101
|
Object.assign(elements.floating.style, {
|
|
100
|
-
width: `${rects.reference.width}px`,
|
|
101
|
-
height: `${rects.reference.height}px`
|
|
102
|
+
width: `${rects.reference.width + 2}px`,
|
|
103
|
+
height: `${rects.reference.height + 2}px`
|
|
102
104
|
});
|
|
103
105
|
}
|
|
104
106
|
}),
|
|
@@ -164,6 +166,149 @@ function useElementsDom() {
|
|
|
164
166
|
);
|
|
165
167
|
}
|
|
166
168
|
|
|
169
|
+
// src/components/style-renderer.tsx
|
|
170
|
+
var React3 = __toESM(require("react"));
|
|
171
|
+
var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
|
|
172
|
+
var import_ui2 = require("@elementor/ui");
|
|
173
|
+
|
|
174
|
+
// src/hooks/use-style-items.ts
|
|
175
|
+
var import_react8 = require("react");
|
|
176
|
+
var import_editor_styles_repository = require("@elementor/editor-styles-repository");
|
|
177
|
+
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
178
|
+
|
|
179
|
+
// src/utils/abort-previous-runs.ts
|
|
180
|
+
function abortPreviousRuns(cb) {
|
|
181
|
+
let abortController = null;
|
|
182
|
+
return (...args) => {
|
|
183
|
+
if (abortController) {
|
|
184
|
+
abortController.abort();
|
|
185
|
+
}
|
|
186
|
+
abortController = new AbortController();
|
|
187
|
+
return cb(abortController, ...args);
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// src/utils/signalized-process.ts
|
|
192
|
+
function signalizedProcess(signal, steps = []) {
|
|
193
|
+
return {
|
|
194
|
+
then: (cb) => {
|
|
195
|
+
steps.push(cb);
|
|
196
|
+
return signalizedProcess(signal, steps);
|
|
197
|
+
},
|
|
198
|
+
execute: async () => {
|
|
199
|
+
let lastResult;
|
|
200
|
+
for (const step of steps) {
|
|
201
|
+
if (signal.aborted) {
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
lastResult = await step(lastResult, signal);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// src/hooks/use-on-mount.ts
|
|
211
|
+
var import_react5 = require("react");
|
|
212
|
+
function useOnMount(cb) {
|
|
213
|
+
const mounted = (0, import_react5.useRef)(false);
|
|
214
|
+
(0, import_react5.useEffect)(() => {
|
|
215
|
+
if (!mounted.current) {
|
|
216
|
+
mounted.current = true;
|
|
217
|
+
cb();
|
|
218
|
+
}
|
|
219
|
+
}, []);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// src/hooks/use-style-prop-resolver.ts
|
|
223
|
+
var import_react6 = require("react");
|
|
224
|
+
var import_editor_styles = require("@elementor/editor-styles");
|
|
225
|
+
|
|
226
|
+
// src/renderers/create-props-resolver.ts
|
|
227
|
+
var import_editor_props = require("@elementor/editor-props");
|
|
228
|
+
|
|
229
|
+
// src/renderers/multi-props.ts
|
|
230
|
+
var isMultiProps = (propValue) => {
|
|
231
|
+
return !!propValue && typeof propValue === "object" && "$$multi-props" in propValue && propValue["$$multi-props"] === true;
|
|
232
|
+
};
|
|
233
|
+
var createMultiPropsValue = (props) => {
|
|
234
|
+
return {
|
|
235
|
+
"$$multi-props": true,
|
|
236
|
+
value: props
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
var getMultiPropsValue = (multiProps) => {
|
|
240
|
+
return multiProps.value;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
// src/renderers/create-props-resolver.ts
|
|
244
|
+
var TRANSFORM_DEPTH_LIMIT = 3;
|
|
245
|
+
function createPropsResolver({ transformers, schema: initialSchema, onPropResolve }) {
|
|
246
|
+
async function resolve({ props, schema, signal }) {
|
|
247
|
+
schema = schema ?? initialSchema;
|
|
248
|
+
const promises = Promise.all(
|
|
249
|
+
Object.entries(schema).map(async ([key, type]) => {
|
|
250
|
+
const value = props[key] ?? type.default;
|
|
251
|
+
const transformed = await transform({ value, key, type, signal });
|
|
252
|
+
onPropResolve?.({ key, value: transformed });
|
|
253
|
+
if (isMultiProps(transformed)) {
|
|
254
|
+
return getMultiPropsValue(transformed);
|
|
255
|
+
}
|
|
256
|
+
return { [key]: transformed };
|
|
257
|
+
})
|
|
258
|
+
);
|
|
259
|
+
return Object.assign({}, ...(await promises).filter(Boolean));
|
|
260
|
+
}
|
|
261
|
+
async function transform({ value, key, type, signal, depth = 0 }) {
|
|
262
|
+
if (value === null || value === void 0) {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
if (!(0, import_editor_props.isTransformable)(value)) {
|
|
266
|
+
return value;
|
|
267
|
+
}
|
|
268
|
+
if (depth > TRANSFORM_DEPTH_LIMIT) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
if (value.disabled === true) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
if (type.kind === "union") {
|
|
275
|
+
type = type.prop_types[value.$$type];
|
|
276
|
+
if (!type) {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (value.$$type !== type.key) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
let resolvedValue = value.value;
|
|
284
|
+
if (type.kind === "object") {
|
|
285
|
+
resolvedValue = await resolve({
|
|
286
|
+
props: resolvedValue,
|
|
287
|
+
schema: type.shape,
|
|
288
|
+
signal
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
if (type.kind === "array") {
|
|
292
|
+
resolvedValue = await Promise.all(
|
|
293
|
+
resolvedValue.map(
|
|
294
|
+
(item) => transform({ value: item, key, type: type.item_prop_type, depth, signal })
|
|
295
|
+
)
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
const transformer = transformers.get(value.$$type);
|
|
299
|
+
if (!transformer) {
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
const transformed = await transformer(resolvedValue, { key, signal });
|
|
304
|
+
return transform({ value: transformed, key, type, signal, depth: depth + 1 });
|
|
305
|
+
} catch {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return resolve;
|
|
310
|
+
}
|
|
311
|
+
|
|
167
312
|
// src/transformers/create-transformers-registry.ts
|
|
168
313
|
function createTransformersRegistry() {
|
|
169
314
|
const transformers = {};
|
|
@@ -183,6 +328,176 @@ function createTransformersRegistry() {
|
|
|
183
328
|
};
|
|
184
329
|
}
|
|
185
330
|
|
|
331
|
+
// src/style-transformers-registry.ts
|
|
332
|
+
var styleTransformersRegistry = createTransformersRegistry();
|
|
333
|
+
|
|
334
|
+
// src/sync/enqueue-font.ts
|
|
335
|
+
var enqueueFont = (fontFamily, context = "preview") => {
|
|
336
|
+
const extendedWindow = window;
|
|
337
|
+
return extendedWindow.elementor?.helpers?.enqueueFont?.(fontFamily, context) ?? null;
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
// src/hooks/use-style-prop-resolver.ts
|
|
341
|
+
function useStylePropResolver() {
|
|
342
|
+
return (0, import_react6.useMemo)(() => {
|
|
343
|
+
return createPropsResolver({
|
|
344
|
+
transformers: styleTransformersRegistry,
|
|
345
|
+
schema: (0, import_editor_styles.getStylesSchema)(),
|
|
346
|
+
onPropResolve: ({ key, value }) => {
|
|
347
|
+
if (key !== "font-family" || typeof value !== "string") {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
enqueueFont(value);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
}, []);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// src/hooks/use-style-renderer.ts
|
|
357
|
+
var import_react7 = require("react");
|
|
358
|
+
var import_editor_responsive = require("@elementor/editor-responsive");
|
|
359
|
+
|
|
360
|
+
// src/renderers/errors.ts
|
|
361
|
+
var import_utils = require("@elementor/utils");
|
|
362
|
+
var UnknownStyleTypeError = (0, import_utils.createError)({
|
|
363
|
+
code: "unknown_style_type",
|
|
364
|
+
message: "Unknown style type"
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
// src/renderers/create-styles-renderer.ts
|
|
368
|
+
var SELECTORS_MAP = {
|
|
369
|
+
class: "."
|
|
370
|
+
};
|
|
371
|
+
function createStylesRenderer({ resolve, breakpoints, selectorPrefix = "" }) {
|
|
372
|
+
return async ({ styles, signal }) => {
|
|
373
|
+
const stylesCssPromises = styles.map(async (style) => {
|
|
374
|
+
const variantCssPromises = Object.values(style.variants).map(async (variant) => {
|
|
375
|
+
const css = await propsToCss({ props: variant.props, resolve, signal });
|
|
376
|
+
return createStyleWrapper().forStyle(style).withPrefix(selectorPrefix).withState(variant.meta.state).withMediaQuery(variant.meta.breakpoint ? breakpoints[variant.meta.breakpoint] : null).wrap(css);
|
|
377
|
+
});
|
|
378
|
+
const variantsCss = await Promise.all(variantCssPromises);
|
|
379
|
+
return {
|
|
380
|
+
id: style.id,
|
|
381
|
+
value: variantsCss.join("")
|
|
382
|
+
};
|
|
383
|
+
});
|
|
384
|
+
return await Promise.all(stylesCssPromises);
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function createStyleWrapper(value = "", wrapper) {
|
|
388
|
+
return {
|
|
389
|
+
forStyle: ({ id, type }) => {
|
|
390
|
+
const symbol = SELECTORS_MAP[type];
|
|
391
|
+
if (!symbol) {
|
|
392
|
+
throw new UnknownStyleTypeError({ context: { type } });
|
|
393
|
+
}
|
|
394
|
+
return createStyleWrapper(`${value}${symbol}${id}`, wrapper);
|
|
395
|
+
},
|
|
396
|
+
withPrefix: (prefix) => createStyleWrapper([prefix, value].filter(Boolean).join(" "), wrapper),
|
|
397
|
+
withState: (state) => createStyleWrapper(state ? `${value}:${state}` : value, wrapper),
|
|
398
|
+
withMediaQuery: (breakpoint) => {
|
|
399
|
+
if (!breakpoint?.type) {
|
|
400
|
+
return createStyleWrapper(value, wrapper);
|
|
401
|
+
}
|
|
402
|
+
const size2 = `${breakpoint.type}:${breakpoint.width}px`;
|
|
403
|
+
return createStyleWrapper(value, (css) => `@media(${size2}){${css}}`);
|
|
404
|
+
},
|
|
405
|
+
wrap: (css) => {
|
|
406
|
+
const res = `${value}{${css}}`;
|
|
407
|
+
if (!wrapper) {
|
|
408
|
+
return res;
|
|
409
|
+
}
|
|
410
|
+
return wrapper(res);
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
async function propsToCss({ props, resolve, signal }) {
|
|
415
|
+
const transformed = await resolve({ props, signal });
|
|
416
|
+
return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
|
|
417
|
+
if (propValue === null) {
|
|
418
|
+
return acc;
|
|
419
|
+
}
|
|
420
|
+
acc.push(propName + ":" + propValue + ";");
|
|
421
|
+
return acc;
|
|
422
|
+
}, []).join("");
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// src/hooks/use-style-renderer.ts
|
|
426
|
+
var SELECTOR_PREFIX = ".elementor";
|
|
427
|
+
function useStyleRenderer(resolve) {
|
|
428
|
+
const breakpoints = (0, import_editor_responsive.useBreakpointsMap)();
|
|
429
|
+
return (0, import_react7.useMemo)(() => {
|
|
430
|
+
return createStylesRenderer({
|
|
431
|
+
selectorPrefix: SELECTOR_PREFIX,
|
|
432
|
+
breakpoints,
|
|
433
|
+
resolve
|
|
434
|
+
});
|
|
435
|
+
}, [resolve, breakpoints]);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// src/hooks/use-style-items.ts
|
|
439
|
+
function useStyleItems() {
|
|
440
|
+
const resolve = useStylePropResolver();
|
|
441
|
+
const renderStyles = useStyleRenderer(resolve);
|
|
442
|
+
const [styleItems, setStyleItems] = (0, import_react8.useState)({});
|
|
443
|
+
const providerAndSubscribers = (0, import_react8.useMemo)(() => {
|
|
444
|
+
return import_editor_styles_repository.stylesRepository.getProviders().map((provider) => {
|
|
445
|
+
return {
|
|
446
|
+
provider,
|
|
447
|
+
subscriber: createProviderSubscriber({
|
|
448
|
+
provider,
|
|
449
|
+
renderStyles,
|
|
450
|
+
setStyleItems
|
|
451
|
+
})
|
|
452
|
+
};
|
|
453
|
+
});
|
|
454
|
+
}, [renderStyles]);
|
|
455
|
+
(0, import_react8.useEffect)(() => {
|
|
456
|
+
const unsubscribes = providerAndSubscribers.map(
|
|
457
|
+
({ provider, subscriber }) => provider.subscribe(subscriber)
|
|
458
|
+
);
|
|
459
|
+
return () => {
|
|
460
|
+
unsubscribes.forEach((unsubscribe) => unsubscribe());
|
|
461
|
+
};
|
|
462
|
+
}, [providerAndSubscribers]);
|
|
463
|
+
useOnMount(() => {
|
|
464
|
+
(0, import_editor_v1_adapters2.registerDataHook)("after", "editor/documents/attach-preview", async () => {
|
|
465
|
+
const promises = providerAndSubscribers.map(async ({ subscriber }) => subscriber());
|
|
466
|
+
await Promise.all(promises);
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
return Object.values(styleItems).sort(({ provider: providerA }, { provider: providerB }) => providerA.priority - providerB.priority).flatMap(({ items }) => items);
|
|
470
|
+
}
|
|
471
|
+
function createProviderSubscriber({ provider, renderStyles, setStyleItems }) {
|
|
472
|
+
return abortPreviousRuns(
|
|
473
|
+
(abortController) => signalizedProcess(abortController.signal).then((_, signal) => renderStyles({ styles: provider.actions.all(), signal })).then((items) => {
|
|
474
|
+
setStyleItems((prev) => ({
|
|
475
|
+
...prev,
|
|
476
|
+
[provider.getKey()]: { provider, items }
|
|
477
|
+
}));
|
|
478
|
+
}).execute()
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// src/sync/get-canvas-iframe-head.ts
|
|
483
|
+
function getCanvasIframeHead() {
|
|
484
|
+
const extendedWindow = window;
|
|
485
|
+
return extendedWindow.elementor?.$preview?.[0]?.contentDocument?.head;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// src/components/style-renderer.tsx
|
|
489
|
+
function StyleRenderer() {
|
|
490
|
+
const container = usePortalContainer();
|
|
491
|
+
const styleItems = useStyleItems();
|
|
492
|
+
if (!container) {
|
|
493
|
+
return null;
|
|
494
|
+
}
|
|
495
|
+
return /* @__PURE__ */ React3.createElement(import_ui2.Portal, { container }, styleItems.map((item) => /* @__PURE__ */ React3.createElement("style", { "data-e-style-id": item.id, key: item.id }, item.value)));
|
|
496
|
+
}
|
|
497
|
+
function usePortalContainer() {
|
|
498
|
+
return (0, import_editor_v1_adapters3.__privateUseListenTo)((0, import_editor_v1_adapters3.commandEndEvent)("editor/documents/attach-preview"), () => getCanvasIframeHead());
|
|
499
|
+
}
|
|
500
|
+
|
|
186
501
|
// src/settings-transformers-registry.ts
|
|
187
502
|
var settingsTransformersRegistry = createTransformersRegistry();
|
|
188
503
|
|
|
@@ -247,9 +562,6 @@ function initSettingsTransformers() {
|
|
|
247
562
|
settingsTransformersRegistry.register("classes", arrayTransformer).register("link", linkTransformer).register("image", imageTransformer).register("image-src", imageSrcTransformer).registerFallback(plainTransformer);
|
|
248
563
|
}
|
|
249
564
|
|
|
250
|
-
// src/style-transformers-registry.ts
|
|
251
|
-
var styleTransformersRegistry = createTransformersRegistry();
|
|
252
|
-
|
|
253
565
|
// src/transformers/styles/background-color-overlay-transformer.ts
|
|
254
566
|
var backgroundColorOverlayTransformer = createTransformer((value) => {
|
|
255
567
|
const { color = null } = value;
|
|
@@ -311,20 +623,6 @@ var createCombineArrayTransformer = (delimiter) => {
|
|
|
311
623
|
return createTransformer((value) => value.filter(Boolean).join(delimiter));
|
|
312
624
|
};
|
|
313
625
|
|
|
314
|
-
// src/renderers/multi-props.ts
|
|
315
|
-
var isMultiProps = (propValue) => {
|
|
316
|
-
return !!propValue && typeof propValue === "object" && "$$multi-props" in propValue && propValue["$$multi-props"] === true;
|
|
317
|
-
};
|
|
318
|
-
var createMultiPropsValue = (props) => {
|
|
319
|
-
return {
|
|
320
|
-
"$$multi-props": true,
|
|
321
|
-
value: props
|
|
322
|
-
};
|
|
323
|
-
};
|
|
324
|
-
var getMultiPropsValue = (multiProps) => {
|
|
325
|
-
return multiProps.value;
|
|
326
|
-
};
|
|
327
|
-
|
|
328
626
|
// src/transformers/styles/create-multi-props-transformer.ts
|
|
329
627
|
var createMultiPropsTransformer = (keys, keyGenerator) => {
|
|
330
628
|
return createTransformer((value, { key: propKey }) => {
|
|
@@ -379,221 +677,9 @@ function initStyleTransformers() {
|
|
|
379
677
|
).registerFallback(plainTransformer);
|
|
380
678
|
}
|
|
381
679
|
|
|
382
|
-
// src/init-styles-renderer.ts
|
|
383
|
-
var import_editor_responsive = require("@elementor/editor-responsive");
|
|
384
|
-
var import_editor_styles = require("@elementor/editor-styles");
|
|
385
|
-
var import_editor_styles_repository = require("@elementor/editor-styles-repository");
|
|
386
|
-
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
387
|
-
|
|
388
|
-
// src/renderers/create-props-resolver.ts
|
|
389
|
-
var import_editor_props = require("@elementor/editor-props");
|
|
390
|
-
var TRANSFORM_DEPTH_LIMIT = 3;
|
|
391
|
-
function createPropsResolver({ transformers, schema: initialSchema, onPropResolve }) {
|
|
392
|
-
async function resolve({ props, schema, signal }) {
|
|
393
|
-
schema = schema ?? initialSchema;
|
|
394
|
-
const promises = Promise.all(
|
|
395
|
-
Object.entries(schema).map(async ([key, type]) => {
|
|
396
|
-
const value = props[key] ?? type.default;
|
|
397
|
-
const transformed = await transform({ value, key, type, signal });
|
|
398
|
-
onPropResolve?.({ key, value: transformed });
|
|
399
|
-
if (isMultiProps(transformed)) {
|
|
400
|
-
return getMultiPropsValue(transformed);
|
|
401
|
-
}
|
|
402
|
-
return { [key]: transformed };
|
|
403
|
-
})
|
|
404
|
-
);
|
|
405
|
-
return Object.assign({}, ...(await promises).filter(Boolean));
|
|
406
|
-
}
|
|
407
|
-
async function transform({ value, key, type, signal, depth = 0 }) {
|
|
408
|
-
if (value === null || value === void 0) {
|
|
409
|
-
return null;
|
|
410
|
-
}
|
|
411
|
-
if (!(0, import_editor_props.isTransformable)(value)) {
|
|
412
|
-
return value;
|
|
413
|
-
}
|
|
414
|
-
if (depth > TRANSFORM_DEPTH_LIMIT) {
|
|
415
|
-
return null;
|
|
416
|
-
}
|
|
417
|
-
if (value.disabled === true) {
|
|
418
|
-
return null;
|
|
419
|
-
}
|
|
420
|
-
if (type.kind === "union") {
|
|
421
|
-
type = type.prop_types[value.$$type];
|
|
422
|
-
if (!type) {
|
|
423
|
-
return null;
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
if (value.$$type !== type.key) {
|
|
427
|
-
return null;
|
|
428
|
-
}
|
|
429
|
-
let resolvedValue = value.value;
|
|
430
|
-
if (type.kind === "object") {
|
|
431
|
-
resolvedValue = await resolve({
|
|
432
|
-
props: resolvedValue,
|
|
433
|
-
schema: type.shape,
|
|
434
|
-
signal
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
if (type.kind === "array") {
|
|
438
|
-
resolvedValue = await Promise.all(
|
|
439
|
-
resolvedValue.map(
|
|
440
|
-
(item) => transform({ value: item, key, type: type.item_prop_type, depth, signal })
|
|
441
|
-
)
|
|
442
|
-
);
|
|
443
|
-
}
|
|
444
|
-
const transformer = transformers.get(value.$$type);
|
|
445
|
-
if (!transformer) {
|
|
446
|
-
return null;
|
|
447
|
-
}
|
|
448
|
-
try {
|
|
449
|
-
const transformed = await transformer(resolvedValue, { key, signal });
|
|
450
|
-
return transform({ value: transformed, key, type, signal, depth: depth + 1 });
|
|
451
|
-
} catch {
|
|
452
|
-
return null;
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
return resolve;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
// src/renderers/errors.ts
|
|
459
|
-
var import_utils = require("@elementor/utils");
|
|
460
|
-
var UnknownStyleTypeError = (0, import_utils.createError)({
|
|
461
|
-
code: "unknown_style_type",
|
|
462
|
-
message: "Unknown style type"
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
// src/renderers/render-styles.ts
|
|
466
|
-
var SELECTORS_MAP = {
|
|
467
|
-
class: "."
|
|
468
|
-
};
|
|
469
|
-
async function renderStyles({
|
|
470
|
-
resolve,
|
|
471
|
-
styles,
|
|
472
|
-
breakpoints,
|
|
473
|
-
selectorPrefix = "",
|
|
474
|
-
signal
|
|
475
|
-
}) {
|
|
476
|
-
const stylesCssPromises = styles.map(async (style) => {
|
|
477
|
-
const variantCssPromises = Object.values(style.variants).map(async (variant) => {
|
|
478
|
-
const css = await propsToCss({ props: variant.props, resolve, signal });
|
|
479
|
-
return createStyleWrapper().forStyle(style).withPrefix(selectorPrefix).withState(variant.meta.state).withMediaQuery(variant.meta.breakpoint ? breakpoints[variant.meta.breakpoint] : null).wrap(css);
|
|
480
|
-
});
|
|
481
|
-
const variantsCss = await Promise.all(variantCssPromises);
|
|
482
|
-
return wrapCssWithStyleElement(style.id, variantsCss.join(""));
|
|
483
|
-
});
|
|
484
|
-
const stylesCss = await Promise.all(stylesCssPromises);
|
|
485
|
-
return stylesCss.join("");
|
|
486
|
-
}
|
|
487
|
-
function createStyleWrapper(value = "", wrapper) {
|
|
488
|
-
return {
|
|
489
|
-
forStyle: ({ id, type }) => {
|
|
490
|
-
const symbol = SELECTORS_MAP[type];
|
|
491
|
-
if (!symbol) {
|
|
492
|
-
throw new UnknownStyleTypeError({ context: { type } });
|
|
493
|
-
}
|
|
494
|
-
return createStyleWrapper(`${value}${symbol}${id}`, wrapper);
|
|
495
|
-
},
|
|
496
|
-
withPrefix: (prefix) => createStyleWrapper([prefix, value].filter(Boolean).join(" "), wrapper),
|
|
497
|
-
withState: (state) => createStyleWrapper(state ? `${value}:${state}` : value, wrapper),
|
|
498
|
-
withMediaQuery: (breakpoint) => {
|
|
499
|
-
if (!breakpoint?.type) {
|
|
500
|
-
return createStyleWrapper(value, wrapper);
|
|
501
|
-
}
|
|
502
|
-
const size2 = `${breakpoint.type}:${breakpoint.width}px`;
|
|
503
|
-
return createStyleWrapper(value, (css) => `@media(${size2}){${css}}`);
|
|
504
|
-
},
|
|
505
|
-
wrap: (css) => {
|
|
506
|
-
const res = `${value}{${css}}`;
|
|
507
|
-
if (!wrapper) {
|
|
508
|
-
return res;
|
|
509
|
-
}
|
|
510
|
-
return wrapper(res);
|
|
511
|
-
}
|
|
512
|
-
};
|
|
513
|
-
}
|
|
514
|
-
async function propsToCss({ props, resolve, signal }) {
|
|
515
|
-
const transformed = await resolve({ props, signal });
|
|
516
|
-
return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
|
|
517
|
-
if (propValue === null) {
|
|
518
|
-
return acc;
|
|
519
|
-
}
|
|
520
|
-
acc.push(propName + ":" + propValue + ";");
|
|
521
|
-
return acc;
|
|
522
|
-
}, []).join("");
|
|
523
|
-
}
|
|
524
|
-
function wrapCssWithStyleElement(id, css) {
|
|
525
|
-
return `<style data-style-id="${id}">${css}</style>`;
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
// src/sync/enqueue-font.ts
|
|
529
|
-
var enqueueFont = (fontFamily, context = "preview") => {
|
|
530
|
-
const extendedWindow = window;
|
|
531
|
-
return extendedWindow.elementor?.helpers?.enqueueFont?.(fontFamily, context) ?? null;
|
|
532
|
-
};
|
|
533
|
-
|
|
534
|
-
// src/sync/get-canvas-iframe-body.ts
|
|
535
|
-
function getCanvasIframeBody() {
|
|
536
|
-
const extendedWindow = window;
|
|
537
|
-
return extendedWindow.elementor?.$preview?.[0]?.contentDocument?.body;
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
// src/init-styles-renderer.ts
|
|
541
|
-
var WRAPPER_DATA_ATTR = "data-styles-container";
|
|
542
|
-
var SELECTOR_PREFIX = ".elementor";
|
|
543
|
-
function initStylesRenderer() {
|
|
544
|
-
(0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.v1ReadyEvent)(), () => {
|
|
545
|
-
let abortController = null;
|
|
546
|
-
const resolve = createPropsResolver({
|
|
547
|
-
transformers: styleTransformersRegistry,
|
|
548
|
-
schema: (0, import_editor_styles.getStylesSchema)(),
|
|
549
|
-
onPropResolve: enqueueUsedFonts
|
|
550
|
-
});
|
|
551
|
-
const injectStyleElements = async () => {
|
|
552
|
-
const styleContainer = getStylesContainer();
|
|
553
|
-
const styles = import_editor_styles_repository.stylesRepository.all().reverse();
|
|
554
|
-
const breakpoints = (0, import_editor_responsive.getBreakpointsMap)();
|
|
555
|
-
if (abortController) {
|
|
556
|
-
abortController.abort();
|
|
557
|
-
}
|
|
558
|
-
abortController = new AbortController();
|
|
559
|
-
styleContainer.innerHTML = await renderStyles({
|
|
560
|
-
styles,
|
|
561
|
-
resolve,
|
|
562
|
-
breakpoints,
|
|
563
|
-
selectorPrefix: SELECTOR_PREFIX,
|
|
564
|
-
signal: abortController.signal
|
|
565
|
-
});
|
|
566
|
-
};
|
|
567
|
-
import_editor_styles_repository.stylesRepository.subscribe(injectStyleElements);
|
|
568
|
-
(0, import_editor_v1_adapters2.registerDataHook)("after", "editor/documents/attach-preview", injectStyleElements);
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
function getStylesContainer() {
|
|
572
|
-
const preview = getCanvasIframeBody();
|
|
573
|
-
const stylesContainer = preview?.querySelector(`[${WRAPPER_DATA_ATTR}]`);
|
|
574
|
-
if (stylesContainer) {
|
|
575
|
-
return stylesContainer;
|
|
576
|
-
}
|
|
577
|
-
const el = createStylesContainer();
|
|
578
|
-
preview?.prepend(el);
|
|
579
|
-
return el;
|
|
580
|
-
}
|
|
581
|
-
function createStylesContainer() {
|
|
582
|
-
const el = document.createElement("div");
|
|
583
|
-
el.style.display = "none";
|
|
584
|
-
el.setAttribute(WRAPPER_DATA_ATTR, "");
|
|
585
|
-
return el;
|
|
586
|
-
}
|
|
587
|
-
function enqueueUsedFonts({ key, value }) {
|
|
588
|
-
if (key !== "font-family" || typeof value !== "string") {
|
|
589
|
-
return;
|
|
590
|
-
}
|
|
591
|
-
enqueueFont(value);
|
|
592
|
-
}
|
|
593
|
-
|
|
594
680
|
// src/legacy/init-legacy-views.ts
|
|
595
681
|
var import_editor_elements2 = require("@elementor/editor-elements");
|
|
596
|
-
var
|
|
682
|
+
var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
|
|
597
683
|
|
|
598
684
|
// src/renderers/create-dom-renderer.ts
|
|
599
685
|
var import_twing = require("@elementor/twing");
|
|
@@ -659,11 +745,13 @@ function createElementViewClassDeclaration() {
|
|
|
659
745
|
onRender(...args) {
|
|
660
746
|
super.onRender(...args);
|
|
661
747
|
this.#dispatchEvent("elementor/preview/atomic-widget/render");
|
|
748
|
+
this.#dispatchPreviewEvent("elementor/element/render");
|
|
662
749
|
}
|
|
663
750
|
// Dispatch `destroy` event so the overlay layer will be updated
|
|
664
751
|
onDestroy(...args) {
|
|
665
752
|
super.onDestroy(...args);
|
|
666
753
|
this.#dispatchEvent("elementor/preview/atomic-widget/destroy");
|
|
754
|
+
this.#dispatchPreviewEvent("elementor/element/destroy");
|
|
667
755
|
}
|
|
668
756
|
attributes() {
|
|
669
757
|
return {
|
|
@@ -697,31 +785,23 @@ function createElementViewClassDeclaration() {
|
|
|
697
785
|
})
|
|
698
786
|
);
|
|
699
787
|
}
|
|
788
|
+
#dispatchPreviewEvent(eventType) {
|
|
789
|
+
legacyWindow.elementor?.$preview?.[0]?.contentWindow.dispatchEvent(
|
|
790
|
+
new CustomEvent(eventType, {
|
|
791
|
+
detail: {
|
|
792
|
+
id: this.model.get("id"),
|
|
793
|
+
type: this.model.get("widgetType"),
|
|
794
|
+
element: this.getDomElement().get(0)
|
|
795
|
+
}
|
|
796
|
+
})
|
|
797
|
+
);
|
|
798
|
+
}
|
|
700
799
|
getContextMenuGroups() {
|
|
701
800
|
return super.getContextMenuGroups().filter((group) => group.name !== "save");
|
|
702
801
|
}
|
|
703
802
|
};
|
|
704
803
|
}
|
|
705
804
|
|
|
706
|
-
// src/legacy/signalized-process.ts
|
|
707
|
-
function signalizedProcess(signal, steps = []) {
|
|
708
|
-
return {
|
|
709
|
-
then: (cb) => {
|
|
710
|
-
steps.push(cb);
|
|
711
|
-
return signalizedProcess(signal, steps);
|
|
712
|
-
},
|
|
713
|
-
execute: async () => {
|
|
714
|
-
let lastResult;
|
|
715
|
-
for (const step of steps) {
|
|
716
|
-
if (signal.aborted) {
|
|
717
|
-
break;
|
|
718
|
-
}
|
|
719
|
-
lastResult = await step(lastResult, signal);
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
};
|
|
723
|
-
}
|
|
724
|
-
|
|
725
805
|
// src/legacy/create-templated-element-type.ts
|
|
726
806
|
function createTemplatedElementType({ type, renderer, element }) {
|
|
727
807
|
const legacyWindow = window;
|
|
@@ -802,7 +882,7 @@ function createTemplatedElementViewClassDeclaration({
|
|
|
802
882
|
|
|
803
883
|
// src/legacy/init-legacy-views.ts
|
|
804
884
|
function initLegacyViews() {
|
|
805
|
-
(0,
|
|
885
|
+
(0, import_editor_v1_adapters4.__privateListenTo)((0, import_editor_v1_adapters4.v1ReadyEvent)(), () => {
|
|
806
886
|
const config = (0, import_editor_elements2.getWidgetsCache)() ?? {};
|
|
807
887
|
const legacyWindow = window;
|
|
808
888
|
const renderer = createDomRenderer();
|
|
@@ -816,19 +896,102 @@ function initLegacyViews() {
|
|
|
816
896
|
});
|
|
817
897
|
}
|
|
818
898
|
|
|
819
|
-
// src/
|
|
899
|
+
// src/prevent-link-in-link-commands.ts
|
|
900
|
+
var import_editor_elements3 = require("@elementor/editor-elements");
|
|
901
|
+
var import_editor_notifications = require("@elementor/editor-notifications");
|
|
820
902
|
var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
|
|
903
|
+
var import_i18n = require("@wordpress/i18n");
|
|
904
|
+
function initLinkInLinkPrevention() {
|
|
905
|
+
(0, import_editor_v1_adapters5.blockCommand)({
|
|
906
|
+
command: "document/elements/paste",
|
|
907
|
+
condition: blockLinkInLinkPaste
|
|
908
|
+
});
|
|
909
|
+
(0, import_editor_v1_adapters5.blockCommand)({
|
|
910
|
+
command: "document/elements/move",
|
|
911
|
+
condition: blockLinkInLinkMove
|
|
912
|
+
});
|
|
913
|
+
}
|
|
914
|
+
var learnMoreActionProps = {
|
|
915
|
+
href: "https://go.elementor.com/element-link-inside-link-infotip",
|
|
916
|
+
target: "_blank",
|
|
917
|
+
color: "inherit",
|
|
918
|
+
variant: "text",
|
|
919
|
+
sx: {
|
|
920
|
+
marginInlineStart: "20px"
|
|
921
|
+
},
|
|
922
|
+
children: "Learn more"
|
|
923
|
+
};
|
|
924
|
+
function blockLinkInLinkPaste(args) {
|
|
925
|
+
const { containers = [args.container], storageType } = args;
|
|
926
|
+
const targetElements = containers;
|
|
927
|
+
if (storageType !== "localstorage") {
|
|
928
|
+
return false;
|
|
929
|
+
}
|
|
930
|
+
const data = window?.elementorCommon?.storage?.get();
|
|
931
|
+
if (!data?.clipboard?.elements) {
|
|
932
|
+
return false;
|
|
933
|
+
}
|
|
934
|
+
const sourceElements = data.clipboard.elements;
|
|
935
|
+
const notification = {
|
|
936
|
+
type: "default",
|
|
937
|
+
message: (0, import_i18n.__)(
|
|
938
|
+
"To paste a link to this element, first remove the link from it's parent container.",
|
|
939
|
+
"elementor"
|
|
940
|
+
),
|
|
941
|
+
id: "paste-in-link-blocked",
|
|
942
|
+
additionalActionProps: [learnMoreActionProps]
|
|
943
|
+
};
|
|
944
|
+
const blocked = shouldBlock(sourceElements, targetElements);
|
|
945
|
+
if (blocked) {
|
|
946
|
+
(0, import_editor_notifications.notify)(notification);
|
|
947
|
+
}
|
|
948
|
+
return blocked;
|
|
949
|
+
}
|
|
950
|
+
function blockLinkInLinkMove(args) {
|
|
951
|
+
const { containers = [args.container], target } = args;
|
|
952
|
+
const sourceElements = containers;
|
|
953
|
+
const targetElement = target;
|
|
954
|
+
const notification = {
|
|
955
|
+
type: "default",
|
|
956
|
+
message: (0, import_i18n.__)("To drag a link to this element, first remove the link from it's parent container.", "elementor"),
|
|
957
|
+
id: "move-in-link-blocked",
|
|
958
|
+
additionalActionProps: [learnMoreActionProps]
|
|
959
|
+
};
|
|
960
|
+
const isBlocked = shouldBlock(sourceElements, [targetElement]);
|
|
961
|
+
if (isBlocked) {
|
|
962
|
+
(0, import_editor_notifications.notify)(notification);
|
|
963
|
+
}
|
|
964
|
+
return isBlocked;
|
|
965
|
+
}
|
|
966
|
+
function shouldBlock(sourceElements, targetElements) {
|
|
967
|
+
if (!sourceElements?.length || !targetElements?.length) {
|
|
968
|
+
return false;
|
|
969
|
+
}
|
|
970
|
+
const isSourceContainsAnAnchor = sourceElements.some((src) => {
|
|
971
|
+
return src?.id ? (0, import_editor_elements3.isElementAnchored)(src.id) || !!(0, import_editor_elements3.getAnchoredDescendantId)(src.id) : false;
|
|
972
|
+
});
|
|
973
|
+
if (!isSourceContainsAnAnchor) {
|
|
974
|
+
return false;
|
|
975
|
+
}
|
|
976
|
+
const isTargetContainsAnAnchor = targetElements.some((target) => {
|
|
977
|
+
return target?.id ? (0, import_editor_elements3.isElementAnchored)(target.id) || !!(0, import_editor_elements3.getAnchoredAncestorId)(target.id) : false;
|
|
978
|
+
});
|
|
979
|
+
return isTargetContainsAnAnchor;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
// src/style-commands/paste-style.ts
|
|
983
|
+
var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
|
|
821
984
|
|
|
822
985
|
// src/style-commands/undoable-actions/paste-element-style.ts
|
|
823
|
-
var
|
|
986
|
+
var import_editor_elements5 = require("@elementor/editor-elements");
|
|
824
987
|
var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
|
|
825
|
-
var
|
|
826
|
-
var
|
|
988
|
+
var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
|
|
989
|
+
var import_i18n3 = require("@wordpress/i18n");
|
|
827
990
|
|
|
828
991
|
// src/style-commands/utils.ts
|
|
829
|
-
var
|
|
992
|
+
var import_editor_elements4 = require("@elementor/editor-elements");
|
|
830
993
|
var import_editor_props2 = require("@elementor/editor-props");
|
|
831
|
-
var
|
|
994
|
+
var import_i18n2 = require("@wordpress/i18n");
|
|
832
995
|
function hasAtomicWidgets(args) {
|
|
833
996
|
const { containers = [args.container] } = args;
|
|
834
997
|
return containers.some(isAtomicWidget);
|
|
@@ -851,7 +1014,7 @@ function getClassesProp(container) {
|
|
|
851
1014
|
}
|
|
852
1015
|
function getContainerSchema(container) {
|
|
853
1016
|
const type = container?.model.get("widgetType") || container?.model.get("elType");
|
|
854
|
-
const widgetsCache = (0,
|
|
1017
|
+
const widgetsCache = (0, import_editor_elements4.getWidgetsCache)();
|
|
855
1018
|
const elementType = widgetsCache?.[type];
|
|
856
1019
|
return elementType?.atomic_props_schema ?? null;
|
|
857
1020
|
}
|
|
@@ -864,11 +1027,11 @@ function getClipboardElements(storageKey = "clipboard") {
|
|
|
864
1027
|
}
|
|
865
1028
|
}
|
|
866
1029
|
function getTitleForContainers(containers) {
|
|
867
|
-
return containers.length > 1 ? (0,
|
|
1030
|
+
return containers.length > 1 ? (0, import_i18n2.__)("Elements", "elementor") : (0, import_editor_elements4.getElementLabel)(containers[0].id);
|
|
868
1031
|
}
|
|
869
1032
|
|
|
870
1033
|
// src/style-commands/undoable-actions/paste-element-style.ts
|
|
871
|
-
var undoablePasteElementStyle = () => (0,
|
|
1034
|
+
var undoablePasteElementStyle = () => (0, import_editor_v1_adapters6.undoable)(
|
|
872
1035
|
{
|
|
873
1036
|
do: ({ containers, newStyle }) => {
|
|
874
1037
|
return containers.map((container) => {
|
|
@@ -877,7 +1040,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters4.undoable)(
|
|
|
877
1040
|
if (!classesProp) {
|
|
878
1041
|
return null;
|
|
879
1042
|
}
|
|
880
|
-
const originalStyles = (0,
|
|
1043
|
+
const originalStyles = (0, import_editor_elements5.getElementStyles)(container.id);
|
|
881
1044
|
const [styleId, styleDef] = Object.entries(originalStyles ?? {})[0] ?? [];
|
|
882
1045
|
const originalStyle = Object.keys(styleDef ?? {}).length ? styleDef : null;
|
|
883
1046
|
const revertData = {
|
|
@@ -886,7 +1049,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters4.undoable)(
|
|
|
886
1049
|
};
|
|
887
1050
|
if (styleId) {
|
|
888
1051
|
newStyle.variants.forEach(({ meta, props }) => {
|
|
889
|
-
(0,
|
|
1052
|
+
(0, import_editor_elements5.updateElementStyle)({
|
|
890
1053
|
elementId,
|
|
891
1054
|
styleId,
|
|
892
1055
|
meta,
|
|
@@ -896,10 +1059,10 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters4.undoable)(
|
|
|
896
1059
|
} else {
|
|
897
1060
|
const [firstVariant] = newStyle.variants;
|
|
898
1061
|
const additionalVariants = newStyle.variants.slice(1);
|
|
899
|
-
revertData.styleId = (0,
|
|
1062
|
+
revertData.styleId = (0, import_editor_elements5.createElementStyle)({
|
|
900
1063
|
elementId,
|
|
901
1064
|
classesProp,
|
|
902
|
-
label: import_editor_styles_repository2.
|
|
1065
|
+
label: import_editor_styles_repository2.ELEMENTS_STYLES_RESERVED_LABEL,
|
|
903
1066
|
...firstVariant,
|
|
904
1067
|
additionalVariants
|
|
905
1068
|
});
|
|
@@ -914,7 +1077,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters4.undoable)(
|
|
|
914
1077
|
return;
|
|
915
1078
|
}
|
|
916
1079
|
if (!revertData.originalStyle) {
|
|
917
|
-
(0,
|
|
1080
|
+
(0, import_editor_elements5.deleteElementStyle)(container.id, revertData.styleId);
|
|
918
1081
|
return;
|
|
919
1082
|
}
|
|
920
1083
|
const classesProp = getClassesProp(container);
|
|
@@ -923,10 +1086,10 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters4.undoable)(
|
|
|
923
1086
|
}
|
|
924
1087
|
const [firstVariant] = revertData.originalStyle.variants;
|
|
925
1088
|
const additionalVariants = revertData.originalStyle.variants.slice(1);
|
|
926
|
-
(0,
|
|
1089
|
+
(0, import_editor_elements5.createElementStyle)({
|
|
927
1090
|
elementId: container.id,
|
|
928
1091
|
classesProp,
|
|
929
|
-
label: import_editor_styles_repository2.
|
|
1092
|
+
label: import_editor_styles_repository2.ELEMENTS_STYLES_RESERVED_LABEL,
|
|
930
1093
|
styleId: revertData.styleId,
|
|
931
1094
|
...firstVariant,
|
|
932
1095
|
additionalVariants
|
|
@@ -936,19 +1099,19 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters4.undoable)(
|
|
|
936
1099
|
},
|
|
937
1100
|
{
|
|
938
1101
|
title: ({ containers }) => getTitleForContainers(containers),
|
|
939
|
-
subtitle: (0,
|
|
1102
|
+
subtitle: (0, import_i18n3.__)("Style Pasted", "elementor")
|
|
940
1103
|
}
|
|
941
1104
|
);
|
|
942
1105
|
|
|
943
1106
|
// src/style-commands/paste-style.ts
|
|
944
1107
|
function initPasteStyleCommand() {
|
|
945
1108
|
const pasteElementStyleCommand = undoablePasteElementStyle();
|
|
946
|
-
(0,
|
|
1109
|
+
(0, import_editor_v1_adapters7.blockCommand)({
|
|
947
1110
|
command: "document/elements/paste-style",
|
|
948
1111
|
condition: hasAtomicWidgets
|
|
949
1112
|
});
|
|
950
|
-
(0,
|
|
951
|
-
(0,
|
|
1113
|
+
(0, import_editor_v1_adapters7.__privateListenTo)(
|
|
1114
|
+
(0, import_editor_v1_adapters7.commandStartEvent)("document/elements/paste-style"),
|
|
952
1115
|
(e) => pasteStyles(e.args, pasteElementStyleCommand)
|
|
953
1116
|
);
|
|
954
1117
|
}
|
|
@@ -972,21 +1135,21 @@ function pasteStyles(args, pasteCallback) {
|
|
|
972
1135
|
}
|
|
973
1136
|
|
|
974
1137
|
// src/style-commands/reset-style.ts
|
|
975
|
-
var
|
|
1138
|
+
var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
|
|
976
1139
|
|
|
977
1140
|
// src/style-commands/undoable-actions/reset-element-style.ts
|
|
978
|
-
var
|
|
1141
|
+
var import_editor_elements6 = require("@elementor/editor-elements");
|
|
979
1142
|
var import_editor_styles_repository3 = require("@elementor/editor-styles-repository");
|
|
980
|
-
var
|
|
981
|
-
var
|
|
982
|
-
var undoableResetElementStyle = () => (0,
|
|
1143
|
+
var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
|
|
1144
|
+
var import_i18n4 = require("@wordpress/i18n");
|
|
1145
|
+
var undoableResetElementStyle = () => (0, import_editor_v1_adapters8.undoable)(
|
|
983
1146
|
{
|
|
984
1147
|
do: ({ containers }) => {
|
|
985
1148
|
return containers.map((container) => {
|
|
986
1149
|
const elementId = container.model.get("id");
|
|
987
|
-
const containerStyles = (0,
|
|
1150
|
+
const containerStyles = (0, import_editor_elements6.getElementStyles)(elementId);
|
|
988
1151
|
Object.keys(containerStyles ?? {}).forEach(
|
|
989
|
-
(styleId) => (0,
|
|
1152
|
+
(styleId) => (0, import_editor_elements6.deleteElementStyle)(elementId, styleId)
|
|
990
1153
|
);
|
|
991
1154
|
return containerStyles;
|
|
992
1155
|
});
|
|
@@ -1002,11 +1165,11 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters6.undoable)(
|
|
|
1002
1165
|
Object.entries(containerStyles ?? {}).forEach(([styleId, style]) => {
|
|
1003
1166
|
const [firstVariant] = style.variants;
|
|
1004
1167
|
const additionalVariants = style.variants.slice(1);
|
|
1005
|
-
(0,
|
|
1168
|
+
(0, import_editor_elements6.createElementStyle)({
|
|
1006
1169
|
elementId,
|
|
1007
1170
|
classesProp,
|
|
1008
1171
|
styleId,
|
|
1009
|
-
label: import_editor_styles_repository3.
|
|
1172
|
+
label: import_editor_styles_repository3.ELEMENTS_STYLES_RESERVED_LABEL,
|
|
1010
1173
|
...firstVariant,
|
|
1011
1174
|
additionalVariants
|
|
1012
1175
|
});
|
|
@@ -1016,19 +1179,19 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters6.undoable)(
|
|
|
1016
1179
|
},
|
|
1017
1180
|
{
|
|
1018
1181
|
title: ({ containers }) => getTitleForContainers(containers),
|
|
1019
|
-
subtitle: (0,
|
|
1182
|
+
subtitle: (0, import_i18n4.__)("Style Reset", "elementor")
|
|
1020
1183
|
}
|
|
1021
1184
|
);
|
|
1022
1185
|
|
|
1023
1186
|
// src/style-commands/reset-style.ts
|
|
1024
1187
|
function initResetStyleCommand() {
|
|
1025
1188
|
const resetElementStyles = undoableResetElementStyle();
|
|
1026
|
-
(0,
|
|
1189
|
+
(0, import_editor_v1_adapters9.blockCommand)({
|
|
1027
1190
|
command: "document/elements/reset-style",
|
|
1028
1191
|
condition: hasAtomicWidgets
|
|
1029
1192
|
});
|
|
1030
|
-
(0,
|
|
1031
|
-
(0,
|
|
1193
|
+
(0, import_editor_v1_adapters9.__privateListenTo)(
|
|
1194
|
+
(0, import_editor_v1_adapters9.commandStartEvent)("document/elements/reset-style"),
|
|
1032
1195
|
(e) => resetStyles(e.args, resetElementStyles)
|
|
1033
1196
|
);
|
|
1034
1197
|
}
|
|
@@ -1050,20 +1213,23 @@ function initStyleCommands() {
|
|
|
1050
1213
|
// src/init.tsx
|
|
1051
1214
|
function init() {
|
|
1052
1215
|
initStyleTransformers();
|
|
1053
|
-
initStylesRenderer();
|
|
1054
1216
|
initStyleCommands();
|
|
1217
|
+
initLinkInLinkPrevention();
|
|
1055
1218
|
initLegacyViews();
|
|
1056
1219
|
initSettingsTransformers();
|
|
1057
1220
|
(0, import_editor.injectIntoTop)({
|
|
1058
1221
|
id: "elements-overlays",
|
|
1059
1222
|
component: ElementsOverlays
|
|
1060
1223
|
});
|
|
1224
|
+
(0, import_editor.injectIntoTop)({
|
|
1225
|
+
id: "canvas-style-render",
|
|
1226
|
+
component: StyleRenderer
|
|
1227
|
+
});
|
|
1061
1228
|
}
|
|
1062
|
-
|
|
1063
|
-
// src/index.ts
|
|
1064
|
-
init();
|
|
1065
1229
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1066
1230
|
0 && (module.exports = {
|
|
1231
|
+
createTransformer,
|
|
1232
|
+
init,
|
|
1067
1233
|
settingsTransformersRegistry,
|
|
1068
1234
|
styleTransformersRegistry
|
|
1069
1235
|
});
|