@elementor/editor-canvas 3.33.0-234 → 3.33.0-236

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 CHANGED
@@ -179,4 +179,6 @@ type ElementLegacyType = {
179
179
  };
180
180
  declare function registerElementType(type: string, elementTypeGenerator: ElementLegacyType[keyof ElementLegacyType]): void;
181
181
 
182
- export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
182
+ declare function getCanvasIframeDocument(): Document | null | undefined;
183
+
184
+ export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
package/dist/index.d.ts CHANGED
@@ -179,4 +179,6 @@ type ElementLegacyType = {
179
179
  };
180
180
  declare function registerElementType(type: string, elementTypeGenerator: ElementLegacyType[keyof ElementLegacyType]): void;
181
181
 
182
- export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
182
+ declare function getCanvasIframeDocument(): Document | null | undefined;
183
+
184
+ export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
package/dist/index.js CHANGED
@@ -35,6 +35,7 @@ __export(index_exports, {
35
35
  createTransformer: () => createTransformer,
36
36
  createTransformersRegistry: () => createTransformersRegistry,
37
37
  endDragElementFromPanel: () => endDragElementFromPanel,
38
+ getCanvasIframeDocument: () => getCanvasIframeDocument,
38
39
  init: () => init,
39
40
  registerElementType: () => registerElementType,
40
41
  settingsTransformersRegistry: () => settingsTransformersRegistry,
@@ -45,6 +46,7 @@ module.exports = __toCommonJS(index_exports);
45
46
 
46
47
  // src/init.tsx
47
48
  var import_editor = require("@elementor/editor");
49
+ var import_editor_interactions2 = require("@elementor/editor-interactions");
48
50
 
49
51
  // src/components/classes-rename.tsx
50
52
  var import_react = require("react");
@@ -239,27 +241,143 @@ function useElementsDom() {
239
241
  );
240
242
  }
241
243
 
242
- // src/components/style-renderer.tsx
244
+ // src/components/interactions-renderer.tsx
243
245
  var React3 = __toESM(require("react"));
244
- var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
246
+ var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
245
247
  var import_ui2 = require("@elementor/ui");
246
248
 
247
- // src/hooks/use-documents-css-links.ts
249
+ // src/hooks/use-interactions-items.ts
250
+ var import_react7 = require("react");
251
+ var import_editor_interactions = require("@elementor/editor-interactions");
248
252
  var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
249
253
 
254
+ // src/hooks/use-on-mount.ts
255
+ var import_react6 = require("react");
256
+ function useOnMount(cb) {
257
+ const mounted = (0, import_react6.useRef)(false);
258
+ (0, import_react6.useEffect)(() => {
259
+ if (!mounted.current) {
260
+ mounted.current = true;
261
+ cb();
262
+ }
263
+ }, []);
264
+ }
265
+
266
+ // src/hooks/use-interactions-items.ts
267
+ function useInteractionsItems() {
268
+ const [interactionItems, setInteractionItems] = (0, import_react7.useState)({});
269
+ const providerAndSubscribers = (0, import_react7.useMemo)(() => {
270
+ try {
271
+ const providers = import_editor_interactions.interactionsRepository.getProviders();
272
+ const mapped = providers.map((provider) => {
273
+ return {
274
+ provider,
275
+ subscriber: createProviderSubscriber({
276
+ provider,
277
+ setInteractionItems
278
+ })
279
+ };
280
+ });
281
+ return mapped;
282
+ } catch {
283
+ return [];
284
+ }
285
+ }, []);
286
+ (0, import_react7.useEffect)(() => {
287
+ if (providerAndSubscribers.length === 0) {
288
+ return;
289
+ }
290
+ const unsubscribes = providerAndSubscribers.map(({ provider, subscriber }) => {
291
+ const safeSubscriber = () => {
292
+ try {
293
+ subscriber();
294
+ } catch {
295
+ }
296
+ };
297
+ const unsubscribe = provider.subscribe(safeSubscriber);
298
+ return unsubscribe;
299
+ });
300
+ return () => {
301
+ unsubscribes.forEach((unsubscribe) => unsubscribe());
302
+ };
303
+ }, [providerAndSubscribers]);
304
+ useOnMount(() => {
305
+ if (providerAndSubscribers.length === 0) {
306
+ return;
307
+ }
308
+ (0, import_editor_v1_adapters2.registerDataHook)("after", "editor/documents/attach-preview", async () => {
309
+ providerAndSubscribers.forEach(({ subscriber }) => {
310
+ try {
311
+ subscriber();
312
+ } catch {
313
+ }
314
+ });
315
+ });
316
+ });
317
+ return (0, import_react7.useMemo)(
318
+ () => Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items),
319
+ [interactionItems]
320
+ );
321
+ }
322
+ function sortByProviderPriority({ provider: providerA }, { provider: providerB }) {
323
+ return providerA.priority - providerB.priority;
324
+ }
325
+ function createProviderSubscriber({ provider, setInteractionItems }) {
326
+ return () => {
327
+ try {
328
+ const items = provider.actions.all();
329
+ const providerKey = provider.getKey();
330
+ setInteractionItems((prev) => ({
331
+ ...prev,
332
+ [providerKey]: { provider, items }
333
+ }));
334
+ } catch {
335
+ }
336
+ };
337
+ }
338
+
250
339
  // src/sync/get-canvas-iframe-document.ts
251
340
  function getCanvasIframeDocument() {
252
341
  const extendedWindow = window;
253
342
  return extendedWindow.elementor?.$preview?.[0]?.contentDocument;
254
343
  }
255
344
 
345
+ // src/components/interactions-renderer.tsx
346
+ function InteractionsRenderer() {
347
+ const container = usePortalContainer();
348
+ const interactionItems = useInteractionsItems();
349
+ if (!container) {
350
+ return null;
351
+ }
352
+ const interactionsData = JSON.stringify(interactionItems);
353
+ return /* @__PURE__ */ React3.createElement(import_ui2.Portal, { container }, /* @__PURE__ */ React3.createElement(
354
+ "script",
355
+ {
356
+ type: "application/json",
357
+ "data-e-interactions": "true",
358
+ dangerouslySetInnerHTML: {
359
+ __html: interactionsData
360
+ }
361
+ }
362
+ ));
363
+ }
364
+ function usePortalContainer() {
365
+ return (0, import_editor_v1_adapters3.__privateUseListenTo)((0, import_editor_v1_adapters3.commandEndEvent)("editor/documents/attach-preview"), () => getCanvasIframeDocument()?.head);
366
+ }
367
+
368
+ // src/components/style-renderer.tsx
369
+ var React4 = __toESM(require("react"));
370
+ var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
371
+ var import_ui3 = require("@elementor/ui");
372
+
256
373
  // src/hooks/use-documents-css-links.ts
374
+ var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
257
375
  var REMOVED_ATTR = "data-e-removed";
258
376
  var DOCUMENT_WRAPPER_ATTR = "data-elementor-id";
259
377
  var CSS_LINK_ID_PREFIX = "elementor-post-";
260
378
  var CSS_LINK_ID_SUFFIX = "-css";
261
379
  function useDocumentsCssLinks() {
262
- return (0, import_editor_v1_adapters2.__privateUseListenTo)((0, import_editor_v1_adapters2.commandEndEvent)("editor/documents/attach-preview"), () => {
380
+ return (0, import_editor_v1_adapters4.__privateUseListenTo)((0, import_editor_v1_adapters4.commandEndEvent)("editor/documents/attach-preview"), () => {
263
381
  const iframeDocument = getCanvasIframeDocument();
264
382
  if (!iframeDocument) {
265
383
  return [];
@@ -300,11 +418,11 @@ function getLinkAttrs(el) {
300
418
  }
301
419
 
302
420
  // src/hooks/use-style-items.ts
303
- var import_react9 = require("react");
421
+ var import_react10 = require("react");
304
422
  var import_editor_responsive2 = require("@elementor/editor-responsive");
305
423
  var import_editor_styles3 = require("@elementor/editor-styles");
306
424
  var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
307
- var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
425
+ var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
308
426
 
309
427
  // src/utils/abort-previous-runs.ts
310
428
  function abortPreviousRuns(cb) {
@@ -337,20 +455,8 @@ function signalizedProcess(signal, steps = []) {
337
455
  };
338
456
  }
339
457
 
340
- // src/hooks/use-on-mount.ts
341
- var import_react6 = require("react");
342
- function useOnMount(cb) {
343
- const mounted = (0, import_react6.useRef)(false);
344
- (0, import_react6.useEffect)(() => {
345
- if (!mounted.current) {
346
- mounted.current = true;
347
- cb();
348
- }
349
- }, []);
350
- }
351
-
352
458
  // src/hooks/use-style-prop-resolver.ts
353
- var import_react7 = require("react");
459
+ var import_react8 = require("react");
354
460
  var import_editor_styles = require("@elementor/editor-styles");
355
461
 
356
462
  // src/renderers/create-props-resolver.ts
@@ -472,7 +578,7 @@ var enqueueFont = (fontFamily, context = "preview") => {
472
578
 
473
579
  // src/hooks/use-style-prop-resolver.ts
474
580
  function useStylePropResolver() {
475
- return (0, import_react7.useMemo)(() => {
581
+ return (0, import_react8.useMemo)(() => {
476
582
  return createPropsResolver({
477
583
  transformers: styleTransformersRegistry,
478
584
  schema: (0, import_editor_styles.getStylesSchema)(),
@@ -487,7 +593,7 @@ function useStylePropResolver() {
487
593
  }
488
594
 
489
595
  // src/hooks/use-style-renderer.ts
490
- var import_react8 = require("react");
596
+ var import_react9 = require("react");
491
597
  var import_editor_responsive = require("@elementor/editor-responsive");
492
598
 
493
599
  // src/renderers/create-styles-renderer.ts
@@ -588,7 +694,7 @@ function customCssToString(customCss) {
588
694
  var SELECTOR_PREFIX = ".elementor";
589
695
  function useStyleRenderer(resolve) {
590
696
  const breakpoints = (0, import_editor_responsive.useBreakpointsMap)();
591
- return (0, import_react8.useMemo)(() => {
697
+ return (0, import_react9.useMemo)(() => {
592
698
  return createStylesRenderer({
593
699
  selectorPrefix: SELECTOR_PREFIX,
594
700
  breakpoints,
@@ -601,12 +707,12 @@ function useStyleRenderer(resolve) {
601
707
  function useStyleItems() {
602
708
  const resolve = useStylePropResolver();
603
709
  const renderStyles = useStyleRenderer(resolve);
604
- const [styleItems, setStyleItems] = (0, import_react9.useState)({});
605
- const providerAndSubscribers = (0, import_react9.useMemo)(() => {
710
+ const [styleItems, setStyleItems] = (0, import_react10.useState)({});
711
+ const providerAndSubscribers = (0, import_react10.useMemo)(() => {
606
712
  return import_editor_styles_repository2.stylesRepository.getProviders().map((provider) => {
607
713
  return {
608
714
  provider,
609
- subscriber: createProviderSubscriber({
715
+ subscriber: createProviderSubscriber2({
610
716
  provider,
611
717
  renderStyles,
612
718
  setStyleItems
@@ -614,7 +720,7 @@ function useStyleItems() {
614
720
  };
615
721
  });
616
722
  }, [renderStyles]);
617
- (0, import_react9.useEffect)(() => {
723
+ (0, import_react10.useEffect)(() => {
618
724
  const unsubscribes = providerAndSubscribers.map(
619
725
  ({ provider, subscriber }) => provider.subscribe(subscriber)
620
726
  );
@@ -623,20 +729,20 @@ function useStyleItems() {
623
729
  };
624
730
  }, [providerAndSubscribers]);
625
731
  useOnMount(() => {
626
- (0, import_editor_v1_adapters3.registerDataHook)("after", "editor/documents/attach-preview", async () => {
732
+ (0, import_editor_v1_adapters5.registerDataHook)("after", "editor/documents/attach-preview", async () => {
627
733
  const promises = providerAndSubscribers.map(async ({ subscriber }) => subscriber());
628
734
  await Promise.all(promises);
629
735
  });
630
736
  });
631
737
  const breakpointsOrder = (0, import_editor_responsive2.getBreakpoints)().map((breakpoint) => breakpoint.id);
632
- return (0, import_react9.useMemo)(
633
- () => Object.values(styleItems).sort(sortByProviderPriority).flatMap(({ items }) => items).sort(sortByStateType).sort(sortByBreakpoint(breakpointsOrder)),
738
+ return (0, import_react10.useMemo)(
739
+ () => Object.values(styleItems).sort(sortByProviderPriority2).flatMap(({ items }) => items).sort(sortByStateType).sort(sortByBreakpoint(breakpointsOrder)),
634
740
  // eslint-disable-next-line
635
741
  // eslint-disable-next-line react-hooks/exhaustive-deps
636
742
  [styleItems, breakpointsOrder.join("-")]
637
743
  );
638
744
  }
639
- function sortByProviderPriority({ provider: providerA }, { provider: providerB }) {
745
+ function sortByProviderPriority2({ provider: providerA }, { provider: providerB }) {
640
746
  return providerA.priority - providerB.priority;
641
747
  }
642
748
  function sortByBreakpoint(breakpointsOrder) {
@@ -651,7 +757,7 @@ function sortByStateType({ state: stateA }, { state: stateB }) {
651
757
  }
652
758
  return 0;
653
759
  }
654
- function createProviderSubscriber({ provider, renderStyles, setStyleItems }) {
760
+ function createProviderSubscriber2({ provider, renderStyles, setStyleItems }) {
655
761
  return abortPreviousRuns(
656
762
  (abortController) => signalizedProcess(abortController.signal).then((_, signal) => {
657
763
  const styles = provider.actions.all().map((__5, index, items) => {
@@ -697,16 +803,16 @@ function createProviderSubscriber({ provider, renderStyles, setStyleItems }) {
697
803
 
698
804
  // src/components/style-renderer.tsx
699
805
  function StyleRenderer() {
700
- const container = usePortalContainer();
806
+ const container = usePortalContainer2();
701
807
  const styleItems = useStyleItems();
702
808
  const linksAttrs = useDocumentsCssLinks();
703
809
  if (!container) {
704
810
  return null;
705
811
  }
706
- return /* @__PURE__ */ React3.createElement(import_ui2.Portal, { container }, styleItems.map((item, i) => /* @__PURE__ */ React3.createElement("style", { key: `${item.id}-${i}-${item.breakpoint}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ React3.createElement("link", { ...attrs, key: attrs.id })));
812
+ 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 })));
707
813
  }
708
- function usePortalContainer() {
709
- return (0, import_editor_v1_adapters4.__privateUseListenTo)((0, import_editor_v1_adapters4.commandEndEvent)("editor/documents/attach-preview"), () => getCanvasIframeDocument()?.head);
814
+ function usePortalContainer2() {
815
+ return (0, import_editor_v1_adapters6.__privateUseListenTo)((0, import_editor_v1_adapters6.commandEndEvent)("editor/documents/attach-preview"), () => getCanvasIframeDocument()?.head);
710
816
  }
711
817
 
712
818
  // src/settings-transformers-registry.ts
@@ -1127,7 +1233,7 @@ function initStyleTransformers() {
1127
1233
 
1128
1234
  // src/legacy/init-legacy-views.ts
1129
1235
  var import_editor_elements2 = require("@elementor/editor-elements");
1130
- var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
1236
+ var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
1131
1237
 
1132
1238
  // src/renderers/create-dom-renderer.ts
1133
1239
  var import_twing = require("@elementor/twing");
@@ -1354,7 +1460,7 @@ function registerElementType(type, elementTypeGenerator) {
1354
1460
  elementsLegacyTypes[type] = elementTypeGenerator;
1355
1461
  }
1356
1462
  function initLegacyViews() {
1357
- (0, import_editor_v1_adapters5.__privateListenTo)((0, import_editor_v1_adapters5.v1ReadyEvent)(), () => {
1463
+ (0, import_editor_v1_adapters7.__privateListenTo)((0, import_editor_v1_adapters7.v1ReadyEvent)(), () => {
1358
1464
  const config = (0, import_editor_elements2.getWidgetsCache)() ?? {};
1359
1465
  const legacyWindow = window;
1360
1466
  const renderer = createDomRenderer();
@@ -1378,14 +1484,14 @@ function initLegacyViews() {
1378
1484
  // src/prevent-link-in-link-commands.ts
1379
1485
  var import_editor_elements3 = require("@elementor/editor-elements");
1380
1486
  var import_editor_notifications = require("@elementor/editor-notifications");
1381
- var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
1487
+ var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
1382
1488
  var import_i18n = require("@wordpress/i18n");
1383
1489
  function initLinkInLinkPrevention() {
1384
- (0, import_editor_v1_adapters6.blockCommand)({
1490
+ (0, import_editor_v1_adapters8.blockCommand)({
1385
1491
  command: "document/elements/paste",
1386
1492
  condition: blockLinkInLinkPaste
1387
1493
  });
1388
- (0, import_editor_v1_adapters6.blockCommand)({
1494
+ (0, import_editor_v1_adapters8.blockCommand)({
1389
1495
  command: "document/elements/move",
1390
1496
  condition: blockLinkInLinkMove
1391
1497
  });
@@ -1459,12 +1565,12 @@ function shouldBlock(sourceElements, targetElements) {
1459
1565
  }
1460
1566
 
1461
1567
  // src/style-commands/paste-style.ts
1462
- var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
1568
+ var import_editor_v1_adapters10 = require("@elementor/editor-v1-adapters");
1463
1569
 
1464
1570
  // src/style-commands/undoable-actions/paste-element-style.ts
1465
1571
  var import_editor_elements5 = require("@elementor/editor-elements");
1466
1572
  var import_editor_styles_repository4 = require("@elementor/editor-styles-repository");
1467
- var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
1573
+ var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
1468
1574
  var import_i18n3 = require("@wordpress/i18n");
1469
1575
 
1470
1576
  // src/style-commands/utils.ts
@@ -1510,7 +1616,7 @@ function getTitleForContainers(containers) {
1510
1616
  }
1511
1617
 
1512
1618
  // src/style-commands/undoable-actions/paste-element-style.ts
1513
- var undoablePasteElementStyle = () => (0, import_editor_v1_adapters7.undoable)(
1619
+ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters9.undoable)(
1514
1620
  {
1515
1621
  do: ({ containers, newStyle }) => {
1516
1622
  return containers.map((container) => {
@@ -1586,12 +1692,12 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters7.undoable)(
1586
1692
  // src/style-commands/paste-style.ts
1587
1693
  function initPasteStyleCommand() {
1588
1694
  const pasteElementStyleCommand = undoablePasteElementStyle();
1589
- (0, import_editor_v1_adapters8.blockCommand)({
1695
+ (0, import_editor_v1_adapters10.blockCommand)({
1590
1696
  command: "document/elements/paste-style",
1591
1697
  condition: hasAtomicWidgets
1592
1698
  });
1593
- (0, import_editor_v1_adapters8.__privateListenTo)(
1594
- (0, import_editor_v1_adapters8.commandStartEvent)("document/elements/paste-style"),
1699
+ (0, import_editor_v1_adapters10.__privateListenTo)(
1700
+ (0, import_editor_v1_adapters10.commandStartEvent)("document/elements/paste-style"),
1595
1701
  (e) => pasteStyles(e.args, pasteElementStyleCommand)
1596
1702
  );
1597
1703
  }
@@ -1615,14 +1721,14 @@ function pasteStyles(args, pasteCallback) {
1615
1721
  }
1616
1722
 
1617
1723
  // src/style-commands/reset-style.ts
1618
- var import_editor_v1_adapters10 = require("@elementor/editor-v1-adapters");
1724
+ var import_editor_v1_adapters12 = require("@elementor/editor-v1-adapters");
1619
1725
 
1620
1726
  // src/style-commands/undoable-actions/reset-element-style.ts
1621
1727
  var import_editor_elements6 = require("@elementor/editor-elements");
1622
1728
  var import_editor_styles_repository5 = require("@elementor/editor-styles-repository");
1623
- var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
1729
+ var import_editor_v1_adapters11 = require("@elementor/editor-v1-adapters");
1624
1730
  var import_i18n4 = require("@wordpress/i18n");
1625
- var undoableResetElementStyle = () => (0, import_editor_v1_adapters9.undoable)(
1731
+ var undoableResetElementStyle = () => (0, import_editor_v1_adapters11.undoable)(
1626
1732
  {
1627
1733
  do: ({ containers }) => {
1628
1734
  return containers.map((container) => {
@@ -1666,12 +1772,12 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters9.undoable)(
1666
1772
  // src/style-commands/reset-style.ts
1667
1773
  function initResetStyleCommand() {
1668
1774
  const resetElementStyles = undoableResetElementStyle();
1669
- (0, import_editor_v1_adapters10.blockCommand)({
1775
+ (0, import_editor_v1_adapters12.blockCommand)({
1670
1776
  command: "document/elements/reset-style",
1671
1777
  condition: hasAtomicWidgets
1672
1778
  });
1673
- (0, import_editor_v1_adapters10.__privateListenTo)(
1674
- (0, import_editor_v1_adapters10.commandStartEvent)("document/elements/reset-style"),
1779
+ (0, import_editor_v1_adapters12.__privateListenTo)(
1780
+ (0, import_editor_v1_adapters12.commandStartEvent)("document/elements/reset-style"),
1675
1781
  (e) => resetStyles(e.args, resetElementStyles)
1676
1782
  );
1677
1783
  }
@@ -1697,6 +1803,7 @@ function init() {
1697
1803
  initLinkInLinkPrevention();
1698
1804
  initLegacyViews();
1699
1805
  initSettingsTransformers();
1806
+ (0, import_editor_interactions2.init)();
1700
1807
  (0, import_editor.injectIntoTop)({
1701
1808
  id: "elements-overlays",
1702
1809
  component: ElementsOverlays
@@ -1705,6 +1812,10 @@ function init() {
1705
1812
  id: "canvas-style-render",
1706
1813
  component: StyleRenderer
1707
1814
  });
1815
+ (0, import_editor.injectIntoTop)({
1816
+ id: "canvas-interactions-render",
1817
+ component: InteractionsRenderer
1818
+ });
1708
1819
  (0, import_editor.injectIntoLogic)({
1709
1820
  id: "classes-rename",
1710
1821
  component: ClassesRename
@@ -1752,6 +1863,7 @@ var getLegacyPanelElementView = ({ settings, ...rest }) => {
1752
1863
  createTransformer,
1753
1864
  createTransformersRegistry,
1754
1865
  endDragElementFromPanel,
1866
+ getCanvasIframeDocument,
1755
1867
  init,
1756
1868
  registerElementType,
1757
1869
  settingsTransformersRegistry,
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/init.tsx
2
2
  import { injectIntoLogic, injectIntoTop } from "@elementor/editor";
3
+ import { init as initInteractionsRepository } from "@elementor/editor-interactions";
3
4
 
4
5
  // src/components/classes-rename.tsx
5
6
  import { useEffect } from "react";
@@ -199,13 +200,100 @@ function useElementsDom() {
199
200
  );
200
201
  }
201
202
 
202
- // src/components/style-renderer.tsx
203
+ // src/components/interactions-renderer.tsx
203
204
  import * as React3 from "react";
204
- import { __privateUseListenTo as useListenTo3, commandEndEvent as commandEndEvent2 } from "@elementor/editor-v1-adapters";
205
+ import { __privateUseListenTo as useListenTo2, commandEndEvent } from "@elementor/editor-v1-adapters";
205
206
  import { Portal } from "@elementor/ui";
206
207
 
207
- // src/hooks/use-documents-css-links.ts
208
- import { __privateUseListenTo as useListenTo2, commandEndEvent } from "@elementor/editor-v1-adapters";
208
+ // src/hooks/use-interactions-items.ts
209
+ import { useEffect as useEffect5, useMemo, useState as useState2 } from "react";
210
+ import { interactionsRepository } from "@elementor/editor-interactions";
211
+ import { registerDataHook } from "@elementor/editor-v1-adapters";
212
+
213
+ // src/hooks/use-on-mount.ts
214
+ import { useEffect as useEffect4, useRef } from "react";
215
+ function useOnMount(cb) {
216
+ const mounted = useRef(false);
217
+ useEffect4(() => {
218
+ if (!mounted.current) {
219
+ mounted.current = true;
220
+ cb();
221
+ }
222
+ }, []);
223
+ }
224
+
225
+ // src/hooks/use-interactions-items.ts
226
+ function useInteractionsItems() {
227
+ const [interactionItems, setInteractionItems] = useState2({});
228
+ const providerAndSubscribers = useMemo(() => {
229
+ try {
230
+ const providers = interactionsRepository.getProviders();
231
+ const mapped = providers.map((provider) => {
232
+ return {
233
+ provider,
234
+ subscriber: createProviderSubscriber({
235
+ provider,
236
+ setInteractionItems
237
+ })
238
+ };
239
+ });
240
+ return mapped;
241
+ } catch {
242
+ return [];
243
+ }
244
+ }, []);
245
+ useEffect5(() => {
246
+ if (providerAndSubscribers.length === 0) {
247
+ return;
248
+ }
249
+ const unsubscribes = providerAndSubscribers.map(({ provider, subscriber }) => {
250
+ const safeSubscriber = () => {
251
+ try {
252
+ subscriber();
253
+ } catch {
254
+ }
255
+ };
256
+ const unsubscribe = provider.subscribe(safeSubscriber);
257
+ return unsubscribe;
258
+ });
259
+ return () => {
260
+ unsubscribes.forEach((unsubscribe) => unsubscribe());
261
+ };
262
+ }, [providerAndSubscribers]);
263
+ useOnMount(() => {
264
+ if (providerAndSubscribers.length === 0) {
265
+ return;
266
+ }
267
+ registerDataHook("after", "editor/documents/attach-preview", async () => {
268
+ providerAndSubscribers.forEach(({ subscriber }) => {
269
+ try {
270
+ subscriber();
271
+ } catch {
272
+ }
273
+ });
274
+ });
275
+ });
276
+ return useMemo(
277
+ () => Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items),
278
+ [interactionItems]
279
+ );
280
+ }
281
+ function sortByProviderPriority({ provider: providerA }, { provider: providerB }) {
282
+ return providerA.priority - providerB.priority;
283
+ }
284
+ function createProviderSubscriber({ provider, setInteractionItems }) {
285
+ return () => {
286
+ try {
287
+ const items = provider.actions.all();
288
+ const providerKey = provider.getKey();
289
+ setInteractionItems((prev) => ({
290
+ ...prev,
291
+ [providerKey]: { provider, items }
292
+ }));
293
+ } catch {
294
+ }
295
+ };
296
+ }
209
297
 
210
298
  // src/sync/get-canvas-iframe-document.ts
211
299
  function getCanvasIframeDocument() {
@@ -213,13 +301,42 @@ function getCanvasIframeDocument() {
213
301
  return extendedWindow.elementor?.$preview?.[0]?.contentDocument;
214
302
  }
215
303
 
304
+ // src/components/interactions-renderer.tsx
305
+ function InteractionsRenderer() {
306
+ const container = usePortalContainer();
307
+ const interactionItems = useInteractionsItems();
308
+ if (!container) {
309
+ return null;
310
+ }
311
+ const interactionsData = JSON.stringify(interactionItems);
312
+ return /* @__PURE__ */ React3.createElement(Portal, { container }, /* @__PURE__ */ React3.createElement(
313
+ "script",
314
+ {
315
+ type: "application/json",
316
+ "data-e-interactions": "true",
317
+ dangerouslySetInnerHTML: {
318
+ __html: interactionsData
319
+ }
320
+ }
321
+ ));
322
+ }
323
+ function usePortalContainer() {
324
+ return useListenTo2(commandEndEvent("editor/documents/attach-preview"), () => getCanvasIframeDocument()?.head);
325
+ }
326
+
327
+ // src/components/style-renderer.tsx
328
+ import * as React4 from "react";
329
+ import { __privateUseListenTo as useListenTo4, commandEndEvent as commandEndEvent3 } from "@elementor/editor-v1-adapters";
330
+ import { Portal as Portal2 } from "@elementor/ui";
331
+
216
332
  // src/hooks/use-documents-css-links.ts
333
+ import { __privateUseListenTo as useListenTo3, commandEndEvent as commandEndEvent2 } from "@elementor/editor-v1-adapters";
217
334
  var REMOVED_ATTR = "data-e-removed";
218
335
  var DOCUMENT_WRAPPER_ATTR = "data-elementor-id";
219
336
  var CSS_LINK_ID_PREFIX = "elementor-post-";
220
337
  var CSS_LINK_ID_SUFFIX = "-css";
221
338
  function useDocumentsCssLinks() {
222
- return useListenTo2(commandEndEvent("editor/documents/attach-preview"), () => {
339
+ return useListenTo3(commandEndEvent2("editor/documents/attach-preview"), () => {
223
340
  const iframeDocument = getCanvasIframeDocument();
224
341
  if (!iframeDocument) {
225
342
  return [];
@@ -260,11 +377,11 @@ function getLinkAttrs(el) {
260
377
  }
261
378
 
262
379
  // src/hooks/use-style-items.ts
263
- import { useEffect as useEffect5, useMemo as useMemo3, useState as useState2 } from "react";
380
+ import { useEffect as useEffect6, useMemo as useMemo4, useState as useState3 } from "react";
264
381
  import { getBreakpoints } from "@elementor/editor-responsive";
265
382
  import { isClassState as isClassState2 } from "@elementor/editor-styles";
266
383
  import { stylesRepository as stylesRepository2 } from "@elementor/editor-styles-repository";
267
- import { registerDataHook } from "@elementor/editor-v1-adapters";
384
+ import { registerDataHook as registerDataHook2 } from "@elementor/editor-v1-adapters";
268
385
 
269
386
  // src/utils/abort-previous-runs.ts
270
387
  function abortPreviousRuns(cb) {
@@ -297,20 +414,8 @@ function signalizedProcess(signal, steps = []) {
297
414
  };
298
415
  }
299
416
 
300
- // src/hooks/use-on-mount.ts
301
- import { useEffect as useEffect4, useRef } from "react";
302
- function useOnMount(cb) {
303
- const mounted = useRef(false);
304
- useEffect4(() => {
305
- if (!mounted.current) {
306
- mounted.current = true;
307
- cb();
308
- }
309
- }, []);
310
- }
311
-
312
417
  // src/hooks/use-style-prop-resolver.ts
313
- import { useMemo } from "react";
418
+ import { useMemo as useMemo2 } from "react";
314
419
  import { getStylesSchema } from "@elementor/editor-styles";
315
420
 
316
421
  // src/renderers/create-props-resolver.ts
@@ -434,7 +539,7 @@ var enqueueFont = (fontFamily, context = "preview") => {
434
539
 
435
540
  // src/hooks/use-style-prop-resolver.ts
436
541
  function useStylePropResolver() {
437
- return useMemo(() => {
542
+ return useMemo2(() => {
438
543
  return createPropsResolver({
439
544
  transformers: styleTransformersRegistry,
440
545
  schema: getStylesSchema(),
@@ -449,7 +554,7 @@ function useStylePropResolver() {
449
554
  }
450
555
 
451
556
  // src/hooks/use-style-renderer.ts
452
- import { useMemo as useMemo2 } from "react";
557
+ import { useMemo as useMemo3 } from "react";
453
558
  import { useBreakpointsMap } from "@elementor/editor-responsive";
454
559
 
455
560
  // src/renderers/create-styles-renderer.ts
@@ -553,7 +658,7 @@ function customCssToString(customCss) {
553
658
  var SELECTOR_PREFIX = ".elementor";
554
659
  function useStyleRenderer(resolve) {
555
660
  const breakpoints = useBreakpointsMap();
556
- return useMemo2(() => {
661
+ return useMemo3(() => {
557
662
  return createStylesRenderer({
558
663
  selectorPrefix: SELECTOR_PREFIX,
559
664
  breakpoints,
@@ -566,12 +671,12 @@ function useStyleRenderer(resolve) {
566
671
  function useStyleItems() {
567
672
  const resolve = useStylePropResolver();
568
673
  const renderStyles = useStyleRenderer(resolve);
569
- const [styleItems, setStyleItems] = useState2({});
570
- const providerAndSubscribers = useMemo3(() => {
674
+ const [styleItems, setStyleItems] = useState3({});
675
+ const providerAndSubscribers = useMemo4(() => {
571
676
  return stylesRepository2.getProviders().map((provider) => {
572
677
  return {
573
678
  provider,
574
- subscriber: createProviderSubscriber({
679
+ subscriber: createProviderSubscriber2({
575
680
  provider,
576
681
  renderStyles,
577
682
  setStyleItems
@@ -579,7 +684,7 @@ function useStyleItems() {
579
684
  };
580
685
  });
581
686
  }, [renderStyles]);
582
- useEffect5(() => {
687
+ useEffect6(() => {
583
688
  const unsubscribes = providerAndSubscribers.map(
584
689
  ({ provider, subscriber }) => provider.subscribe(subscriber)
585
690
  );
@@ -588,20 +693,20 @@ function useStyleItems() {
588
693
  };
589
694
  }, [providerAndSubscribers]);
590
695
  useOnMount(() => {
591
- registerDataHook("after", "editor/documents/attach-preview", async () => {
696
+ registerDataHook2("after", "editor/documents/attach-preview", async () => {
592
697
  const promises = providerAndSubscribers.map(async ({ subscriber }) => subscriber());
593
698
  await Promise.all(promises);
594
699
  });
595
700
  });
596
701
  const breakpointsOrder = getBreakpoints().map((breakpoint) => breakpoint.id);
597
- return useMemo3(
598
- () => Object.values(styleItems).sort(sortByProviderPriority).flatMap(({ items }) => items).sort(sortByStateType).sort(sortByBreakpoint(breakpointsOrder)),
702
+ return useMemo4(
703
+ () => Object.values(styleItems).sort(sortByProviderPriority2).flatMap(({ items }) => items).sort(sortByStateType).sort(sortByBreakpoint(breakpointsOrder)),
599
704
  // eslint-disable-next-line
600
705
  // eslint-disable-next-line react-hooks/exhaustive-deps
601
706
  [styleItems, breakpointsOrder.join("-")]
602
707
  );
603
708
  }
604
- function sortByProviderPriority({ provider: providerA }, { provider: providerB }) {
709
+ function sortByProviderPriority2({ provider: providerA }, { provider: providerB }) {
605
710
  return providerA.priority - providerB.priority;
606
711
  }
607
712
  function sortByBreakpoint(breakpointsOrder) {
@@ -616,7 +721,7 @@ function sortByStateType({ state: stateA }, { state: stateB }) {
616
721
  }
617
722
  return 0;
618
723
  }
619
- function createProviderSubscriber({ provider, renderStyles, setStyleItems }) {
724
+ function createProviderSubscriber2({ provider, renderStyles, setStyleItems }) {
620
725
  return abortPreviousRuns(
621
726
  (abortController) => signalizedProcess(abortController.signal).then((_, signal) => {
622
727
  const styles = provider.actions.all().map((__5, index, items) => {
@@ -662,16 +767,16 @@ function createProviderSubscriber({ provider, renderStyles, setStyleItems }) {
662
767
 
663
768
  // src/components/style-renderer.tsx
664
769
  function StyleRenderer() {
665
- const container = usePortalContainer();
770
+ const container = usePortalContainer2();
666
771
  const styleItems = useStyleItems();
667
772
  const linksAttrs = useDocumentsCssLinks();
668
773
  if (!container) {
669
774
  return null;
670
775
  }
671
- return /* @__PURE__ */ React3.createElement(Portal, { container }, styleItems.map((item, i) => /* @__PURE__ */ React3.createElement("style", { key: `${item.id}-${i}-${item.breakpoint}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ React3.createElement("link", { ...attrs, key: attrs.id })));
776
+ return /* @__PURE__ */ React4.createElement(Portal2, { 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 })));
672
777
  }
673
- function usePortalContainer() {
674
- return useListenTo3(commandEndEvent2("editor/documents/attach-preview"), () => getCanvasIframeDocument()?.head);
778
+ function usePortalContainer2() {
779
+ return useListenTo4(commandEndEvent3("editor/documents/attach-preview"), () => getCanvasIframeDocument()?.head);
675
780
  }
676
781
 
677
782
  // src/settings-transformers-registry.ts
@@ -1679,6 +1784,7 @@ function init() {
1679
1784
  initLinkInLinkPrevention();
1680
1785
  initLegacyViews();
1681
1786
  initSettingsTransformers();
1787
+ initInteractionsRepository();
1682
1788
  injectIntoTop({
1683
1789
  id: "elements-overlays",
1684
1790
  component: ElementsOverlays
@@ -1687,6 +1793,10 @@ function init() {
1687
1793
  id: "canvas-style-render",
1688
1794
  component: StyleRenderer
1689
1795
  });
1796
+ injectIntoTop({
1797
+ id: "canvas-interactions-render",
1798
+ component: InteractionsRenderer
1799
+ });
1690
1800
  injectIntoLogic({
1691
1801
  id: "classes-rename",
1692
1802
  component: ClassesRename
@@ -1733,6 +1843,7 @@ export {
1733
1843
  createTransformer,
1734
1844
  createTransformersRegistry,
1735
1845
  endDragElementFromPanel,
1846
+ getCanvasIframeDocument,
1736
1847
  init,
1737
1848
  registerElementType,
1738
1849
  settingsTransformersRegistry,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-canvas",
3
3
  "description": "Elementor Editor Canvas",
4
- "version": "3.33.0-234",
4
+ "version": "3.33.0-236",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,20 +37,21 @@
37
37
  "react-dom": "^18.3.1"
38
38
  },
39
39
  "dependencies": {
40
- "@elementor/editor": "3.33.0-234",
41
- "@elementor/editor-controls": "3.33.0-234",
42
- "@elementor/editor-documents": "3.33.0-234",
43
- "@elementor/editor-elements": "3.33.0-234",
44
- "@elementor/editor-notifications": "3.33.0-234",
45
- "@elementor/editor-props": "3.33.0-234",
46
- "@elementor/editor-responsive": "3.33.0-234",
47
- "@elementor/editor-styles": "3.33.0-234",
48
- "@elementor/editor-styles-repository": "3.33.0-234",
49
- "@elementor/editor-v1-adapters": "3.33.0-234",
50
- "@elementor/twing": "3.33.0-234",
40
+ "@elementor/editor": "3.33.0-236",
41
+ "@elementor/editor-controls": "3.33.0-236",
42
+ "@elementor/editor-documents": "3.33.0-236",
43
+ "@elementor/editor-elements": "3.33.0-236",
44
+ "@elementor/editor-interactions": "3.33.0-236",
45
+ "@elementor/editor-notifications": "3.33.0-236",
46
+ "@elementor/editor-props": "3.33.0-236",
47
+ "@elementor/editor-responsive": "3.33.0-236",
48
+ "@elementor/editor-styles": "3.33.0-236",
49
+ "@elementor/editor-styles-repository": "3.33.0-236",
50
+ "@elementor/editor-v1-adapters": "3.33.0-236",
51
+ "@elementor/twing": "3.33.0-236",
51
52
  "@elementor/ui": "1.36.12",
52
- "@elementor/utils": "3.33.0-234",
53
- "@elementor/wp-media": "3.33.0-234",
53
+ "@elementor/utils": "3.33.0-236",
54
+ "@elementor/wp-media": "3.33.0-236",
54
55
  "@floating-ui/react": "^0.27.5",
55
56
  "@wordpress/i18n": "^5.13.0"
56
57
  },
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+ import { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';
3
+ import { Portal } from '@elementor/ui';
4
+
5
+ import { useInteractionsItems } from '../hooks/use-interactions-items';
6
+ import { getCanvasIframeDocument } from '../sync/get-canvas-iframe-document';
7
+
8
+ export function InteractionsRenderer() {
9
+ const container = usePortalContainer();
10
+ const interactionItems = useInteractionsItems();
11
+
12
+ if ( ! container ) {
13
+ return null;
14
+ }
15
+
16
+ const interactionsData = JSON.stringify( interactionItems );
17
+
18
+ return (
19
+ <Portal container={ container }>
20
+ <script
21
+ type="application/json"
22
+ data-e-interactions="true"
23
+ dangerouslySetInnerHTML={ {
24
+ __html: interactionsData,
25
+ } }
26
+ />
27
+ </Portal>
28
+ );
29
+ }
30
+
31
+ function usePortalContainer() {
32
+ return useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument()?.head );
33
+ }
@@ -0,0 +1,107 @@
1
+ import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';
2
+ import { type InteractionItem, interactionsRepository } from '@elementor/editor-interactions';
3
+ import { registerDataHook } from '@elementor/editor-v1-adapters';
4
+
5
+ import { useOnMount } from './use-on-mount';
6
+
7
+ type ProviderAndInteractionItems = {
8
+ provider: ReturnType< typeof interactionsRepository.getProviders >[ 0 ];
9
+ items: InteractionItem[];
10
+ };
11
+
12
+ type ProviderAndSubscriber = {
13
+ provider: ReturnType< typeof interactionsRepository.getProviders >[ 0 ];
14
+ subscriber: () => void;
15
+ };
16
+
17
+ type ProviderAndInteractionItemsMap = Record< string, ProviderAndInteractionItems >;
18
+
19
+ export function useInteractionsItems() {
20
+ const [ interactionItems, setInteractionItems ] = useState< ProviderAndInteractionItemsMap >( {} );
21
+
22
+ const providerAndSubscribers = useMemo( () => {
23
+ try {
24
+ const providers = interactionsRepository.getProviders();
25
+ const mapped = providers.map( ( provider ): ProviderAndSubscriber => {
26
+ return {
27
+ provider,
28
+ subscriber: createProviderSubscriber( {
29
+ provider,
30
+ setInteractionItems,
31
+ } ),
32
+ };
33
+ } );
34
+ return mapped;
35
+ } catch {
36
+ return [];
37
+ }
38
+ }, [] );
39
+
40
+ useEffect( () => {
41
+ if ( providerAndSubscribers.length === 0 ) {
42
+ return;
43
+ }
44
+
45
+ const unsubscribes = providerAndSubscribers.map( ( { provider, subscriber } ) => {
46
+ const safeSubscriber = () => {
47
+ try {
48
+ subscriber();
49
+ } catch {}
50
+ };
51
+ const unsubscribe = provider.subscribe( safeSubscriber );
52
+ return unsubscribe;
53
+ } );
54
+
55
+ return () => {
56
+ unsubscribes.forEach( ( unsubscribe ) => unsubscribe() );
57
+ };
58
+ }, [ providerAndSubscribers ] );
59
+
60
+ useOnMount( () => {
61
+ if ( providerAndSubscribers.length === 0 ) {
62
+ return;
63
+ }
64
+
65
+ registerDataHook( 'after', 'editor/documents/attach-preview', async () => {
66
+ providerAndSubscribers.forEach( ( { subscriber } ) => {
67
+ try {
68
+ subscriber();
69
+ } catch {}
70
+ } );
71
+ } );
72
+ } );
73
+
74
+ return useMemo(
75
+ () =>
76
+ Object.values( interactionItems )
77
+ .sort( sortByProviderPriority )
78
+ .flatMap( ( { items } ) => items ),
79
+ [ interactionItems ]
80
+ );
81
+ }
82
+
83
+ function sortByProviderPriority(
84
+ { provider: providerA }: ProviderAndInteractionItems,
85
+ { provider: providerB }: ProviderAndInteractionItems
86
+ ) {
87
+ return providerA.priority - providerB.priority;
88
+ }
89
+
90
+ type CreateProviderSubscriberArgs = {
91
+ provider: ReturnType< typeof interactionsRepository.getProviders >[ 0 ];
92
+ setInteractionItems: Dispatch< SetStateAction< ProviderAndInteractionItemsMap > >;
93
+ };
94
+
95
+ function createProviderSubscriber( { provider, setInteractionItems }: CreateProviderSubscriberArgs ) {
96
+ return () => {
97
+ try {
98
+ const items = provider.actions.all();
99
+ const providerKey = provider.getKey();
100
+
101
+ setInteractionItems( ( prev ) => ( {
102
+ ...prev,
103
+ [ providerKey ]: { provider, items },
104
+ } ) );
105
+ } catch {}
106
+ };
107
+ }
package/src/index.ts CHANGED
@@ -12,4 +12,5 @@ export {
12
12
  createTemplatedElementView,
13
13
  type CreateTemplatedElementTypeOptions,
14
14
  } from './legacy/create-templated-element-type';
15
+ export { getCanvasIframeDocument } from './sync/get-canvas-iframe-document';
15
16
  export * from './legacy/types';
package/src/init.tsx CHANGED
@@ -1,7 +1,9 @@
1
1
  import { injectIntoLogic, injectIntoTop } from '@elementor/editor';
2
+ import { init as initInteractionsRepository } from '@elementor/editor-interactions';
2
3
 
3
4
  import { ClassesRename } from './components/classes-rename';
4
5
  import { ElementsOverlays } from './components/elements-overlays';
6
+ import { InteractionsRenderer } from './components/interactions-renderer';
5
7
  import { StyleRenderer } from './components/style-renderer';
6
8
  import { initSettingsTransformers } from './init-settings-transformers';
7
9
  import { initStyleTransformers } from './init-style-transformers';
@@ -19,6 +21,8 @@ export function init() {
19
21
 
20
22
  initSettingsTransformers();
21
23
 
24
+ initInteractionsRepository();
25
+
22
26
  injectIntoTop( {
23
27
  id: 'elements-overlays',
24
28
  component: ElementsOverlays,
@@ -29,6 +33,11 @@ export function init() {
29
33
  component: StyleRenderer,
30
34
  } );
31
35
 
36
+ injectIntoTop( {
37
+ id: 'canvas-interactions-render',
38
+ component: InteractionsRenderer,
39
+ } );
40
+
32
41
  injectIntoLogic( {
33
42
  id: 'classes-rename',
34
43
  component: ClassesRename,
package/src/sync/types.ts CHANGED
@@ -39,5 +39,10 @@ export type CanvasExtendedWindow = Window & {
39
39
  storage?: {
40
40
  get: ( key?: string ) => StorageContent;
41
41
  };
42
+ config?: {
43
+ urls?: {
44
+ assets?: string;
45
+ };
46
+ };
42
47
  };
43
48
  };