@elementor/editor-canvas 3.35.0-351 → 3.35.0-352
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/dist/index.d.mts +8 -2
- package/dist/index.d.ts +8 -2
- package/dist/index.js +351 -216
- package/dist/index.mjs +321 -184
- package/package.json +18 -17
- package/src/components/__tests__/elements-overlays.test.tsx +0 -26
- package/src/components/elements-overlays.tsx +0 -8
- package/src/legacy/create-inline-editing-element-type.tsx +199 -0
- package/src/legacy/create-templated-element-type.ts +2 -2
- package/src/legacy/init-legacy-views.ts +5 -1
- package/src/legacy/types.ts +16 -7
- package/src/utils/__tests__/inline-editing.test.ts +553 -0
- package/src/utils/inline-editing-utils.ts +101 -6
- package/src/components/__tests__/inline-editor-overlay.test.tsx +0 -245
- package/src/components/inline-editor-overlay.tsx +0 -79
package/dist/index.js
CHANGED
|
@@ -243,8 +243,8 @@ var subscribeToStylesRepository = () => {
|
|
|
243
243
|
});
|
|
244
244
|
};
|
|
245
245
|
var renameClass = (oldClassName, newClassName) => {
|
|
246
|
-
Object.values((0, import_editor_documents.getV1DocumentsManager)().documents).forEach((
|
|
247
|
-
const container =
|
|
246
|
+
Object.values((0, import_editor_documents.getV1DocumentsManager)().documents).forEach((document2) => {
|
|
247
|
+
const container = document2.container;
|
|
248
248
|
container.view?.el?.querySelectorAll(`.elementor .${oldClassName}`).forEach((element) => {
|
|
249
249
|
element.classList.replace(oldClassName, newClassName);
|
|
250
250
|
});
|
|
@@ -252,92 +252,9 @@ var renameClass = (oldClassName, newClassName) => {
|
|
|
252
252
|
};
|
|
253
253
|
|
|
254
254
|
// src/components/elements-overlays.tsx
|
|
255
|
-
var React3 = __toESM(require("react"));
|
|
256
|
-
var import_editor_elements4 = require("@elementor/editor-elements");
|
|
257
|
-
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
258
|
-
|
|
259
|
-
// src/utils/inline-editing-utils.ts
|
|
260
|
-
var import_editor_elements2 = require("@elementor/editor-elements");
|
|
261
|
-
var WIDGET_PROPERTY_MAP = {
|
|
262
|
-
"e-heading": "title",
|
|
263
|
-
"e-paragraph": "paragraph"
|
|
264
|
-
};
|
|
265
|
-
var getHtmlPropertyName = (container) => {
|
|
266
|
-
const widgetType = container?.model?.get("widgetType") ?? container?.model?.get("elType");
|
|
267
|
-
if (!widgetType) {
|
|
268
|
-
return "";
|
|
269
|
-
}
|
|
270
|
-
if (WIDGET_PROPERTY_MAP[widgetType]) {
|
|
271
|
-
return WIDGET_PROPERTY_MAP[widgetType];
|
|
272
|
-
}
|
|
273
|
-
const propsSchema = (0, import_editor_elements2.getElementType)(widgetType)?.propsSchema;
|
|
274
|
-
if (!propsSchema) {
|
|
275
|
-
return "";
|
|
276
|
-
}
|
|
277
|
-
const entry = Object.entries(propsSchema).find(([, propType]) => propType.key === "html");
|
|
278
|
-
return entry?.[0] ?? "";
|
|
279
|
-
};
|
|
280
|
-
var hasInlineEditableProperty = (containerId) => {
|
|
281
|
-
const container = (0, import_editor_elements2.getContainer)(containerId);
|
|
282
|
-
const widgetType = container?.model?.get("widgetType") ?? container?.model?.get("elType");
|
|
283
|
-
if (!widgetType) {
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
286
|
-
return widgetType in WIDGET_PROPERTY_MAP;
|
|
287
|
-
};
|
|
288
|
-
var getInlineEditablePropertyName = (container) => {
|
|
289
|
-
return getHtmlPropertyName(container);
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
// src/components/inline-editor-overlay.tsx
|
|
293
255
|
var React2 = __toESM(require("react"));
|
|
294
|
-
var
|
|
295
|
-
var
|
|
296
|
-
var import_editor_props2 = require("@elementor/editor-props");
|
|
297
|
-
var import_ui2 = require("@elementor/ui");
|
|
298
|
-
var import_utils2 = require("@elementor/utils");
|
|
299
|
-
var import_react6 = require("@floating-ui/react");
|
|
300
|
-
|
|
301
|
-
// src/hooks/use-floating-on-element.ts
|
|
302
|
-
var import_react2 = require("react");
|
|
303
|
-
var import_react3 = require("@floating-ui/react");
|
|
304
|
-
function useFloatingOnElement({ element, isSelected }) {
|
|
305
|
-
const [isOpen, setIsOpen] = (0, import_react2.useState)(false);
|
|
306
|
-
const sizeModifier = 2;
|
|
307
|
-
const { refs, floatingStyles, context } = (0, import_react3.useFloating)({
|
|
308
|
-
// Must be controlled for interactions (like hover) to work.
|
|
309
|
-
open: isOpen || isSelected,
|
|
310
|
-
onOpenChange: setIsOpen,
|
|
311
|
-
whileElementsMounted: import_react3.autoUpdate,
|
|
312
|
-
middleware: [
|
|
313
|
-
// Match the floating element's size to the reference element.
|
|
314
|
-
(0, import_react3.size)(() => {
|
|
315
|
-
return {
|
|
316
|
-
apply({ elements, rects }) {
|
|
317
|
-
Object.assign(elements.floating.style, {
|
|
318
|
-
width: `${rects.reference.width + sizeModifier}px`,
|
|
319
|
-
height: `${rects.reference.height + sizeModifier}px`
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
};
|
|
323
|
-
}),
|
|
324
|
-
// Center the floating element on the reference element.
|
|
325
|
-
(0, import_react3.offset)(({ rects }) => -rects.reference.height / 2 - rects.floating.height / 2)
|
|
326
|
-
]
|
|
327
|
-
});
|
|
328
|
-
(0, import_react2.useEffect)(() => {
|
|
329
|
-
refs.setReference(element);
|
|
330
|
-
}, [element, refs]);
|
|
331
|
-
return {
|
|
332
|
-
isVisible: isOpen || isSelected,
|
|
333
|
-
context,
|
|
334
|
-
floating: {
|
|
335
|
-
setRef: refs.setFloating,
|
|
336
|
-
ref: refs.floating,
|
|
337
|
-
styles: floatingStyles
|
|
338
|
-
}
|
|
339
|
-
};
|
|
340
|
-
}
|
|
256
|
+
var import_editor_elements2 = require("@elementor/editor-elements");
|
|
257
|
+
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
341
258
|
|
|
342
259
|
// src/components/outline-overlay.tsx
|
|
343
260
|
var React = __toESM(require("react"));
|
|
@@ -345,9 +262,9 @@ var import_ui = require("@elementor/ui");
|
|
|
345
262
|
var import_react5 = require("@floating-ui/react");
|
|
346
263
|
|
|
347
264
|
// src/hooks/use-bind-react-props-to-element.ts
|
|
348
|
-
var
|
|
265
|
+
var import_react2 = require("react");
|
|
349
266
|
function useBindReactPropsToElement(element, getProps) {
|
|
350
|
-
(0,
|
|
267
|
+
(0, import_react2.useEffect)(() => {
|
|
351
268
|
const el = element;
|
|
352
269
|
const { events, attrs } = groupProps(getProps());
|
|
353
270
|
events.forEach(([eventName, listener]) => el.addEventListener(eventName, listener));
|
|
@@ -378,6 +295,47 @@ function groupProps(props) {
|
|
|
378
295
|
);
|
|
379
296
|
}
|
|
380
297
|
|
|
298
|
+
// src/hooks/use-floating-on-element.ts
|
|
299
|
+
var import_react3 = require("react");
|
|
300
|
+
var import_react4 = require("@floating-ui/react");
|
|
301
|
+
function useFloatingOnElement({ element, isSelected }) {
|
|
302
|
+
const [isOpen, setIsOpen] = (0, import_react3.useState)(false);
|
|
303
|
+
const sizeModifier = 2;
|
|
304
|
+
const { refs, floatingStyles, context } = (0, import_react4.useFloating)({
|
|
305
|
+
// Must be controlled for interactions (like hover) to work.
|
|
306
|
+
open: isOpen || isSelected,
|
|
307
|
+
onOpenChange: setIsOpen,
|
|
308
|
+
whileElementsMounted: import_react4.autoUpdate,
|
|
309
|
+
middleware: [
|
|
310
|
+
// Match the floating element's size to the reference element.
|
|
311
|
+
(0, import_react4.size)(() => {
|
|
312
|
+
return {
|
|
313
|
+
apply({ elements, rects }) {
|
|
314
|
+
Object.assign(elements.floating.style, {
|
|
315
|
+
width: `${rects.reference.width + sizeModifier}px`,
|
|
316
|
+
height: `${rects.reference.height + sizeModifier}px`
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
}),
|
|
321
|
+
// Center the floating element on the reference element.
|
|
322
|
+
(0, import_react4.offset)(({ rects }) => -rects.reference.height / 2 - rects.floating.height / 2)
|
|
323
|
+
]
|
|
324
|
+
});
|
|
325
|
+
(0, import_react3.useEffect)(() => {
|
|
326
|
+
refs.setReference(element);
|
|
327
|
+
}, [element, refs]);
|
|
328
|
+
return {
|
|
329
|
+
isVisible: isOpen || isSelected,
|
|
330
|
+
context,
|
|
331
|
+
floating: {
|
|
332
|
+
setRef: refs.setFloating,
|
|
333
|
+
ref: refs.floating,
|
|
334
|
+
styles: floatingStyles
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
|
|
381
339
|
// src/hooks/use-has-overlapping.ts
|
|
382
340
|
var possibleOverlappingSelectors = [".e-off-canvas"];
|
|
383
341
|
var useHasOverlapping = () => {
|
|
@@ -424,75 +382,16 @@ var OutlineOverlay = ({ element, isSelected, id }) => {
|
|
|
424
382
|
));
|
|
425
383
|
};
|
|
426
384
|
|
|
427
|
-
// src/components/inline-editor-overlay.tsx
|
|
428
|
-
var OVERLAY_Z_INDEX = 1e3;
|
|
429
|
-
var DEBOUNCE_DELAY = 100;
|
|
430
|
-
var InlineEditorOverlay = ({ element, isSelected, id }) => {
|
|
431
|
-
const { floating, isVisible } = useFloatingOnElement({ element, isSelected });
|
|
432
|
-
const propertyName = React2.useMemo(() => {
|
|
433
|
-
const container = (0, import_editor_elements3.getContainer)(id);
|
|
434
|
-
return getInlineEditablePropertyName(container);
|
|
435
|
-
}, [id]);
|
|
436
|
-
const contentProp = (0, import_editor_elements3.useElementSetting)(id, propertyName);
|
|
437
|
-
const value = React2.useMemo(() => import_editor_props2.htmlPropTypeUtil.extract(contentProp) || "", [contentProp]);
|
|
438
|
-
const debouncedUpdateRef = React2.useRef(null);
|
|
439
|
-
const lastValueRef = React2.useRef("");
|
|
440
|
-
React2.useEffect(() => {
|
|
441
|
-
debouncedUpdateRef.current = (0, import_utils2.debounce)((newValue) => {
|
|
442
|
-
const textContent = newValue.replace(/<[^>]*>/g, "").trim();
|
|
443
|
-
const valueToSave = textContent === "" ? " " : newValue;
|
|
444
|
-
(0, import_editor_elements3.updateElementSettings)({
|
|
445
|
-
id,
|
|
446
|
-
props: {
|
|
447
|
-
[propertyName]: import_editor_props2.htmlPropTypeUtil.create(valueToSave)
|
|
448
|
-
},
|
|
449
|
-
withHistory: true
|
|
450
|
-
});
|
|
451
|
-
}, DEBOUNCE_DELAY);
|
|
452
|
-
return () => {
|
|
453
|
-
debouncedUpdateRef.current?.cancel?.();
|
|
454
|
-
};
|
|
455
|
-
}, [id, propertyName]);
|
|
456
|
-
const handleValueChange = React2.useCallback((newValue) => {
|
|
457
|
-
lastValueRef.current = newValue;
|
|
458
|
-
debouncedUpdateRef.current?.(newValue);
|
|
459
|
-
}, []);
|
|
460
|
-
React2.useEffect(() => {
|
|
461
|
-
if (!isVisible && debouncedUpdateRef.current?.pending?.()) {
|
|
462
|
-
debouncedUpdateRef.current.flush(lastValueRef.current);
|
|
463
|
-
}
|
|
464
|
-
}, [isVisible]);
|
|
465
|
-
if (!isVisible) {
|
|
466
|
-
return null;
|
|
467
|
-
}
|
|
468
|
-
return /* @__PURE__ */ React2.createElement(import_react6.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React2.createElement(
|
|
469
|
-
import_ui2.Box,
|
|
470
|
-
{
|
|
471
|
-
ref: floating.setRef,
|
|
472
|
-
style: {
|
|
473
|
-
...floating.styles,
|
|
474
|
-
zIndex: OVERLAY_Z_INDEX,
|
|
475
|
-
pointerEvents: "auto"
|
|
476
|
-
}
|
|
477
|
-
},
|
|
478
|
-
/* @__PURE__ */ React2.createElement(import_editor_controls.InlineEditor, { value, setValue: handleValueChange, showToolbar: isSelected })
|
|
479
|
-
));
|
|
480
|
-
};
|
|
481
|
-
|
|
482
385
|
// src/components/elements-overlays.tsx
|
|
483
386
|
var ELEMENTS_DATA_ATTR = "atomic";
|
|
484
387
|
var overlayRegistry = [
|
|
485
388
|
{
|
|
486
389
|
component: OutlineOverlay,
|
|
487
390
|
shouldRender: () => true
|
|
488
|
-
},
|
|
489
|
-
{
|
|
490
|
-
component: InlineEditorOverlay,
|
|
491
|
-
shouldRender: ({ id, isSelected }) => isSelected && hasInlineEditableProperty(id) && (0, import_editor_v1_adapters2.isExperimentActive)("v4-inline-text-editing")
|
|
492
391
|
}
|
|
493
392
|
];
|
|
494
393
|
function ElementsOverlays() {
|
|
495
|
-
const selected = (0,
|
|
394
|
+
const selected = (0, import_editor_elements2.useSelectedElement)();
|
|
496
395
|
const elements = useElementsDom();
|
|
497
396
|
const currentEditMode = (0, import_editor_v1_adapters2.useEditMode)();
|
|
498
397
|
const isEditMode = currentEditMode === "edit";
|
|
@@ -504,7 +403,7 @@ function ElementsOverlays() {
|
|
|
504
403
|
return elements.map(([id, element]) => {
|
|
505
404
|
const isSelected = selected.element?.id === id;
|
|
506
405
|
return overlayRegistry.map(
|
|
507
|
-
({ shouldRender, component: Overlay }, index) => shouldRender({ id, element, isSelected }) && /* @__PURE__ */
|
|
406
|
+
({ shouldRender, component: Overlay }, index) => shouldRender({ id, element, isSelected }) && /* @__PURE__ */ React2.createElement(Overlay, { key: `${id}-${index}`, id, element, isSelected })
|
|
508
407
|
);
|
|
509
408
|
});
|
|
510
409
|
}
|
|
@@ -512,26 +411,26 @@ function useElementsDom() {
|
|
|
512
411
|
return (0, import_editor_v1_adapters2.__privateUseListenTo)(
|
|
513
412
|
[(0, import_editor_v1_adapters2.windowEvent)("elementor/editor/element-rendered"), (0, import_editor_v1_adapters2.windowEvent)("elementor/editor/element-destroyed")],
|
|
514
413
|
() => {
|
|
515
|
-
return (0,
|
|
414
|
+
return (0, import_editor_elements2.getElements)().filter((el) => ELEMENTS_DATA_ATTR in (el.view?.el?.dataset ?? {})).map((element) => [element.id, element.view?.getDomElement?.()?.get?.(0)]).filter((item) => !!item[1]);
|
|
516
415
|
}
|
|
517
416
|
);
|
|
518
417
|
}
|
|
519
418
|
|
|
520
419
|
// src/components/interactions-renderer.tsx
|
|
521
|
-
var
|
|
420
|
+
var React3 = __toESM(require("react"));
|
|
522
421
|
var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
|
|
523
|
-
var
|
|
422
|
+
var import_ui2 = require("@elementor/ui");
|
|
524
423
|
|
|
525
424
|
// src/hooks/use-interactions-items.ts
|
|
526
|
-
var
|
|
425
|
+
var import_react7 = require("react");
|
|
527
426
|
var import_editor_interactions = require("@elementor/editor-interactions");
|
|
528
427
|
var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
|
|
529
428
|
|
|
530
429
|
// src/hooks/use-on-mount.ts
|
|
531
|
-
var
|
|
430
|
+
var import_react6 = require("react");
|
|
532
431
|
function useOnMount(cb) {
|
|
533
|
-
const mounted = (0,
|
|
534
|
-
(0,
|
|
432
|
+
const mounted = (0, import_react6.useRef)(false);
|
|
433
|
+
(0, import_react6.useEffect)(() => {
|
|
535
434
|
if (!mounted.current) {
|
|
536
435
|
mounted.current = true;
|
|
537
436
|
cb();
|
|
@@ -541,8 +440,8 @@ function useOnMount(cb) {
|
|
|
541
440
|
|
|
542
441
|
// src/hooks/use-interactions-items.ts
|
|
543
442
|
function useInteractionsItems() {
|
|
544
|
-
const [interactionItems, setInteractionItems] = (0,
|
|
545
|
-
const providerAndSubscribers = (0,
|
|
443
|
+
const [interactionItems, setInteractionItems] = (0, import_react7.useState)({});
|
|
444
|
+
const providerAndSubscribers = (0, import_react7.useMemo)(() => {
|
|
546
445
|
try {
|
|
547
446
|
const providers = import_editor_interactions.interactionsRepository.getProviders();
|
|
548
447
|
const mapped = providers.map((provider) => {
|
|
@@ -559,7 +458,7 @@ function useInteractionsItems() {
|
|
|
559
458
|
return [];
|
|
560
459
|
}
|
|
561
460
|
}, []);
|
|
562
|
-
(0,
|
|
461
|
+
(0, import_react7.useEffect)(() => {
|
|
563
462
|
if (providerAndSubscribers.length === 0) {
|
|
564
463
|
return;
|
|
565
464
|
}
|
|
@@ -590,7 +489,7 @@ function useInteractionsItems() {
|
|
|
590
489
|
});
|
|
591
490
|
});
|
|
592
491
|
});
|
|
593
|
-
return (0,
|
|
492
|
+
return (0, import_react7.useMemo)(() => {
|
|
594
493
|
const result = Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items);
|
|
595
494
|
return result;
|
|
596
495
|
}, [interactionItems]);
|
|
@@ -626,7 +525,7 @@ function InteractionsRenderer() {
|
|
|
626
525
|
return null;
|
|
627
526
|
}
|
|
628
527
|
const interactionsData = JSON.stringify(Array.isArray(interactionItems) ? interactionItems : []);
|
|
629
|
-
return /* @__PURE__ */
|
|
528
|
+
return /* @__PURE__ */ React3.createElement(import_ui2.Portal, { container }, /* @__PURE__ */ React3.createElement(
|
|
630
529
|
"script",
|
|
631
530
|
{
|
|
632
531
|
type: "application/json",
|
|
@@ -642,9 +541,9 @@ function usePortalContainer() {
|
|
|
642
541
|
}
|
|
643
542
|
|
|
644
543
|
// src/components/style-renderer.tsx
|
|
645
|
-
var
|
|
544
|
+
var React4 = __toESM(require("react"));
|
|
646
545
|
var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
|
|
647
|
-
var
|
|
546
|
+
var import_ui3 = require("@elementor/ui");
|
|
648
547
|
|
|
649
548
|
// src/hooks/use-documents-css-links.ts
|
|
650
549
|
var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
|
|
@@ -676,14 +575,14 @@ function useDocumentsCssLinks() {
|
|
|
676
575
|
}));
|
|
677
576
|
});
|
|
678
577
|
}
|
|
679
|
-
function getDocumentsIdsInCanvas(
|
|
680
|
-
return [...
|
|
578
|
+
function getDocumentsIdsInCanvas(document2) {
|
|
579
|
+
return [...document2.body.querySelectorAll(`[${DOCUMENT_WRAPPER_ATTR}]`) ?? []].map(
|
|
681
580
|
(el) => el.getAttribute(DOCUMENT_WRAPPER_ATTR) || ""
|
|
682
581
|
);
|
|
683
582
|
}
|
|
684
|
-
function getDocumentsCssLinks(
|
|
583
|
+
function getDocumentsCssLinks(document2) {
|
|
685
584
|
return [
|
|
686
|
-
...
|
|
585
|
+
...document2.head.querySelectorAll(
|
|
687
586
|
`link[rel="stylesheet"][id^=${CSS_LINK_ID_PREFIX}][id$=${CSS_LINK_ID_SUFFIX}]`
|
|
688
587
|
) ?? []
|
|
689
588
|
];
|
|
@@ -694,7 +593,7 @@ function getLinkAttrs(el) {
|
|
|
694
593
|
}
|
|
695
594
|
|
|
696
595
|
// src/hooks/use-style-items.ts
|
|
697
|
-
var
|
|
596
|
+
var import_react10 = require("react");
|
|
698
597
|
var import_editor_responsive2 = require("@elementor/editor-responsive");
|
|
699
598
|
var import_editor_styles4 = require("@elementor/editor-styles");
|
|
700
599
|
var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
|
|
@@ -732,11 +631,11 @@ function signalizedProcess(signal, steps = []) {
|
|
|
732
631
|
}
|
|
733
632
|
|
|
734
633
|
// src/hooks/use-style-prop-resolver.ts
|
|
735
|
-
var
|
|
634
|
+
var import_react8 = require("react");
|
|
736
635
|
var import_editor_styles2 = require("@elementor/editor-styles");
|
|
737
636
|
|
|
738
637
|
// src/renderers/create-props-resolver.ts
|
|
739
|
-
var
|
|
638
|
+
var import_editor_props2 = require("@elementor/editor-props");
|
|
740
639
|
|
|
741
640
|
// src/renderers/multi-props.ts
|
|
742
641
|
var isMultiProps = (propValue) => {
|
|
@@ -774,7 +673,7 @@ function createPropsResolver({ transformers, schema: initialSchema, onPropResolv
|
|
|
774
673
|
if (value === null || value === void 0) {
|
|
775
674
|
return null;
|
|
776
675
|
}
|
|
777
|
-
if (!(0,
|
|
676
|
+
if (!(0, import_editor_props2.isTransformable)(value)) {
|
|
778
677
|
return value;
|
|
779
678
|
}
|
|
780
679
|
if (depth > TRANSFORM_DEPTH_LIMIT) {
|
|
@@ -783,8 +682,8 @@ function createPropsResolver({ transformers, schema: initialSchema, onPropResolv
|
|
|
783
682
|
if (value.disabled === true) {
|
|
784
683
|
return null;
|
|
785
684
|
}
|
|
786
|
-
value = (0,
|
|
787
|
-
if (!(0,
|
|
685
|
+
value = (0, import_editor_props2.migratePropValue)(value, type);
|
|
686
|
+
if (!(0, import_editor_props2.isTransformable)(value)) {
|
|
788
687
|
return value;
|
|
789
688
|
}
|
|
790
689
|
let transformablePropType = type;
|
|
@@ -860,7 +759,7 @@ var enqueueFont = (fontFamily, context = "preview") => {
|
|
|
860
759
|
|
|
861
760
|
// src/hooks/use-style-prop-resolver.ts
|
|
862
761
|
function useStylePropResolver() {
|
|
863
|
-
return (0,
|
|
762
|
+
return (0, import_react8.useMemo)(() => {
|
|
864
763
|
return createPropsResolver({
|
|
865
764
|
transformers: styleTransformersRegistry,
|
|
866
765
|
schema: (0, import_editor_styles2.getStylesSchema)(),
|
|
@@ -875,20 +774,20 @@ function useStylePropResolver() {
|
|
|
875
774
|
}
|
|
876
775
|
|
|
877
776
|
// src/hooks/use-style-renderer.ts
|
|
878
|
-
var
|
|
777
|
+
var import_react9 = require("react");
|
|
879
778
|
var import_editor_responsive = require("@elementor/editor-responsive");
|
|
880
779
|
|
|
881
780
|
// src/renderers/create-styles-renderer.ts
|
|
882
781
|
var import_editor_styles3 = require("@elementor/editor-styles");
|
|
883
|
-
var
|
|
782
|
+
var import_utils3 = require("@elementor/utils");
|
|
884
783
|
|
|
885
784
|
// src/renderers/errors.ts
|
|
886
|
-
var
|
|
887
|
-
var UnknownStyleTypeError = (0,
|
|
785
|
+
var import_utils2 = require("@elementor/utils");
|
|
786
|
+
var UnknownStyleTypeError = (0, import_utils2.createError)({
|
|
888
787
|
code: "unknown_style_type",
|
|
889
788
|
message: "Unknown style type"
|
|
890
789
|
});
|
|
891
|
-
var UnknownStyleStateError = (0,
|
|
790
|
+
var UnknownStyleStateError = (0, import_utils2.createError)({
|
|
892
791
|
code: "unknown_style_state",
|
|
893
792
|
message: "Unknown style state"
|
|
894
793
|
});
|
|
@@ -965,7 +864,7 @@ async function propsToCss({ props, resolve, signal }) {
|
|
|
965
864
|
}, []).join("");
|
|
966
865
|
}
|
|
967
866
|
function customCssToString(customCss) {
|
|
968
|
-
const decoded = (0,
|
|
867
|
+
const decoded = (0, import_utils3.decodeString)(customCss?.raw || "");
|
|
969
868
|
if (!decoded.trim()) {
|
|
970
869
|
return "";
|
|
971
870
|
}
|
|
@@ -976,7 +875,7 @@ function customCssToString(customCss) {
|
|
|
976
875
|
var SELECTOR_PREFIX = ".elementor";
|
|
977
876
|
function useStyleRenderer(resolve) {
|
|
978
877
|
const breakpoints = (0, import_editor_responsive.useBreakpointsMap)();
|
|
979
|
-
return (0,
|
|
878
|
+
return (0, import_react9.useMemo)(() => {
|
|
980
879
|
return createStylesRenderer({
|
|
981
880
|
selectorPrefix: SELECTOR_PREFIX,
|
|
982
881
|
breakpoints,
|
|
@@ -989,8 +888,8 @@ function useStyleRenderer(resolve) {
|
|
|
989
888
|
function useStyleItems() {
|
|
990
889
|
const resolve = useStylePropResolver();
|
|
991
890
|
const renderStyles = useStyleRenderer(resolve);
|
|
992
|
-
const [styleItems, setStyleItems] = (0,
|
|
993
|
-
const providerAndSubscribers = (0,
|
|
891
|
+
const [styleItems, setStyleItems] = (0, import_react10.useState)({});
|
|
892
|
+
const providerAndSubscribers = (0, import_react10.useMemo)(() => {
|
|
994
893
|
return import_editor_styles_repository2.stylesRepository.getProviders().map((provider) => {
|
|
995
894
|
return {
|
|
996
895
|
provider,
|
|
@@ -1002,7 +901,7 @@ function useStyleItems() {
|
|
|
1002
901
|
};
|
|
1003
902
|
});
|
|
1004
903
|
}, [renderStyles]);
|
|
1005
|
-
(0,
|
|
904
|
+
(0, import_react10.useEffect)(() => {
|
|
1006
905
|
const unsubscribes = providerAndSubscribers.map(
|
|
1007
906
|
({ provider, subscriber }) => provider.subscribe(subscriber)
|
|
1008
907
|
);
|
|
@@ -1017,7 +916,7 @@ function useStyleItems() {
|
|
|
1017
916
|
});
|
|
1018
917
|
});
|
|
1019
918
|
const breakpointsOrder = (0, import_editor_responsive2.getBreakpoints)().map((breakpoint) => breakpoint.id);
|
|
1020
|
-
return (0,
|
|
919
|
+
return (0, import_react10.useMemo)(
|
|
1021
920
|
() => Object.values(styleItems).sort(sortByProviderPriority2).flatMap(({ items }) => items).sort(sortByStateType).sort(sortByBreakpoint(breakpointsOrder)),
|
|
1022
921
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1023
922
|
[styleItems, breakpointsOrder.join("-")]
|
|
@@ -1090,7 +989,7 @@ function StyleRenderer() {
|
|
|
1090
989
|
if (!container) {
|
|
1091
990
|
return null;
|
|
1092
991
|
}
|
|
1093
|
-
return /* @__PURE__ */
|
|
992
|
+
return /* @__PURE__ */ React4.createElement(import_ui3.Portal, { container }, styleItems.map((item, i) => /* @__PURE__ */ React4.createElement("style", { key: `${item.id}-${i}-${item.breakpoint}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ React4.createElement("link", { ...attrs, key: attrs.id })));
|
|
1094
993
|
}
|
|
1095
994
|
function usePortalContainer2() {
|
|
1096
995
|
return (0, import_editor_v1_adapters7.__privateUseListenTo)((0, import_editor_v1_adapters7.commandEndEvent)("editor/documents/attach-preview"), () => getCanvasIframeDocument()?.head);
|
|
@@ -1461,10 +1360,10 @@ var transformSkewTransformer = createTransformer((value) => {
|
|
|
1461
1360
|
});
|
|
1462
1361
|
|
|
1463
1362
|
// src/transformers/styles/transition-transformer.ts
|
|
1464
|
-
var
|
|
1363
|
+
var import_editor_controls = require("@elementor/editor-controls");
|
|
1465
1364
|
var getAllowedProperties = () => {
|
|
1466
1365
|
const allowedProperties = /* @__PURE__ */ new Set();
|
|
1467
|
-
|
|
1366
|
+
import_editor_controls.transitionProperties.forEach((category) => {
|
|
1468
1367
|
category.properties.forEach((property) => {
|
|
1469
1368
|
allowedProperties.add(property.value);
|
|
1470
1369
|
});
|
|
@@ -1527,7 +1426,7 @@ function initStyleTransformers() {
|
|
|
1527
1426
|
|
|
1528
1427
|
// src/legacy/init-legacy-views.ts
|
|
1529
1428
|
var import_editor_elements5 = require("@elementor/editor-elements");
|
|
1530
|
-
var
|
|
1429
|
+
var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
|
|
1531
1430
|
|
|
1532
1431
|
// src/renderers/create-dom-renderer.ts
|
|
1533
1432
|
var import_twing = require("@elementor/twing");
|
|
@@ -1574,10 +1473,102 @@ function escapeURL(value) {
|
|
|
1574
1473
|
}
|
|
1575
1474
|
}
|
|
1576
1475
|
|
|
1476
|
+
// src/utils/inline-editing-utils.ts
|
|
1477
|
+
var import_editor_elements3 = require("@elementor/editor-elements");
|
|
1478
|
+
var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
|
|
1479
|
+
var WIDGET_PROPERTY_MAP = {
|
|
1480
|
+
"e-heading": "title",
|
|
1481
|
+
"e-paragraph": "paragraph"
|
|
1482
|
+
};
|
|
1483
|
+
var EXPERIMENT_KEY = "v4-inline-text-editing";
|
|
1484
|
+
var legacyWindow = window;
|
|
1485
|
+
var shouldRenderInlineEditingView = (elementType) => {
|
|
1486
|
+
return elementType in WIDGET_PROPERTY_MAP && (0, import_editor_v1_adapters8.isExperimentActive)(EXPERIMENT_KEY);
|
|
1487
|
+
};
|
|
1488
|
+
var getWidgetType = (container) => {
|
|
1489
|
+
return container?.model?.get("widgetType") ?? container?.model?.get("elType") ?? null;
|
|
1490
|
+
};
|
|
1491
|
+
var getHtmlPropertyName = (container) => {
|
|
1492
|
+
const widgetType = getWidgetType(container);
|
|
1493
|
+
if (!widgetType) {
|
|
1494
|
+
return "";
|
|
1495
|
+
}
|
|
1496
|
+
const propsSchema = (0, import_editor_elements3.getElementType)(widgetType)?.propsSchema;
|
|
1497
|
+
if (WIDGET_PROPERTY_MAP[widgetType]) {
|
|
1498
|
+
return WIDGET_PROPERTY_MAP[widgetType];
|
|
1499
|
+
}
|
|
1500
|
+
if (!propsSchema) {
|
|
1501
|
+
return "";
|
|
1502
|
+
}
|
|
1503
|
+
const entry = Object.entries(propsSchema).find(([, propType]) => {
|
|
1504
|
+
switch (propType.kind) {
|
|
1505
|
+
case "union":
|
|
1506
|
+
return propType.prop_types.html;
|
|
1507
|
+
case "object":
|
|
1508
|
+
return propType.shape.html;
|
|
1509
|
+
case "array":
|
|
1510
|
+
return "key" in propType.item_prop_type && propType.item_prop_type.key === "html";
|
|
1511
|
+
}
|
|
1512
|
+
return propType.key === "html";
|
|
1513
|
+
});
|
|
1514
|
+
return entry?.[0] ?? "";
|
|
1515
|
+
};
|
|
1516
|
+
var getHtmlPropType = (container) => {
|
|
1517
|
+
const widgetType = getWidgetType(container);
|
|
1518
|
+
if (!widgetType) {
|
|
1519
|
+
return null;
|
|
1520
|
+
}
|
|
1521
|
+
const propsSchema = (0, import_editor_elements3.getElementType)(widgetType)?.propsSchema;
|
|
1522
|
+
const propertyName = getHtmlPropertyName(container) ?? null;
|
|
1523
|
+
return propsSchema?.[propertyName] ?? null;
|
|
1524
|
+
};
|
|
1525
|
+
var getInlineEditablePropertyName = (container) => {
|
|
1526
|
+
return getHtmlPropertyName(container) ?? "";
|
|
1527
|
+
};
|
|
1528
|
+
var getBlockedValue = (value, tag) => {
|
|
1529
|
+
if (!value) {
|
|
1530
|
+
return "";
|
|
1531
|
+
}
|
|
1532
|
+
if (!tag) {
|
|
1533
|
+
return value;
|
|
1534
|
+
}
|
|
1535
|
+
const pseudoElement = document.createElement("div");
|
|
1536
|
+
pseudoElement.innerHTML = value;
|
|
1537
|
+
if (!pseudoElement?.children.length) {
|
|
1538
|
+
return `<${tag}>${value}</${tag}>`;
|
|
1539
|
+
}
|
|
1540
|
+
const firstChild = pseudoElement.children[0];
|
|
1541
|
+
const lastChild = Array.from(pseudoElement.children).slice(-1)[0];
|
|
1542
|
+
if (firstChild === lastChild && pseudoElement.textContent === firstChild.textContent) {
|
|
1543
|
+
return compareTag(firstChild, tag) ? value : `<${tag}>${firstChild.innerHTML}</${tag}>`;
|
|
1544
|
+
}
|
|
1545
|
+
if (!value.startsWith(`<${tag}`) || !value.endsWith(`</${tag}>`)) {
|
|
1546
|
+
return `<${tag}>${value}</${tag}>`;
|
|
1547
|
+
}
|
|
1548
|
+
if (firstChild !== lastChild || !compareTag(firstChild, tag)) {
|
|
1549
|
+
return `<${tag}>${value}</${tag}>`;
|
|
1550
|
+
}
|
|
1551
|
+
return value;
|
|
1552
|
+
};
|
|
1553
|
+
var compareTag = (el, tag) => {
|
|
1554
|
+
return el.tagName.toUpperCase() === tag.toUpperCase();
|
|
1555
|
+
};
|
|
1556
|
+
var getInitialPopoverPosition = () => {
|
|
1557
|
+
const positionFallback = { left: 0, top: 0 };
|
|
1558
|
+
const iFrameElement = legacyWindow?.elementor?.$preview?.get(0);
|
|
1559
|
+
const iFramePosition = iFrameElement?.getBoundingClientRect() ?? positionFallback;
|
|
1560
|
+
const previewElement = legacyWindow?.elementor?.$previewWrapper?.get(0);
|
|
1561
|
+
const previewPosition = previewElement ? { left: previewElement.scrollLeft, top: previewElement.scrollTop } : positionFallback;
|
|
1562
|
+
return {
|
|
1563
|
+
left: iFramePosition.left + previewPosition.left,
|
|
1564
|
+
top: iFramePosition.top + previewPosition.top
|
|
1565
|
+
};
|
|
1566
|
+
};
|
|
1567
|
+
|
|
1577
1568
|
// src/legacy/create-element-type.ts
|
|
1578
1569
|
function createElementType(type) {
|
|
1579
|
-
const
|
|
1580
|
-
return class extends
|
|
1570
|
+
const legacyWindow2 = window;
|
|
1571
|
+
return class extends legacyWindow2.elementor.modules.elements.types.Widget {
|
|
1581
1572
|
getType() {
|
|
1582
1573
|
return type;
|
|
1583
1574
|
}
|
|
@@ -1587,8 +1578,8 @@ function createElementType(type) {
|
|
|
1587
1578
|
};
|
|
1588
1579
|
}
|
|
1589
1580
|
function createElementViewClassDeclaration() {
|
|
1590
|
-
const
|
|
1591
|
-
return class extends
|
|
1581
|
+
const legacyWindow2 = window;
|
|
1582
|
+
return class extends legacyWindow2.elementor.modules.elements.views.Widget {
|
|
1592
1583
|
// Dispatch `render` event so the overlay layer will be updated
|
|
1593
1584
|
onRender(...args) {
|
|
1594
1585
|
super.onRender(...args);
|
|
@@ -1634,7 +1625,7 @@ function createElementViewClassDeclaration() {
|
|
|
1634
1625
|
);
|
|
1635
1626
|
}
|
|
1636
1627
|
#dispatchPreviewEvent(eventType) {
|
|
1637
|
-
|
|
1628
|
+
legacyWindow2.elementor?.$preview?.[0]?.contentWindow.dispatchEvent(
|
|
1638
1629
|
new CustomEvent(eventType, {
|
|
1639
1630
|
detail: {
|
|
1640
1631
|
id: this.model.get("id"),
|
|
@@ -1650,14 +1641,22 @@ function createElementViewClassDeclaration() {
|
|
|
1650
1641
|
};
|
|
1651
1642
|
}
|
|
1652
1643
|
|
|
1644
|
+
// src/legacy/create-inline-editing-element-type.tsx
|
|
1645
|
+
var React5 = __toESM(require("react"));
|
|
1646
|
+
var import_client = require("react-dom/client");
|
|
1647
|
+
var import_editor_controls2 = require("@elementor/editor-controls");
|
|
1648
|
+
var import_editor_elements4 = require("@elementor/editor-elements");
|
|
1649
|
+
var import_editor_props3 = require("@elementor/editor-props");
|
|
1650
|
+
var import_editor_ui = require("@elementor/editor-ui");
|
|
1651
|
+
|
|
1653
1652
|
// src/legacy/create-templated-element-type.ts
|
|
1654
1653
|
function createTemplatedElementType({
|
|
1655
1654
|
type,
|
|
1656
1655
|
renderer,
|
|
1657
1656
|
element
|
|
1658
1657
|
}) {
|
|
1659
|
-
const
|
|
1660
|
-
return class extends
|
|
1658
|
+
const legacyWindow2 = window;
|
|
1659
|
+
return class extends legacyWindow2.elementor.modules.elements.types.Widget {
|
|
1661
1660
|
getType() {
|
|
1662
1661
|
return type;
|
|
1663
1662
|
}
|
|
@@ -1748,15 +1747,151 @@ function createTemplatedElementView({
|
|
|
1748
1747
|
};
|
|
1749
1748
|
}
|
|
1750
1749
|
|
|
1750
|
+
// src/legacy/create-inline-editing-element-type.tsx
|
|
1751
|
+
function createInlineEditingElementType({
|
|
1752
|
+
type,
|
|
1753
|
+
renderer,
|
|
1754
|
+
element
|
|
1755
|
+
}) {
|
|
1756
|
+
return class extends legacyWindow.elementor.modules.elements.types.Widget {
|
|
1757
|
+
getType() {
|
|
1758
|
+
return type;
|
|
1759
|
+
}
|
|
1760
|
+
getView() {
|
|
1761
|
+
return createInlineEditingElementView({
|
|
1762
|
+
type,
|
|
1763
|
+
renderer,
|
|
1764
|
+
element
|
|
1765
|
+
});
|
|
1766
|
+
}
|
|
1767
|
+
};
|
|
1768
|
+
}
|
|
1769
|
+
function createInlineEditingElementView({
|
|
1770
|
+
type,
|
|
1771
|
+
renderer,
|
|
1772
|
+
element
|
|
1773
|
+
}) {
|
|
1774
|
+
const TemplatedView = createTemplatedElementView({ type, renderer, element });
|
|
1775
|
+
Object.entries(element.twig_templates).forEach(([key, template]) => {
|
|
1776
|
+
renderer.register(key, template);
|
|
1777
|
+
});
|
|
1778
|
+
return class extends TemplatedView {
|
|
1779
|
+
inlineEditorRoot = null;
|
|
1780
|
+
handlerAttached = false;
|
|
1781
|
+
render() {
|
|
1782
|
+
if (this.inlineEditorRoot) {
|
|
1783
|
+
this.resetInlineEditorRoot();
|
|
1784
|
+
}
|
|
1785
|
+
if (!this.isValueDynamic() && !this.handlerAttached) {
|
|
1786
|
+
this.$el.on("dblclick", "*", this.handleRenderInlineEditor.bind(this));
|
|
1787
|
+
this.handlerAttached = true;
|
|
1788
|
+
}
|
|
1789
|
+
TemplatedView.prototype.render.apply(this);
|
|
1790
|
+
}
|
|
1791
|
+
handleRenderInlineEditor(event) {
|
|
1792
|
+
event.stopPropagation();
|
|
1793
|
+
this.$el.off("dblclick", "*");
|
|
1794
|
+
this.handlerAttached = false;
|
|
1795
|
+
if (!this.isValueDynamic()) {
|
|
1796
|
+
this.renderInlineEditor();
|
|
1797
|
+
}
|
|
1798
|
+
}
|
|
1799
|
+
handleUnmountInlineEditor(event) {
|
|
1800
|
+
event.stopPropagation();
|
|
1801
|
+
this.unmountInlineEditor();
|
|
1802
|
+
}
|
|
1803
|
+
onDestroy(...args) {
|
|
1804
|
+
this.resetInlineEditorRoot();
|
|
1805
|
+
TemplatedView.prototype.onDestroy.apply(this, args);
|
|
1806
|
+
}
|
|
1807
|
+
resetInlineEditorRoot() {
|
|
1808
|
+
this.$el.off("dblclick", "*");
|
|
1809
|
+
this.handlerAttached = false;
|
|
1810
|
+
this.inlineEditorRoot?.unmount?.();
|
|
1811
|
+
this.inlineEditorRoot = null;
|
|
1812
|
+
}
|
|
1813
|
+
unmountInlineEditor() {
|
|
1814
|
+
this.resetInlineEditorRoot();
|
|
1815
|
+
this.render();
|
|
1816
|
+
}
|
|
1817
|
+
isValueDynamic() {
|
|
1818
|
+
const settingKey = getInlineEditablePropertyName(this.container);
|
|
1819
|
+
const propValue = this.model.get("settings")?.get(settingKey);
|
|
1820
|
+
return propValue?.$$type === "dynamic";
|
|
1821
|
+
}
|
|
1822
|
+
getContentValue() {
|
|
1823
|
+
const prop = getHtmlPropType(this.container);
|
|
1824
|
+
const defaultValue = prop?.default?.value ?? "";
|
|
1825
|
+
const settingKey = getInlineEditablePropertyName(this.container);
|
|
1826
|
+
return import_editor_props3.htmlPropTypeUtil.extract(this.model.get("settings")?.get(settingKey) ?? null) ?? import_editor_props3.htmlPropTypeUtil.extract(prop?.default ?? null) ?? defaultValue ?? "";
|
|
1827
|
+
}
|
|
1828
|
+
setContentValue(value) {
|
|
1829
|
+
const settingKey = getInlineEditablePropertyName(this.container);
|
|
1830
|
+
const valueToSave = value ? import_editor_props3.htmlPropTypeUtil.create(value) : null;
|
|
1831
|
+
this.model.get("settings")?.set(settingKey, valueToSave);
|
|
1832
|
+
}
|
|
1833
|
+
getExpectedTag() {
|
|
1834
|
+
const widgetType = getWidgetType(this.container);
|
|
1835
|
+
if (!widgetType) {
|
|
1836
|
+
return null;
|
|
1837
|
+
}
|
|
1838
|
+
const propsSchema = (0, import_editor_elements4.getElementType)(widgetType)?.propsSchema;
|
|
1839
|
+
if (!propsSchema?.tag) {
|
|
1840
|
+
return null;
|
|
1841
|
+
}
|
|
1842
|
+
return import_editor_props3.stringPropTypeUtil.extract(this.model.get("settings").get("tag") ?? null) ?? import_editor_props3.stringPropTypeUtil.extract(propsSchema.tag.default ?? null) ?? null;
|
|
1843
|
+
}
|
|
1844
|
+
ensureProperValue() {
|
|
1845
|
+
const actualValue = this.getContentValue();
|
|
1846
|
+
const tagSettings = this.getExpectedTag();
|
|
1847
|
+
const wrappedValue = getBlockedValue(actualValue, tagSettings);
|
|
1848
|
+
if (actualValue !== wrappedValue) {
|
|
1849
|
+
this.setContentValue(wrappedValue);
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
renderInlineEditor() {
|
|
1853
|
+
this.ensureProperValue();
|
|
1854
|
+
const propValue = this.getContentValue();
|
|
1855
|
+
const settingKey = getInlineEditablePropertyName(this.container);
|
|
1856
|
+
const classes = (this.el?.children?.[0]?.classList.toString() ?? "") + " strip-styles";
|
|
1857
|
+
const expectedTag = this.getExpectedTag();
|
|
1858
|
+
const setValue = (value) => {
|
|
1859
|
+
const valueToSave = value ? import_editor_props3.htmlPropTypeUtil.create(value) : null;
|
|
1860
|
+
this.model.get("settings")?.set(settingKey, valueToSave);
|
|
1861
|
+
};
|
|
1862
|
+
this.$el.html("");
|
|
1863
|
+
if (this.inlineEditorRoot) {
|
|
1864
|
+
this.resetInlineEditorRoot();
|
|
1865
|
+
}
|
|
1866
|
+
this.inlineEditorRoot = (0, import_client.createRoot)(this.el);
|
|
1867
|
+
this.inlineEditorRoot.render(
|
|
1868
|
+
/* @__PURE__ */ React5.createElement(import_editor_ui.ThemeProvider, null, /* @__PURE__ */ React5.createElement(
|
|
1869
|
+
import_editor_controls2.InlineEditor,
|
|
1870
|
+
{
|
|
1871
|
+
attributes: { class: classes },
|
|
1872
|
+
value: propValue,
|
|
1873
|
+
setValue,
|
|
1874
|
+
onBlur: this.handleUnmountInlineEditor.bind(this),
|
|
1875
|
+
autofocus: true,
|
|
1876
|
+
showToolbar: true,
|
|
1877
|
+
getInitialPopoverPosition,
|
|
1878
|
+
expectedTag
|
|
1879
|
+
}
|
|
1880
|
+
))
|
|
1881
|
+
);
|
|
1882
|
+
}
|
|
1883
|
+
};
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1751
1886
|
// src/legacy/init-legacy-views.ts
|
|
1752
1887
|
var elementsLegacyTypes = {};
|
|
1753
1888
|
function registerElementType(type, elementTypeGenerator) {
|
|
1754
1889
|
elementsLegacyTypes[type] = elementTypeGenerator;
|
|
1755
1890
|
}
|
|
1756
1891
|
function initLegacyViews() {
|
|
1757
|
-
(0,
|
|
1892
|
+
(0, import_editor_v1_adapters9.__privateListenTo)((0, import_editor_v1_adapters9.v1ReadyEvent)(), () => {
|
|
1758
1893
|
const config = (0, import_editor_elements5.getWidgetsCache)() ?? {};
|
|
1759
|
-
const
|
|
1894
|
+
const legacyWindow2 = window;
|
|
1760
1895
|
const renderer = createDomRenderer();
|
|
1761
1896
|
Object.entries(config).forEach(([type, element]) => {
|
|
1762
1897
|
if (!element.atomic) {
|
|
@@ -1766,11 +1901,11 @@ function initLegacyViews() {
|
|
|
1766
1901
|
if (!!elementsLegacyTypes[type] && canBeTemplated(element)) {
|
|
1767
1902
|
ElementType = elementsLegacyTypes[type]({ type, renderer, element });
|
|
1768
1903
|
} else if (canBeTemplated(element)) {
|
|
1769
|
-
ElementType = createTemplatedElementType({ type, renderer, element });
|
|
1904
|
+
ElementType = shouldRenderInlineEditingView(type) ? createInlineEditingElementType({ type, renderer, element }) : createTemplatedElementType({ type, renderer, element });
|
|
1770
1905
|
} else {
|
|
1771
1906
|
ElementType = createElementType(type);
|
|
1772
1907
|
}
|
|
1773
|
-
|
|
1908
|
+
legacyWindow2.elementor.elementsManager.registerElementType(new ElementType());
|
|
1774
1909
|
});
|
|
1775
1910
|
});
|
|
1776
1911
|
}
|
|
@@ -2828,14 +2963,14 @@ An Example scenario of creating fully styled composition:
|
|
|
2828
2963
|
// src/prevent-link-in-link-commands.ts
|
|
2829
2964
|
var import_editor_elements10 = require("@elementor/editor-elements");
|
|
2830
2965
|
var import_editor_notifications = require("@elementor/editor-notifications");
|
|
2831
|
-
var
|
|
2966
|
+
var import_editor_v1_adapters10 = require("@elementor/editor-v1-adapters");
|
|
2832
2967
|
var import_i18n = require("@wordpress/i18n");
|
|
2833
2968
|
function initLinkInLinkPrevention() {
|
|
2834
|
-
(0,
|
|
2969
|
+
(0, import_editor_v1_adapters10.blockCommand)({
|
|
2835
2970
|
command: "document/elements/paste",
|
|
2836
2971
|
condition: blockLinkInLinkPaste
|
|
2837
2972
|
});
|
|
2838
|
-
(0,
|
|
2973
|
+
(0, import_editor_v1_adapters10.blockCommand)({
|
|
2839
2974
|
command: "document/elements/move",
|
|
2840
2975
|
condition: blockLinkInLinkMove
|
|
2841
2976
|
});
|
|
@@ -2909,12 +3044,12 @@ function shouldBlock(sourceElements, targetElements) {
|
|
|
2909
3044
|
}
|
|
2910
3045
|
|
|
2911
3046
|
// src/style-commands/paste-style.ts
|
|
2912
|
-
var
|
|
3047
|
+
var import_editor_v1_adapters12 = require("@elementor/editor-v1-adapters");
|
|
2913
3048
|
|
|
2914
3049
|
// src/style-commands/undoable-actions/paste-element-style.ts
|
|
2915
3050
|
var import_editor_elements12 = require("@elementor/editor-elements");
|
|
2916
3051
|
var import_editor_styles_repository4 = require("@elementor/editor-styles-repository");
|
|
2917
|
-
var
|
|
3052
|
+
var import_editor_v1_adapters11 = require("@elementor/editor-v1-adapters");
|
|
2918
3053
|
var import_i18n3 = require("@wordpress/i18n");
|
|
2919
3054
|
|
|
2920
3055
|
// src/style-commands/utils.ts
|
|
@@ -2960,7 +3095,7 @@ function getTitleForContainers(containers) {
|
|
|
2960
3095
|
}
|
|
2961
3096
|
|
|
2962
3097
|
// src/style-commands/undoable-actions/paste-element-style.ts
|
|
2963
|
-
var undoablePasteElementStyle = () => (0,
|
|
3098
|
+
var undoablePasteElementStyle = () => (0, import_editor_v1_adapters11.undoable)(
|
|
2964
3099
|
{
|
|
2965
3100
|
do: ({ containers, newStyle }) => {
|
|
2966
3101
|
return containers.map((container) => {
|
|
@@ -3036,12 +3171,12 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters10.undoable)(
|
|
|
3036
3171
|
// src/style-commands/paste-style.ts
|
|
3037
3172
|
function initPasteStyleCommand() {
|
|
3038
3173
|
const pasteElementStyleCommand = undoablePasteElementStyle();
|
|
3039
|
-
(0,
|
|
3174
|
+
(0, import_editor_v1_adapters12.blockCommand)({
|
|
3040
3175
|
command: "document/elements/paste-style",
|
|
3041
3176
|
condition: hasAtomicWidgets
|
|
3042
3177
|
});
|
|
3043
|
-
(0,
|
|
3044
|
-
(0,
|
|
3178
|
+
(0, import_editor_v1_adapters12.__privateListenTo)(
|
|
3179
|
+
(0, import_editor_v1_adapters12.commandStartEvent)("document/elements/paste-style"),
|
|
3045
3180
|
(e) => pasteStyles(e.args, pasteElementStyleCommand)
|
|
3046
3181
|
);
|
|
3047
3182
|
}
|
|
@@ -3065,14 +3200,14 @@ function pasteStyles(args, pasteCallback) {
|
|
|
3065
3200
|
}
|
|
3066
3201
|
|
|
3067
3202
|
// src/style-commands/reset-style.ts
|
|
3068
|
-
var
|
|
3203
|
+
var import_editor_v1_adapters14 = require("@elementor/editor-v1-adapters");
|
|
3069
3204
|
|
|
3070
3205
|
// src/style-commands/undoable-actions/reset-element-style.ts
|
|
3071
3206
|
var import_editor_elements13 = require("@elementor/editor-elements");
|
|
3072
3207
|
var import_editor_styles_repository5 = require("@elementor/editor-styles-repository");
|
|
3073
|
-
var
|
|
3208
|
+
var import_editor_v1_adapters13 = require("@elementor/editor-v1-adapters");
|
|
3074
3209
|
var import_i18n4 = require("@wordpress/i18n");
|
|
3075
|
-
var undoableResetElementStyle = () => (0,
|
|
3210
|
+
var undoableResetElementStyle = () => (0, import_editor_v1_adapters13.undoable)(
|
|
3076
3211
|
{
|
|
3077
3212
|
do: ({ containers }) => {
|
|
3078
3213
|
return containers.map((container) => {
|
|
@@ -3116,12 +3251,12 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters12.undoable)(
|
|
|
3116
3251
|
// src/style-commands/reset-style.ts
|
|
3117
3252
|
function initResetStyleCommand() {
|
|
3118
3253
|
const resetElementStyles = undoableResetElementStyle();
|
|
3119
|
-
(0,
|
|
3254
|
+
(0, import_editor_v1_adapters14.blockCommand)({
|
|
3120
3255
|
command: "document/elements/reset-style",
|
|
3121
3256
|
condition: hasAtomicWidgets
|
|
3122
3257
|
});
|
|
3123
|
-
(0,
|
|
3124
|
-
(0,
|
|
3258
|
+
(0, import_editor_v1_adapters14.__privateListenTo)(
|
|
3259
|
+
(0, import_editor_v1_adapters14.commandStartEvent)("document/elements/reset-style"),
|
|
3125
3260
|
(e) => resetStyles(e.args, resetElementStyles)
|
|
3126
3261
|
);
|
|
3127
3262
|
}
|