@base44-preview/vite-plugin 0.2.22-pr.36.019589c → 0.2.22-pr.36.425440e

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 (40) hide show
  1. package/dist/injections/layer-dropdown/consts.d.ts +3 -0
  2. package/dist/injections/layer-dropdown/consts.d.ts.map +1 -1
  3. package/dist/injections/layer-dropdown/consts.js +3 -0
  4. package/dist/injections/layer-dropdown/consts.js.map +1 -1
  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/{component/dropdown-ui.d.ts → dropdown-ui.d.ts} +1 -4
  10. package/dist/injections/layer-dropdown/dropdown-ui.d.ts.map +1 -0
  11. package/dist/injections/layer-dropdown/{component/dropdown-ui.js → dropdown-ui.js} +76 -74
  12. package/dist/injections/layer-dropdown/dropdown-ui.js.map +1 -0
  13. package/dist/injections/layer-dropdown/types.d.ts +21 -0
  14. package/dist/injections/layer-dropdown/types.d.ts.map +1 -0
  15. package/dist/injections/layer-dropdown/types.js +3 -0
  16. package/dist/injections/layer-dropdown/types.js.map +1 -0
  17. package/dist/injections/layer-dropdown/utils.d.ts +6 -8
  18. package/dist/injections/layer-dropdown/utils.d.ts.map +1 -1
  19. package/dist/injections/layer-dropdown/utils.js +74 -33
  20. package/dist/injections/layer-dropdown/utils.js.map +1 -1
  21. package/dist/injections/utils.d.ts +0 -2
  22. package/dist/injections/utils.d.ts.map +1 -1
  23. package/dist/injections/utils.js +0 -13
  24. package/dist/injections/utils.js.map +1 -1
  25. package/dist/injections/visual-edit-agent.d.ts.map +1 -1
  26. package/dist/injections/visual-edit-agent.js +74 -199
  27. package/dist/injections/visual-edit-agent.js.map +1 -1
  28. package/dist/statics/index.mjs +1 -1
  29. package/dist/statics/index.mjs.map +1 -1
  30. package/package.json +1 -1
  31. package/src/injections/layer-dropdown/LAYERS.md +258 -0
  32. package/src/injections/layer-dropdown/consts.ts +3 -0
  33. package/src/injections/layer-dropdown/controller.ts +105 -0
  34. package/src/injections/layer-dropdown/{component/dropdown-ui.ts → dropdown-ui.ts} +109 -96
  35. package/src/injections/layer-dropdown/types.ts +24 -0
  36. package/src/injections/layer-dropdown/utils.ts +88 -41
  37. package/src/injections/utils.ts +0 -16
  38. package/src/injections/visual-edit-agent.ts +83 -237
  39. package/dist/injections/layer-dropdown/component/dropdown-ui.d.ts.map +0 -1
  40. package/dist/injections/layer-dropdown/component/dropdown-ui.js.map +0 -1
@@ -6,7 +6,10 @@ export declare const DROPDOWN_ITEM_ACTIVE_BG = "#DBEAFE";
6
6
  export declare const DROPDOWN_ITEM_ACTIVE_FONT_WEIGHT = "600";
7
7
  export declare const DROPDOWN_ITEM_HOVER_BG = "#f1f5f9";
8
8
  export declare const DEPTH_INDENT_PX = 10;
9
+ /** Chevron shown when dropdown is closed (click to open) */
9
10
  export declare const LABEL_CHEVRON = " \u25BE";
11
+ /** Chevron shown when dropdown is open (click to close) */
12
+ export declare const LABEL_CHEVRON_OPEN = " \u25B4";
10
13
  export declare const LAYER_DROPDOWN_ATTR = "data-layer-dropdown";
11
14
  /** Max instrumented ancestors to show above the selected element */
12
15
  export declare const MAX_PARENT_DEPTH = 2;
@@ -1 +1 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/consts.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAa5D,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ5D,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,gCAAgC,QAAQ,CAAC;AAEtD,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,uEAAuE;AACvE,eAAO,MAAM,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/consts.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAa5D,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ5D,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,gCAAgC,QAAQ,CAAC;AAEtD,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,4DAA4D;AAC5D,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,uEAAuE;AACvE,eAAO,MAAM,eAAe,IAAI,CAAC"}
@@ -27,7 +27,10 @@ export const DROPDOWN_ITEM_ACTIVE_BG = "#DBEAFE";
27
27
  export const DROPDOWN_ITEM_ACTIVE_FONT_WEIGHT = "600";
28
28
  export const DROPDOWN_ITEM_HOVER_BG = "#f1f5f9";
29
29
  export const DEPTH_INDENT_PX = 10;
30
+ /** Chevron shown when dropdown is closed (click to open) */
30
31
  export const LABEL_CHEVRON = " \u25BE";
32
+ /** Chevron shown when dropdown is open (click to close) */
33
+ export const LABEL_CHEVRON_OPEN = " \u25B4";
31
34
  export const LAYER_DROPDOWN_ATTR = "data-layer-dropdown";
32
35
  /** Max instrumented ancestors to show above the selected element */
33
36
  export const MAX_PARENT_DEPTH = 2;
@@ -1 +1 @@
1
- {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/consts.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,SAAS;IAC1B,MAAM,EAAE,mBAAmB;IAC3B,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,gCAAgC;IAC3C,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,eAAe,EAAE,aAAa;IAC9B,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAC;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AACjD,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAC;AAEtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAEhD,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/consts.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,SAAS;IAC1B,MAAM,EAAE,mBAAmB;IAC3B,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,gCAAgC;IAC3C,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,eAAe,EAAE,aAAa;IAC9B,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAC;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AACjD,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAC;AAEtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAEhD,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Controller that encapsulates layer-dropdown integration logic */
2
+ import type { LayerControllerDeps, LayerController } from "./types.js";
3
+ export declare function createLayerController(deps: LayerControllerDeps): LayerController;
4
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/controller.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAUpE,OAAO,KAAK,EAAa,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CA4FhF"}
@@ -0,0 +1,85 @@
1
+ /** Controller that encapsulates layer-dropdown integration logic */
2
+ import { getElementSelectorId } from "../utils.js";
3
+ import { buildLayerChain } from "./utils.js";
4
+ import { enhanceLabelWithChevron, showDropdown, closeDropdown, isDropdownOpen, } from "./dropdown-ui.js";
5
+ export function createLayerController(deps) {
6
+ let layerPreviewOverlay = null;
7
+ let escapeHandler = null;
8
+ let dropdownSourceElement = null;
9
+ const clearLayerPreview = () => {
10
+ if (layerPreviewOverlay && layerPreviewOverlay.parentNode) {
11
+ layerPreviewOverlay.remove();
12
+ }
13
+ layerPreviewOverlay = null;
14
+ };
15
+ const showLayerPreview = (layer) => {
16
+ clearLayerPreview();
17
+ if (getElementSelectorId(layer.element) === deps.getSelectedElementId())
18
+ return;
19
+ layerPreviewOverlay = deps.createPreviewOverlay(layer.element);
20
+ };
21
+ const selectElementFromLayer = (layer) => {
22
+ clearLayerPreview();
23
+ closeDropdown();
24
+ if (escapeHandler) {
25
+ document.removeEventListener("keydown", escapeHandler, true);
26
+ escapeHandler = null;
27
+ }
28
+ dropdownSourceElement = null;
29
+ const firstOverlay = deps.selectElement(layer.element);
30
+ attachToOverlay(firstOverlay, layer.element);
31
+ };
32
+ const reselectDropdownSource = () => {
33
+ if (escapeHandler) {
34
+ document.removeEventListener("keydown", escapeHandler, true);
35
+ escapeHandler = null;
36
+ }
37
+ if (dropdownSourceElement) {
38
+ selectElementFromLayer({
39
+ element: dropdownSourceElement,
40
+ tagName: dropdownSourceElement.tagName.toLowerCase(),
41
+ selectorId: getElementSelectorId(dropdownSourceElement),
42
+ });
43
+ dropdownSourceElement = null;
44
+ }
45
+ };
46
+ const attachToOverlay = (overlay, element) => {
47
+ if (!overlay)
48
+ return;
49
+ const label = overlay.querySelector("div");
50
+ if (!label)
51
+ return;
52
+ const layers = buildLayerChain(element);
53
+ if (layers.length <= 1)
54
+ return;
55
+ const currentId = getElementSelectorId(element);
56
+ enhanceLabelWithChevron(label);
57
+ label.addEventListener("click", (e) => {
58
+ e.stopPropagation();
59
+ e.preventDefault();
60
+ if (isDropdownOpen()) {
61
+ closeDropdown();
62
+ reselectDropdownSource();
63
+ }
64
+ else {
65
+ dropdownSourceElement = element;
66
+ deps.onDeselect();
67
+ escapeHandler = (ev) => {
68
+ if (ev.key === "Escape") {
69
+ ev.stopPropagation();
70
+ closeDropdown();
71
+ reselectDropdownSource();
72
+ }
73
+ };
74
+ document.addEventListener("keydown", escapeHandler, true);
75
+ showDropdown(label, layers, currentId, selectElementFromLayer, showLayerPreview, clearLayerPreview);
76
+ }
77
+ });
78
+ };
79
+ const cleanup = () => {
80
+ clearLayerPreview();
81
+ closeDropdown();
82
+ };
83
+ return { attachToOverlay, cleanup };
84
+ }
85
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/controller.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,5 @@
1
1
  /** Dropdown UI component for layer navigation */
2
- import type { LayerInfo } from "../utils.js";
3
- export type OnLayerSelect = (layer: LayerInfo) => void;
4
- export type OnLayerHover = (layer: LayerInfo) => void;
5
- export type OnLayerHoverEnd = () => void;
2
+ import type { LayerInfo, OnLayerSelect, OnLayerHover, OnLayerHoverEnd } from "./types.js";
6
3
  /** Create the dropdown DOM element with layer items */
7
4
  export declare function createDropdownElement(layers: LayerInfo[], currentSelectorId: string | null, onSelect: OnLayerSelect, onHover?: OnLayerHover, onHoverEnd?: OnLayerHoverEnd): HTMLDivElement;
8
5
  /** Add chevron indicator and pointer-events to the label */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-ui.d.ts","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/dropdown-ui.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAejD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAiD1F,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,CAWhB;AAED,4DAA4D;AAC5D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CASnE;AAkED,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,CA+BN;AAED,uDAAuD;AACvD,wBAAgB,aAAa,IAAI,IAAI,CAyBpC;AAED,+CAA+C;AAC/C,wBAAgB,cAAc,IAAI,OAAO,CAExC"}
@@ -1,103 +1,79 @@
1
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, LABEL_CHEVRON, LAYER_DROPDOWN_ATTR, } from "../consts.js";
3
- import { getLayerDisplayName } from "../utils.js";
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, LABEL_CHEVRON, LABEL_CHEVRON_OPEN, LAYER_DROPDOWN_ATTR, } from "./consts.js";
3
+ import { applyStyles, getLayerDisplayName } from "./utils.js";
4
4
  let activeDropdown = null;
5
+ let activeLabel = null;
5
6
  let outsideMousedownHandler = null;
6
7
  let activeOnHoverEnd = null;
7
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 = `${12 + 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
+ }
8
41
  /** Create the dropdown DOM element with layer items */
9
42
  export function createDropdownElement(layers, currentSelectorId, onSelect, onHover, onHoverEnd) {
10
43
  const container = document.createElement("div");
11
44
  container.setAttribute(LAYER_DROPDOWN_ATTR, "true");
12
- Object.keys(DROPDOWN_CONTAINER_STYLES).forEach((key) => {
13
- container.style[key] = DROPDOWN_CONTAINER_STYLES[key];
14
- });
45
+ applyStyles(container, DROPDOWN_CONTAINER_STYLES);
15
46
  layers.forEach((layer) => {
16
- const item = document.createElement("div");
17
47
  const isActive = layer.selectorId === currentSelectorId;
18
- item.textContent = getLayerDisplayName(layer);
19
- Object.keys(DROPDOWN_ITEM_BASE_STYLES).forEach((key) => {
20
- item.style[key] = DROPDOWN_ITEM_BASE_STYLES[key];
21
- });
22
- // Indent based on depth
23
- const depth = layer.depth ?? 0;
24
- if (depth > 0) {
25
- item.style.paddingLeft = `${12 + depth * DEPTH_INDENT_PX}px`;
26
- }
27
- if (isActive) {
28
- item.style.color = DROPDOWN_ITEM_ACTIVE_COLOR;
29
- item.style.backgroundColor = DROPDOWN_ITEM_ACTIVE_BG;
30
- item.style.fontWeight = DROPDOWN_ITEM_ACTIVE_FONT_WEIGHT;
31
- }
32
- item.addEventListener("mouseenter", () => {
33
- if (!isActive) {
34
- item.style.backgroundColor = DROPDOWN_ITEM_HOVER_BG;
35
- }
36
- if (onHover)
37
- onHover(layer);
38
- });
39
- item.addEventListener("mouseleave", () => {
40
- if (!isActive) {
41
- item.style.backgroundColor = "transparent";
42
- }
43
- if (onHoverEnd)
44
- onHoverEnd();
45
- });
46
- item.addEventListener("click", (e) => {
47
- e.stopPropagation();
48
- e.preventDefault();
49
- onSelect(layer);
50
- });
51
- container.appendChild(item);
48
+ container.appendChild(createDropdownItem(layer, isActive, onSelect, onHover, onHoverEnd));
52
49
  });
53
50
  return container;
54
51
  }
55
52
  /** Add chevron indicator and pointer-events to the label */
56
53
  export function enhanceLabelWithChevron(label) {
57
- if (label.textContent?.includes(LABEL_CHEVRON))
54
+ const t = label.textContent ?? "";
55
+ if (t.endsWith(LABEL_CHEVRON) || t.endsWith(LABEL_CHEVRON_OPEN))
58
56
  return;
59
- label.textContent = label.textContent + LABEL_CHEVRON;
57
+ label.textContent = t + LABEL_CHEVRON;
60
58
  label.style.cursor = "pointer";
61
59
  label.style.userSelect = "none";
62
60
  label.style.pointerEvents = "auto";
63
61
  label.setAttribute(LAYER_DROPDOWN_ATTR, "true");
64
62
  }
65
- /** Show the dropdown below the label element */
66
- export function showDropdown(label, layers, currentSelectorId, onSelect, onHover, onHoverEnd) {
67
- closeDropdown();
68
- const dropdown = createDropdownElement(layers, currentSelectorId, (layer) => {
69
- if (onHoverEnd)
70
- onHoverEnd();
71
- onSelect(layer);
72
- closeDropdown();
73
- }, onHover, onHoverEnd);
74
- const overlay = label.parentElement;
75
- if (!overlay)
76
- return;
77
- // Position below the label
78
- dropdown.style.top = `${label.offsetTop + label.offsetHeight + 2}px`;
79
- dropdown.style.left = `${label.offsetLeft}px`;
80
- overlay.appendChild(dropdown);
81
- activeDropdown = dropdown;
82
- activeOnHoverEnd = onHoverEnd ?? null;
83
- // --- Arrow key navigation ---
63
+ function setupKeyboardNavigation(dropdown, layers, currentSelectorId, onSelect, onHover, onHoverEnd) {
84
64
  const items = Array.from(dropdown.children);
85
- let focusedIndex = -1;
65
+ let focusedIndex = layers.findIndex((l) => l.selectorId === currentSelectorId);
86
66
  const setFocusedItem = (index) => {
87
- // Clear previous focus styling
88
67
  if (focusedIndex >= 0 && focusedIndex < items.length) {
89
68
  const prev = items[focusedIndex];
90
- const prevIsActive = prev.style.color === DROPDOWN_ITEM_ACTIVE_COLOR;
91
- if (!prevIsActive) {
69
+ if (prev.style.color !== DROPDOWN_ITEM_ACTIVE_COLOR) {
92
70
  prev.style.backgroundColor = "transparent";
93
71
  }
94
72
  }
95
73
  focusedIndex = index;
96
- // Apply hover styling to new focused item
97
74
  if (focusedIndex >= 0 && focusedIndex < items.length) {
98
75
  const cur = items[focusedIndex];
99
- const curIsActive = cur.style.color === DROPDOWN_ITEM_ACTIVE_COLOR;
100
- if (!curIsActive) {
76
+ if (cur.style.color !== DROPDOWN_ITEM_ACTIVE_COLOR) {
101
77
  cur.style.backgroundColor = DROPDOWN_ITEM_HOVER_BG;
102
78
  }
103
79
  cur.scrollIntoView({ block: "nearest" });
@@ -109,14 +85,12 @@ export function showDropdown(label, layers, currentSelectorId, onSelect, onHover
109
85
  if (e.key === "ArrowDown") {
110
86
  e.preventDefault();
111
87
  e.stopPropagation();
112
- const next = focusedIndex < items.length - 1 ? focusedIndex + 1 : 0;
113
- setFocusedItem(next);
88
+ setFocusedItem(focusedIndex < items.length - 1 ? focusedIndex + 1 : 0);
114
89
  }
115
90
  else if (e.key === "ArrowUp") {
116
91
  e.preventDefault();
117
92
  e.stopPropagation();
118
- const prev = focusedIndex > 0 ? focusedIndex - 1 : items.length - 1;
119
- setFocusedItem(prev);
93
+ setFocusedItem(focusedIndex > 0 ? focusedIndex - 1 : items.length - 1);
120
94
  }
121
95
  else if (e.key === "Enter" && focusedIndex >= 0) {
122
96
  e.preventDefault();
@@ -128,8 +102,8 @@ export function showDropdown(label, layers, currentSelectorId, onSelect, onHover
128
102
  }
129
103
  };
130
104
  document.addEventListener("keydown", activeKeydownHandler, true);
131
- // Close on outside mousedown (mousedown fires before click, avoiding
132
- // conflict with handleElementClick's stopPropagation on click events)
105
+ }
106
+ function setupOutsideClickHandler(dropdown, label) {
133
107
  setTimeout(() => {
134
108
  outsideMousedownHandler = (e) => {
135
109
  const target = e.target;
@@ -140,8 +114,36 @@ export function showDropdown(label, layers, currentSelectorId, onSelect, onHover
140
114
  document.addEventListener("mousedown", outsideMousedownHandler, true);
141
115
  }, 0);
142
116
  }
117
+ /** Show the dropdown below the label element */
118
+ export function showDropdown(label, layers, currentSelectorId, onSelect, onHover, onHoverEnd) {
119
+ closeDropdown();
120
+ const dropdown = createDropdownElement(layers, currentSelectorId, (layer) => {
121
+ if (onHoverEnd)
122
+ onHoverEnd();
123
+ onSelect(layer);
124
+ closeDropdown();
125
+ }, onHover, onHoverEnd);
126
+ const overlay = label.parentElement;
127
+ if (!overlay)
128
+ return;
129
+ dropdown.style.top = `${label.offsetTop + label.offsetHeight + 2}px`;
130
+ dropdown.style.left = `${label.offsetLeft}px`;
131
+ overlay.appendChild(dropdown);
132
+ activeDropdown = dropdown;
133
+ activeLabel = label;
134
+ if (label.textContent?.endsWith(LABEL_CHEVRON.trim())) {
135
+ label.textContent = label.textContent.slice(0, -LABEL_CHEVRON.length) + LABEL_CHEVRON_OPEN;
136
+ }
137
+ activeOnHoverEnd = onHoverEnd ?? null;
138
+ setupKeyboardNavigation(dropdown, layers, currentSelectorId, onSelect, onHover, onHoverEnd);
139
+ setupOutsideClickHandler(dropdown, label);
140
+ }
143
141
  /** Close the active dropdown and clean up listeners */
144
142
  export function closeDropdown() {
143
+ if (activeLabel?.textContent?.includes(LABEL_CHEVRON_OPEN)) {
144
+ activeLabel.textContent = activeLabel.textContent.replace(LABEL_CHEVRON_OPEN, LABEL_CHEVRON);
145
+ }
146
+ activeLabel = null;
145
147
  if (activeOnHoverEnd) {
146
148
  activeOnHoverEnd();
147
149
  activeOnHoverEnd = null;
@@ -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,21 @@
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 LayerControllerDeps {
12
+ createPreviewOverlay: (element: Element) => HTMLDivElement;
13
+ getSelectedElementId: () => string | null;
14
+ selectElement: (element: Element) => HTMLDivElement | undefined;
15
+ onDeselect: () => void;
16
+ }
17
+ export interface LayerController {
18
+ attachToOverlay: (overlay: HTMLDivElement | undefined, element: Element) => void;
19
+ cleanup: () => void;
20
+ }
21
+ //# 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,mBAAmB;IAClC,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"}
@@ -1,10 +1,7 @@
1
- /** DOM traversal utilities for building the layer chain of instrumented elements */
2
- export interface LayerInfo {
3
- element: Element;
4
- tagName: string;
5
- selectorId: string | null;
6
- depth?: number;
7
- }
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;
8
5
  /** Display name for a layer — just the real tag name */
9
6
  export declare function getLayerDisplayName(layer: LayerInfo): string;
10
7
  /**
@@ -17,7 +14,8 @@ export declare function getInstrumentedDescendants(parent: Element, maxDepth: nu
17
14
  * Build the layer chain for the dropdown:
18
15
  *
19
16
  * Parents – up to MAX_PARENT_DEPTH instrumented ancestors, outer → inner.
20
- * Current – the selected element.
17
+ * Siblings instrumented children of the immediate parent, at the same depth.
18
+ * Current – the selected element (highlighted), with children expanded.
21
19
  * Children – instrumented descendants within MAX_CHILD_DEPTH levels, DOM order.
22
20
  *
23
21
  * Each item carries a `depth` for visual indentation.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/utils.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAKpF,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,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,SAAS,EAAE,CAsBb;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,EAAE,CAkDrE"}
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,CAEtF;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,SAAS,EAAE,CAsBb;AAoFD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,EAAE,CAcrE"}
@@ -1,6 +1,10 @@
1
- /** DOM traversal utilities for building the layer chain of instrumented elements */
1
+ /** DOM utilities for the layer-dropdown module */
2
2
  import { isInstrumentedElement, getElementSelectorId } from "../utils.js";
3
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
+ Object.assign(element.style, styles);
7
+ }
4
8
  /** Display name for a layer — just the real tag name */
5
9
  export function getLayerDisplayName(layer) {
6
10
  return layer.tagName;
@@ -33,17 +37,18 @@ export function getInstrumentedDescendants(parent, maxDepth) {
33
37
  walk(parent, 1);
34
38
  return result;
35
39
  }
36
- /**
37
- * Build the layer chain for the dropdown:
38
- *
39
- * Parents – up to MAX_PARENT_DEPTH instrumented ancestors, outer → inner.
40
- * Current – the selected element.
41
- * Children – instrumented descendants within MAX_CHILD_DEPTH levels, DOM order.
42
- *
43
- * Each item carries a `depth` for visual indentation.
44
- */
45
- export function buildLayerChain(selectedElement) {
46
- // --- Parents (walk up, collect at most MAX_PARENT_DEPTH) ---
40
+ function toLayerInfo(element, depth) {
41
+ const info = {
42
+ element,
43
+ tagName: element.tagName.toLowerCase(),
44
+ selectorId: getElementSelectorId(element),
45
+ };
46
+ if (depth !== undefined)
47
+ info.depth = depth;
48
+ return info;
49
+ }
50
+ /** Collect instrumented ancestors from selected element up to MAX_PARENT_DEPTH (outermost first). */
51
+ function collectInstrumentedParents(selectedElement) {
47
52
  const parents = [];
48
53
  let current = selectedElement.parentElement;
49
54
  while (current &&
@@ -51,36 +56,72 @@ export function buildLayerChain(selectedElement) {
51
56
  current !== document.body &&
52
57
  parents.length < MAX_PARENT_DEPTH) {
53
58
  if (isInstrumentedElement(current)) {
54
- parents.push({
55
- element: current,
56
- tagName: current.tagName.toLowerCase(),
57
- selectorId: getElementSelectorId(current),
58
- });
59
+ parents.push(toLayerInfo(current));
59
60
  }
60
61
  current = current.parentElement;
61
62
  }
62
- // Reverse so outermost parent comes first
63
63
  parents.reverse();
64
- // --- Build the chain with depth ---
65
- const chain = [];
66
- const baseDepth = 0;
67
- // Parents: depth 0, 1,
64
+ return parents;
65
+ }
66
+ /** Append parents to chain with depth 0, 1, …; returns depth of selected (parents.length). */
67
+ function appendParentsWithDepth(chain, parents) {
68
68
  parents.forEach((p, i) => {
69
- chain.push({ ...p, depth: baseDepth + i });
70
- });
71
- // Self
72
- const selfDepth = parents.length;
73
- chain.push({
74
- element: selectedElement,
75
- tagName: selectedElement.tagName.toLowerCase(),
76
- selectorId: getElementSelectorId(selectedElement),
77
- depth: selfDepth,
69
+ chain.push({ ...p, depth: i });
78
70
  });
79
- // Children: up to MAX_CHILD_DEPTH instrumented levels below selected
71
+ return parents.length;
72
+ }
73
+ /** Append selected element and its descendants at the given depth. */
74
+ function appendSelfAndDescendants(chain, selectedElement, selfDepth) {
75
+ chain.push(toLayerInfo(selectedElement, selfDepth));
80
76
  const descendants = getInstrumentedDescendants(selectedElement, MAX_CHILD_DEPTH);
81
- // Assign visual depth: we need to track the instrumented nesting to set depth correctly
82
77
  assignDescendantDepths(selectedElement, descendants, selfDepth + 1);
83
78
  chain.push(...descendants);
79
+ }
80
+ /** Get the innermost instrumented parent's DOM element, or null if none. */
81
+ function getImmediateInstrParent(parents) {
82
+ return parents.length > 0 ? parents[parents.length - 1].element : null;
83
+ }
84
+ /** Collect instrumented siblings of the selected element from its parent (DOM order). */
85
+ function collectSiblings(parent, selectedElement) {
86
+ const siblings = getInstrumentedDescendants(parent, 1);
87
+ if (!siblings.some((s) => s.element === selectedElement)) {
88
+ siblings.push(toLayerInfo(selectedElement));
89
+ }
90
+ return siblings;
91
+ }
92
+ /** Append siblings at selfDepth, expanding children only for the selected element. */
93
+ function appendSiblingsWithSelected(chain, siblings, selectedElement, selfDepth) {
94
+ for (const sibling of siblings) {
95
+ if (sibling.element === selectedElement) {
96
+ appendSelfAndDescendants(chain, selectedElement, selfDepth);
97
+ }
98
+ else {
99
+ chain.push({ ...sibling, depth: selfDepth });
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Build the layer chain for the dropdown:
105
+ *
106
+ * Parents – up to MAX_PARENT_DEPTH instrumented ancestors, outer → inner.
107
+ * Siblings – instrumented children of the immediate parent, at the same depth.
108
+ * Current – the selected element (highlighted), with children expanded.
109
+ * Children – instrumented descendants within MAX_CHILD_DEPTH levels, DOM order.
110
+ *
111
+ * Each item carries a `depth` for visual indentation.
112
+ */
113
+ export function buildLayerChain(selectedElement) {
114
+ const parents = collectInstrumentedParents(selectedElement);
115
+ const chain = [];
116
+ const selfDepth = appendParentsWithDepth(chain, parents);
117
+ const instrParent = getImmediateInstrParent(parents);
118
+ if (instrParent) {
119
+ const siblings = collectSiblings(instrParent, selectedElement);
120
+ appendSiblingsWithSelected(chain, siblings, selectedElement, selfDepth);
121
+ }
122
+ else {
123
+ appendSelfAndDescendants(chain, selectedElement, selfDepth);
124
+ }
84
125
  return chain;
85
126
  }
86
127
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/injections/layer-dropdown/utils.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,6 @@
2
2
  export declare function isInstrumentedElement(element: Element): boolean;
3
3
  /** Get the selector ID from an element's data attributes (prefers source-location) */
4
4
  export declare function getElementSelectorId(element: Element): string | null;
5
- /** Find the nearest instrumented ancestor (not the element itself) */
6
- export declare function getImmediateInstrumentedParent(element: Element): Element | null;
7
5
  /** Find elements by ID - first try data-source-location, fallback to data-visual-selector-id */
8
6
  export declare function findElementsById(id: string | null): Element[];
9
7
  /**
@@ -1 +1 @@
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,sEAAsE;AACtE,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAa/E;AAED,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"}
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,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"}