@base44-preview/vite-plugin 0.2.22-pr.36.019589c → 0.2.22-pr.36.16dc064

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/controller.d.ts +4 -0
  2. package/dist/injections/layer-dropdown/controller.d.ts.map +1 -0
  3. package/dist/injections/layer-dropdown/controller.js +85 -0
  4. package/dist/injections/layer-dropdown/controller.js.map +1 -0
  5. package/dist/injections/layer-dropdown/{component/dropdown-ui.d.ts → dropdown-ui.d.ts} +1 -4
  6. package/dist/injections/layer-dropdown/dropdown-ui.d.ts.map +1 -0
  7. package/dist/injections/layer-dropdown/{component/dropdown-ui.js → dropdown-ui.js} +64 -72
  8. package/dist/injections/layer-dropdown/dropdown-ui.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 +74 -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/controller.ts +105 -0
  24. package/src/injections/layer-dropdown/{component/dropdown-ui.ts → dropdown-ui.ts} +95 -94
  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 +83 -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,71 @@ 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
+
143
+ const unSelectElement = (): void => {
144
+ selectedElementId = null;
145
+ window.parent.postMessage({ type: "unselect-element" }, "*");
146
+ };
147
+
90
148
  // Handle mouse over event
91
149
  const handleMouseOver = (e: MouseEvent) => {
92
150
  if (!isVisualEditMode || isPopoverDragging) return;
@@ -186,79 +244,13 @@ export function setupVisualEditAgent() {
186
244
  return;
187
245
  }
188
246
 
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, "*");
247
+ const selectedOverlay = selectElement(element);
248
+ layerController.attachToOverlay(selectedOverlay, element);
252
249
  };
253
250
 
254
251
  // Unselect the current element
255
252
  const unselectElement = () => {
256
- selectedOverlays.forEach((overlay) => {
257
- if (overlay && overlay.parentNode) {
258
- overlay.remove();
259
- }
260
- });
261
- selectedOverlays = [];
253
+ clearSelectedOverlays();
262
254
  selectedElementId = null;
263
255
  };
264
256
 
@@ -317,174 +309,28 @@ export function setupVisualEditAgent() {
317
309
  }, 50);
318
310
  };
319
311
 
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);
312
+ // --- Layer dropdown controller ---
313
+ const layerController = createLayerController({
314
+ createPreviewOverlay: (element: Element) => {
315
+ const overlay = createOverlay(false);
316
+ overlay.style.zIndex = "9998";
371
317
  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
- };
318
+ positionOverlay(overlay, element);
319
+ return overlay;
320
+ },
321
+ getSelectedElementId: () => selectedElementId,
322
+ selectElement,
323
+ onDeselect: unSelectElement,
324
+ });
472
325
 
473
326
  // Toggle visual edit mode
474
327
  const toggleVisualEditMode = (isEnabled: boolean) => {
475
328
  isVisualEditMode = isEnabled;
476
329
 
477
330
  if (!isEnabled) {
478
- clearLayerPreview();
479
- closeLayerDropdown();
331
+ layerController.cleanup();
480
332
  clearHoverOverlays();
481
-
482
- selectedOverlays.forEach((overlay) => {
483
- if (overlay && overlay.parentNode) {
484
- overlay.remove();
485
- }
486
- });
487
- selectedOverlays = [];
333
+ clearSelectedOverlays();
488
334
 
489
335
  currentHighlightedElements = [];
490
336
  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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"}