@abbox/inspector 0.4.6 → 0.4.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"client-bridge.d.ts","sourceRoot":"","sources":["../../src/host/client-bridge.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAsEjB"}
1
+ {"version":3,"file":"client-bridge.d.ts","sourceRoot":"","sources":["../../src/host/client-bridge.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAyEjB"}
@@ -38,6 +38,9 @@ export function createInspectorClient(options) {
38
38
  onClear: () => {
39
39
  send({ ...base(), type: "ELEMENT_CLEARED" });
40
40
  },
41
+ onChangeMarkerSelected: (changeId) => {
42
+ send({ ...base(), type: "CHANGE_MARKER_SELECTED", changeId });
43
+ },
41
44
  });
42
45
  const onMessage = (event) => {
43
46
  const msg = validateIncomingMessage(event.data, event.origin, {
@@ -18,6 +18,7 @@ export type InspectorHostHandlers = {
18
18
  onHover?: (payload: HoverPayload) => void;
19
19
  onSelect?: (payload: SelectPayload) => void;
20
20
  onCleared?: () => void;
21
+ onChangeMarkerSelected?: (changeId: string) => void;
21
22
  onError?: (code: string, message: string) => void;
22
23
  };
23
24
  export type InspectorHost = {
@@ -1 +1 @@
1
- {"version":3,"file":"host-bridge.d.ts","sourceRoot":"","sources":["../../src/host/host-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAGzB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,KAAK,YAAY,GAAG,OAAO,CACzB,mBAAmB,EACnB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAC5B,CAAC,SAAS,CAAC,CAAC;AACb,KAAK,aAAa,GAAG,OAAO,CAC1B,mBAAmB,EACnB;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAC7B,CAAC,SAAS,CAAC,CAAC;AAEb,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IACtD,0EAA0E;IAC1E,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,qBAAqB,GAC9B,aAAa,CA4Df"}
1
+ {"version":3,"file":"host-bridge.d.ts","sourceRoot":"","sources":["../../src/host/host-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAGzB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,KAAK,YAAY,GAAG,OAAO,CACzB,mBAAmB,EACnB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAC5B,CAAC,SAAS,CAAC,CAAC;AACb,KAAK,aAAa,GAAG,OAAO,CAC1B,mBAAmB,EACnB;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAC7B,CAAC,SAAS,CAAC,CAAC;AAEb,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IACtD,0EAA0E;IAC1E,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,qBAAqB,GAC9B,aAAa,CA+Df"}
@@ -32,6 +32,9 @@ export function createInspectorHost(options, handlers) {
32
32
  if (msg.type === "ELEMENT_CLEARED") {
33
33
  handlers.onCleared?.();
34
34
  }
35
+ if (msg.type === "CHANGE_MARKER_SELECTED") {
36
+ handlers.onChangeMarkerSelected?.(msg.changeId);
37
+ }
35
38
  if (msg.type === "INSPECTOR_ERROR") {
36
39
  handlers.onError?.(msg.code, msg.message);
37
40
  }
@@ -85,16 +85,21 @@ export type ChangeMarker = {
85
85
  kind: ChangeMarkerKind;
86
86
  pulse?: boolean;
87
87
  sourceKeyPrefix?: string;
88
+ textHint?: string;
88
89
  route?: string;
89
90
  compilerElementId?: string;
90
91
  interactionId?: string;
91
92
  };
93
+ export type ChangeMarkerSelectedMessage = InspectorMessageBase & {
94
+ type: "CHANGE_MARKER_SELECTED";
95
+ changeId: string;
96
+ };
92
97
  export type ApplyChangeMarkersMessage = InspectorMessageBase & {
93
98
  type: "APPLY_CHANGE_MARKERS";
94
99
  markers: ChangeMarker[];
95
100
  };
96
101
  export type HostToClientMessage = InspectorEnableMessage | InspectorDisableMessage | InspectorHostHelloMessage | ApplyChangeMarkersMessage;
97
- export type ClientToHostMessage = InspectorReadyMessage | ElementHoveredMessage | ElementSelectedMessage | ElementClearedMessage | InspectorErrorMessage;
102
+ export type ClientToHostMessage = InspectorReadyMessage | ElementHoveredMessage | ElementSelectedMessage | ElementClearedMessage | ChangeMarkerSelectedMessage | InspectorErrorMessage;
98
103
  export type InspectorMessage = HostToClientMessage | ClientToHostMessage;
99
104
  export declare function isInspectorMessage(value: unknown): value is InspectorMessage;
100
105
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export type InspectorRuntimeOptions = {
5
5
  onHover?: (payload: ElementHoverPayload) => void;
6
6
  onSelect?: (payload: ElementHoverPayload) => void;
7
7
  onClear?: () => void;
8
+ onChangeMarkerSelected?: (changeId: string) => void;
8
9
  };
9
10
  export type InspectorRuntime = {
10
11
  enable: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/runtime/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAgBxE,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IACpD,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAsJlB"}
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/runtime/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAgBxE,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IACpD,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CA8NlB"}
@@ -8,13 +8,12 @@ export function createInspectorRuntime(options) {
8
8
  let hovered = null;
9
9
  const refIdToElement = new Map();
10
10
  let markers = [];
11
+ let focusedMarkerId = null;
11
12
  let raf = 0;
12
13
  let pendingTarget = null;
13
14
  const teardownListeners = () => {
14
15
  win.removeEventListener("mousemove", onMove, true);
15
16
  win.removeEventListener("pointerdown", onPointerDownCapture, true);
16
- win.removeEventListener("scroll", onScrollOrResize, true);
17
- win.removeEventListener("resize", onScrollOrResize);
18
17
  };
19
18
  const onMove = (event) => {
20
19
  if (!enabled)
@@ -39,6 +38,9 @@ export function createInspectorRuntime(options) {
39
38
  return;
40
39
  if (event.button !== 0)
41
40
  return;
41
+ if (event.target instanceof Element &&
42
+ event.target.closest("[data-abbox-change-marker]"))
43
+ return;
42
44
  event.preventDefault();
43
45
  event.stopPropagation();
44
46
  const target = deepestElementAt(doc, event.clientX, event.clientY, event.target);
@@ -50,7 +52,7 @@ export function createInspectorRuntime(options) {
50
52
  if (hovered)
51
53
  positionHighlight(overlay.highlight, rectForElement(hovered));
52
54
  if (markers.length) {
53
- renderChangeMarkers(overlay.markerLayer, markers, (id) => refIdToElement.get(id) ?? null);
55
+ renderChangeMarkers(overlay.markerLayer, markers, (id) => refIdToElement.get(id) ?? null, options.onChangeMarkerSelected);
54
56
  }
55
57
  };
56
58
  function payloadFor(el) {
@@ -79,14 +81,44 @@ export function createInspectorRuntime(options) {
79
81
  options.onSelect?.(payloadFor(el));
80
82
  }
81
83
  function resolveMarkerElements(next) {
84
+ const isRendered = (node) => {
85
+ const rect = node.getBoundingClientRect();
86
+ return node.isConnected && rect.width > 0 && rect.height > 0;
87
+ };
82
88
  for (const marker of next) {
83
- if (refIdToElement.has(marker.elementRefId) || !marker.sourceKeyPrefix)
89
+ if (marker.route &&
90
+ win.location.pathname.replace(/\/$/, "") !==
91
+ marker.route.replace(/\/$/, ""))
92
+ continue;
93
+ if (refIdToElement.has(marker.elementRefId))
84
94
  continue;
85
- const match = Array.from(doc.querySelectorAll("[data-abbox-src]")).find((node) => {
86
- const raw = node.getAttribute("data-abbox-src") ?? "";
87
- const sourceKey = `${marker.sourceKeyPrefix}:`;
88
- return raw.startsWith(sourceKey) || raw.endsWith(`/${sourceKey}`);
89
- });
95
+ const sourceKey = marker.sourceKeyPrefix
96
+ ? `${marker.sourceKeyPrefix}:`
97
+ : null;
98
+ const sourceCandidates = sourceKey
99
+ ? Array.from(doc.querySelectorAll("[data-abbox-src]")).filter((node) => {
100
+ const raw = node.getAttribute("data-abbox-src") ?? "";
101
+ return (isRendered(node) &&
102
+ (raw.startsWith(sourceKey) || raw.endsWith(`/${sourceKey}`)));
103
+ })
104
+ : [];
105
+ const hint = marker.textHint?.trim();
106
+ const textCandidates = hint
107
+ ? Array.from(doc.querySelectorAll("body *")).filter((node) => node.children.length === 0 &&
108
+ isRendered(node) &&
109
+ node.textContent?.trim() === hint &&
110
+ !node.closest("[data-abbox-inspector]"))
111
+ : [];
112
+ const sourceTextCandidates = hint
113
+ ? sourceCandidates.filter((node) => node.textContent?.trim() === hint)
114
+ : [];
115
+ const match = sourceTextCandidates.length === 1
116
+ ? sourceTextCandidates[0]
117
+ : textCandidates.length === 1
118
+ ? textCandidates[0]
119
+ : !hint && sourceCandidates.length === 1
120
+ ? sourceCandidates[0]
121
+ : null;
90
122
  if (match)
91
123
  refIdToElement.set(marker.elementRefId, match);
92
124
  }
@@ -96,6 +128,8 @@ export function createInspectorRuntime(options) {
96
128
  hideHighlight(overlay.highlight);
97
129
  options.onClear?.();
98
130
  }
131
+ win.addEventListener("scroll", onScrollOrResize, true);
132
+ win.addEventListener("resize", onScrollOrResize);
99
133
  return {
100
134
  enable: () => {
101
135
  if (enabled)
@@ -103,8 +137,6 @@ export function createInspectorRuntime(options) {
103
137
  enabled = true;
104
138
  win.addEventListener("mousemove", onMove, true);
105
139
  win.addEventListener("pointerdown", onPointerDownCapture, true);
106
- win.addEventListener("scroll", onScrollOrResize, true);
107
- win.addEventListener("resize", onScrollOrResize);
108
140
  },
109
141
  disable: () => {
110
142
  if (!enabled)
@@ -118,8 +150,27 @@ export function createInspectorRuntime(options) {
118
150
  isEnabled: () => enabled,
119
151
  setChangeMarkers: (next) => {
120
152
  markers = next;
153
+ for (const marker of next)
154
+ refIdToElement.delete(marker.elementRefId);
121
155
  resolveMarkerElements(next);
122
- renderChangeMarkers(overlay.markerLayer, markers, (id) => refIdToElement.get(id) ?? null);
156
+ const focused = next.find((marker) => marker.pulse && refIdToElement.has(marker.elementRefId));
157
+ if (focused && focused.elementRefId !== focusedMarkerId) {
158
+ refIdToElement
159
+ .get(focused.elementRefId)
160
+ ?.scrollIntoView?.({ block: "center", inline: "nearest" });
161
+ }
162
+ focusedMarkerId = focused?.elementRefId ?? null;
163
+ const unresolved = next.filter((marker) => (!marker.route ||
164
+ marker.route.replace(/\/$/, "") ===
165
+ win.location.pathname.replace(/\/$/, "")) &&
166
+ !refIdToElement.has(marker.elementRefId));
167
+ if (unresolved.length) {
168
+ console.warn("[abbox-inspector] change markers could not be matched to rendered elements", {
169
+ route: win.location.pathname,
170
+ changeIds: unresolved.map((marker) => marker.elementRefId),
171
+ });
172
+ }
173
+ renderChangeMarkers(overlay.markerLayer, markers, (id) => refIdToElement.get(id) ?? null, options.onChangeMarkerSelected);
123
174
  },
124
175
  getElementByRefId: (id) => refIdToElement.get(id) ?? null,
125
176
  destroy: () => {
@@ -127,6 +178,8 @@ export function createInspectorRuntime(options) {
127
178
  enabled = false;
128
179
  teardownListeners();
129
180
  }
181
+ win.removeEventListener("scroll", onScrollOrResize, true);
182
+ win.removeEventListener("resize", onScrollOrResize);
130
183
  hovered = null;
131
184
  hideHighlight(overlay.highlight);
132
185
  overlay.destroy();
@@ -8,5 +8,5 @@ export declare function createOverlay(root: Document): OverlayHandles;
8
8
  export declare function positionHighlight(highlight: HTMLDivElement, rect: ElementRect): void;
9
9
  export declare function hideHighlight(highlight: HTMLDivElement): void;
10
10
  export declare function rectForElement(el: Element): ElementRect;
11
- export declare function renderChangeMarkers(layer: HTMLDivElement, markers: ChangeMarker[], resolveElement: (refId: string) => Element | null): void;
11
+ export declare function renderChangeMarkers(layer: HTMLDivElement, markers: ChangeMarker[], resolveElement: (refId: string) => Element | null, onSelect?: (changeId: string) => void): void;
12
12
  //# sourceMappingURL=overlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/runtime/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKhE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAiC5D;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,WAAW,GAChB,IAAI,CAQN;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAE7D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,WAAW,CAQvD;AAID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,YAAY,EAAE,EACvB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GAChD,IAAI,CA2CN"}
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/runtime/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKhE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAiC5D;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,WAAW,GAChB,IAAI,CAQN;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAE7D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,WAAW,CAQvD;AAOD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,YAAY,EAAE,EACvB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,EACjD,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACpC,IAAI,CA+DN"}
@@ -52,8 +52,13 @@ export function rectForElement(el) {
52
52
  height: r.height,
53
53
  };
54
54
  }
55
- const markerNodes = new Map();
56
- export function renderChangeMarkers(layer, markers, resolveElement) {
55
+ const markerNodesByLayer = new WeakMap();
56
+ export function renderChangeMarkers(layer, markers, resolveElement, onSelect) {
57
+ let markerNodes = markerNodesByLayer.get(layer);
58
+ if (!markerNodes) {
59
+ markerNodes = new Map();
60
+ markerNodesByLayer.set(layer, markerNodes);
61
+ }
57
62
  for (const [id, node] of markerNodes) {
58
63
  if (!markers.some((m) => m.elementRefId === id)) {
59
64
  node.remove();
@@ -62,13 +67,18 @@ export function renderChangeMarkers(layer, markers, resolveElement) {
62
67
  }
63
68
  for (const marker of markers) {
64
69
  const el = resolveElement(marker.elementRefId);
65
- if (!el)
70
+ const rect = el?.getBoundingClientRect();
71
+ if (!el?.isConnected || !rect || rect.width <= 0 || rect.height <= 0) {
72
+ markerNodes.get(marker.elementRefId)?.remove();
73
+ markerNodes.delete(marker.elementRefId);
66
74
  continue;
67
- const rect = el.getBoundingClientRect();
75
+ }
68
76
  let dot = markerNodes.get(marker.elementRefId);
69
77
  if (!dot) {
70
- dot = layer.ownerDocument.createElement("div");
78
+ dot = layer.ownerDocument.createElement("button");
79
+ dot.type = "button";
71
80
  dot.setAttribute("data-abbox-change-marker", marker.kind);
81
+ dot.setAttribute("aria-label", marker.label);
72
82
  dot.title = marker.label;
73
83
  Object.assign(dot.style, {
74
84
  position: "fixed",
@@ -84,15 +94,25 @@ export function renderChangeMarkers(layer, markers, resolveElement) {
84
94
  : "#ef4444",
85
95
  border: "2px solid #fff",
86
96
  boxShadow: "0 0 0 1px rgba(0,0,0,0.2)",
87
- pointerEvents: "none",
97
+ padding: "0",
98
+ cursor: "pointer",
99
+ pointerEvents: "auto",
88
100
  });
89
- if (marker.pulse !== false) {
90
- dot.style.animation = "abbox-inspector-pulse 1.4s ease-in-out infinite";
91
- ensurePulseStyle(layer.ownerDocument);
92
- }
93
101
  layer.append(dot);
94
102
  markerNodes.set(marker.elementRefId, dot);
95
103
  }
104
+ dot.onclick = (event) => {
105
+ event.stopPropagation();
106
+ onSelect?.(marker.elementRefId);
107
+ };
108
+ dot.style.animation = marker.pulse
109
+ ? "abbox-inspector-pulse 1.4s ease-in-out infinite"
110
+ : "";
111
+ dot.style.boxShadow = marker.pulse
112
+ ? "0 0 0 4px rgba(255,255,255,0.35)"
113
+ : "0 0 0 1px rgba(0,0,0,0.2)";
114
+ if (marker.pulse)
115
+ ensurePulseStyle(layer.ownerDocument);
96
116
  dot.style.left = `${rect.x + rect.width - 8}px`;
97
117
  dot.style.top = `${rect.top - 4}px`;
98
118
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abbox/inspector",
3
- "version": "0.4.6",
3
+ "version": "0.4.8",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },