@juo/blocks 1.18.0 → 1.18.1
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/{bridge-xiKEzCGR.js → bridge-4Eq-G73Z.js} +8 -0
- package/dist/core.js +1 -1
- package/dist/editor/bridge.d.ts +7 -0
- package/dist/editor/bridge.d.ts.map +1 -1
- package/dist/editor/components.d.ts +11 -0
- package/dist/editor/components.d.ts.map +1 -1
- package/dist/editor.js +33 -4
- package/dist/{morph-n4LMxOYo.js → morph-DHn3ol8M.js} +1 -1
- package/dist/preact.js +1 -1
- package/dist/react.js +1 -1
- package/dist/vue.js +1 -1
- package/dist/web-components-editor.js +2 -2
- package/package.json +1 -1
|
@@ -394,6 +394,13 @@ function createEditorBridge() {
|
|
|
394
394
|
return;
|
|
395
395
|
}
|
|
396
396
|
if (clickedBlockId && clickedBlockId === selectedBlockId.value) {
|
|
397
|
+
if (!isEditorUI) {
|
|
398
|
+
const message = createSelectBlockMessage(
|
|
399
|
+
{ blockId: clickedBlockId },
|
|
400
|
+
clickedBlockId
|
|
401
|
+
);
|
|
402
|
+
messageHandlers.forEach((handler) => handler(message));
|
|
403
|
+
}
|
|
397
404
|
return;
|
|
398
405
|
}
|
|
399
406
|
if (isNewSelection) {
|
|
@@ -619,6 +626,7 @@ function createEditorBridge() {
|
|
|
619
626
|
upsertThemeState,
|
|
620
627
|
requestTranslationOverrides,
|
|
621
628
|
requestGlobalStyles,
|
|
629
|
+
getSelectedBlockId: () => selectedBlockId.value,
|
|
622
630
|
preserveScrollAcrossReflow,
|
|
623
631
|
destroy
|
|
624
632
|
};
|
package/dist/core.js
CHANGED
|
@@ -4,7 +4,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4
4
|
import { f as createContext, g as d, h as w, j as registerBlock, E, u, k as getDefinedBlocks, l as createBlockInstance, m as defineBlock, s as subscribeContext, G as GRID_V1_ENGINE_ID, n as clampRect, p as applyFillExpansion, q as compactItems, t as findFreeRect, D as DEFAULT_GRID } from "./css-runtime-DTiXcYSs.js";
|
|
5
5
|
import { B, v, x, y, z, L, P, S, c, T, A, d as d2, b, F, H, I, J, K, N, O, Q, R, U, V, W, X, Y, Z, i, _, a, $, a0, o, a1, a2, a3, e, a4, r, a5, a6, a7, w as w2 } from "./css-runtime-DTiXcYSs.js";
|
|
6
6
|
import { reportBlockWarning, reportBlockError } from "./observability.js";
|
|
7
|
-
import { a as createEditorBridge, D as createSelectBlockMessage } from "./bridge-
|
|
7
|
+
import { a as createEditorBridge, D as createSelectBlockMessage } from "./bridge-4Eq-G73Z.js";
|
|
8
8
|
import { p } from "./project-gridstack-C2cSYRMx.js";
|
|
9
9
|
import { clearLayoutModeAdapter, getLayoutModeAdapter, registerLayoutModeAdapter } from "./layout-mode-adapter-BBd4JRQd.js";
|
|
10
10
|
const SUPPORTED_UI_LANGUAGES = [
|
package/dist/editor/bridge.d.ts
CHANGED
|
@@ -61,6 +61,13 @@ export interface EditorBridge {
|
|
|
61
61
|
upsertThemeState: (surface: ThemeSurface, id: string, blocks: Block[]) => void;
|
|
62
62
|
requestTranslationOverrides: (locale: string) => Promise<TranslationOverride[]>;
|
|
63
63
|
requestGlobalStyles: () => Promise<GlobalStyles>;
|
|
64
|
+
/**
|
|
65
|
+
* The block id the parent most recently selected (via SELECT_BLOCK or an
|
|
66
|
+
* in-iframe click), or null. Wrappers that mount after the broadcast use
|
|
67
|
+
* this to initialise their active state instead of waiting for the next
|
|
68
|
+
* selection change.
|
|
69
|
+
*/
|
|
70
|
+
getSelectedBlockId: () => string | null;
|
|
64
71
|
/**
|
|
65
72
|
* Preserve the iframe scroll position across a re-render that transiently
|
|
66
73
|
* collapses content height (e.g. toggling layout mode). Capture is synchronous,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/editor/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAGd,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAGtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,UAAU,CACzB,MAAM,GAAG,OAAO,EAChB,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAElC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,SAAS;IAC1E,KAAK,EAAE,MAAM,CAAC,CAAC;CAChB,GACG,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,oBAAoB,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,SAAS;IAC5E,OAAO,EAAE,MAAM,CAAC,CAAC;CAClB,GACG,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,KAAK;QACxD,WAAW,EAAE,MAAM,IAAI,CAAC;KACzB,CAAC;IACF,mBAAmB,CAAC,QAAQ,GAAG,OAAO,EACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CACR,MAAM,EAAE,UAAU,CAChB,kBAAkB,CAAC,QAAQ,CAAC,EAC5B,oBAAoB,CAAC,QAAQ,CAAC,CAC/B,GAAG,IAAI,KACL,IAAI,GACR;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC/B,iBAAiB,EAAE,CACjB,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,MAAM,KACP,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACzC,gBAAgB,EAAE,CAChB,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,KAAK,EAAE,KACZ,IAAI,CAAC;IACV,2BAA2B,EAAE,CAC3B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpC,mBAAmB,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD;;;;;;OAMG;IACH,0BAA0B,EAAE,MAAM,IAAI,CAAC;IACvC;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAID;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAgB,kBAAkB,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/editor/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAGd,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAGtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,UAAU,CACzB,MAAM,GAAG,OAAO,EAChB,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAElC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,SAAS;IAC1E,KAAK,EAAE,MAAM,CAAC,CAAC;CAChB,GACG,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,oBAAoB,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,SAAS;IAC5E,OAAO,EAAE,MAAM,CAAC,CAAC;CAClB,GACG,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,KAAK;QACxD,WAAW,EAAE,MAAM,IAAI,CAAC;KACzB,CAAC;IACF,mBAAmB,CAAC,QAAQ,GAAG,OAAO,EACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CACR,MAAM,EAAE,UAAU,CAChB,kBAAkB,CAAC,QAAQ,CAAC,EAC5B,oBAAoB,CAAC,QAAQ,CAAC,CAC/B,GAAG,IAAI,KACL,IAAI,GACR;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC/B,iBAAiB,EAAE,CACjB,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,MAAM,KACP,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACzC,gBAAgB,EAAE,CAChB,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,KAAK,EAAE,KACZ,IAAI,CAAC;IACV,2BAA2B,EAAE,CAC3B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpC,mBAAmB,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;OAMG;IACH,0BAA0B,EAAE,MAAM,IAAI,CAAC;IACvC;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAID;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAmiBjD"}
|
|
@@ -39,6 +39,15 @@ export declare class BlockWrapper extends HTMLElement {
|
|
|
39
39
|
private openMenu;
|
|
40
40
|
private closeMenu;
|
|
41
41
|
setBlock(block: BlockInstance): void;
|
|
42
|
+
/**
|
|
43
|
+
* SELECT_BLOCK is broadcast once per selection change, so a wrapper that
|
|
44
|
+
* mounts afterwards (overlay content renders asynchronously) would never
|
|
45
|
+
* hear it and stay inactive — leaving its slotted content with
|
|
46
|
+
* pointer-events: none and every juo-text unclickable. Seed the active
|
|
47
|
+
* state from the bridge's cached selection instead of waiting for the
|
|
48
|
+
* next change.
|
|
49
|
+
*/
|
|
50
|
+
private syncActiveStateFromBridge;
|
|
42
51
|
private updateActiveState;
|
|
43
52
|
/**
|
|
44
53
|
* Traverses up the DOM tree to find the parent element, crossing shadow root boundaries
|
|
@@ -158,6 +167,8 @@ export declare class LayoutBlockWrapper extends HTMLElement {
|
|
|
158
167
|
/** Assign each bar its width from the block-type-seeded sequence. */
|
|
159
168
|
private applyBarWidths;
|
|
160
169
|
setBlock(block: BlockInstance): void;
|
|
170
|
+
/** See BlockWrapper.syncActiveStateFromBridge. */
|
|
171
|
+
private syncActiveStateFromBridge;
|
|
161
172
|
}
|
|
162
173
|
declare global {
|
|
163
174
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/editor/components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA+jB9C,qBAAa,YAAa,SAAQ,WAAW;IAC3C,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,uBAAuB,CAA0C;IACzE,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,OAAO,CAA4B;IAE3C,MAAM,KAAK,kBAAkB,aAE5B;;IASD,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;IA8GrB,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,uBAAuB;IAO/B,iBAAiB;
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/editor/components.ts"],"names":[],"mappings":"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"}
|
package/dist/editor.js
CHANGED
|
@@ -3,10 +3,10 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
|
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
4
|
import { serializeBlocks, createBlockInstanceFromObject, setActiveSurfaceContext, indexOverrides, canvasMode, getActiveSurfaceContext, emitLayoutCommand, DEFAULT_GLOBAL_STYLES, effect, setLayoutCommandEmitter, setLayoutCommandDispatcher, onRegisterBlock, getDefinedBlocks, clearAllSurfaceContexts } from "@juo/blocks";
|
|
5
5
|
import { canvasMode as canvasMode2 } from "@juo/blocks";
|
|
6
|
-
import { L as LAYOUT_BLOCK_WRAPPER_TAG, a as createEditorBridge, b as createOpenAddBlockMenuMessage, d as createRemoveBlockMessage, i as isBlockWrapperTag, r as resolveOutlineTarget, e as getBlockLabel, f as createLayoutCommandMessage, h as createRegisterBlocksMessage, j as createRegisterRoutesMessage } from "./bridge-
|
|
7
|
-
import { k, l, m, c, n, o, p, q, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, g, M, N } from "./bridge-
|
|
8
|
-
import { s as setCanvasMode, e as enterLayout } from "./morph-
|
|
9
|
-
import { r } from "./morph-
|
|
6
|
+
import { L as LAYOUT_BLOCK_WRAPPER_TAG, a as createEditorBridge, b as createOpenAddBlockMenuMessage, d as createRemoveBlockMessage, i as isBlockWrapperTag, r as resolveOutlineTarget, e as getBlockLabel, f as createLayoutCommandMessage, h as createRegisterBlocksMessage, j as createRegisterRoutesMessage } from "./bridge-4Eq-G73Z.js";
|
|
7
|
+
import { k, l, m, c, n, o, p, q, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, g, M, N } from "./bridge-4Eq-G73Z.js";
|
|
8
|
+
import { s as setCanvasMode, e as enterLayout } from "./morph-DHn3ol8M.js";
|
|
9
|
+
import { r } from "./morph-DHn3ol8M.js";
|
|
10
10
|
function createEditorHandler(options) {
|
|
11
11
|
const { themeState, onBlockSelection } = options;
|
|
12
12
|
const blockSurfaceIndex = /* @__PURE__ */ new Map();
|
|
@@ -1052,6 +1052,7 @@ class BlockWrapper extends HTMLElement {
|
|
|
1052
1052
|
}
|
|
1053
1053
|
this.addEventListener("mouseenter", this.handleHoverEnter);
|
|
1054
1054
|
this.addEventListener("mouseleave", this.handleHoverLeave);
|
|
1055
|
+
this.syncActiveStateFromBridge();
|
|
1055
1056
|
}
|
|
1056
1057
|
/**
|
|
1057
1058
|
* Resolve the slotted block's first painted descendant — the
|
|
@@ -1119,6 +1120,21 @@ class BlockWrapper extends HTMLElement {
|
|
|
1119
1120
|
if (this.nameElement) {
|
|
1120
1121
|
this.nameElement.textContent = block.definition.displayName ?? block.definition.name;
|
|
1121
1122
|
}
|
|
1123
|
+
this.syncActiveStateFromBridge();
|
|
1124
|
+
}
|
|
1125
|
+
/**
|
|
1126
|
+
* SELECT_BLOCK is broadcast once per selection change, so a wrapper that
|
|
1127
|
+
* mounts afterwards (overlay content renders asynchronously) would never
|
|
1128
|
+
* hear it and stay inactive — leaving its slotted content with
|
|
1129
|
+
* pointer-events: none and every juo-text unclickable. Seed the active
|
|
1130
|
+
* state from the bridge's cached selection instead of waiting for the
|
|
1131
|
+
* next change.
|
|
1132
|
+
*/
|
|
1133
|
+
syncActiveStateFromBridge() {
|
|
1134
|
+
if (!this.block) return;
|
|
1135
|
+
if (this.editorBridge.getSelectedBlockId() === this.block.id) {
|
|
1136
|
+
this.updateActiveState(true);
|
|
1137
|
+
}
|
|
1122
1138
|
}
|
|
1123
1139
|
updateActiveState(isActive) {
|
|
1124
1140
|
if (isActive) {
|
|
@@ -1778,6 +1794,7 @@ const _LayoutBlockWrapper = class _LayoutBlockWrapper extends HTMLElement {
|
|
|
1778
1794
|
}
|
|
1779
1795
|
this.addEventListener("mouseenter", this.handleHoverEnter);
|
|
1780
1796
|
this.addEventListener("mouseleave", this.handleHoverLeave);
|
|
1797
|
+
this.syncActiveStateFromBridge();
|
|
1781
1798
|
if (typeof ResizeObserver !== "undefined" && this.skeletonLines) {
|
|
1782
1799
|
this.skeletonResizeObserver = new ResizeObserver(
|
|
1783
1800
|
this.scheduleSkeletonRecompute
|
|
@@ -1825,6 +1842,10 @@ const _LayoutBlockWrapper = class _LayoutBlockWrapper extends HTMLElement {
|
|
|
1825
1842
|
if (this.hasAttribute("data-juo-grid-cell")) return;
|
|
1826
1843
|
const target = this.paintTarget();
|
|
1827
1844
|
if (!target) return;
|
|
1845
|
+
if (this.selectionOutlineTarget && this.selectionOutlineTarget !== target) {
|
|
1846
|
+
this.selectionOutlineTarget.style.outline = "";
|
|
1847
|
+
this.selectionOutlineTarget.style.outlineOffset = "";
|
|
1848
|
+
}
|
|
1828
1849
|
this.selectionOutlineTarget = target;
|
|
1829
1850
|
target.style.outline = "2px solid #060606";
|
|
1830
1851
|
target.style.outlineOffset = "0";
|
|
@@ -1900,6 +1921,14 @@ const _LayoutBlockWrapper = class _LayoutBlockWrapper extends HTMLElement {
|
|
|
1900
1921
|
this.skeletonTitle.textContent = getBlockLabel(block);
|
|
1901
1922
|
}
|
|
1902
1923
|
this.applyBarWidths();
|
|
1924
|
+
this.syncActiveStateFromBridge();
|
|
1925
|
+
}
|
|
1926
|
+
/** See BlockWrapper.syncActiveStateFromBridge. */
|
|
1927
|
+
syncActiveStateFromBridge() {
|
|
1928
|
+
if (!this.block) return;
|
|
1929
|
+
if (this.editorBridge.getSelectedBlockId() === this.block.id) {
|
|
1930
|
+
this.updateActiveState(true);
|
|
1931
|
+
}
|
|
1903
1932
|
}
|
|
1904
1933
|
};
|
|
1905
1934
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { canvasMode, effect } from "@juo/blocks";
|
|
2
|
-
import { g as getEditorBridge, c as createLayoutingModeChangedMessage, W as WRAPPER_SELECTOR } from "./bridge-
|
|
2
|
+
import { g as getEditorBridge, c as createLayoutingModeChangedMessage, W as WRAPPER_SELECTOR } from "./bridge-4Eq-G73Z.js";
|
|
3
3
|
import { LAYOUT_INTERACTION_START, LAYOUT_INTERACTION_END, LAYOUT_POP_CLASS } from "./layout-mode-adapter-BBd4JRQd.js";
|
|
4
4
|
function setCanvasMode(enabled) {
|
|
5
5
|
var _a;
|
package/dist/preact.js
CHANGED
|
@@ -7,7 +7,7 @@ import { g as getSignalValue, s as setSignalValue, w as wrapContext, c as create
|
|
|
7
7
|
import { t } from "./block-dVP4Rqgz.js";
|
|
8
8
|
import { createContext, h, render } from "preact";
|
|
9
9
|
import { g as getInstrumentation } from "./index-JSv6UH_o.js";
|
|
10
|
-
import { a as createEditorBridge } from "./bridge-
|
|
10
|
+
import { a as createEditorBridge } from "./bridge-4Eq-G73Z.js";
|
|
11
11
|
function toState(signal) {
|
|
12
12
|
const [value, setValue] = useState(() => getSignalValue(signal));
|
|
13
13
|
const disposeRef = useRef(null);
|
package/dist/react.js
CHANGED
|
@@ -7,7 +7,7 @@ import { g as getSignalValue, s as setSignalValue, w as wrapContext, c as create
|
|
|
7
7
|
import { t } from "./block-dVP4Rqgz.js";
|
|
8
8
|
import { createRoot } from "react-dom/client";
|
|
9
9
|
import { g as getInstrumentation } from "./index-JSv6UH_o.js";
|
|
10
|
-
import { a as createEditorBridge } from "./bridge-
|
|
10
|
+
import { a as createEditorBridge } from "./bridge-4Eq-G73Z.js";
|
|
11
11
|
function toState(signal) {
|
|
12
12
|
const subscribe = (callback) => {
|
|
13
13
|
const dispose = effect(() => {
|
package/dist/vue.js
CHANGED
|
@@ -2,7 +2,7 @@ import { customRef, toValue, watchEffect, defineComponent, ref, getCurrentInstan
|
|
|
2
2
|
import { g as getInstrumentation } from "./index-JSv6UH_o.js";
|
|
3
3
|
import { effect, signal, injectContext, provideContext, TranslationContext, createCeRenderer, attachEmptyTracking } from "@juo/blocks";
|
|
4
4
|
import { hasRenderedContent } from "@juo/blocks";
|
|
5
|
-
import { v as createRegisterBlockTranslationKeysMessage, a as createEditorBridge } from "./bridge-
|
|
5
|
+
import { v as createRegisterBlockTranslationKeysMessage, a as createEditorBridge } from "./bridge-4Eq-G73Z.js";
|
|
6
6
|
const signalsMap = /* @__PURE__ */ new WeakMap();
|
|
7
7
|
function toSignal(ref2) {
|
|
8
8
|
if (!signalsMap.has(ref2)) {
|
|
@@ -5,8 +5,8 @@ import { i as injectContext, T as TranslationContext, C as ContextRoot } from ".
|
|
|
5
5
|
import { V as ViewLayoutController, E as ExtensionRoot, B as Block } from "./ExtensionRoot-DfpvN94s.js";
|
|
6
6
|
import { canvasMode, getActiveSurfaceContext, emitLayoutSetRects, effect } from "@juo/blocks";
|
|
7
7
|
import { getLayoutModeAdapter } from "./layout-mode-adapter-BBd4JRQd.js";
|
|
8
|
-
import { a as createEditorBridge, m as createFocusInlineTextMessage, J as createUpdateBlockTranslationMessage } from "./bridge-
|
|
9
|
-
import { i as initMorphController } from "./morph-
|
|
8
|
+
import { a as createEditorBridge, m as createFocusInlineTextMessage, J as createUpdateBlockTranslationMessage } from "./bridge-4Eq-G73Z.js";
|
|
9
|
+
import { i as initMorphController } from "./morph-DHn3ol8M.js";
|
|
10
10
|
class EditorLayoutController {
|
|
11
11
|
constructor() {
|
|
12
12
|
__publicField(this, "currentAdapter", null);
|