@base44-preview/vite-plugin 1.0.6-pr.63.d7abd73 → 1.0.18-pr.80.79b32f2

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.
Files changed (56) hide show
  1. package/dist/html-injections-plugin.d.ts.map +1 -1
  2. package/dist/html-injections-plugin.js +4 -2
  3. package/dist/html-injections-plugin.js.map +1 -1
  4. package/dist/index.js +2 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/injections/auto-popup-suppressor.d.ts +6 -0
  7. package/dist/injections/auto-popup-suppressor.d.ts.map +1 -0
  8. package/dist/injections/auto-popup-suppressor.js +264 -0
  9. package/dist/injections/auto-popup-suppressor.js.map +1 -0
  10. package/dist/injections/canvas-wheel-zoom-bridge.d.ts +5 -0
  11. package/dist/injections/canvas-wheel-zoom-bridge.d.ts.map +1 -0
  12. package/dist/injections/canvas-wheel-zoom-bridge.js +64 -0
  13. package/dist/injections/canvas-wheel-zoom-bridge.js.map +1 -0
  14. package/dist/injections/page-height-bridge.d.ts +14 -0
  15. package/dist/injections/page-height-bridge.d.ts.map +1 -0
  16. package/dist/injections/page-height-bridge.js +510 -0
  17. package/dist/injections/page-height-bridge.js.map +1 -0
  18. package/dist/injections/visual-edit-agent.d.ts.map +1 -1
  19. package/dist/injections/visual-edit-agent.js +21 -0
  20. package/dist/injections/visual-edit-agent.js.map +1 -1
  21. package/dist/jsx-processor.d.ts.map +1 -1
  22. package/dist/jsx-processor.js +1 -0
  23. package/dist/jsx-processor.js.map +1 -1
  24. package/dist/processors/collection-id-processor.d.ts +1 -0
  25. package/dist/processors/collection-id-processor.d.ts.map +1 -1
  26. package/dist/processors/collection-id-processor.js +17 -0
  27. package/dist/processors/collection-id-processor.js.map +1 -1
  28. package/dist/processors/collection-item-field-processor.d.ts.map +1 -1
  29. package/dist/processors/collection-item-field-processor.js +16 -5
  30. package/dist/processors/collection-item-field-processor.js.map +1 -1
  31. package/dist/processors/collection-item-id-processor.d.ts +27 -0
  32. package/dist/processors/collection-item-id-processor.d.ts.map +1 -1
  33. package/dist/processors/collection-item-id-processor.js +128 -1
  34. package/dist/processors/collection-item-id-processor.js.map +1 -1
  35. package/dist/processors/utils/collection-tracing-utils.d.ts +1 -1
  36. package/dist/processors/utils/collection-tracing-utils.d.ts.map +1 -1
  37. package/dist/processors/utils/collection-tracing-utils.js +48 -10
  38. package/dist/processors/utils/collection-tracing-utils.js.map +1 -1
  39. package/dist/processors/utils/shared-utils.js +1 -1
  40. package/dist/processors/utils/shared-utils.js.map +1 -1
  41. package/dist/statics/index.mjs +8 -8
  42. package/dist/statics/index.mjs.map +1 -1
  43. package/package.json +1 -1
  44. package/src/bridge.ts +1 -1
  45. package/src/html-injections-plugin.ts +4 -2
  46. package/src/index.ts +2 -2
  47. package/src/injections/auto-popup-suppressor.ts +271 -0
  48. package/src/injections/canvas-wheel-zoom-bridge.ts +78 -0
  49. package/src/injections/page-height-bridge.ts +566 -0
  50. package/src/injections/visual-edit-agent.ts +32 -1
  51. package/src/jsx-processor.ts +1 -0
  52. package/src/processors/collection-id-processor.ts +17 -0
  53. package/src/processors/collection-item-field-processor.ts +23 -5
  54. package/src/processors/collection-item-id-processor.ts +154 -0
  55. package/src/processors/utils/collection-tracing-utils.ts +54 -8
  56. package/src/processors/utils/shared-utils.ts +1 -1
@@ -0,0 +1,510 @@
1
+ // page-height-bridge — postMessage protocol the iframe exposes to its parent.
2
+ // Inert until the parent posts a message; no observers, rewrites, or timers
3
+ // fire on their own.
4
+ //
5
+ // parent → child { type: "freeze-vh-units", referenceVhBase?: number }
6
+ // Rewrites every viewport-height unit (`vh`/`dvh`/`svh`/`lvh`) in
7
+ // <style> + CSSOM to a CSS variable-backed expression (kills the
8
+ // vh ↔ auto-resize feedback loop). Repeated calls update the variable,
9
+ // so callers can rebase without recovering raw CSS. Idempotent; covers
10
+ // HMR-added styles too. Fire-and-forget.
11
+ //
12
+ // parent → child { type: "measure-page-height", settleMs?: number }
13
+ // After `settleMs` (default 2000) posts the page's measured content height
14
+ // as `{ type: "page-height-measured", height }` to the requester.
15
+ const FALLBACK_VHBASE = 900;
16
+ const MIN_VHBASE = 400;
17
+ const DEFAULT_SETTLE_MS = 2000;
18
+ const NEUTRALIZE_DEBOUNCE_MS = 16;
19
+ // Three consecutive same-height samples ≈ ~50ms of "no change". Three is
20
+ // enough to filter single-frame jitter from layout passes but short enough
21
+ // that responses arrive promptly when the DOM is already settled.
22
+ const STABILITY_SAMPLES = 3;
23
+ // Interval between stability samples. ~1 frame at 60Hz; chosen as a plain
24
+ // setTimeout (not rAF) because jsdom rAFs are unreliably timed for tests and
25
+ // in real browsers a 16ms tick is post-layout for any layout work that fits
26
+ // inside one frame.
27
+ const STABILITY_TICK_MS = 16;
28
+ // Hard cap on the stability poll past settleMs. Pages that genuinely never
29
+ // stabilize (looping height-animating content) reply with their last sample
30
+ // rather than hanging the parent's resize logic.
31
+ const STABILITY_MAX_WAIT_MS = 1500;
32
+ const REFERENCE_VH_BASE_VAR = "--base44-reference-vh-base";
33
+ const noop = () => { };
34
+ let started = false;
35
+ /**
36
+ * Installs the parent-driven message listener. Returns a teardown that
37
+ * removes the listener, disconnects any observers attached as a result of
38
+ * `freeze-vh-units`, and clears any pending response timer. Returns a
39
+ * no-op when bailed (already started, SSR, top window).
40
+ */
41
+ export function setupPageHeightBridge() {
42
+ if (started)
43
+ return noop;
44
+ if (typeof window === "undefined")
45
+ return noop;
46
+ if (window.self === window.top)
47
+ return noop;
48
+ started = true;
49
+ const controller = createPageHeightBridgeController();
50
+ const onMessage = (event) => {
51
+ const data = (event.data ?? null);
52
+ if (!data || typeof data !== "object")
53
+ return;
54
+ switch (data.type) {
55
+ case "freeze-vh-units": {
56
+ const override = typeof data.referenceVhBase === "number" ? data.referenceVhBase : undefined;
57
+ controller.freezeVhUnits(override);
58
+ return;
59
+ }
60
+ case "measure-page-height": {
61
+ const settleMs = typeof data.settleMs === "number" ? data.settleMs : DEFAULT_SETTLE_MS;
62
+ const origin = event.origin && event.origin !== "null" ? event.origin : "*";
63
+ controller.measurePageHeight(origin, settleMs);
64
+ return;
65
+ }
66
+ }
67
+ };
68
+ window.addEventListener("message", onMessage);
69
+ let torn = false;
70
+ return () => {
71
+ if (torn)
72
+ return;
73
+ torn = true;
74
+ started = false;
75
+ window.removeEventListener("message", onMessage);
76
+ controller.teardown();
77
+ };
78
+ }
79
+ export function createPageHeightBridgeController() {
80
+ let vhCleanups = null;
81
+ let vhForceRun = null;
82
+ let pendingSettle;
83
+ let pendingTick;
84
+ let pendingOrigin = "*";
85
+ const cancelPending = () => {
86
+ if (pendingSettle !== undefined) {
87
+ window.clearTimeout(pendingSettle);
88
+ pendingSettle = undefined;
89
+ }
90
+ if (pendingTick !== undefined) {
91
+ window.clearTimeout(pendingTick);
92
+ pendingTick = undefined;
93
+ }
94
+ };
95
+ return {
96
+ freezeVhUnits: (override) => {
97
+ const referenceVhBase = resolveReferenceVhBase(override);
98
+ setReferenceVhBase(referenceVhBase);
99
+ if (vhCleanups) {
100
+ vhForceRun?.();
101
+ return;
102
+ }
103
+ vhCleanups = [];
104
+ vhForceRun = startVhNeutralizer(vhCleanups);
105
+ },
106
+ // Target the requester's origin so the height isn't broadcast to anyone
107
+ // who happens to embed us. Falls back to "*" when origin is unavailable
108
+ // (jsdom default, sandboxed iframes with `null` origin).
109
+ //
110
+ // Stability-wait response: after `settleMs`, poll measureContentHeight at
111
+ // STABILITY_TICK_MS intervals until it's unchanged for STABILITY_SAMPLES
112
+ // consecutive ticks, then send exactly one reply. Catches late React
113
+ // mounts (sticky-positioned sections committing after settleMs), debounced
114
+ // neutralizer mutations not yet flushed, image/font-driven layout shifts.
115
+ // STABILITY_MAX_WAIT_MS caps the poll so a page that genuinely never
116
+ // settles still replies eventually.
117
+ measurePageHeight: (origin, settleMs = DEFAULT_SETTLE_MS) => {
118
+ pendingOrigin = origin;
119
+ cancelPending();
120
+ pendingSettle = window.setTimeout(() => {
121
+ pendingSettle = undefined;
122
+ // Flush any debounced unscroll / inline-vh rewrites NOW so the first
123
+ // sample sees a DOM that reflects every mutation triggered during the
124
+ // settle window. Without this, an `overflow-y: scroll` container that
125
+ // mounted mid-settle can still be hiding its children at sample time.
126
+ vhForceRun?.();
127
+ const deadline = nowMs() + STABILITY_MAX_WAIT_MS;
128
+ let lastHeight = -1;
129
+ let stableSamples = 0;
130
+ const respond = (height) => {
131
+ pendingTick = undefined;
132
+ window.parent.postMessage({ type: "page-height-measured", height }, pendingOrigin);
133
+ };
134
+ const tick = () => {
135
+ pendingTick = undefined;
136
+ const height = measureContentHeight();
137
+ if (height === lastHeight) {
138
+ stableSamples++;
139
+ }
140
+ else {
141
+ stableSamples = 1;
142
+ lastHeight = height;
143
+ }
144
+ if (stableSamples >= STABILITY_SAMPLES || nowMs() >= deadline) {
145
+ respond(height);
146
+ return;
147
+ }
148
+ pendingTick = window.setTimeout(tick, STABILITY_TICK_MS);
149
+ };
150
+ tick();
151
+ }, settleMs);
152
+ },
153
+ teardown: () => {
154
+ if (vhCleanups) {
155
+ for (const c of vhCleanups)
156
+ c();
157
+ vhCleanups = null;
158
+ vhForceRun = null;
159
+ }
160
+ cancelPending();
161
+ },
162
+ };
163
+ }
164
+ function nowMs() {
165
+ if (typeof performance !== "undefined" && typeof performance.now === "function") {
166
+ return performance.now();
167
+ }
168
+ return Date.now();
169
+ }
170
+ function resolveReferenceVhBase(override) {
171
+ if (override !== undefined)
172
+ return override;
173
+ const detected = window.innerHeight || 0;
174
+ return detected >= MIN_VHBASE ? detected : FALLBACK_VHBASE;
175
+ }
176
+ function setReferenceVhBase(referenceVhBase) {
177
+ document.documentElement.style.setProperty(REFERENCE_VH_BASE_VAR, `${referenceVhBase}px`);
178
+ }
179
+ // Caches keep work proportional to *new* CSS, not total CSS. <head> observer
180
+ // catches `<style>`/`<link>` adds; per-element observers catch HMR text edits.
181
+ // Returns a `forceRun` so the caller can re-trigger neutralization on later
182
+ // parent requests (idempotent — already-rewritten text is skipped via the
183
+ // processed sets).
184
+ function startVhNeutralizer(cleanups) {
185
+ // Match vh + the dynamic/small/large variants. Tailwind v4 emits `h-screen`
186
+ // as `100dvh`; all four collapse to the same frozen `referenceVhBase`.
187
+ const VH_RE = /(\d+(?:\.\d+)?)(?:d|s|l)?vh\b/g;
188
+ const processedStyles = new WeakSet();
189
+ const processedSheets = new WeakMap();
190
+ const watchedStyles = new WeakSet();
191
+ const styleObservers = new Set();
192
+ const unscrolled = new WeakSet();
193
+ const rewrite = (input) => input.replace(VH_RE, (_match, n) => `calc(var(${REFERENCE_VH_BASE_VAR}) * ${formatVhFactor(n)})`);
194
+ // Defeats internal vertical scrollers. The canvas wants the whole page laid
195
+ // out top-to-bottom, but `<div class="overflow-y-auto" style={{height:
196
+ // "100vh"}}>` hides its children behind an internal scrollbar — only the
197
+ // first child appears in the preview. Forcing `overflow-y: visible` lets
198
+ // children paint outside the parent's box; block flow positions them at
199
+ // their natural offsets so document.body extends to include them. `auto`
200
+ // and `scroll` only — `hidden` and `clip` express intentional clipping (UI
201
+ // chrome, rounded-corner masks) we shouldn't undo.
202
+ const unscrollY = (el) => {
203
+ if (unscrolled.has(el))
204
+ return;
205
+ const computedStyle = window.getComputedStyle(el);
206
+ const ovY = computedStyle.overflowY;
207
+ if (ovY !== "auto" && ovY !== "scroll")
208
+ return;
209
+ unscrolled.add(el);
210
+ el.style.setProperty("overflow-y", "visible", "important");
211
+ };
212
+ const unscrollSubtree = (root) => {
213
+ unscrollY(root);
214
+ root.querySelectorAll("*").forEach(unscrollY);
215
+ };
216
+ // Rewrites vh-bearing properties on a single element's inline style. Covers
217
+ // React's `style={{ height: "100vh" }}` and imperative `el.style.h = ".vh"`
218
+ // — both bypass <style> tags and CSSOM. Per-property setProperty preserves
219
+ // `!important`. Snapshotting prop names first guards against iteration-time
220
+ // mutation of `style.length`.
221
+ const rewriteInlineStyle = (el) => {
222
+ const style = el.style;
223
+ if (!style || style.length === 0)
224
+ return;
225
+ const props = [];
226
+ for (let i = 0; i < style.length; i++) {
227
+ const prop = style[i];
228
+ if (prop)
229
+ props.push(prop);
230
+ }
231
+ for (const prop of props) {
232
+ const value = style.getPropertyValue(prop);
233
+ if (!value || value.indexOf("vh") === -1)
234
+ continue;
235
+ const next = rewrite(value);
236
+ if (next !== value)
237
+ style.setProperty(prop, next, style.getPropertyPriority(prop));
238
+ }
239
+ };
240
+ const neutralize = () => {
241
+ document.querySelectorAll("style").forEach((el) => {
242
+ watchStyleEl(el);
243
+ if (processedStyles.has(el))
244
+ return;
245
+ processedStyles.add(el);
246
+ const text = el.textContent;
247
+ if (!text || text.indexOf("vh") === -1)
248
+ return;
249
+ const next = rewrite(text);
250
+ if (next !== text)
251
+ el.textContent = next;
252
+ });
253
+ for (let i = 0; i < document.styleSheets.length; i++) {
254
+ const sheet = document.styleSheets[i];
255
+ if (!sheet)
256
+ continue;
257
+ let rules;
258
+ try {
259
+ rules = sheet.cssRules;
260
+ }
261
+ catch {
262
+ continue; // CORS-protected
263
+ }
264
+ if (processedSheets.get(sheet) === rules.length)
265
+ continue;
266
+ rewriteVhInRules(rules, rewrite);
267
+ processedSheets.set(sheet, rules.length);
268
+ }
269
+ // Initial sweep of inline `style="...vh..."` attributes already in the DOM
270
+ // at freeze time. Future inline-style mutations (React commits, motion
271
+ // libraries, imperative assignments) are picked up by inlineStyleObserver.
272
+ document.querySelectorAll('[style*="vh"]').forEach(rewriteInlineStyle);
273
+ // Defeat internal scrollers — same dual coverage (initial sweep here,
274
+ // subtree additions in inlineStyleObserver).
275
+ if (document.body)
276
+ unscrollSubtree(document.body);
277
+ };
278
+ const debouncer = createDebouncer(neutralize, NEUTRALIZE_DEBOUNCE_MS);
279
+ const debouncedNeutralize = debouncer.trigger;
280
+ cleanups.push(debouncer.cancel);
281
+ const watchStyleEl = (el) => {
282
+ if (watchedStyles.has(el))
283
+ return;
284
+ watchedStyles.add(el);
285
+ const obs = new MutationObserver(() => {
286
+ processedStyles.delete(el);
287
+ debouncedNeutralize();
288
+ });
289
+ obs.observe(el, { characterData: true, childList: true, subtree: true });
290
+ styleObservers.add(obs);
291
+ };
292
+ cleanups.push(() => {
293
+ for (const obs of styleObservers)
294
+ obs.disconnect();
295
+ styleObservers.clear();
296
+ });
297
+ debouncedNeutralize();
298
+ if (document.readyState === "loading") {
299
+ document.addEventListener("DOMContentLoaded", debouncedNeutralize);
300
+ cleanups.push(() => document.removeEventListener("DOMContentLoaded", debouncedNeutralize));
301
+ }
302
+ window.addEventListener("load", debouncedNeutralize);
303
+ cleanups.push(() => window.removeEventListener("load", debouncedNeutralize));
304
+ const headObserver = new MutationObserver((mutations) => {
305
+ for (const m of mutations) {
306
+ if (containsStylesheetNode(m.addedNodes) || containsStylesheetNode(m.removedNodes)) {
307
+ debouncedNeutralize();
308
+ return;
309
+ }
310
+ }
311
+ });
312
+ cleanups.push(() => headObserver.disconnect());
313
+ const attachHeadObserver = () => {
314
+ if (document.head)
315
+ headObserver.observe(document.head, { childList: true, subtree: false });
316
+ };
317
+ if (document.head) {
318
+ attachHeadObserver();
319
+ }
320
+ else {
321
+ document.addEventListener("DOMContentLoaded", attachHeadObserver);
322
+ cleanups.push(() => document.removeEventListener("DOMContentLoaded", attachHeadObserver));
323
+ }
324
+ // Pass 3: inline `style` attributes. One global observer covers every
325
+ // element — past, present, and future — without per-node tracking. Two
326
+ // mutation kinds matter:
327
+ // • attributes: React/JS sets `style` on an element already in the tree
328
+ // (`el.style.h = "..vh"`, re-render diff). After rewrite the value has
329
+ // no "vh", so the next mutation gates out — single-tick convergence.
330
+ // • childList: a node is mounted with its `style` attribute already set
331
+ // off-tree (React's initial mount path uses createElement+setAttribute
332
+ // BEFORE appendChild, so attribute mutations never fire for them). Scan
333
+ // the added subtree for `[style*="vh"]` and rewrite.
334
+ // Microtask delivery means rewrites land before layout, so no flash.
335
+ const scanSubtreeForInlineVh = (node) => {
336
+ if (!(node instanceof Element))
337
+ return;
338
+ const attr = node.getAttribute("style");
339
+ if (attr && attr.indexOf("vh") !== -1)
340
+ rewriteInlineStyle(node);
341
+ node.querySelectorAll('[style*="vh"]').forEach(rewriteInlineStyle);
342
+ // New subtrees may introduce overflow-y: auto|scroll containers (route
343
+ // changes, conditional UI). Catch them here too.
344
+ unscrollSubtree(node);
345
+ };
346
+ const inlineStyleObserver = new MutationObserver((mutations) => {
347
+ for (const m of mutations) {
348
+ if (m.type === "attributes") {
349
+ const target = m.target;
350
+ if (!(target instanceof Element))
351
+ continue;
352
+ const attr = target.getAttribute("style");
353
+ if (!attr || attr.indexOf("vh") === -1)
354
+ continue;
355
+ rewriteInlineStyle(target);
356
+ }
357
+ else if (m.type === "childList") {
358
+ for (let i = 0; i < m.addedNodes.length; i++) {
359
+ const node = m.addedNodes[i];
360
+ if (node)
361
+ scanSubtreeForInlineVh(node);
362
+ }
363
+ }
364
+ }
365
+ });
366
+ cleanups.push(() => inlineStyleObserver.disconnect());
367
+ const attachInlineStyleObserver = () => {
368
+ const root = document.documentElement;
369
+ if (!root)
370
+ return;
371
+ inlineStyleObserver.observe(root, {
372
+ attributes: true,
373
+ attributeFilter: ["style"],
374
+ childList: true,
375
+ subtree: true,
376
+ });
377
+ };
378
+ attachInlineStyleObserver();
379
+ return debouncedNeutralize;
380
+ }
381
+ function formatVhFactor(value) {
382
+ return String(Number((parseFloat(value) / 100).toFixed(6)));
383
+ }
384
+ function rewriteVhInRules(rules, rewrite) {
385
+ for (let i = 0; i < rules.length; i++) {
386
+ const rule = rules[i];
387
+ if (!rule)
388
+ continue;
389
+ if (rule.cssRules)
390
+ rewriteVhInRules(rule.cssRules, rewrite);
391
+ const style = rule.style;
392
+ if (!style)
393
+ continue;
394
+ for (let j = 0; j < style.length; j++) {
395
+ const prop = style[j];
396
+ if (!prop)
397
+ continue;
398
+ const value = style.getPropertyValue(prop);
399
+ if (!value || value.indexOf("vh") === -1)
400
+ continue;
401
+ const next = rewrite(value);
402
+ if (next !== value)
403
+ style.setProperty(prop, next, style.getPropertyPriority(prop));
404
+ }
405
+ }
406
+ }
407
+ function containsStylesheetNode(nodes) {
408
+ for (let i = 0; i < nodes.length; i++) {
409
+ const node = nodes[i];
410
+ if (node instanceof HTMLStyleElement || node instanceof HTMLLinkElement)
411
+ return true;
412
+ }
413
+ return false;
414
+ }
415
+ function measureContentHeight() {
416
+ const scrollHeight = Math.max(document.documentElement.scrollHeight, document.body?.scrollHeight ?? 0);
417
+ const referenceVhBase = readReferenceVhBase();
418
+ // Excludes `body.clientHeight`: it grows with content, which makes
419
+ // viewportBottom land at the document bottom and trips the stretched-
420
+ // container heuristic on the last section. `referenceVhBase` keeps the
421
+ // h-screen-wrapper case covered when the iframe is shorter than 100vh.
422
+ const viewportHeight = Math.max(window.innerHeight || 0, document.documentElement.clientHeight, referenceVhBase);
423
+ const contentBottom = measureElementContentBottom(viewportHeight);
424
+ if (contentBottom > 0)
425
+ return Math.ceil(Math.max(contentBottom, referenceVhBase));
426
+ return Math.ceil(Math.max(scrollHeight, referenceVhBase));
427
+ }
428
+ function readReferenceVhBase() {
429
+ const value = document.documentElement.style.getPropertyValue(REFERENCE_VH_BASE_VAR);
430
+ const parsed = parseFloat(value);
431
+ return Number.isFinite(parsed) ? parsed : 0;
432
+ }
433
+ function measureElementContentBottom(viewportHeight) {
434
+ if (!document.body)
435
+ return 0;
436
+ const elements = [document.body, ...Array.from(document.body.querySelectorAll("*"))];
437
+ const contentBottoms = new WeakMap();
438
+ const viewportBottom = window.scrollY + viewportHeight;
439
+ for (let i = elements.length - 1; i >= 0; i--) {
440
+ const el = elements[i];
441
+ if (!el)
442
+ continue;
443
+ const childContentBottom = readChildrenContentBottom(el, contentBottoms);
444
+ const metrics = readElementMetrics(el);
445
+ const selfBottom = isViewportStretchedContainer(metrics, childContentBottom, viewportHeight, viewportBottom)
446
+ ? 0
447
+ : metrics.bottom;
448
+ contentBottoms.set(el, Math.max(childContentBottom, selfBottom));
449
+ }
450
+ return contentBottoms.get(document.body) ?? 0;
451
+ }
452
+ function readChildrenContentBottom(el, contentBottoms) {
453
+ let childContentBottom = 0;
454
+ for (let i = 0; i < el.children.length; i++) {
455
+ const child = el.children[i];
456
+ if (!child)
457
+ continue;
458
+ childContentBottom = Math.max(childContentBottom, contentBottoms.get(child) ?? 0);
459
+ }
460
+ return childContentBottom;
461
+ }
462
+ function readElementMetrics(el) {
463
+ const computedStyle = window.getComputedStyle(el);
464
+ if (isOutOfFlowDecoration(computedStyle))
465
+ return { bottom: 0, height: 0 };
466
+ const rect = el.getBoundingClientRect();
467
+ if (rect.width === 0 && rect.height === 0)
468
+ return { bottom: 0, height: 0 };
469
+ return {
470
+ bottom: rect.bottom + window.scrollY + readMarginBottom(computedStyle),
471
+ height: rect.height,
472
+ };
473
+ }
474
+ function readMarginBottom(computedStyle) {
475
+ const marginBottom = parseFloat(computedStyle.marginBottom);
476
+ return Number.isFinite(marginBottom) ? marginBottom : 0;
477
+ }
478
+ function isOutOfFlowDecoration(computedStyle) {
479
+ if (computedStyle.position === "fixed")
480
+ return true;
481
+ return computedStyle.position === "absolute" && computedStyle.pointerEvents === "none";
482
+ }
483
+ // A "stretched container" spans the full viewport top-to-bottom. Requires
484
+ // BOTH `bottom ≈ viewportBottom` AND `height ≈ viewportHeight` — otherwise an
485
+ // in-flow section that just happens to end at viewportBottom (e.g. when the
486
+ // iframe has been content-sized to the previous measurement) gets falsely
487
+ // filtered, undermeasuring the page.
488
+ function isViewportStretchedContainer(metrics, childBottom, viewportHeight, viewportBottom) {
489
+ return (childBottom > 0 &&
490
+ Math.abs(metrics.bottom - viewportBottom) <= 1 &&
491
+ Math.abs(metrics.height - viewportHeight) <= 1 &&
492
+ metrics.bottom - childBottom > 8);
493
+ }
494
+ function createDebouncer(fn, delayMs) {
495
+ let timer;
496
+ return {
497
+ trigger: () => {
498
+ if (timer !== undefined)
499
+ window.clearTimeout(timer);
500
+ timer = window.setTimeout(fn, delayMs);
501
+ },
502
+ cancel: () => {
503
+ if (timer !== undefined) {
504
+ window.clearTimeout(timer);
505
+ timer = undefined;
506
+ }
507
+ },
508
+ };
509
+ }
510
+ //# sourceMappingURL=page-height-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-height-bridge.js","sourceRoot":"","sources":["../../src/injections/page-height-bridge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"visual-edit-agent.d.ts","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"AAQA,wBAAgB,oBAAoB,SA6sBnC"}
1
+ {"version":3,"file":"visual-edit-agent.d.ts","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"AAWA,wBAAgB,oBAAoB,SAyuBnC"}
@@ -3,8 +3,14 @@ import { createLayerController } from "./layer-dropdown/controller.js";
3
3
  import { LAYER_DROPDOWN_ATTR } from "./layer-dropdown/consts.js";
4
4
  import { createInlineEditController } from "../capabilities/inline-edit/index.js";
5
5
  import { THEME_FONT_PREVIEW_ID } from "../consts.js";
6
+ import { createCanvasWheelZoomBridgeController } from "./canvas-wheel-zoom-bridge.js";
7
+ import { createPageHeightBridgeController } from "./page-height-bridge.js";
8
+ import { createAutoPopupSuppressorController } from "./auto-popup-suppressor.js";
6
9
  const REPOSITION_DELAY_MS = 50;
7
10
  export function setupVisualEditAgent() {
11
+ const canvasWheelZoomBridge = createCanvasWheelZoomBridgeController();
12
+ const pageHeightBridge = createPageHeightBridgeController();
13
+ const autoPopupSuppressor = createAutoPopupSuppressorController();
8
14
  // State variables (replacing React useState/useRef)
9
15
  let isVisualEditMode = false;
10
16
  let isPopoverDragging = false;
@@ -362,6 +368,7 @@ export function setupVisualEditAgent() {
362
368
  const toggleVisualEditMode = (isEnabled) => {
363
369
  isVisualEditMode = isEnabled;
364
370
  if (!isEnabled) {
371
+ canvasWheelZoomBridge.disable();
365
372
  resumeAnimations();
366
373
  inlineEdit.stopEditing();
367
374
  clearSelection();
@@ -525,6 +532,20 @@ export function setupVisualEditAgent() {
525
532
  inlineEdit.handleToggleMessage(message.data);
526
533
  }
527
534
  break;
535
+ case "freeze-vh-units":
536
+ pageHeightBridge.freezeVhUnits(typeof message.referenceVhBase === "number"
537
+ ? message.referenceVhBase
538
+ : undefined);
539
+ break;
540
+ case "measure-page-height":
541
+ pageHeightBridge.measurePageHeight(event.origin && event.origin !== "null" ? event.origin : "*", typeof message.settleMs === "number" ? message.settleMs : undefined);
542
+ break;
543
+ case "suppress-auto-popups":
544
+ autoPopupSuppressor.suppress();
545
+ break;
546
+ case "toggle-canvas-wheel-zoom-bridge":
547
+ canvasWheelZoomBridge.enable();
548
+ break;
528
549
  default:
529
550
  break;
530
551
  }