@base44/vite-plugin 0.2.25 → 0.2.27

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 (58) hide show
  1. package/dist/capabilities/inline-edit/controller.d.ts +3 -0
  2. package/dist/capabilities/inline-edit/controller.d.ts.map +1 -0
  3. package/dist/capabilities/inline-edit/controller.js +194 -0
  4. package/dist/capabilities/inline-edit/controller.js.map +1 -0
  5. package/dist/capabilities/inline-edit/dom-utils.d.ts +6 -0
  6. package/dist/capabilities/inline-edit/dom-utils.d.ts.map +1 -0
  7. package/dist/capabilities/inline-edit/dom-utils.js +49 -0
  8. package/dist/capabilities/inline-edit/dom-utils.js.map +1 -0
  9. package/dist/capabilities/inline-edit/index.d.ts +3 -0
  10. package/dist/capabilities/inline-edit/index.d.ts.map +1 -0
  11. package/dist/capabilities/inline-edit/index.js +2 -0
  12. package/dist/capabilities/inline-edit/index.js.map +1 -0
  13. package/dist/capabilities/inline-edit/types.d.ts +25 -0
  14. package/dist/capabilities/inline-edit/types.d.ts.map +1 -0
  15. package/dist/capabilities/inline-edit/types.js +2 -0
  16. package/dist/capabilities/inline-edit/types.js.map +1 -0
  17. package/dist/injections/layer-dropdown/consts.d.ts +19 -0
  18. package/dist/injections/layer-dropdown/consts.d.ts.map +1 -0
  19. package/dist/injections/layer-dropdown/consts.js +40 -0
  20. package/dist/injections/layer-dropdown/consts.js.map +1 -0
  21. package/dist/injections/layer-dropdown/controller.d.ts +4 -0
  22. package/dist/injections/layer-dropdown/controller.d.ts.map +1 -0
  23. package/dist/injections/layer-dropdown/controller.js +88 -0
  24. package/dist/injections/layer-dropdown/controller.js.map +1 -0
  25. package/dist/injections/layer-dropdown/dropdown-ui.d.ts +13 -0
  26. package/dist/injections/layer-dropdown/dropdown-ui.d.ts.map +1 -0
  27. package/dist/injections/layer-dropdown/dropdown-ui.js +176 -0
  28. package/dist/injections/layer-dropdown/dropdown-ui.js.map +1 -0
  29. package/dist/injections/layer-dropdown/types.d.ts +26 -0
  30. package/dist/injections/layer-dropdown/types.d.ts.map +1 -0
  31. package/dist/injections/layer-dropdown/types.js +3 -0
  32. package/dist/injections/layer-dropdown/types.js.map +1 -0
  33. package/dist/injections/layer-dropdown/utils.d.ts +25 -0
  34. package/dist/injections/layer-dropdown/utils.d.ts.map +1 -0
  35. package/dist/injections/layer-dropdown/utils.js +143 -0
  36. package/dist/injections/layer-dropdown/utils.js.map +1 -0
  37. package/dist/injections/utils.d.ts +4 -0
  38. package/dist/injections/utils.d.ts.map +1 -1
  39. package/dist/injections/utils.js +12 -0
  40. package/dist/injections/utils.js.map +1 -1
  41. package/dist/injections/visual-edit-agent.d.ts.map +1 -1
  42. package/dist/injections/visual-edit-agent.js +151 -76
  43. package/dist/injections/visual-edit-agent.js.map +1 -1
  44. package/dist/statics/index.mjs +5 -1
  45. package/dist/statics/index.mjs.map +1 -1
  46. package/package.json +1 -1
  47. package/src/capabilities/inline-edit/controller.ts +245 -0
  48. package/src/capabilities/inline-edit/dom-utils.ts +48 -0
  49. package/src/capabilities/inline-edit/index.ts +2 -0
  50. package/src/capabilities/inline-edit/types.ts +30 -0
  51. package/src/injections/layer-dropdown/LAYERS.md +258 -0
  52. package/src/injections/layer-dropdown/consts.ts +49 -0
  53. package/src/injections/layer-dropdown/controller.ts +109 -0
  54. package/src/injections/layer-dropdown/dropdown-ui.ts +230 -0
  55. package/src/injections/layer-dropdown/types.ts +30 -0
  56. package/src/injections/layer-dropdown/utils.ts +175 -0
  57. package/src/injections/utils.ts +18 -0
  58. package/src/injections/visual-edit-agent.ts +170 -82
@@ -0,0 +1,176 @@
1
+ /** Dropdown UI component for layer navigation */
2
+ import { DROPDOWN_CONTAINER_STYLES, DROPDOWN_ITEM_BASE_STYLES, DROPDOWN_ITEM_ACTIVE_COLOR, DROPDOWN_ITEM_ACTIVE_BG, DROPDOWN_ITEM_ACTIVE_FONT_WEIGHT, DROPDOWN_ITEM_HOVER_BG, DEPTH_INDENT_PX, BASE_PADDING_PX, CHEVRON_COLLAPSED, CHEVRON_EXPANDED, LAYER_DROPDOWN_ATTR, } from "./consts.js";
3
+ import { applyStyles, getLayerDisplayName } from "./utils.js";
4
+ let activeDropdown = null;
5
+ let activeLabel = null;
6
+ let outsideMousedownHandler = null;
7
+ let activeOnHoverEnd = null;
8
+ let activeKeydownHandler = null;
9
+ function createDropdownItem(layer, isActive, { onSelect, onHover, onHoverEnd }) {
10
+ const item = document.createElement("div");
11
+ item.textContent = getLayerDisplayName(layer);
12
+ applyStyles(item, DROPDOWN_ITEM_BASE_STYLES);
13
+ const depth = layer.depth ?? 0;
14
+ if (depth > 0) {
15
+ item.style.paddingLeft = `${BASE_PADDING_PX + depth * DEPTH_INDENT_PX}px`;
16
+ }
17
+ if (isActive) {
18
+ item.style.color = DROPDOWN_ITEM_ACTIVE_COLOR;
19
+ item.style.backgroundColor = DROPDOWN_ITEM_ACTIVE_BG;
20
+ item.style.fontWeight = DROPDOWN_ITEM_ACTIVE_FONT_WEIGHT;
21
+ }
22
+ item.addEventListener("mouseenter", () => {
23
+ if (!isActive)
24
+ item.style.backgroundColor = DROPDOWN_ITEM_HOVER_BG;
25
+ if (onHover)
26
+ onHover(layer);
27
+ });
28
+ item.addEventListener("mouseleave", () => {
29
+ if (!isActive)
30
+ item.style.backgroundColor = "transparent";
31
+ if (onHoverEnd)
32
+ onHoverEnd();
33
+ });
34
+ item.addEventListener("click", (e) => {
35
+ e.stopPropagation();
36
+ e.preventDefault();
37
+ onSelect(layer);
38
+ });
39
+ return item;
40
+ }
41
+ /** Create the dropdown DOM element with layer items */
42
+ export function createDropdownElement(layers, currentElement, callbacks) {
43
+ const container = document.createElement("div");
44
+ container.setAttribute(LAYER_DROPDOWN_ATTR, "true");
45
+ applyStyles(container, DROPDOWN_CONTAINER_STYLES);
46
+ layers.forEach((layer) => {
47
+ const isActive = layer.element === currentElement;
48
+ container.appendChild(createDropdownItem(layer, isActive, callbacks));
49
+ });
50
+ return container;
51
+ }
52
+ /** Add chevron indicator and pointer-events to the label */
53
+ export function enhanceLabelWithChevron(label) {
54
+ const t = label.textContent ?? "";
55
+ if (t.endsWith(CHEVRON_COLLAPSED) || t.endsWith(CHEVRON_EXPANDED))
56
+ return;
57
+ label.textContent = t + CHEVRON_COLLAPSED;
58
+ label.style.cursor = "pointer";
59
+ label.style.userSelect = "none";
60
+ label.style.whiteSpace = "nowrap";
61
+ label.style.pointerEvents = "auto";
62
+ label.setAttribute(LAYER_DROPDOWN_ATTR, "true");
63
+ }
64
+ function setupKeyboardNavigation(dropdown, layers, currentElement, { onSelect, onHover, onHoverEnd }) {
65
+ const items = Array.from(dropdown.children);
66
+ let focusedIndex = layers.findIndex((l) => l.element === currentElement);
67
+ const setFocusedItem = (index) => {
68
+ if (focusedIndex >= 0 && focusedIndex < items.length) {
69
+ const prev = items[focusedIndex];
70
+ if (prev.style.color !== DROPDOWN_ITEM_ACTIVE_COLOR) {
71
+ prev.style.backgroundColor = "transparent";
72
+ }
73
+ }
74
+ focusedIndex = index;
75
+ if (focusedIndex >= 0 && focusedIndex < items.length) {
76
+ const cur = items[focusedIndex];
77
+ if (cur.style.color !== DROPDOWN_ITEM_ACTIVE_COLOR) {
78
+ cur.style.backgroundColor = DROPDOWN_ITEM_HOVER_BG;
79
+ }
80
+ cur.scrollIntoView({ block: "nearest" });
81
+ if (onHover && focusedIndex >= 0 && focusedIndex < layers.length) {
82
+ onHover(layers[focusedIndex]);
83
+ }
84
+ }
85
+ };
86
+ activeKeydownHandler = (e) => {
87
+ if (e.key === "ArrowDown") {
88
+ e.preventDefault();
89
+ e.stopPropagation();
90
+ setFocusedItem(focusedIndex < items.length - 1 ? focusedIndex + 1 : 0);
91
+ }
92
+ else if (e.key === "ArrowUp") {
93
+ e.preventDefault();
94
+ e.stopPropagation();
95
+ setFocusedItem(focusedIndex > 0 ? focusedIndex - 1 : items.length - 1);
96
+ }
97
+ else if (e.key === "Enter" && focusedIndex >= 0 && focusedIndex < layers.length) {
98
+ e.preventDefault();
99
+ e.stopPropagation();
100
+ if (onHoverEnd)
101
+ onHoverEnd();
102
+ onSelect(layers[focusedIndex]);
103
+ closeDropdown();
104
+ }
105
+ };
106
+ document.addEventListener("keydown", activeKeydownHandler, true);
107
+ }
108
+ function setupOutsideClickHandler(dropdown, label) {
109
+ let skipFirst = true;
110
+ outsideMousedownHandler = (e) => {
111
+ if (skipFirst) {
112
+ skipFirst = false;
113
+ return;
114
+ }
115
+ const target = e.target;
116
+ if (!dropdown.contains(target) && target !== label) {
117
+ closeDropdown();
118
+ }
119
+ };
120
+ document.addEventListener("mousedown", outsideMousedownHandler, true);
121
+ }
122
+ /** Show the dropdown below the label element */
123
+ export function showDropdown(label, layers, currentElement, callbacks) {
124
+ closeDropdown();
125
+ const dropdown = createDropdownElement(layers, currentElement, {
126
+ ...callbacks,
127
+ onSelect: (layer) => {
128
+ if (callbacks.onHoverEnd)
129
+ callbacks.onHoverEnd();
130
+ callbacks.onSelect(layer);
131
+ closeDropdown();
132
+ },
133
+ });
134
+ const overlay = label.parentElement;
135
+ if (!overlay)
136
+ return;
137
+ dropdown.style.top = `${label.offsetTop + label.offsetHeight + 2}px`;
138
+ dropdown.style.left = `${label.offsetLeft}px`;
139
+ overlay.appendChild(dropdown);
140
+ activeDropdown = dropdown;
141
+ activeLabel = label;
142
+ if (label.textContent?.endsWith(CHEVRON_COLLAPSED.trim())) {
143
+ label.textContent = label.textContent.slice(0, -CHEVRON_COLLAPSED.length) + CHEVRON_EXPANDED;
144
+ }
145
+ activeOnHoverEnd = callbacks.onHoverEnd ?? null;
146
+ setupKeyboardNavigation(dropdown, layers, currentElement, callbacks);
147
+ setupOutsideClickHandler(dropdown, label);
148
+ }
149
+ /** Close the active dropdown and clean up listeners */
150
+ export function closeDropdown() {
151
+ if (activeLabel?.textContent?.includes(CHEVRON_EXPANDED)) {
152
+ activeLabel.textContent = activeLabel.textContent.replace(CHEVRON_EXPANDED, CHEVRON_COLLAPSED);
153
+ }
154
+ activeLabel = null;
155
+ if (activeOnHoverEnd) {
156
+ activeOnHoverEnd();
157
+ activeOnHoverEnd = null;
158
+ }
159
+ if (activeDropdown && activeDropdown.parentNode) {
160
+ activeDropdown.remove();
161
+ }
162
+ activeDropdown = null;
163
+ if (outsideMousedownHandler) {
164
+ document.removeEventListener("mousedown", outsideMousedownHandler, true);
165
+ outsideMousedownHandler = null;
166
+ }
167
+ if (activeKeydownHandler) {
168
+ document.removeEventListener("keydown", activeKeydownHandler, true);
169
+ activeKeydownHandler = null;
170
+ }
171
+ }
172
+ /** Check if a dropdown is currently visible */
173
+ export function isDropdownOpen() {
174
+ return activeDropdown !== null;
175
+ }
176
+ //# sourceMappingURL=dropdown-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-ui.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/dropdown-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /** Shared types for the layer-dropdown module */
2
+ export interface LayerInfo {
3
+ element: Element;
4
+ tagName: string;
5
+ selectorId: string | null;
6
+ depth?: number;
7
+ }
8
+ export type OnLayerSelect = (layer: LayerInfo) => void;
9
+ export type OnLayerHover = (layer: LayerInfo) => void;
10
+ export type OnLayerHoverEnd = () => void;
11
+ export interface DropdownCallbacks {
12
+ onSelect: OnLayerSelect;
13
+ onHover?: OnLayerHover;
14
+ onHoverEnd?: OnLayerHoverEnd;
15
+ }
16
+ export interface LayerControllerConfig {
17
+ createPreviewOverlay: (element: Element) => HTMLDivElement;
18
+ getSelectedElementId: () => string | null;
19
+ selectElement: (element: Element) => HTMLDivElement | undefined;
20
+ onDeselect: () => void;
21
+ }
22
+ export interface LayerController {
23
+ attachToOverlay: (overlay: HTMLDivElement | undefined, element: Element) => void;
24
+ cleanup: () => void;
25
+ }
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/types.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,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;AAEzC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,cAAc,CAAC;IAC3D,oBAAoB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC1C,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,cAAc,GAAG,SAAS,CAAC;IAChE,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACjF,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
@@ -0,0 +1,3 @@
1
+ /** Shared types for the layer-dropdown module */
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/types.ts"],"names":[],"mappings":"AAAA,iDAAiD"}
@@ -0,0 +1,25 @@
1
+ /** DOM utilities for the layer-dropdown module */
2
+ import type { LayerInfo } from "./types.js";
3
+ /** Apply a style map to an element */
4
+ export declare function applyStyles(element: HTMLElement, styles: Record<string, string>): void;
5
+ /** Display name for a layer — just the real tag name */
6
+ export declare function getLayerDisplayName(layer: LayerInfo): string;
7
+ /**
8
+ * Collect instrumented descendants up to `maxDepth` instrumented nesting levels.
9
+ * Non-instrumented wrappers are walked through without counting toward depth.
10
+ * Results are in DOM order.
11
+ * When `startDepth` is provided, assigns `depth` to each item during collection.
12
+ */
13
+ export declare function getInstrumentedDescendants(parent: Element, maxDepth: number, startDepth?: number): LayerInfo[];
14
+ /**
15
+ * Build the layer chain for the dropdown:
16
+ *
17
+ * Parents – up to MAX_PARENT_DEPTH instrumented ancestors, outer → inner.
18
+ * Siblings – instrumented children of the immediate parent, at the same depth.
19
+ * Current – the selected element (highlighted), with children expanded.
20
+ * Children – instrumented descendants within MAX_CHILD_DEPTH levels, DOM order.
21
+ *
22
+ * Each item carries a `depth` for visual indentation.
23
+ */
24
+ export declare function buildLayerChain(selectedElement: Element): LayerInfo[];
25
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/utils.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAKlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,sCAAsC;AACtC,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAOtF;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAE5D;AAYD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,SAAS,EAAE,CA0Bb;AAkFD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,EAAE,CAcrE"}
@@ -0,0 +1,143 @@
1
+ /** DOM utilities for the layer-dropdown module */
2
+ import { isInstrumentedElement, getElementSelectorId } from "../utils.js";
3
+ import { MAX_PARENT_DEPTH, MAX_CHILD_DEPTH } from "./consts.js";
4
+ /** Apply a style map to an element */
5
+ export function applyStyles(element, styles) {
6
+ for (const key of Object.keys(styles)) {
7
+ element.style.setProperty(key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`), styles[key]);
8
+ }
9
+ }
10
+ /** Display name for a layer — just the real tag name */
11
+ export function getLayerDisplayName(layer) {
12
+ return layer.tagName;
13
+ }
14
+ function toLayerInfo(element, depth) {
15
+ const info = {
16
+ element,
17
+ tagName: element.tagName.toLowerCase(),
18
+ selectorId: getElementSelectorId(element),
19
+ };
20
+ if (depth !== undefined)
21
+ info.depth = depth;
22
+ return info;
23
+ }
24
+ /**
25
+ * Collect instrumented descendants up to `maxDepth` instrumented nesting levels.
26
+ * Non-instrumented wrappers are walked through without counting toward depth.
27
+ * Results are in DOM order.
28
+ * When `startDepth` is provided, assigns `depth` to each item during collection.
29
+ */
30
+ export function getInstrumentedDescendants(parent, maxDepth, startDepth) {
31
+ const result = [];
32
+ function walk(el, instrDepth) {
33
+ if (instrDepth > maxDepth)
34
+ return;
35
+ for (let i = 0; i < el.children.length; i++) {
36
+ const child = el.children[i];
37
+ if (isInstrumentedElement(child)) {
38
+ const info = {
39
+ element: child,
40
+ tagName: child.tagName.toLowerCase(),
41
+ selectorId: getElementSelectorId(child),
42
+ };
43
+ if (startDepth !== undefined) {
44
+ info.depth = startDepth + instrDepth - 1;
45
+ }
46
+ result.push(info);
47
+ walk(child, instrDepth + 1);
48
+ }
49
+ else {
50
+ walk(child, instrDepth);
51
+ }
52
+ }
53
+ }
54
+ walk(parent, 1);
55
+ return result;
56
+ }
57
+ /** Collect instrumented ancestors from selected element up to MAX_PARENT_DEPTH (outermost first). */
58
+ function collectInstrumentedParents(selectedElement) {
59
+ const parents = [];
60
+ let current = selectedElement.parentElement;
61
+ while (current &&
62
+ current !== document.documentElement &&
63
+ current !== document.body &&
64
+ parents.length < MAX_PARENT_DEPTH) {
65
+ if (isInstrumentedElement(current)) {
66
+ parents.push(toLayerInfo(current));
67
+ }
68
+ current = current.parentElement;
69
+ }
70
+ parents.reverse();
71
+ return parents;
72
+ }
73
+ /** Add parents to chain with depth 0, 1, …; returns depth of selected (parents.length). */
74
+ function addParentsToChain(chain, parents) {
75
+ parents.forEach((p, i) => {
76
+ chain.push({ ...p, depth: i });
77
+ });
78
+ return parents.length;
79
+ }
80
+ /** Add selected element and its descendants at the given depth. */
81
+ function addSelfAndDescendantsToChain(chain, selectedElement, selfDepth) {
82
+ chain.push(toLayerInfo(selectedElement, selfDepth));
83
+ const descendants = getInstrumentedDescendants(selectedElement, MAX_CHILD_DEPTH, selfDepth + 1);
84
+ chain.push(...descendants);
85
+ }
86
+ /** Get the innermost instrumented parent's DOM element, or null if none. */
87
+ function getImmediateInstrParent(parents) {
88
+ return parents.at(-1)?.element ?? null;
89
+ }
90
+ /** Collect instrumented siblings of the selected element from its parent (DOM order). */
91
+ function collectSiblings(parent, selectedElement) {
92
+ const siblings = getInstrumentedDescendants(parent, 1);
93
+ if (!siblings.some((s) => s.element === selectedElement)) {
94
+ siblings.push(toLayerInfo(selectedElement));
95
+ }
96
+ return siblings;
97
+ }
98
+ /** Add siblings at selfDepth, expanding children only for the selected element. */
99
+ function appendSiblingsWithSelected(chain, siblings, selectedElement, selfDepth) {
100
+ const selectedSelectorId = getElementSelectorId(selectedElement);
101
+ const seen = new Set();
102
+ for (const sibling of siblings) {
103
+ if (sibling.element === selectedElement) {
104
+ addSelfAndDescendantsToChain(chain, selectedElement, selfDepth);
105
+ if (selectedSelectorId)
106
+ seen.add(selectedSelectorId);
107
+ }
108
+ else {
109
+ const id = sibling.selectorId;
110
+ if (id != null) {
111
+ if (id === selectedSelectorId || seen.has(id))
112
+ continue;
113
+ seen.add(id);
114
+ }
115
+ chain.push({ ...sibling, depth: selfDepth });
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * Build the layer chain for the dropdown:
121
+ *
122
+ * Parents – up to MAX_PARENT_DEPTH instrumented ancestors, outer → inner.
123
+ * Siblings – instrumented children of the immediate parent, at the same depth.
124
+ * Current – the selected element (highlighted), with children expanded.
125
+ * Children – instrumented descendants within MAX_CHILD_DEPTH levels, DOM order.
126
+ *
127
+ * Each item carries a `depth` for visual indentation.
128
+ */
129
+ export function buildLayerChain(selectedElement) {
130
+ const parents = collectInstrumentedParents(selectedElement);
131
+ const chain = [];
132
+ const selfDepth = addParentsToChain(chain, parents);
133
+ const instrParent = getImmediateInstrParent(parents);
134
+ if (instrParent) {
135
+ const siblings = collectSiblings(instrParent, selectedElement);
136
+ appendSiblingsWithSelected(chain, siblings, selectedElement, selfDepth);
137
+ }
138
+ else {
139
+ addSelfAndDescendantsToChain(chain, selectedElement, selfDepth);
140
+ }
141
+ return chain;
142
+ }
143
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/utils.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /** Check if an element has instrumentation attributes */
2
+ export declare function isInstrumentedElement(element: Element): boolean;
3
+ /** Get the selector ID from an element's data attributes (prefers source-location) */
4
+ export declare function getElementSelectorId(element: Element): string | null;
1
5
  export declare const ALLOWED_ATTRIBUTES: string[];
2
6
  /** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */
3
7
  export declare function findElementsById(id: string | null): Element[];
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAAY,CAAC;AAEpD,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,EAAE,CAW7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/E;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQlG;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS9G"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAK/D;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAOpE;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAAY,CAAC;AAEpD,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,EAAE,CAW7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/E;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQlG;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS9G"}
@@ -1,3 +1,15 @@
1
+ /** Check if an element has instrumentation attributes */
2
+ export function isInstrumentedElement(element) {
3
+ const htmlEl = element;
4
+ return !!(htmlEl.dataset?.sourceLocation || htmlEl.dataset?.visualSelectorId);
5
+ }
6
+ /** Get the selector ID from an element's data attributes (prefers source-location) */
7
+ export function getElementSelectorId(element) {
8
+ const htmlEl = element;
9
+ return (htmlEl.dataset?.sourceLocation ||
10
+ htmlEl.dataset?.visualSelectorId ||
11
+ null);
12
+ }
1
13
  export const ALLOWED_ATTRIBUTES = ["src"];
2
14
  /** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */
3
15
  export function findElementsById(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAa,CAAC,KAAK,CAAC,CAAC;AAEpD,gGAAgG;AAChG,MAAM,UAAU,gBAAgB,CAAC,EAAiB;IAChD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAC5D,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CACf,QAAQ,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAmB,EAAE,OAAe;IACvE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,sBAAsB,CAAC,QAAmB,EAAE,SAAiB,EAAE,KAAa;IAC1F,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB,CAAC,OAAgB,EAAE,iBAA2B;IACpF,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/injections/utils.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAsB,CAAC;IACtC,OAAO,CAAC,CAAC,CACP,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,MAAM,CAAC,OAAO,EAAE,gBAAgB,CACnE,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,MAAM,GAAG,OAAsB,CAAC;IACtC,OAAO,CACL,MAAM,CAAC,OAAO,EAAE,cAAc;QAC9B,MAAM,CAAC,OAAO,EAAE,gBAAgB;QAChC,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAa,CAAC,KAAK,CAAC,CAAC;AAEpD,gGAAgG;AAChG,MAAM,UAAU,gBAAgB,CAAC,EAAiB;IAChD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAC5D,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CACf,QAAQ,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAmB,EAAE,OAAe;IACvE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,sBAAsB,CAAC,QAAmB,EAAE,SAAiB,EAAE,KAAa;IAC1F,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB,CAAC,OAAgB,EAAE,iBAA2B;IACpF,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"visual-edit-agent.d.ts","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,SA+lBnC"}
1
+ {"version":3,"file":"visual-edit-agent.d.ts","sourceRoot":"","sources":["../../src/injections/visual-edit-agent.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,SAorBnC"}