@base44-preview/vite-plugin 0.2.22-pr.36.019589c → 0.2.22-pr.36.9cc89ea

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 (29) hide show
  1. package/dist/injections/layer-dropdown/component/{dropdown-ui.d.ts → dropdown.d.ts} +2 -5
  2. package/dist/injections/layer-dropdown/component/dropdown.d.ts.map +1 -0
  3. package/dist/injections/layer-dropdown/component/{dropdown-ui.js → dropdown.js} +64 -72
  4. package/dist/injections/layer-dropdown/component/dropdown.js.map +1 -0
  5. package/dist/injections/layer-dropdown/controller.d.ts +4 -0
  6. package/dist/injections/layer-dropdown/controller.d.ts.map +1 -0
  7. package/dist/injections/layer-dropdown/controller.js +85 -0
  8. package/dist/injections/layer-dropdown/controller.js.map +1 -0
  9. package/dist/injections/layer-dropdown/types.d.ts +21 -0
  10. package/dist/injections/layer-dropdown/types.d.ts.map +1 -0
  11. package/dist/injections/layer-dropdown/types.js +3 -0
  12. package/dist/injections/layer-dropdown/types.js.map +1 -0
  13. package/dist/injections/layer-dropdown/utils.d.ts +4 -7
  14. package/dist/injections/layer-dropdown/utils.d.ts.map +1 -1
  15. package/dist/injections/layer-dropdown/utils.js +5 -1
  16. package/dist/injections/layer-dropdown/utils.js.map +1 -1
  17. package/dist/injections/visual-edit-agent.d.ts.map +1 -1
  18. package/dist/injections/visual-edit-agent.js +73 -199
  19. package/dist/injections/visual-edit-agent.js.map +1 -1
  20. package/dist/statics/index.mjs +1 -1
  21. package/dist/statics/index.mjs.map +1 -1
  22. package/package.json +1 -1
  23. package/src/injections/layer-dropdown/component/{dropdown-ui.ts → dropdown.ts} +94 -93
  24. package/src/injections/layer-dropdown/controller.ts +105 -0
  25. package/src/injections/layer-dropdown/types.ts +24 -0
  26. package/src/injections/layer-dropdown/utils.ts +6 -6
  27. package/src/injections/visual-edit-agent.ts +81 -237
  28. package/dist/injections/layer-dropdown/component/dropdown-ui.d.ts.map +0 -1
  29. package/dist/injections/layer-dropdown/component/dropdown-ui.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ /** Shared types for the layer-dropdown module */
2
+
3
+ export interface LayerInfo {
4
+ element: Element;
5
+ tagName: string;
6
+ selectorId: string | null;
7
+ depth?: number;
8
+ }
9
+
10
+ export type OnLayerSelect = (layer: LayerInfo) => void;
11
+ export type OnLayerHover = (layer: LayerInfo) => void;
12
+ export type OnLayerHoverEnd = () => void;
13
+
14
+ export interface LayerControllerDeps {
15
+ createPreviewOverlay: (element: Element) => HTMLDivElement;
16
+ getSelectedElementId: () => string | null;
17
+ selectElement: (element: Element) => HTMLDivElement | undefined;
18
+ onDeselect: () => void;
19
+ }
20
+
21
+ export interface LayerController {
22
+ attachToOverlay: (overlay: HTMLDivElement | undefined, element: Element) => void;
23
+ cleanup: () => void;
24
+ }
@@ -1,13 +1,13 @@
1
- /** DOM traversal utilities for building the layer chain of instrumented elements */
1
+ /** DOM utilities for the layer-dropdown module */
2
2
 
3
3
  import { isInstrumentedElement, getElementSelectorId } from "../utils.js";
4
4
  import { MAX_PARENT_DEPTH, MAX_CHILD_DEPTH } from "./consts.js";
5
5
 
6
- export interface LayerInfo {
7
- element: Element;
8
- tagName: string;
9
- selectorId: string | null;
10
- depth?: number;
6
+ import type { LayerInfo } from "./types.js";
7
+
8
+ /** Apply a style map to an element */
9
+ export function applyStyles(element: HTMLElement, styles: Record<string, string>): void {
10
+ Object.assign(element.style, styles);
11
11
  }
12
12
 
13
13
  /** Display name for a layer — just the real tag name */
@@ -1,12 +1,5 @@
1
1
  import { findElementsById, updateElementClasses, getElementSelectorId } from "./utils.js";
2
- import { buildLayerChain } from "./layer-dropdown/utils.js";
3
- import type { LayerInfo } from "./layer-dropdown/utils.js";
4
- import {
5
- enhanceLabelWithChevron,
6
- showDropdown,
7
- closeDropdown as closeLayerDropdown,
8
- isDropdownOpen as isLayerDropdownOpen,
9
- } from "./layer-dropdown/component/dropdown-ui.js";
2
+ import { createLayerController } from "./layer-dropdown/controller.js";
10
3
  import { LAYER_DROPDOWN_ATTR } from "./layer-dropdown/consts.js";
11
4
 
12
5
  export function setupVisualEditAgent() {
@@ -87,6 +80,66 @@ export function setupVisualEditAgent() {
87
80
  currentHighlightedElements = [];
88
81
  };
89
82
 
83
+ const clearSelectedOverlays = () => {
84
+ selectedOverlays.forEach((overlay) => {
85
+ if (overlay && overlay.parentNode) {
86
+ overlay.remove();
87
+ }
88
+ });
89
+ selectedOverlays = [];
90
+ };
91
+
92
+ const notifyElementSelected = (element: Element) => {
93
+ const htmlElement = element as HTMLElement;
94
+ const rect = element.getBoundingClientRect();
95
+ const svgElement = element as SVGElement;
96
+ window.parent.postMessage({
97
+ type: "element-selected",
98
+ tagName: element.tagName,
99
+ classes:
100
+ (svgElement.className as unknown as SVGAnimatedString)?.baseVal ||
101
+ element.className ||
102
+ "",
103
+ visualSelectorId: getElementSelectorId(element),
104
+ content: htmlElement.innerText,
105
+ dataSourceLocation: htmlElement.dataset.sourceLocation,
106
+ isDynamicContent: htmlElement.dataset.dynamicContent === "true",
107
+ linenumber: htmlElement.dataset.linenumber,
108
+ filename: htmlElement.dataset.filename,
109
+ position: {
110
+ top: rect.top,
111
+ left: rect.left,
112
+ right: rect.right,
113
+ bottom: rect.bottom,
114
+ width: rect.width,
115
+ height: rect.height,
116
+ centerX: rect.left + rect.width / 2,
117
+ centerY: rect.top + rect.height / 2,
118
+ },
119
+ }, "*");
120
+ };
121
+
122
+ // Select an element: create overlays, update state, notify parent
123
+ const selectElement = (element: Element): HTMLDivElement | undefined => {
124
+ const visualSelectorId = getElementSelectorId(element);
125
+
126
+ clearSelectedOverlays();
127
+
128
+ const elements = findElementsById(visualSelectorId || null);
129
+ elements.forEach((el) => {
130
+ const overlay = createOverlay(true);
131
+ document.body.appendChild(overlay);
132
+ selectedOverlays.push(overlay);
133
+ positionOverlay(overlay, el, true);
134
+ });
135
+
136
+ selectedElementId = visualSelectorId || null;
137
+ clearHoverOverlays();
138
+ notifyElementSelected(element);
139
+
140
+ return selectedOverlays[0];
141
+ };
142
+
90
143
  // Handle mouse over event
91
144
  const handleMouseOver = (e: MouseEvent) => {
92
145
  if (!isVisualEditMode || isPopoverDragging) return;
@@ -186,79 +239,13 @@ export function setupVisualEditAgent() {
186
239
  return;
187
240
  }
188
241
 
189
- const htmlElement = element as HTMLElement;
190
- const visualSelectorId =
191
- htmlElement.dataset.sourceLocation ||
192
- htmlElement.dataset.visualSelectorId;
193
-
194
- // Clear any existing selected overlays
195
- selectedOverlays.forEach((overlay) => {
196
- if (overlay && overlay.parentNode) {
197
- overlay.remove();
198
- }
199
- });
200
- selectedOverlays = [];
201
-
202
- // Find all elements with the same ID
203
- const elements = findElementsById(visualSelectorId || null);
204
-
205
- // Create selected overlays for all matching elements
206
- elements.forEach((el) => {
207
- const overlay = createOverlay(true);
208
- document.body.appendChild(overlay);
209
- selectedOverlays.push(overlay);
210
- positionOverlay(overlay, el, true);
211
- });
212
-
213
- selectedElementId = visualSelectorId || null;
214
-
215
- // Clear hover overlays
216
- clearHoverOverlays();
217
-
218
- // Attach layer dropdown to the selected overlay label
219
- attachLayerDropdownToOverlay(selectedOverlays[0], element);
220
-
221
- // Calculate element position for popover positioning
222
- const rect = element.getBoundingClientRect();
223
- const elementPosition = {
224
- top: rect.top,
225
- left: rect.left,
226
- right: rect.right,
227
- bottom: rect.bottom,
228
- width: rect.width,
229
- height: rect.height,
230
- centerX: rect.left + rect.width / 2,
231
- centerY: rect.top + rect.height / 2,
232
- };
233
-
234
- // Send message to parent window with element info including position
235
- const svgElement = element as SVGElement;
236
- const elementData = {
237
- type: "element-selected",
238
- tagName: element.tagName,
239
- classes:
240
- (svgElement.className as unknown as SVGAnimatedString)?.baseVal ||
241
- element.className ||
242
- "",
243
- visualSelectorId: visualSelectorId,
244
- content: (element as HTMLElement).innerText,
245
- dataSourceLocation: htmlElement.dataset.sourceLocation,
246
- isDynamicContent: htmlElement.dataset.dynamicContent === "true",
247
- linenumber: htmlElement.dataset.linenumber,
248
- filename: htmlElement.dataset.filename,
249
- position: elementPosition,
250
- };
251
- window.parent.postMessage(elementData, "*");
242
+ const selectedOverlay = selectElement(element);
243
+ layerController.attachToOverlay(selectedOverlay, element);
252
244
  };
253
245
 
254
246
  // Unselect the current element
255
247
  const unselectElement = () => {
256
- selectedOverlays.forEach((overlay) => {
257
- if (overlay && overlay.parentNode) {
258
- overlay.remove();
259
- }
260
- });
261
- selectedOverlays = [];
248
+ clearSelectedOverlays();
262
249
  selectedElementId = null;
263
250
  };
264
251
 
@@ -317,174 +304,31 @@ export function setupVisualEditAgent() {
317
304
  }, 50);
318
305
  };
319
306
 
320
- // --- Layer dropdown: hover preview overlay ---
321
- let layerPreviewOverlay: HTMLDivElement | null = null;
322
-
323
- const clearLayerPreview = () => {
324
- if (layerPreviewOverlay && layerPreviewOverlay.parentNode) {
325
- layerPreviewOverlay.remove();
326
- }
327
- layerPreviewOverlay = null;
328
- };
329
-
330
- const showLayerPreview = (layer: LayerInfo) => {
331
- clearLayerPreview();
332
- // Don't preview the currently selected element
333
- if (getElementSelectorId(layer.element) === selectedElementId) return;
334
-
335
- const overlay = createOverlay(false);
336
- overlay.style.zIndex = "9998";
337
- document.body.appendChild(overlay);
338
- positionOverlay(overlay, layer.element);
339
- layerPreviewOverlay = overlay;
340
- };
341
-
342
- // --- Layer dropdown: select a different element from the layer chain ---
343
-
344
- const selectElementFromLayer = (layer: LayerInfo) => {
345
- clearLayerPreview();
346
- closeLayerDropdown();
347
- if (escapeHandler) {
348
- document.removeEventListener("keydown", escapeHandler, true);
349
- escapeHandler = null;
350
- }
351
- dropdownSourceElement = null;
352
-
353
- const element = layer.element;
354
- const htmlElement = element as HTMLElement;
355
- const visualSelectorId = getElementSelectorId(element);
356
-
357
- // Clear existing selected overlays
358
- selectedOverlays.forEach((overlay) => {
359
- if (overlay && overlay.parentNode) {
360
- overlay.remove();
361
- }
362
- });
363
- selectedOverlays = [];
364
-
365
- // Find all elements with the same ID
366
- const elements = findElementsById(visualSelectorId || null);
367
-
368
- // Create selected overlays for all matching elements
369
- elements.forEach((el) => {
370
- const overlay = createOverlay(true);
307
+ // --- Layer dropdown controller ---
308
+ const layerController = createLayerController({
309
+ createPreviewOverlay: (element: Element) => {
310
+ const overlay = createOverlay(false);
311
+ overlay.style.zIndex = "9998";
371
312
  document.body.appendChild(overlay);
372
- selectedOverlays.push(overlay);
373
- positionOverlay(overlay, el, true);
374
- });
375
-
376
- selectedElementId = visualSelectorId || null;
377
- clearHoverOverlays();
378
-
379
- // Attach layer dropdown to the new overlay label
380
- attachLayerDropdownToOverlay(selectedOverlays[0], element);
381
-
382
- // Notify parent of the newly selected element
383
- const rect = element.getBoundingClientRect();
384
- const elementPosition = {
385
- top: rect.top,
386
- left: rect.left,
387
- right: rect.right,
388
- bottom: rect.bottom,
389
- width: rect.width,
390
- height: rect.height,
391
- centerX: rect.left + rect.width / 2,
392
- centerY: rect.top + rect.height / 2,
393
- };
394
-
395
- const svgElement = element as SVGElement;
396
- const elementData = {
397
- type: "element-selected",
398
- tagName: element.tagName,
399
- classes:
400
- (svgElement.className as unknown as SVGAnimatedString)?.baseVal ||
401
- element.className ||
402
- "",
403
- visualSelectorId: visualSelectorId,
404
- content: (element as HTMLElement).innerText,
405
- dataSourceLocation: htmlElement.dataset.sourceLocation,
406
- isDynamicContent: htmlElement.dataset.dynamicContent === "true",
407
- linenumber: htmlElement.dataset.linenumber,
408
- filename: htmlElement.dataset.filename,
409
- position: elementPosition,
410
- };
411
- window.parent.postMessage(elementData, "*");
412
- };
413
-
414
- let escapeHandler: ((e: KeyboardEvent) => void) | null = null;
415
- let dropdownSourceElement: Element | null = null;
416
-
417
- const attachLayerDropdownToOverlay = (
418
- overlay: HTMLDivElement | undefined,
419
- element: Element
420
- ) => {
421
- if (!overlay) return;
422
-
423
- const label = overlay.querySelector("div") as HTMLDivElement | null;
424
- if (!label) return;
425
-
426
- const layers = buildLayerChain(element);
427
- // Only show dropdown when there are multiple layers to navigate
428
- if (layers.length <= 1) return;
429
-
430
- const currentId = getElementSelectorId(element);
431
- enhanceLabelWithChevron(label);
432
-
433
- label.addEventListener("click", (e: MouseEvent) => {
434
- e.stopPropagation();
435
- e.preventDefault();
436
- if (isLayerDropdownOpen()) {
437
- closeLayerDropdown();
438
- reselectDropdownSource();
439
- } else {
440
- dropdownSourceElement = element;
441
- selectedElementId = null;
442
- window.parent.postMessage({ type: "element-selected", visualSelectorId: null }, "*");
443
-
444
- escapeHandler = (ev: KeyboardEvent) => {
445
- if (ev.key === "Escape") {
446
- ev.stopPropagation();
447
- closeLayerDropdown();
448
- reselectDropdownSource();
449
- }
450
- };
451
- document.addEventListener("keydown", escapeHandler, true);
452
-
453
- showDropdown(label, layers, currentId, selectElementFromLayer, showLayerPreview, clearLayerPreview);
454
- }
455
- });
456
- };
457
-
458
- const reselectDropdownSource = () => {
459
- if (escapeHandler) {
460
- document.removeEventListener("keydown", escapeHandler, true);
461
- escapeHandler = null;
462
- }
463
- if (dropdownSourceElement) {
464
- selectElementFromLayer({
465
- element: dropdownSourceElement,
466
- tagName: dropdownSourceElement.tagName.toLowerCase(),
467
- selectorId: getElementSelectorId(dropdownSourceElement),
468
- });
469
- dropdownSourceElement = null;
470
- }
471
- };
313
+ positionOverlay(overlay, element);
314
+ return overlay;
315
+ },
316
+ getSelectedElementId: () => selectedElementId,
317
+ selectElement,
318
+ onDeselect: () => {
319
+ selectedElementId = null;
320
+ window.parent.postMessage({ type: "element-selected", visualSelectorId: null }, "*");
321
+ },
322
+ });
472
323
 
473
324
  // Toggle visual edit mode
474
325
  const toggleVisualEditMode = (isEnabled: boolean) => {
475
326
  isVisualEditMode = isEnabled;
476
327
 
477
328
  if (!isEnabled) {
478
- clearLayerPreview();
479
- closeLayerDropdown();
329
+ layerController.cleanup();
480
330
  clearHoverOverlays();
481
-
482
- selectedOverlays.forEach((overlay) => {
483
- if (overlay && overlay.parentNode) {
484
- overlay.remove();
485
- }
486
- });
487
- selectedOverlays = [];
331
+ clearSelectedOverlays();
488
332
 
489
333
  currentHighlightedElements = [];
490
334
  selectedElementId = null;
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-ui.d.ts","sourceRoot":"","sources":["../../../../src/injections/layer-dropdown/component/dropdown-ui.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAcjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AACvD,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC;AAOzC,uDAAuD;AACvD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EAAE,EACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,eAAe,GAC3B,cAAc,CAsDhB;AAED,4DAA4D;AAC5D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAQnE;AAED,gDAAgD;AAChD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,SAAS,EAAE,EACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,eAAe,GAC3B,IAAI,CAoFN;AAED,uDAAuD;AACvD,wBAAgB,aAAa,IAAI,IAAI,CAoBpC;AAED,+CAA+C;AAC/C,wBAAgB,cAAc,IAAI,OAAO,CAExC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-ui.js","sourceRoot":"","sources":["../../../../src/injections/layer-dropdown/component/dropdown-ui.ts"],"names":[],"mappings":"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"}