inspector-ng 0.0.12 → 0.0.13

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":"inspector-ng.mjs","sources":["../../../projects/inspector-ng/src/lib/constants.ts","../../../projects/inspector-ng/src/lib/checkpoints.ts","../../../projects/inspector-ng/src/lib/geometry.ts","../../../projects/inspector-ng/src/lib/distances.ts","../../../projects/inspector-ng/src/lib/dom.ts","../../../projects/inspector-ng/src/lib/checkpoint-search.ts","../../../projects/inspector-ng/src/lib/utils.ts","../../../projects/inspector-ng/src/lib/inspector.component.ts","../../../projects/inspector-ng/src/lib/inspector.component.html","../../../projects/inspector-ng/src/inspector-ng.ts"],"sourcesContent":["export const inspector_STORAGE_KEY = \"inspector-state\";\nexport const inspector_STATE_VERSION = 2;\nexport const GUIDE_SNAP_DISTANCE = 10;\nexport const GUIDE_HITBOX_SIZE = 14;\n","import {\n EnvironmentProviders,\n Inject,\n Injectable,\n InjectionToken,\n Optional,\n PLATFORM_ID,\n makeEnvironmentProviders,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Router } from '@angular/router';\nimport {\n Action,\n ActionReducer,\n META_REDUCERS,\n Store,\n} from '@ngrx/store';\nimport { firstValueFrom, take } from 'rxjs';\n\nexport interface InspectorCheckpointRecord {\n version: 1;\n id: string;\n name: string;\n route: string;\n createdAt: string;\n lastUsedAt?: string;\n state: unknown;\n}\n\ninterface RestoreCheckpointAction extends Action {\n type: typeof RESTORE_CHECKPOINT;\n state: unknown;\n}\n\nconst RESTORE_CHECKPOINT = '[Inspector Checkpoints] Restore';\nconst DATABASE_NAME = 'inspector-ng';\nconst DATABASE_VERSION = 1;\nconst STORE_NAME = 'checkpoints';\n\nexport const INSPECTOR_CHECKPOINT_REPOSITORY =\n new InjectionToken<InspectorCheckpointRepository>('INSPECTOR_CHECKPOINT_REPOSITORY');\n\nexport function inspectorCheckpointMetaReducer<T>(\n reducer: ActionReducer<T>,\n): ActionReducer<T> {\n return (state, action) => {\n if (action.type === RESTORE_CHECKPOINT) {\n return (action as RestoreCheckpointAction).state as T;\n }\n return reducer(state, action);\n };\n}\n\nexport abstract class InspectorCheckpointRepository {\n abstract list(): Promise<InspectorCheckpointRecord[]>;\n abstract put(checkpoint: InspectorCheckpointRecord): Promise<void>;\n abstract delete(id: string): Promise<void>;\n}\n\n@Injectable()\nexport class IndexedDbCheckpointRepository extends InspectorCheckpointRepository {\n private databasePromise: Promise<IDBDatabase> | null = null;\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: object) {\n super();\n }\n\n async list(): Promise<InspectorCheckpointRecord[]> {\n const database = await this.database();\n const values = await this.request<unknown[]>(\n database.transaction(STORE_NAME, 'readonly').objectStore(STORE_NAME).getAll(),\n );\n return values\n .filter(isCheckpointRecord)\n .sort(recentActivityFirst);\n }\n\n async put(checkpoint: InspectorCheckpointRecord): Promise<void> {\n const database = await this.database();\n await this.transactionComplete(database, 'readwrite', (store) => store.put(checkpoint));\n }\n\n async delete(id: string): Promise<void> {\n const database = await this.database();\n await this.transactionComplete(database, 'readwrite', (store) => store.delete(id));\n }\n\n private database(): Promise<IDBDatabase> {\n if (!isPlatformBrowser(this.platformId) || typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('Checkpoints are only available in a browser with IndexedDB.'));\n }\n if (this.databasePromise) return this.databasePromise;\n\n this.databasePromise = new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n request.onupgradeneeded = () => {\n const database = request.result;\n if (database.objectStoreNames.contains(STORE_NAME)) return;\n const store = database.createObjectStore(STORE_NAME, { keyPath: 'id' });\n store.createIndex('createdAt', 'createdAt');\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error('IndexedDB could not be opened.'));\n request.onblocked = () => reject(new Error('IndexedDB is blocked by another open tab.'));\n });\n return this.databasePromise;\n }\n\n private request<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error('IndexedDB request failed.'));\n });\n }\n\n private transactionComplete(\n database: IDBDatabase,\n mode: IDBTransactionMode,\n operation: (store: IDBObjectStore) => IDBRequest,\n ): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, mode);\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error ?? new Error('IndexedDB transaction failed.'));\n transaction.onabort = () => reject(transaction.error ?? new Error('IndexedDB transaction was aborted.'));\n operation(transaction.objectStore(STORE_NAME));\n });\n }\n}\n\n@Injectable()\nexport class InspectorCheckpointService {\n readonly checkpoints = signal<InspectorCheckpointRecord[]>([]);\n readonly loading = signal(false);\n readonly busy = signal(false);\n readonly error = signal<string | null>(null);\n\n constructor(\n @Inject(INSPECTOR_CHECKPOINT_REPOSITORY)\n private readonly repository: InspectorCheckpointRepository,\n @Optional() @Inject(Store) private readonly store: Store | null,\n @Optional() @Inject(Router) private readonly router: Router | null,\n @Inject(PLATFORM_ID) private readonly platformId: object,\n ) {}\n\n async load(): Promise<void> {\n this.error.set(null);\n this.loading.set(true);\n try {\n this.checkpoints.set((await this.repository.list()).sort(recentActivityFirst));\n } catch (error) {\n this.error.set(this.messageFor(error, 'Saved checkpoints could not be loaded. Try reloading the page.'));\n } finally {\n this.loading.set(false);\n }\n }\n\n async save(): Promise<InspectorCheckpointRecord | null> {\n this.error.set(null);\n if (!this.store) {\n this.error.set(this.missingStoreMessage());\n return null;\n }\n\n this.busy.set(true);\n try {\n const currentState = await firstValueFrom(this.store.pipe(take(1)));\n const state = cloneJson(currentState);\n const persisted = await this.repository.list();\n const route = this.currentRoute();\n const pathname = this.currentPathname();\n const checkpoint: InspectorCheckpointRecord = {\n version: 1,\n id: createCheckpointId(),\n name: nextAutomaticName(pathname, persisted.map(({ name }) => name)),\n route,\n createdAt: new Date().toISOString(),\n state,\n };\n await this.repository.put(checkpoint);\n this.checkpoints.set([checkpoint, ...persisted].sort(recentActivityFirst));\n return checkpoint;\n } catch (error) {\n this.error.set(this.storageMessage(error, 'The checkpoint could not be saved.'));\n return null;\n } finally {\n this.busy.set(false);\n }\n }\n\n async restore(id: string): Promise<boolean> {\n this.error.set(null);\n if (!this.store) {\n this.error.set(this.missingStoreMessage());\n return false;\n }\n this.busy.set(true);\n try {\n const checkpoints = await this.repository.list();\n const checkpoint = checkpoints.find((item) => item.id === id);\n if (!checkpoint) throw new Error('Checkpoint not found. It may have been deleted in another tab.');\n const state = cloneJson(\n checkpoint.state,\n `“${checkpoint.name}” could not be decoded. Delete it and save a new checkpoint.`,\n );\n this.store.dispatch({ type: RESTORE_CHECKPOINT, state } as RestoreCheckpointAction);\n if (this.router && !await this.router.navigateByUrl(checkpoint.route)) {\n throw new Error(`The state was restored, but navigation to “${checkpoint.route}” was cancelled.`);\n }\n const recentlyUsedCheckpoint = {\n ...checkpoint,\n lastUsedAt: new Date().toISOString(),\n };\n await this.repository.put(recentlyUsedCheckpoint);\n this.checkpoints.set(\n checkpoints\n .map((item) => item.id === id ? recentlyUsedCheckpoint : item)\n .sort(recentActivityFirst),\n );\n return true;\n } catch (error) {\n this.error.set(this.messageFor(error, 'The checkpoint could not be restored. Delete it and save a new one.'));\n return false;\n } finally {\n this.busy.set(false);\n }\n }\n\n async rename(id: string, name: string): Promise<boolean> {\n this.error.set(null);\n const nextName = name.trim();\n if (!nextName) {\n this.error.set('Please enter a checkpoint name.');\n return false;\n }\n\n this.busy.set(true);\n try {\n const checkpoints = await this.repository.list();\n if (checkpoints.some((item) => item.id !== id && item.name.toLocaleLowerCase() === nextName.toLocaleLowerCase())) {\n throw new Error(`A checkpoint named “${nextName}” already exists. Choose a different name.`);\n }\n const checkpoint = checkpoints.find((item) => item.id === id);\n if (!checkpoint) throw new Error('Checkpoint not found. It may have been deleted in another tab.');\n await this.repository.put({ ...checkpoint, name: nextName });\n this.checkpoints.set(\n checkpoints.map((item) => item.id === id ? { ...item, name: nextName } : item).sort(recentActivityFirst),\n );\n return true;\n } catch (error) {\n this.error.set(this.storageMessage(error, 'The checkpoint could not be renamed.'));\n return false;\n } finally {\n this.busy.set(false);\n }\n }\n\n async delete(id: string): Promise<boolean> {\n this.error.set(null);\n this.busy.set(true);\n try {\n await this.repository.delete(id);\n this.checkpoints.set(this.checkpoints().filter((item) => item.id !== id));\n return true;\n } catch (error) {\n this.error.set(this.storageMessage(error, 'The checkpoint could not be deleted.'));\n return false;\n } finally {\n this.busy.set(false);\n }\n }\n\n clearError(): void {\n this.error.set(null);\n }\n\n private currentRoute(): string {\n if (!isPlatformBrowser(this.platformId)) return '/';\n return `${this.currentPathname()}${window.location.search}${window.location.hash}`;\n }\n\n private currentPathname(): string {\n if (!isPlatformBrowser(this.platformId)) return '/';\n return window.location.pathname || '/';\n }\n\n private missingStoreMessage(): string {\n return 'The NgRx root store is unavailable. Check that provideInspectorCheckpoints() is registered after provideStore().';\n }\n\n private storageMessage(error: unknown, fallback: string): string {\n if (isQuotaError(error)) {\n return 'Browser storage is full. Delete old checkpoints, then try saving again.';\n }\n return this.messageFor(error, fallback);\n }\n\n private messageFor(error: unknown, fallback: string): string {\n return error instanceof Error && error.message ? error.message : fallback;\n }\n}\n\nexport function provideInspectorCheckpoints(): EnvironmentProviders {\n return makeEnvironmentProviders([\n IndexedDbCheckpointRepository,\n {\n provide: INSPECTOR_CHECKPOINT_REPOSITORY,\n useExisting: IndexedDbCheckpointRepository,\n },\n InspectorCheckpointService,\n {\n provide: META_REDUCERS,\n multi: true,\n useValue: inspectorCheckpointMetaReducer,\n },\n ]);\n}\n\nexport function nextAutomaticName(route: string, names: string[]): string {\n const used = new Set(names.map((name) => name.toLocaleLowerCase()));\n if (!used.has(route.toLocaleLowerCase())) return route;\n for (let suffix = 2; ; suffix += 1) {\n const candidate = `${route} ${suffix}`;\n if (!used.has(candidate.toLocaleLowerCase())) return candidate;\n }\n}\n\nfunction cloneJson(\n value: unknown,\n failureMessage = 'The NgRx root state is not JSON-serializable. Remove circular or unsupported values and try again.',\n): unknown {\n try {\n const serialized = JSON.stringify(value);\n if (serialized === undefined) throw new Error();\n return JSON.parse(serialized) as unknown;\n } catch {\n throw new Error(failureMessage);\n }\n}\n\nfunction createCheckpointId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `checkpoint-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction isQuotaError(error: unknown): boolean {\n return error instanceof DOMException && (\n error.name === 'QuotaExceededError' || error.name === 'NS_ERROR_DOM_QUOTA_REACHED'\n );\n}\n\nexport function checkpointActivityAt(checkpoint: InspectorCheckpointRecord): string {\n return checkpoint.lastUsedAt && checkpoint.lastUsedAt > checkpoint.createdAt\n ? checkpoint.lastUsedAt\n : checkpoint.createdAt;\n}\n\nexport function recentActivityFirst(\n a: InspectorCheckpointRecord,\n b: InspectorCheckpointRecord,\n): number {\n return checkpointActivityAt(b).localeCompare(checkpointActivityAt(a)) ||\n b.createdAt.localeCompare(a.createdAt) ||\n b.id.localeCompare(a.id);\n}\n\nfunction isCheckpointRecord(value: unknown): value is InspectorCheckpointRecord {\n if (!value || typeof value !== 'object') return false;\n const checkpoint = value as Partial<InspectorCheckpointRecord>;\n return checkpoint.version === 1 &&\n typeof checkpoint.id === 'string' &&\n typeof checkpoint.name === 'string' &&\n typeof checkpoint.route === 'string' &&\n typeof checkpoint.createdAt === 'string' &&\n (checkpoint.lastUsedAt === undefined || typeof checkpoint.lastUsedAt === 'string') &&\n 'state' in checkpoint;\n}\n","import { Rect } from './types';\n\nexport const clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n\nexport const getViewportSize = () => ({\n width: typeof window === 'undefined' ? 1 : window.innerWidth || 1,\n height: typeof window === 'undefined' ? 1 : window.innerHeight || 1,\n});\n\nexport const rectContainsPoint = (\n rect: Rect,\n point: { x: number; y: number },\n) =>\n point.x >= rect.left &&\n point.x <= rect.left + rect.width &&\n point.y >= rect.top &&\n point.y <= rect.top + rect.height;\n\nexport const rectsEqual = (a: Rect | null, b: Rect | null, epsilon = 0.5) => {\n if (a === b) {\n return true;\n }\n\n if (!a || !b) {\n return false;\n }\n\n return (\n Math.abs(a.left - b.left) < epsilon &&\n Math.abs(a.top - b.top) < epsilon &&\n Math.abs(a.width - b.width) < epsilon &&\n Math.abs(a.height - b.height) < epsilon\n );\n};\n","import { clamp, getViewportSize } from './geometry';\nimport { DistanceOverlay, Rect } from './types';\n\nexport const getDistanceOverlay = (rectA: Rect, rectB: Rect): DistanceOverlay => {\n const rightA = rectA.left + rectA.width;\n const bottomA = rectA.top + rectA.height;\n const rightB = rectB.left + rectB.width;\n const bottomB = rectB.top + rectB.height;\n const centerAX = rectA.left + rectA.width / 2;\n const centerAY = rectA.top + rectA.height / 2;\n\n let horizontal: DistanceOverlay['horizontal'] = null;\n let vertical: DistanceOverlay['vertical'] = null;\n const connectors: DistanceOverlay['connectors'] = [];\n\n const separatedX = rightA <= rectB.left || rightB <= rectA.left;\n const separatedY = bottomA <= rectB.top || bottomB <= rectA.top;\n\n if (separatedX) {\n const aIsLeft = rightA <= rectB.left;\n const x1 = aIsLeft ? rightA : rightB;\n const x2 = aIsLeft ? rectB.left : rectA.left;\n const y = centerAY;\n horizontal = { x1, x2, y, value: Math.abs(x2 - x1) };\n\n const edgeBX = aIsLeft ? rectB.left : rightB;\n if (y < rectB.top) {\n connectors.push({ x1: edgeBX, y1: y, x2: edgeBX, y2: rectB.top });\n } else if (y > bottomB) {\n connectors.push({ x1: edgeBX, y1: y, x2: edgeBX, y2: bottomB });\n }\n }\n\n if (separatedY) {\n const aIsTop = bottomA <= rectB.top;\n const y1 = aIsTop ? bottomA : bottomB;\n const y2 = aIsTop ? rectB.top : rectA.top;\n const x = centerAX;\n vertical = { y1, y2, x, value: Math.abs(y2 - y1) };\n\n const edgeBY = aIsTop ? rectB.top : bottomB;\n if (x < rectB.left) {\n connectors.push({ x1: x, y1: edgeBY, x2: rectB.left, y2: edgeBY });\n } else if (x > rightB) {\n connectors.push({ x1: x, y1: edgeBY, x2: rightB, y2: edgeBY });\n }\n }\n\n const viewport = getViewportSize();\n\n return {\n rectA,\n rectB,\n horizontal,\n vertical,\n connectors: connectors\n .map((segment) => ({\n x1: clamp(segment.x1, 0, viewport.width),\n y1: clamp(segment.y1, 0, viewport.height),\n x2: clamp(segment.x2, 0, viewport.width),\n y2: clamp(segment.y2, 0, viewport.height),\n }))\n .filter(\n (segment) =>\n Math.abs(segment.x1 - segment.x2) > 0.5 ||\n Math.abs(segment.y1 - segment.y2) > 0.5,\n ),\n };\n};\n","import { InspectMeasurement, Rect, TextBlockAnnotation, TextInspection } from './types';\n\nexport const getRectFromDom = (element: Element): Rect => {\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n};\n\nexport const getElementLabel = (element: HTMLElement) => {\n const tag = element.tagName.toLowerCase();\n const id = element.id ? `#${element.id}` : '';\n const className = element.className\n ? `.${element.className.toString().split(' ')[0]}`\n : '';\n return `${tag}${id}${className}`;\n};\n\nconst toHex = (value: number) => value.toString(16).padStart(2, '0');\n\nconst normalizeColorToHex = (color: string) => {\n const trimmed = color.trim().toLowerCase();\n if (trimmed.startsWith('#')) {\n if (trimmed.length === 4) {\n return `#${trimmed[1]}${trimmed[1]}${trimmed[2]}${trimmed[2]}${trimmed[3]}${trimmed[3]}`;\n }\n return trimmed;\n }\n\n const rgbMatch = trimmed.match(\n /^rgba?\\(\\s*([0-9.]+)\\s*,\\s*([0-9.]+)\\s*,\\s*([0-9.]+)(?:\\s*,\\s*[0-9.]+\\s*)?\\)$/,\n );\n if (!rgbMatch) {\n return color;\n }\n\n const [, r, g, b] = rgbMatch;\n return `#${toHex(Math.round(Number(r)))}${toHex(Math.round(Number(g)))}${toHex(Math.round(Number(b)))}`;\n};\n\nexport const getTextInspection = (element: HTMLElement): TextInspection => {\n const style = window.getComputedStyle(element);\n return {\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontWeight: style.fontWeight,\n lineHeight: style.lineHeight,\n letterSpacing: style.letterSpacing,\n color: normalizeColorToHex(style.color),\n textAlign: style.textAlign,\n };\n};\n\nconst parseEdge = (value: string) => Number.parseFloat(value) || 0;\n\nexport const getInspectMeasurement = (element: HTMLElement): InspectMeasurement => {\n const rect = getRectFromDom(element);\n const style = window.getComputedStyle(element);\n const parentElement = element.parentElement;\n const parentStyle = parentElement ? window.getComputedStyle(parentElement) : null;\n const padding = {\n top: parseEdge(style.paddingTop),\n right: parseEdge(style.paddingRight),\n bottom: parseEdge(style.paddingBottom),\n left: parseEdge(style.paddingLeft),\n };\n const margin = {\n top: parseEdge(style.marginTop),\n right: parseEdge(style.marginRight),\n bottom: parseEdge(style.marginBottom),\n left: parseEdge(style.marginLeft),\n };\n const rowGap = parentStyle ? parseEdge(parentStyle.rowGap) : 0;\n const columnGap = parentStyle ? parseEdge(parentStyle.columnGap) : 0;\n const parentDisplay = parentStyle?.display ?? '';\n const hasGap =\n !!parentElement &&\n (parentDisplay.includes('flex') || parentDisplay.includes('grid')) &&\n (rowGap > 0 || columnGap > 0);\n\n return {\n rect,\n paddingRect: {\n left: rect.left + padding.left,\n top: rect.top + padding.top,\n width: Math.max(0, rect.width - padding.left - padding.right),\n height: Math.max(0, rect.height - padding.top - padding.bottom),\n },\n marginRect: {\n left: rect.left - margin.left,\n top: rect.top - margin.top,\n width: rect.width + margin.left + margin.right,\n height: rect.height + margin.top + margin.bottom,\n },\n padding,\n margin,\n gap: {\n row: rowGap,\n column: columnGap,\n active: hasGap,\n },\n parentRect: hasGap && parentElement ? getRectFromDom(parentElement) : null,\n label: getElementLabel(element),\n styles: getTextInspection(element),\n };\n};\n\nconst isVisibleTextCandidate = (element: HTMLElement) => {\n const text = element.innerText?.trim() ?? '';\n if (!text) {\n return false;\n }\n\n const style = window.getComputedStyle(element);\n if (\n style.display === 'none' ||\n style.visibility === 'hidden' ||\n Number.parseFloat(style.opacity || '1') === 0\n ) {\n return false;\n }\n\n const rect = element.getBoundingClientRect();\n if (rect.width < 8 || rect.height < 8) {\n return false;\n }\n\n for (const child of Array.from(element.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if ((child.innerText?.trim() ?? '') && child.getBoundingClientRect().height > 0) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const getVisibleTextBlocks = (\n overlayElement: HTMLElement | null,\n limit = 160,\n): TextBlockAnnotation[] => {\n if (typeof document === 'undefined') {\n return [];\n }\n\n const nodes = Array.from(document.querySelectorAll('body *'));\n const blocks: TextBlockAnnotation[] = [];\n\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue;\n }\n if (overlayElement && overlayElement.contains(node)) {\n continue;\n }\n if (!isVisibleTextCandidate(node)) {\n continue;\n }\n\n const rect = getRectFromDom(node);\n const text = (node.innerText || node.textContent || '').replace(/\\s+/g, ' ').trim();\n blocks.push({\n id: `${node.tagName.toLowerCase()}-${Math.round(rect.left)}-${Math.round(rect.top)}-${text.slice(0, 24)}`,\n rect,\n text,\n styles: getTextInspection(node),\n });\n\n if (blocks.length >= limit) {\n break;\n }\n }\n\n return blocks;\n};\n\nexport const getTargetElement = (\n point: { x: number; y: number },\n overlayElement: HTMLElement | null,\n) => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n if (overlayElement) {\n const previous = overlayElement.style.pointerEvents;\n overlayElement.style.pointerEvents = 'none';\n const elements = document.elementsFromPoint(point.x, point.y);\n overlayElement.style.pointerEvents = previous;\n\n for (const element of elements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (overlayElement.contains(element)) {\n continue;\n }\n if (element === document.body || element === document.documentElement) {\n continue;\n }\n const rect = element.getBoundingClientRect();\n if (rect.width <= 2 || rect.height <= 2) {\n continue;\n }\n return element;\n }\n\n return null;\n }\n\n return document.elementFromPoint(point.x, point.y) as HTMLElement | null;\n};\n","import {\n InspectorCheckpointRecord,\n recentActivityFirst,\n} from './checkpoints';\n\ninterface RankedCheckpoint {\n checkpoint: InspectorCheckpointRecord;\n score: number;\n}\n\nexport function fuzzyCheckpoints(\n checkpoints: InspectorCheckpointRecord[],\n query: string,\n): InspectorCheckpointRecord[] {\n const normalizedQuery = normalize(query.trim());\n if (!normalizedQuery) return [...checkpoints].sort(recentActivityFirst);\n\n return checkpoints\n .map((checkpoint): RankedCheckpoint | null => {\n const score = fuzzyScore(checkpoint.name, normalizedQuery);\n return score === null ? null : { checkpoint, score };\n })\n .filter((item): item is RankedCheckpoint => item !== null)\n .sort((a, b) => b.score - a.score || recentActivityFirst(a.checkpoint, b.checkpoint))\n .map(({ checkpoint }) => checkpoint);\n}\n\nexport function fuzzyScore(value: string, normalizedQuery: string): number | null {\n const candidate = normalize(value);\n if (candidate === normalizedQuery) return 10_000;\n if (candidate.startsWith(normalizedQuery)) return 8_000 - candidate.length;\n\n const substringIndex = candidate.indexOf(normalizedQuery);\n if (substringIndex >= 0) return 6_000 - substringIndex * 10 - candidate.length;\n\n let queryIndex = 0;\n let firstIndex = -1;\n let lastIndex = -1;\n let gapPenalty = 0;\n for (let index = 0; index < candidate.length && queryIndex < normalizedQuery.length; index += 1) {\n if (candidate[index] !== normalizedQuery[queryIndex]) continue;\n if (firstIndex < 0) firstIndex = index;\n if (lastIndex >= 0) gapPenalty += index - lastIndex - 1;\n lastIndex = index;\n queryIndex += 1;\n }\n if (queryIndex !== normalizedQuery.length) return null;\n return 4_000 - firstIndex * 10 - gapPenalty * 20 - candidate.length;\n}\n\nfunction normalize(value: string): string {\n return value\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLocaleLowerCase();\n}\n","export const createId = () =>\n typeof crypto !== 'undefined' && 'randomUUID' in crypto\n ? crypto.randomUUID()\n : `${Date.now()}-${Math.random()}`;\n\nexport const formatValue = (value: number) => Math.round(value);\n\n/** Ultra-compact relative time for dense command-palette metadata. */\nexport const formatRelativeTime = (iso: string, now = Date.now()): string => {\n const then = Date.parse(iso);\n if (Number.isNaN(then)) {\n return '';\n }\n\n const seconds = Math.round((now - then) / 1000);\n if (seconds < 45) {\n return 'now';\n }\n if (seconds < 90) {\n return '1m';\n }\n\n const minutes = Math.round(seconds / 60);\n if (minutes < 60) {\n return `${minutes}m`;\n }\n\n const hours = Math.round(minutes / 60);\n if (hours < 24) {\n return `${hours}h`;\n }\n\n const days = Math.round(hours / 24);\n if (days < 30) {\n return `${days}d`;\n }\n\n const months = Math.round(days / 30);\n if (months < 12) {\n return `${months}mo`;\n }\n\n return `${Math.round(months / 12)}y`;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n GUIDE_HITBOX_SIZE,\n GUIDE_SNAP_DISTANCE,\n inspector_STATE_VERSION,\n inspector_STORAGE_KEY,\n} from './constants';\nimport {\n getInspectMeasurement,\n getRectFromDom,\n getTargetElement,\n getVisibleTextBlocks,\n} from './dom';\nimport { getDistanceOverlay } from './distances';\nimport { clamp, getViewportSize, rectsEqual } from './geometry';\nimport {\n DistanceOverlay,\n Guide,\n GuideOrientation,\n InspectMeasurement,\n inspectorLegacyPersistedState,\n inspectorPersistedState,\n Rect,\n TextBlockAnnotation,\n ToolMode,\n} from './types';\nimport {\n checkpointActivityAt,\n InspectorCheckpointRecord,\n InspectorCheckpointService,\n} from './checkpoints';\nimport { fuzzyCheckpoints } from './checkpoint-search';\nimport { createId, formatRelativeTime, formatValue } from './utils';\n\ntype InspectorCommandActionId = 'select' | 'type' | 'save' | 'vertical' | 'horizontal' | 'off';\n\ninterface InspectorCommandAction {\n readonly id: InspectorCommandActionId;\n readonly label: string;\n readonly ariaLabel: string;\n readonly keywords: string;\n}\n\nconst INSPECTOR_COMMAND_ACTIONS: readonly InspectorCommandAction[] = [\n { id: 'save', label: 'Save', ariaLabel: 'Save checkpoint', keywords: 'save checkpoint capture state' },\n { id: 'select', label: 'Select', ariaLabel: 'Select mode', keywords: 'select inspect pointer element' },\n { id: 'type', label: 'Type', ariaLabel: 'Toggle typography overlay', keywords: 'type typography text overlay' },\n { id: 'vertical', label: 'V', ariaLabel: 'Vertical guides', keywords: 'vertical v guide guides' },\n { id: 'horizontal', label: 'H', ariaLabel: 'Horizontal guides', keywords: 'horizontal h guide guides' },\n { id: 'off', label: 'Off', ariaLabel: 'Disable inspector', keywords: 'off disable inspector power' },\n];\n\n@Component({\n selector: 'inspector-overlay',\n standalone: true,\n imports: [],\n templateUrl: './inspector.component.html',\n styleUrl: './inspector.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class inspectorComponent implements OnDestroy {\n readonly Math = Math;\n readonly checkpointActivityAt = checkpointActivityAt;\n readonly formatValue = formatValue;\n readonly formatRelativeTime = formatRelativeTime;\n readonly guideHitboxSize = GUIDE_HITBOX_SIZE;\n readonly overlayRoot = viewChild<ElementRef<HTMLElement>>('overlayRoot');\n readonly checkpointDialog = viewChild<ElementRef<HTMLDialogElement>>('checkpointDialog');\n readonly checkpointSearch = viewChild<ElementRef<HTMLInputElement>>('checkpointSearch');\n\n @Input() highlightColor = '#4f8cff';\n @Input() guideColor = '#ff7a00';\n @Input() hoverHighlightEnabled = true;\n @Input() persistOnReload = false;\n\n readonly checkpointService = inject(InspectorCheckpointService, { optional: true });\n readonly commandBarOpen = signal(false);\n readonly checkpointQuery = signal('');\n readonly activeCommandIndex = signal(0);\n readonly editingCheckpointId = signal<string | null>(null);\n readonly deletingCheckpointId = signal<string | null>(null);\n readonly renameDraft = signal('');\n readonly checkpointToast = signal<string | null>(null);\n readonly checkpointToastIsError = signal(false);\n readonly filteredCheckpoints = computed(() =>\n fuzzyCheckpoints(\n this.checkpointService?.checkpoints() ?? [],\n this.checkpointQuery(),\n ),\n );\n readonly filteredInspectorActions = computed(() => {\n const terms = this.checkpointQuery().trim().toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n if (!terms.length) return INSPECTOR_COMMAND_ACTIONS;\n return INSPECTOR_COMMAND_ACTIONS.filter((action) => {\n const searchableText = `${action.label} ${action.ariaLabel} ${action.keywords}`.toLocaleLowerCase();\n return terms.every((term) => searchableText.includes(term));\n });\n });\n readonly commandResultCount = computed(\n () => this.filteredCheckpoints().length + this.filteredInspectorActions().length,\n );\n readonly activeCommandResultId = computed(() => {\n const checkpoint = this.filteredCheckpoints()[this.activeCommandIndex()];\n if (checkpoint) return `inspector-checkpoint-${checkpoint.id}`;\n const actionIndex = this.activeCommandIndex() - this.filteredCheckpoints().length;\n const action = this.filteredInspectorActions()[actionIndex];\n return action ? `inspector-action-${action.id}` : null;\n });\n\n readonly enabled = signal(true);\n readonly toolMode = signal<ToolMode>('none');\n readonly guideOrientation = signal<GuideOrientation>('vertical');\n readonly guides = signal<Guide[]>([]);\n readonly hoverRect = signal<Rect | null>(null);\n readonly selectedGuideId = signal<string | null>(null);\n readonly selectedMeasurement = signal<InspectMeasurement | null>(null);\n readonly showTypography = signal(false);\n readonly altPressed = signal(false);\n readonly distanceOverlay = signal<DistanceOverlay | null>(null);\n readonly textBlocks = signal<TextBlockAnnotation[]>([]);\n readonly guidePreview = signal<Guide | null>(null);\n\n readonly selectedMetaLine = computed(() => {\n const selected = this.selectedMeasurement();\n if (!selected) {\n return '';\n }\n return `${selected.label} · ${formatValue(selected.rect.width)} x ${formatValue(selected.rect.height)} · ${selected.styles.fontSize} / ${selected.styles.lineHeight} / ${selected.styles.color}`;\n });\n\n private readonly isBrowser: boolean;\n private readonly hydrated = signal(false);\n private readonly history = signal<Guide[][]>([]);\n private readonly historyIndex = signal(-1);\n private readonly handleCapturedClick = (event: MouseEvent) => {\n if (\n !event.shiftKey ||\n !this.canInspectClick(event) ||\n !this.selectElementAtPoint(event)\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n };\n private draggingGuideId: string | null = null;\n private selectedElement: HTMLElement | null = null;\n private hoverElement: HTMLElement | null = null;\n private toastTimer: ReturnType<typeof setTimeout> | null = null;\n\n readonly canUndo = computed(() => this.historyIndex() > 0);\n readonly canRedo = computed(\n () =>\n this.historyIndex() >= 0 &&\n this.historyIndex() < this.history().length - 1,\n );\n\n constructor(@Inject(PLATFORM_ID) platformId: object) {\n this.isBrowser = isPlatformBrowser(platformId);\n\n effect(() => {\n if (!this.persistOnReload || !this.isBrowser || !this.hydrated()) {\n return;\n }\n\n const payload: inspectorPersistedState = {\n version: inspector_STATE_VERSION,\n enabled: this.enabled(),\n toolMode: this.toolMode(),\n guideOrientation: this.guideOrientation(),\n guides: this.guides(),\n showTypography: this.showTypography(),\n };\n\n window.localStorage.setItem(\n inspector_STORAGE_KEY,\n JSON.stringify(payload),\n );\n });\n }\n\n ngOnInit() {\n if (!this.isBrowser) {\n this.hydrated.set(true);\n return;\n }\n\n window.addEventListener('click', this.handleCapturedClick, {\n capture: true,\n });\n\n if (!this.persistOnReload) {\n this.hydrated.set(true);\n return;\n }\n\n const stored = window.localStorage.getItem(inspector_STORAGE_KEY);\n if (!stored) {\n this.hydrated.set(true);\n return;\n }\n\n try {\n const parsed = JSON.parse(stored) as\n | inspectorPersistedState\n | inspectorLegacyPersistedState;\n if (parsed.version === inspector_STATE_VERSION || parsed.version === 1) {\n this.enabled.set(true);\n this.toolMode.set(parsed.toolMode);\n this.guideOrientation.set(parsed.guideOrientation);\n this.guides.set(parsed.guides ?? []);\n this.showTypography.set(\n parsed.version === 1 ? false : (parsed.showTypography ?? false),\n );\n this.recordHistory(parsed.guides ?? []);\n }\n } catch {\n // ignore malformed state\n }\n\n this.hydrated.set(true);\n this.refreshTypographyBlocks();\n }\n\n ngOnDestroy() {\n if (!this.isBrowser) {\n return;\n }\n\n window.removeEventListener('click', this.handleCapturedClick, {\n capture: true,\n });\n if (this.toastTimer) clearTimeout(this.toastTimer);\n }\n\n setToolMode(mode: ToolMode) {\n if (!this.enabled()) {\n this.enabled.set(true);\n }\n\n this.toolMode.set(this.toolMode() === mode ? 'none' : mode);\n this.hoverRect.set(null);\n this.guidePreview.set(null);\n this.distanceOverlay.set(null);\n this.refreshTypographyBlocks();\n }\n\n setGuideOrientation(orientation: GuideOrientation) {\n this.guideOrientation.set(orientation);\n this.guidePreview.set(null);\n }\n\n activateGuideOrientation(orientation: GuideOrientation) {\n const isActive = this.toolMode() === 'guides' && this.guideOrientation() === orientation;\n this.setGuideOrientation(orientation);\n if (isActive || this.toolMode() !== 'guides') {\n this.setToolMode('guides');\n }\n }\n\n toggleTypography() {\n this.showTypography.update((value) => !value);\n this.refreshTypographyBlocks();\n }\n\n disableInspector() {\n this.setInspectorEnabled(false);\n }\n\n async saveCheckpoint() {\n const checkpoint = await this.checkpointService?.save();\n if (checkpoint) {\n this.showCheckpointToast(`Saved “${checkpoint.name}”.`);\n } else if (this.checkpointService?.error()) {\n this.showCheckpointToast(this.checkpointService.error()!, true);\n }\n }\n\n async openCheckpointCommandBar() {\n if (!this.checkpointService || !this.isBrowser || this.commandBarOpen()) return;\n this.commandBarOpen.set(true);\n this.checkpointQuery.set('');\n this.activeCommandIndex.set(0);\n this.editingCheckpointId.set(null);\n this.deletingCheckpointId.set(null);\n this.checkpointService.clearError();\n this.checkpointDialog()?.nativeElement.showModal();\n queueMicrotask(() => this.checkpointSearch()?.nativeElement.focus());\n await this.checkpointService.load();\n this.clampActiveCommand();\n }\n\n closeCheckpointCommandBar() {\n if (this.checkpointService?.busy()) return;\n this.checkpointDialog()?.nativeElement.close();\n this.commandBarOpen.set(false);\n this.editingCheckpointId.set(null);\n this.deletingCheckpointId.set(null);\n }\n\n updateCheckpointQuery(event: Event) {\n this.checkpointQuery.set((event.target as HTMLInputElement).value);\n this.activeCommandIndex.set(0);\n this.editingCheckpointId.set(null);\n this.deletingCheckpointId.set(null);\n this.checkpointService?.clearError();\n }\n\n setActiveCheckpoint(index: number) {\n this.activeCommandIndex.set(index);\n }\n\n shouldShowCheckpointRoute(checkpoint: InspectorCheckpointRecord) {\n if (!checkpoint.route.trim()) return false;\n return this.normalizeCheckpointLabel(checkpoint.name) !== this.normalizeCheckpointLabel(checkpoint.route);\n }\n\n setActiveInspectorAction(index: number) {\n this.activeCommandIndex.set(this.filteredCheckpoints().length + index);\n }\n\n async executeInspectorAction(action: InspectorCommandAction) {\n if (this.checkpointService?.busy()) return;\n switch (action.id) {\n case 'select':\n this.setToolMode('select');\n this.closeCheckpointCommandBar();\n break;\n case 'type':\n this.toggleTypography();\n this.closeCheckpointCommandBar();\n break;\n case 'save':\n await this.saveCheckpoint();\n if (this.commandBarOpen()) {\n const index = this.filteredInspectorActions().findIndex(({ id }) => id === action.id);\n if (index >= 0) this.setActiveInspectorAction(index);\n }\n break;\n case 'vertical':\n this.activateGuideOrientation('vertical');\n this.closeCheckpointCommandBar();\n break;\n case 'horizontal':\n this.activateGuideOrientation('horizontal');\n this.closeCheckpointCommandBar();\n break;\n case 'off':\n this.closeCheckpointCommandBar();\n this.disableInspector();\n break;\n }\n }\n\n async restoreCheckpoint(checkpoint: InspectorCheckpointRecord) {\n if (!this.checkpointService || this.checkpointService.busy()) return;\n const restored = await this.checkpointService.restore(checkpoint.id);\n if (!restored) return;\n this.checkpointDialog()?.nativeElement.close();\n this.commandBarOpen.set(false);\n this.showCheckpointToast(`Restored “${checkpoint.name}”.`);\n }\n\n beginRename(checkpoint: InspectorCheckpointRecord, event?: Event) {\n event?.stopPropagation();\n if (this.checkpointService?.busy()) return;\n this.editingCheckpointId.set(checkpoint.id);\n this.deletingCheckpointId.set(null);\n this.renameDraft.set(checkpoint.name);\n queueMicrotask(() => {\n const input = this.checkpointDialog()?.nativeElement.querySelector<HTMLInputElement>(\n '.inspector-command-row__rename',\n );\n input?.focus();\n input?.select();\n });\n }\n\n updateRenameDraft(event: Event) {\n this.renameDraft.set((event.target as HTMLInputElement).value);\n this.checkpointService?.clearError();\n }\n\n async finishRename(checkpoint: InspectorCheckpointRecord) {\n if (await this.checkpointService?.rename(checkpoint.id, this.renameDraft())) {\n this.editingCheckpointId.set(null);\n this.checkpointSearch()?.nativeElement.focus();\n }\n }\n\n cancelRename() {\n this.editingCheckpointId.set(null);\n this.checkpointService?.clearError();\n this.checkpointSearch()?.nativeElement.focus();\n }\n\n beginDelete(checkpoint: InspectorCheckpointRecord, event?: Event) {\n event?.stopPropagation();\n if (this.checkpointService?.busy()) return;\n this.deletingCheckpointId.set(checkpoint.id);\n this.editingCheckpointId.set(null);\n }\n\n cancelDelete(event?: Event) {\n event?.stopPropagation();\n this.deletingCheckpointId.set(null);\n this.checkpointSearch()?.nativeElement.focus();\n }\n\n async confirmDelete(checkpoint: InspectorCheckpointRecord, event?: Event) {\n event?.stopPropagation();\n if (!await this.checkpointService?.delete(checkpoint.id)) return;\n this.deletingCheckpointId.set(null);\n this.clampActiveCommand();\n this.checkpointSearch()?.nativeElement.focus();\n }\n\n handleCheckpointDialogClick(event: MouseEvent) {\n if (\n event.target === this.checkpointDialog()?.nativeElement &&\n !this.checkpointService?.busy() &&\n !this.deletingCheckpointId()\n ) {\n this.closeCheckpointCommandBar();\n }\n }\n\n clearGuides() {\n this.guides.set([]);\n this.selectedGuideId.set(null);\n this.recordHistory([]);\n }\n\n trackGuide = (_index: number, guide: Guide) => guide.id;\n trackTextBlock = (_index: number, block: TextBlockAnnotation) => block.id;\n trackConnector = (\n _index: number,\n connector: DistanceOverlay['connectors'][number],\n ) => `${connector.x1}:${connector.y1}:${connector.x2}:${connector.y2}`;\n\n startGuideDrag(event: PointerEvent, guide: Guide) {\n event.preventDefault();\n event.stopPropagation();\n this.draggingGuideId = guide.id;\n this.selectedGuideId.set(guide.id);\n }\n\n formatEdges(edges: InspectMeasurement['padding']) {\n return `${formatValue(edges.top)} ${formatValue(edges.right)} ${formatValue(edges.bottom)} ${formatValue(edges.left)}`;\n }\n\n formatGap(selected: InspectMeasurement) {\n return `${formatValue(selected.gap.row)} / ${formatValue(selected.gap.column)}`;\n }\n\n @HostListener('window:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n const key = event.key.toLowerCase();\n\n if (\n this.checkpointService &&\n !event.repeat &&\n (event.metaKey || event.ctrlKey) &&\n event.shiftKey &&\n key === 'p'\n ) {\n event.preventDefault();\n this.commandBarOpen() ? this.closeCheckpointCommandBar() : void this.openCheckpointCommandBar();\n return;\n }\n\n if (this.commandBarOpen()) {\n this.handleCommandBarKeydown(event, key);\n return;\n }\n\n if (key === 'escape') {\n event.preventDefault();\n this.clearInspectorCanvas();\n }\n }\n\n private clearInspectorCanvas() {\n this.selectedMeasurement.set(null);\n this.selectedGuideId.set(null);\n this.hoverRect.set(null);\n this.distanceOverlay.set(null);\n this.altPressed.set(false);\n this.selectedElement = null;\n this.hoverElement = null;\n this.guidePreview.set(null);\n this.draggingGuideId = null;\n this.clearGuides();\n this.refreshTypographyBlocks();\n }\n\n private normalizeCheckpointLabel(value: string) {\n return value\n .trim()\n .toLocaleLowerCase()\n .replace(/^\\/+|\\/+$/g, '');\n }\n\n @HostListener('window:pointermove', ['$event'])\n handlePointerMove(event: PointerEvent) {\n if (!this.enabled() || !this.isBrowser) {\n return;\n }\n\n if (this.draggingGuideId) {\n this.guidePreview.set(null);\n const viewport = getViewportSize();\n this.guides.set(\n this.guides().map((guide) => {\n if (guide.id !== this.draggingGuideId) {\n return guide;\n }\n const rawPosition =\n guide.orientation === 'vertical' ? event.clientX : event.clientY;\n const max =\n guide.orientation === 'vertical' ? viewport.width : viewport.height;\n return { ...guide, position: clamp(rawPosition, 0, max) };\n }),\n );\n return;\n }\n\n if (this.toolMode() === 'guides') {\n this.hoverRect.set(null);\n this.hoverElement = null;\n this.distanceOverlay.set(null);\n\n if (\n this.overlayRoot()?.nativeElement.contains(event.target as Node) ??\n false\n ) {\n this.guidePreview.set(null);\n return;\n }\n\n this.guidePreview.set(this.getGuidePreview(event));\n return;\n }\n\n this.guidePreview.set(null);\n\n if (this.toolMode() !== 'select' || !this.hoverHighlightEnabled) {\n this.hoverRect.set(null);\n this.hoverElement = null;\n if (!this.altPressed()) {\n return;\n }\n }\n\n const target = getTargetElement(\n { x: event.clientX, y: event.clientY },\n this.overlayRoot()?.nativeElement ?? null,\n );\n if (!target) {\n this.hoverRect.set(null);\n this.hoverElement = null;\n this.distanceOverlay.set(null);\n return;\n }\n\n const rect = getRectFromDom(target);\n this.hoverElement = target;\n if (!rectsEqual(rect, this.hoverRect())) {\n this.hoverRect.set(rect);\n }\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n }\n\n @HostListener('window:pointerup')\n handlePointerUp() {\n if (!this.draggingGuideId) {\n return;\n }\n this.recordHistory(this.guides());\n this.draggingGuideId = null;\n }\n\n @HostListener('window:click', ['$event'])\n handleClick(event: MouseEvent) {\n if (!this.enabled() || !this.isBrowser) {\n return;\n }\n\n const overlay = this.overlayRoot()?.nativeElement ?? null;\n\n if (this.toolMode() === 'guides') {\n if (overlay && overlay.contains(event.target as Node)) {\n return;\n }\n const guide = this.getGuidePreview(event);\n this.addGuide({ ...guide, id: createId() });\n this.guidePreview.set(guide);\n return;\n }\n\n if (!this.canInspectClick(event)) {\n return;\n }\n\n this.selectElementAtPoint(event);\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n handleViewportChange() {\n if (this.selectedElement && document.contains(this.selectedElement)) {\n this.selectedMeasurement.set(getInspectMeasurement(this.selectedElement));\n }\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n }\n\n private canInspectClick(event: MouseEvent) {\n if (!this.enabled() || !this.isBrowser || this.toolMode() !== 'select') {\n return false;\n }\n\n const overlay = this.overlayRoot()?.nativeElement ?? null;\n return !(overlay && overlay.contains(event.target as Node));\n }\n\n private setInspectorEnabled(enabled: boolean) {\n this.enabled.set(enabled);\n if (!enabled) {\n this.toolMode.set('none');\n this.hoverRect.set(null);\n this.selectedGuideId.set(null);\n this.selectedMeasurement.set(null);\n this.distanceOverlay.set(null);\n this.textBlocks.set([]);\n this.guidePreview.set(null);\n this.altPressed.set(false);\n this.selectedElement = null;\n this.hoverElement = null;\n this.draggingGuideId = null;\n }\n this.refreshTypographyBlocks();\n }\n\n private handleCommandBarKeydown(event: KeyboardEvent, key: string) {\n const checkpoints = this.filteredCheckpoints();\n const actions = this.filteredInspectorActions();\n const activeCheckpoint = checkpoints[this.activeCommandIndex()];\n const activeActionIndex = this.activeCommandIndex() - checkpoints.length;\n const activeAction = actions[activeActionIndex];\n const target = event.target as HTMLElement | null;\n const isRenameInput = target?.classList?.contains('inspector-command-row__rename') ?? false;\n\n if (key === 'escape') {\n event.preventDefault();\n if (this.editingCheckpointId()) this.cancelRename();\n else if (this.deletingCheckpointId()) this.cancelDelete();\n else this.closeCheckpointCommandBar();\n return;\n }\n if (this.checkpointService?.busy()) return;\n const editingCheckpoint = checkpoints.find(({ id }) => id === this.editingCheckpointId());\n if (isRenameInput && key === 'enter' && editingCheckpoint) {\n event.preventDefault();\n void this.finishRename(editingCheckpoint);\n return;\n }\n if (isRenameInput) return;\n if (key === 'arrowdown') {\n event.preventDefault();\n if (activeCheckpoint) {\n const nextIndex = this.activeCommandIndex() < checkpoints.length - 1\n ? this.activeCommandIndex() + 1\n : actions.length ? checkpoints.length : this.activeCommandIndex();\n this.activeCommandIndex.set(nextIndex);\n }\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'arrowup') {\n event.preventDefault();\n if (activeAction && checkpoints.length) {\n this.activeCommandIndex.set(checkpoints.length - 1);\n } else if (activeCheckpoint) {\n this.activeCommandIndex.set(Math.max(0, this.activeCommandIndex() - 1));\n }\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'arrowright' && (activeCheckpoint || activeAction) && actions.length) {\n event.preventDefault();\n const nextActionIndex = activeAction\n ? Math.min(activeActionIndex + 1, actions.length - 1)\n : 0;\n this.activeCommandIndex.set(checkpoints.length + nextActionIndex);\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'arrowleft' && activeAction) {\n event.preventDefault();\n this.activeCommandIndex.set(checkpoints.length + Math.max(0, activeActionIndex - 1));\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'enter' && activeCheckpoint && !this.deletingCheckpointId()) {\n event.preventDefault();\n void this.restoreCheckpoint(activeCheckpoint);\n return;\n }\n if (key === 'enter' && activeAction) {\n event.preventDefault();\n void this.executeInspectorAction(activeAction);\n return;\n }\n }\n\n private clampActiveCommand() {\n this.activeCommandIndex.set(\n Math.min(this.activeCommandIndex(), Math.max(0, this.commandResultCount() - 1)),\n );\n }\n\n private scrollActiveCommandIntoView() {\n queueMicrotask(() => {\n const row = this.checkpointDialog()?.nativeElement.querySelector<HTMLElement>(\n `[data-command-index=\"${this.activeCommandIndex()}\"]`,\n );\n row?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n private showCheckpointToast(message: string, isError = false) {\n if (this.toastTimer) clearTimeout(this.toastTimer);\n this.checkpointToastIsError.set(isError);\n this.checkpointToast.set(message);\n this.toastTimer = setTimeout(() => {\n this.checkpointToast.set(null);\n this.checkpointToastIsError.set(false);\n }, 2500);\n }\n\n private selectElementAtPoint(event: MouseEvent) {\n const overlay = this.overlayRoot()?.nativeElement ?? null;\n const target = getTargetElement(\n { x: event.clientX, y: event.clientY },\n overlay,\n );\n if (!target) {\n this.selectedMeasurement.set(null);\n this.selectedElement = null;\n this.distanceOverlay.set(null);\n this.refreshTypographyBlocks();\n return false;\n }\n\n // Ctrl+click: select the minimum common parent of current selection and clicked element\n if ((event.ctrlKey || event.metaKey) && this.selectedElement) {\n const commonParent = this.findMinimumCommonParent(\n this.selectedElement,\n target,\n );\n if (\n commonParent &&\n commonParent !== document.body &&\n commonParent !== document.documentElement\n ) {\n this.selectedMeasurement.set(getInspectMeasurement(commonParent));\n this.selectedElement = commonParent;\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n return true;\n }\n }\n\n this.selectedMeasurement.set(getInspectMeasurement(target));\n this.selectedElement = target;\n this.selectedGuideId.set(\n this.findGuideAtPoint(event.clientX, event.clientY),\n );\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n return true;\n }\n\n private updateDistanceOverlay() {\n if (\n !this.altPressed() ||\n !this.selectedElement ||\n !this.hoverElement ||\n this.selectedElement === this.hoverElement ||\n this.selectedElement.contains(this.hoverElement) ||\n this.hoverElement.contains(this.selectedElement)\n ) {\n this.distanceOverlay.set(null);\n return;\n }\n\n this.distanceOverlay.set(\n getDistanceOverlay(\n getRectFromDom(this.selectedElement),\n getRectFromDom(this.hoverElement),\n ),\n );\n }\n\n private refreshTypographyBlocks() {\n if (!this.isBrowser || !this.enabled() || !this.showTypography()) {\n this.textBlocks.set([]);\n return;\n }\n\n const viewport = getViewportSize();\n this.textBlocks.set(\n getVisibleTextBlocks(this.overlayRoot()?.nativeElement ?? null)\n .filter(\n (block) =>\n block.rect.top >= 0 &&\n block.rect.top <= viewport.height &&\n block.rect.left >= 0 &&\n block.rect.left <= viewport.width,\n )\n .map((block) => ({\n ...block,\n rect: {\n ...block.rect,\n left: clamp(block.rect.left, 0, viewport.width - 12),\n top: clamp(block.rect.top, 14, viewport.height),\n },\n })),\n );\n }\n\n private addGuide(guide: Guide) {\n const nextGuides = [...this.guides(), guide];\n this.guides.set(nextGuides);\n this.selectedGuideId.set(guide.id);\n this.recordHistory(nextGuides);\n }\n\n private getGuidePreview(event: PointerEvent | MouseEvent): Guide {\n const viewport = getViewportSize();\n const orientation = this.guideOrientation();\n const rawPosition =\n orientation === 'vertical' ? event.clientX : event.clientY;\n const max = orientation === 'vertical' ? viewport.width : viewport.height;\n\n return {\n id: 'preview',\n orientation,\n position: this.snapGuide(clamp(rawPosition, 0, max)),\n };\n }\n\n private snapGuide(position: number) {\n for (const guide of this.guides()) {\n if (Math.abs(guide.position - position) <= GUIDE_SNAP_DISTANCE) {\n return guide.position;\n }\n }\n return position;\n }\n\n private findGuideAtPoint(x: number, y: number) {\n for (const guide of this.guides()) {\n if (\n guide.orientation === 'vertical' &&\n Math.abs(guide.position - x) <= GUIDE_HITBOX_SIZE\n ) {\n return guide.id;\n }\n if (\n guide.orientation === 'horizontal' &&\n Math.abs(guide.position - y) <= GUIDE_HITBOX_SIZE\n ) {\n return guide.id;\n }\n }\n return null;\n }\n\n private undo() {\n if (!this.canUndo()) {\n return;\n }\n const nextIndex = this.historyIndex() - 1;\n this.historyIndex.set(nextIndex);\n this.guides.set(this.cloneGuides(this.history()[nextIndex]));\n }\n\n private redo() {\n if (!this.canRedo()) {\n return;\n }\n const nextIndex = this.historyIndex() + 1;\n this.historyIndex.set(nextIndex);\n this.guides.set(this.cloneGuides(this.history()[nextIndex]));\n }\n\n private recordHistory(guides: Guide[]) {\n const base = this.history().slice(0, this.historyIndex() + 1);\n base.push(this.cloneGuides(guides));\n this.history.set(base);\n this.historyIndex.set(base.length - 1);\n }\n\n private cloneGuides(guides: Guide[]) {\n return guides.map((guide) => ({ ...guide }));\n }\n\n private findMinimumCommonParent(\n elementA: HTMLElement,\n elementB: HTMLElement,\n ): HTMLElement | null {\n // Build ancestor chain for element A\n const ancestorsA = new Set<Element>();\n let current: Element | null = elementA;\n while (current) {\n ancestorsA.add(current);\n current = current.parentElement;\n }\n\n // Walk up from elementB until we find a common ancestor\n current = elementB;\n while (current) {\n if (ancestorsA.has(current)) {\n return current as HTMLElement;\n }\n current = current.parentElement;\n }\n\n return null;\n }\n}\n","<div class=\"inspector-root\" #overlayRoot>\n @if (checkpointService) {\n <dialog\n #checkpointDialog\n class=\"inspector-command-dialog\"\n aria-labelledby=\"inspector-command-title\"\n (cancel)=\"$event.preventDefault(); closeCheckpointCommandBar()\"\n (click)=\"handleCheckpointDialogClick($event)\"\n >\n <section class=\"inspector-command\" (click)=\"$event.stopPropagation()\">\n <header class=\"inspector-command__search\">\n <label\n id=\"inspector-command-title\"\n class=\"inspector-visually-hidden\"\n for=\"inspector-checkpoint-search\"\n >\n inspector-ng command palette\n </label>\n <svg\n class=\"inspector-command__search-icon inspector-command__search-icon--cat\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n >\n <g class=\"inspector-command__cat-face\">\n <path\n d=\"M3.2 6.1 2.7 2.6l3 1.5A5.7 5.7 0 0 1 8 3.6c.8 0 1.6.2 2.3.5l3-1.5-.5 3.5c.5.8.7 1.7.7 2.7 0 2.8-2.4 4.5-5.5 4.5s-5.5-1.7-5.5-4.5c0-1 .2-1.9.7-2.7Z\"\n />\n <g class=\"inspector-command__cat-eyes\">\n <circle cx=\"5.7\" cy=\"8.3\" r=\".65\" />\n <circle cx=\"10.3\" cy=\"8.3\" r=\".65\" />\n </g>\n <path d=\"m6.8 10.3 1.2.7 1.2-.7M8 11v.7\" />\n </g>\n </svg>\n <input\n #checkpointSearch\n id=\"inspector-checkpoint-search\"\n type=\"search\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n placeholder=\"inspector-ng…\"\n [value]=\"checkpointQuery()\"\n [attr.aria-controls]=\"'inspector-checkpoint-results inspector-command-actions'\"\n [attr.aria-activedescendant]=\"activeCommandResultId()\"\n (input)=\"updateCheckpointQuery($event)\"\n />\n </header>\n\n @if (checkpointService.error(); as error) {\n <p\n class=\"inspector-command__message inspector-command__message--error\"\n role=\"alert\"\n >\n {{ error }}\n </p>\n }\n\n <div\n id=\"inspector-checkpoint-results\"\n class=\"inspector-command__results\"\n role=\"listbox\"\n aria-label=\"Saved checkpoints\"\n >\n @if (checkpointService.loading()) {\n <p class=\"inspector-command__message\" role=\"status\">Loading…</p>\n } @else if (\n !checkpointService.checkpoints().length && !checkpointQuery().trim()\n ) {\n <p class=\"inspector-command__message\" role=\"status\">\n No checkpoints yet\n </p>\n } @else if (\n !filteredCheckpoints().length && !filteredInspectorActions().length\n ) {\n <p class=\"inspector-command__message\" role=\"status\">No matches</p>\n } @else {\n @for (\n checkpoint of filteredCheckpoints();\n track checkpoint.id;\n let index = $index\n ) {\n <div\n class=\"inspector-command-row\"\n role=\"option\"\n [id]=\"'inspector-checkpoint-' + checkpoint.id\"\n [attr.data-command-index]=\"index\"\n [attr.aria-selected]=\"activeCommandIndex() === index\"\n [class.is-active]=\"activeCommandIndex() === index\"\n [class.is-busy]=\"\n checkpointService.busy() && activeCommandIndex() === index\n \"\n (mouseenter)=\"setActiveCheckpoint(index)\"\n (click)=\"\n deletingCheckpointId() === checkpoint.id ||\n editingCheckpointId() === checkpoint.id\n ? null\n : restoreCheckpoint(checkpoint)\n \"\n >\n @if (deletingCheckpointId() === checkpoint.id) {\n <span class=\"inspector-command-row__confirm\"\n >Delete “{{ checkpoint.name }}”?</span\n >\n <span class=\"inspector-command-row__confirm-actions\">\n <button\n type=\"button\"\n class=\"is-danger\"\n (click)=\"confirmDelete(checkpoint, $event)\"\n >\n Delete\n </button>\n <button type=\"button\" (click)=\"cancelDelete($event)\">\n Keep\n </button>\n </span>\n } @else if (editingCheckpointId() === checkpoint.id) {\n <input\n class=\"inspector-command-row__rename\"\n aria-label=\"Checkpoint name\"\n [value]=\"renameDraft()\"\n (input)=\"updateRenameDraft($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <span class=\"inspector-command-row__content\">\n <span class=\"inspector-command-row__name\">\n @if (\n checkpointService.busy() &&\n activeCommandIndex() === index\n ) {\n Restoring…\n } @else {\n {{ checkpoint.name }}\n }\n </span>\n <span class=\"inspector-command-row__meta\">\n @if (shouldShowCheckpointRoute(checkpoint)) {\n <span class=\"inspector-command-row__route\">{{\n checkpoint.route\n }}</span>\n <span\n class=\"inspector-command-row__separator\"\n aria-hidden=\"true\"\n >·</span\n >\n }\n <span class=\"inspector-command-row__activity\">\n {{ checkpoint.lastUsedAt ? \"Used\" : \"Saved\" }}\n {{\n formatRelativeTime(checkpointActivityAt(checkpoint))\n }}\n </span>\n </span>\n </span>\n <span class=\"inspector-command-row__actions\">\n <button\n type=\"button\"\n (click)=\"beginRename(checkpoint, $event)\"\n [attr.aria-label]=\"'Rename ' + checkpoint.name\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"m11.8 1.8 2.4 2.4-8.3 8.3-3.1.7.7-3.1zm-8 10.4 1.5-.3-1.2-1.2z\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n (click)=\"beginDelete(checkpoint, $event)\"\n [attr.aria-label]=\"'Delete ' + checkpoint.name\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M5.5 2h5l.5 1H14v1.25H2V3h3zm-2 3.25h9L12 14H4z\"\n />\n </svg>\n </button>\n </span>\n }\n </div>\n }\n }\n </div>\n\n @if (filteredInspectorActions().length) {\n <footer\n id=\"inspector-command-actions\"\n class=\"inspector-command__actions\"\n role=\"listbox\"\n aria-label=\"Inspector actions\"\n aria-orientation=\"horizontal\"\n >\n @for (\n action of filteredInspectorActions();\n track action.id;\n let index = $index\n ) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"inspector-command-action\"\n [id]=\"'inspector-action-' + action.id\"\n [attr.data-command-index]=\"filteredCheckpoints().length + index\"\n [attr.aria-label]=\"action.ariaLabel\"\n [attr.aria-selected]=\"\n activeCommandIndex() === filteredCheckpoints().length + index\n \"\n [attr.aria-disabled]=\"checkpointService.busy()\"\n [class.is-selected]=\"\n activeCommandIndex() === filteredCheckpoints().length + index\n \"\n [class.is-active]=\"\n (action.id === 'select' && toolMode() === 'select') ||\n (action.id === 'type' && showTypography()) ||\n (action.id === 'vertical' &&\n toolMode() === 'guides' &&\n guideOrientation() === 'vertical') ||\n (action.id === 'horizontal' &&\n toolMode() === 'guides' &&\n guideOrientation() === 'horizontal')\n \"\n [class.inspector-command-action--danger]=\"action.id === 'off'\"\n [disabled]=\"checkpointService.busy()\"\n (mouseenter)=\"setActiveInspectorAction(index)\"\n (click)=\"executeInspectorAction(action)\"\n >\n @switch (action.id) {\n @case (\"select\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M3 2l8 8-3 .7L6.7 13 6 10 3 2z\" />\n </svg>\n }\n @case (\"type\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M3 4V2h10v2h-4v10H7V4z\" />\n </svg>\n }\n @case (\"save\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M2.5 2h9.6l1.4 1.4V14h-11zm2 1.5v3h6v-3zm.5 6V12h6V9.5z\"\n />\n </svg>\n }\n @case (\"vertical\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M7.25 2h1.5v12h-1.5z\" />\n </svg>\n }\n @case (\"horizontal\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M2 7.25h12v1.5H2z\" />\n </svg>\n }\n @case (\"off\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M7.25 1.5h1.5v6h-1.5zM4.1 3.35l.96 1.15A4.25 4.25 0 1 0 10.94 4.5l.96-1.15A5.75 5.75 0 1 1 4.1 3.35z\"\n />\n </svg>\n }\n }\n <span>{{ action.label }}</span>\n </button>\n }\n </footer>\n }\n </section>\n </dialog>\n }\n\n @if (checkpointToast(); as toast) {\n <p\n class=\"inspector-checkpoint-toast\"\n [class.inspector-checkpoint-toast--error]=\"checkpointToastIsError()\"\n [attr.role]=\"checkpointToastIsError() ? 'alert' : 'status'\"\n >\n {{ toast }}\n </p>\n }\n\n @if (enabled() && toolMode() === \"select\") {\n @if (hoverRect() && hoverHighlightEnabled) {\n <div\n class=\"inspector-box inspector-box--hover\"\n [style.left.px]=\"hoverRect()!.left\"\n [style.top.px]=\"hoverRect()!.top\"\n [style.width.px]=\"hoverRect()!.width\"\n [style.height.px]=\"hoverRect()!.height\"\n [style.--inspector-accent]=\"highlightColor\"\n ></div>\n }\n\n @if (selectedMeasurement(); as selected) {\n @if (selected.gap.active && selected.parentRect) {\n <div\n class=\"inspector-box inspector-box--gap\"\n [style.left.px]=\"selected.parentRect.left\"\n [style.top.px]=\"selected.parentRect.top\"\n [style.width.px]=\"selected.parentRect.width\"\n [style.height.px]=\"selected.parentRect.height\"\n ></div>\n <div\n class=\"inspector-box-tag inspector-box-tag--gap\"\n [style.left.px]=\"selected.parentRect.left\"\n [style.top.px]=\"selected.parentRect.top - 8\"\n >\n G {{ formatGap(selected) }}\n </div>\n }\n\n <div\n class=\"inspector-box inspector-box--margin\"\n [style.left.px]=\"selected.marginRect.left\"\n [style.top.px]=\"selected.marginRect.top\"\n [style.width.px]=\"selected.marginRect.width\"\n [style.height.px]=\"selected.marginRect.height\"\n ></div>\n <div\n class=\"inspector-box-tag inspector-box-tag--margin\"\n [style.left.px]=\"selected.marginRect.left\"\n [style.top.px]=\"selected.marginRect.top - 8\"\n >\n M {{ formatEdges(selected.margin) }}\n </div>\n\n <div\n class=\"inspector-box inspector-box--selected\"\n [style.left.px]=\"selected.rect.left\"\n [style.top.px]=\"selected.rect.top\"\n [style.width.px]=\"selected.rect.width\"\n [style.height.px]=\"selected.rect.height\"\n [style.--inspector-accent]=\"highlightColor\"\n >\n <div class=\"inspector-label\">{{ selectedMetaLine() }}</div>\n </div>\n\n <div\n class=\"inspector-box inspector-box--padding\"\n [style.left.px]=\"selected.paddingRect.left\"\n [style.top.px]=\"selected.paddingRect.top\"\n [style.width.px]=\"selected.paddingRect.width\"\n [style.height.px]=\"selected.paddingRect.height\"\n ></div>\n <div\n class=\"inspector-box-tag inspector-box-tag--padding\"\n [style.left.px]=\"selected.paddingRect.left\"\n [style.top.px]=\"\n selected.paddingRect.top + selected.paddingRect.height + 8\n \"\n >\n P {{ formatEdges(selected.padding) }}\n </div>\n }\n }\n\n @if (enabled() && showTypography()) {\n @for (block of textBlocks(); track block.id) {\n <div\n class=\"inspector-text-chip\"\n [style.left.px]=\"block.rect.left\"\n [style.top.px]=\"block.rect.top - 8\"\n >\n <span\n class=\"inspector-text-chip__swatch\"\n [style.background]=\"block.styles.color\"\n ></span>\n <span>{{ block.styles.fontSize }}</span>\n <span>{{ block.styles.lineHeight }}</span>\n <span>{{ block.styles.color }}</span>\n </div>\n }\n }\n\n @if (enabled() && altPressed() && distanceOverlay(); as distance) {\n <div\n class=\"inspector-box inspector-box--distance\"\n [style.left.px]=\"distance.rectA.left\"\n [style.top.px]=\"distance.rectA.top\"\n [style.width.px]=\"distance.rectA.width\"\n [style.height.px]=\"distance.rectA.height\"\n ></div>\n <div\n class=\"inspector-box inspector-box--distance\"\n [style.left.px]=\"distance.rectB.left\"\n [style.top.px]=\"distance.rectB.top\"\n [style.width.px]=\"distance.rectB.width\"\n [style.height.px]=\"distance.rectB.height\"\n ></div>\n\n @for (\n connector of distance.connectors;\n track trackConnector($index, connector)\n ) {\n <div\n class=\"inspector-connector\"\n [class.inspector-connector--vertical]=\"connector.x1 === connector.x2\"\n [class.inspector-connector--horizontal]=\"connector.y1 === connector.y2\"\n [style.left.px]=\"Math.min(connector.x1, connector.x2)\"\n [style.top.px]=\"Math.min(connector.y1, connector.y2)\"\n [style.width.px]=\"Math.max(1, Math.abs(connector.x2 - connector.x1))\"\n [style.height.px]=\"Math.max(1, Math.abs(connector.y2 - connector.y1))\"\n ></div>\n }\n\n @if (distance.horizontal && distance.horizontal.value > 0) {\n <div\n class=\"inspector-distance-line inspector-distance-line--horizontal\"\n [style.left.px]=\"\n Math.min(distance.horizontal.x1!, distance.horizontal.x2!)\n \"\n [style.top.px]=\"distance.horizontal.y!\"\n [style.width.px]=\"\n Math.abs(distance.horizontal.x2! - distance.horizontal.x1!)\n \"\n ></div>\n <div\n class=\"inspector-distance-tag\"\n [style.left.px]=\"\n (distance.horizontal.x1! + distance.horizontal.x2!) / 2\n \"\n [style.top.px]=\"distance.horizontal.y! + 10\"\n >\n {{ formatValue(distance.horizontal.value) }}\n </div>\n }\n\n @if (distance.vertical && distance.vertical.value > 0) {\n <div\n class=\"inspector-distance-line inspector-distance-line--vertical\"\n [style.left.px]=\"distance.vertical.x!\"\n [style.top.px]=\"Math.min(distance.vertical.y1!, distance.vertical.y2!)\"\n [style.height.px]=\"\n Math.abs(distance.vertical.y2! - distance.vertical.y1!)\n \"\n ></div>\n <div\n class=\"inspector-distance-tag inspector-distance-tag--vertical\"\n [style.left.px]=\"distance.vertical.x! + 10\"\n [style.top.px]=\"(distance.vertical.y1! + distance.vertical.y2!) / 2\"\n >\n {{ formatValue(distance.vertical.value) }}\n </div>\n }\n }\n\n @if (enabled()) {\n @if (toolMode() === \"guides\") {\n @if (guidePreview(); as preview) {\n <div\n class=\"inspector-guide inspector-guide--preview\"\n [class.inspector-guide--vertical]=\"preview.orientation === 'vertical'\"\n [class.inspector-guide--horizontal]=\"\n preview.orientation === 'horizontal'\n \"\n [style.left.px]=\"\n preview.orientation === 'vertical' ? preview.position : null\n \"\n [style.top.px]=\"\n preview.orientation === 'horizontal' ? preview.position : null\n \"\n [style.--inspector-guide]=\"guideColor\"\n >\n <span class=\"inspector-guide-line\"></span>\n </div>\n }\n }\n\n @for (guide of guides(); track guide.id) {\n <button\n type=\"button\"\n class=\"inspector-guide\"\n [class.inspector-guide--vertical]=\"guide.orientation === 'vertical'\"\n [class.inspector-guide--horizontal]=\"guide.orientation === 'horizontal'\"\n [class.inspector-guide--selected]=\"selectedGuideId() === guide.id\"\n [style.left.px]=\"\n guide.orientation === 'vertical' ? guide.position : null\n \"\n [style.top.px]=\"\n guide.orientation === 'horizontal' ? guide.position : null\n \"\n [style.--inspector-guide]=\"guideColor\"\n (pointerdown)=\"startGuideDrag($event, guide)\"\n >\n <span class=\"inspector-guide-line\"></span>\n </button>\n }\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspector-ng.mjs","sources":["../../../projects/inspector-ng/src/lib/constants.ts","../../../projects/inspector-ng/src/lib/checkpoints.ts","../../../projects/inspector-ng/src/lib/geometry.ts","../../../projects/inspector-ng/src/lib/distances.ts","../../../projects/inspector-ng/src/lib/dom.ts","../../../projects/inspector-ng/src/lib/checkpoint-search.ts","../../../projects/inspector-ng/src/lib/utils.ts","../../../projects/inspector-ng/src/lib/runcat.ts","../../../projects/inspector-ng/src/lib/inspector.component.ts","../../../projects/inspector-ng/src/lib/inspector.component.html","../../../projects/inspector-ng/src/inspector-ng.ts"],"sourcesContent":["export const inspector_STORAGE_KEY = \"inspector-state\";\nexport const inspector_STATE_VERSION = 2;\nexport const GUIDE_SNAP_DISTANCE = 10;\nexport const GUIDE_HITBOX_SIZE = 14;\n","import {\n EnvironmentProviders,\n Inject,\n Injectable,\n InjectionToken,\n Optional,\n PLATFORM_ID,\n makeEnvironmentProviders,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Router } from '@angular/router';\nimport {\n Action,\n ActionReducer,\n META_REDUCERS,\n Store,\n} from '@ngrx/store';\nimport { firstValueFrom, take } from 'rxjs';\n\nexport interface InspectorCheckpointRecord {\n version: 1;\n id: string;\n name: string;\n route: string;\n createdAt: string;\n lastUsedAt?: string;\n state: unknown;\n}\n\ninterface RestoreCheckpointAction extends Action {\n type: typeof RESTORE_CHECKPOINT;\n state: unknown;\n}\n\nconst RESTORE_CHECKPOINT = '[Inspector Checkpoints] Restore';\nconst DATABASE_NAME = 'inspector-ng';\nconst DATABASE_VERSION = 1;\nconst STORE_NAME = 'checkpoints';\n\nexport const INSPECTOR_CHECKPOINT_REPOSITORY =\n new InjectionToken<InspectorCheckpointRepository>('INSPECTOR_CHECKPOINT_REPOSITORY');\n\nexport function inspectorCheckpointMetaReducer<T>(\n reducer: ActionReducer<T>,\n): ActionReducer<T> {\n return (state, action) => {\n if (action.type === RESTORE_CHECKPOINT) {\n return (action as RestoreCheckpointAction).state as T;\n }\n return reducer(state, action);\n };\n}\n\nexport abstract class InspectorCheckpointRepository {\n abstract list(): Promise<InspectorCheckpointRecord[]>;\n abstract put(checkpoint: InspectorCheckpointRecord): Promise<void>;\n abstract delete(id: string): Promise<void>;\n}\n\n@Injectable()\nexport class IndexedDbCheckpointRepository extends InspectorCheckpointRepository {\n private databasePromise: Promise<IDBDatabase> | null = null;\n\n constructor(@Inject(PLATFORM_ID) private readonly platformId: object) {\n super();\n }\n\n async list(): Promise<InspectorCheckpointRecord[]> {\n const database = await this.database();\n const values = await this.request<unknown[]>(\n database.transaction(STORE_NAME, 'readonly').objectStore(STORE_NAME).getAll(),\n );\n return values\n .filter(isCheckpointRecord)\n .sort(recentActivityFirst);\n }\n\n async put(checkpoint: InspectorCheckpointRecord): Promise<void> {\n const database = await this.database();\n await this.transactionComplete(database, 'readwrite', (store) => store.put(checkpoint));\n }\n\n async delete(id: string): Promise<void> {\n const database = await this.database();\n await this.transactionComplete(database, 'readwrite', (store) => store.delete(id));\n }\n\n private database(): Promise<IDBDatabase> {\n if (!isPlatformBrowser(this.platformId) || typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('Checkpoints are only available in a browser with IndexedDB.'));\n }\n if (this.databasePromise) return this.databasePromise;\n\n this.databasePromise = new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n request.onupgradeneeded = () => {\n const database = request.result;\n if (database.objectStoreNames.contains(STORE_NAME)) return;\n const store = database.createObjectStore(STORE_NAME, { keyPath: 'id' });\n store.createIndex('createdAt', 'createdAt');\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error('IndexedDB could not be opened.'));\n request.onblocked = () => reject(new Error('IndexedDB is blocked by another open tab.'));\n });\n return this.databasePromise;\n }\n\n private request<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error('IndexedDB request failed.'));\n });\n }\n\n private transactionComplete(\n database: IDBDatabase,\n mode: IDBTransactionMode,\n operation: (store: IDBObjectStore) => IDBRequest,\n ): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, mode);\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error ?? new Error('IndexedDB transaction failed.'));\n transaction.onabort = () => reject(transaction.error ?? new Error('IndexedDB transaction was aborted.'));\n operation(transaction.objectStore(STORE_NAME));\n });\n }\n}\n\n@Injectable()\nexport class InspectorCheckpointService {\n readonly checkpoints = signal<InspectorCheckpointRecord[]>([]);\n readonly loading = signal(false);\n readonly busy = signal(false);\n readonly error = signal<string | null>(null);\n\n constructor(\n @Inject(INSPECTOR_CHECKPOINT_REPOSITORY)\n private readonly repository: InspectorCheckpointRepository,\n @Optional() @Inject(Store) private readonly store: Store | null,\n @Optional() @Inject(Router) private readonly router: Router | null,\n @Inject(PLATFORM_ID) private readonly platformId: object,\n ) {}\n\n async load(): Promise<void> {\n this.error.set(null);\n this.loading.set(true);\n try {\n this.checkpoints.set((await this.repository.list()).sort(recentActivityFirst));\n } catch (error) {\n this.error.set(this.messageFor(error, 'Saved checkpoints could not be loaded. Try reloading the page.'));\n } finally {\n this.loading.set(false);\n }\n }\n\n async save(): Promise<InspectorCheckpointRecord | null> {\n this.error.set(null);\n if (!this.store) {\n this.error.set(this.missingStoreMessage());\n return null;\n }\n\n this.busy.set(true);\n try {\n const currentState = await firstValueFrom(this.store.pipe(take(1)));\n const state = cloneJson(currentState);\n const persisted = await this.repository.list();\n const route = this.currentRoute();\n const pathname = this.currentPathname();\n const checkpoint: InspectorCheckpointRecord = {\n version: 1,\n id: createCheckpointId(),\n name: nextAutomaticName(pathname, persisted.map(({ name }) => name)),\n route,\n createdAt: new Date().toISOString(),\n state,\n };\n await this.repository.put(checkpoint);\n this.checkpoints.set([checkpoint, ...persisted].sort(recentActivityFirst));\n return checkpoint;\n } catch (error) {\n this.error.set(this.storageMessage(error, 'The checkpoint could not be saved.'));\n return null;\n } finally {\n this.busy.set(false);\n }\n }\n\n async restore(id: string): Promise<boolean> {\n this.error.set(null);\n if (!this.store) {\n this.error.set(this.missingStoreMessage());\n return false;\n }\n this.busy.set(true);\n try {\n const checkpoints = await this.repository.list();\n const checkpoint = checkpoints.find((item) => item.id === id);\n if (!checkpoint) throw new Error('Checkpoint not found. It may have been deleted in another tab.');\n const state = cloneJson(\n checkpoint.state,\n `“${checkpoint.name}” could not be decoded. Delete it and save a new checkpoint.`,\n );\n this.store.dispatch({ type: RESTORE_CHECKPOINT, state } as RestoreCheckpointAction);\n if (\n this.router &&\n this.router.url !== checkpoint.route &&\n !await this.router.navigateByUrl(checkpoint.route)\n ) {\n throw new Error(`The state was restored, but navigation to “${checkpoint.route}” was cancelled.`);\n }\n const recentlyUsedCheckpoint = {\n ...checkpoint,\n lastUsedAt: new Date().toISOString(),\n };\n await this.repository.put(recentlyUsedCheckpoint);\n this.checkpoints.set(\n checkpoints\n .map((item) => item.id === id ? recentlyUsedCheckpoint : item)\n .sort(recentActivityFirst),\n );\n return true;\n } catch (error) {\n this.error.set(this.messageFor(error, 'The checkpoint could not be restored. Delete it and save a new one.'));\n return false;\n } finally {\n this.busy.set(false);\n }\n }\n\n async rename(id: string, name: string): Promise<boolean> {\n this.error.set(null);\n const nextName = name.trim();\n if (!nextName) {\n this.error.set('Please enter a checkpoint name.');\n return false;\n }\n\n this.busy.set(true);\n try {\n const checkpoints = await this.repository.list();\n if (checkpoints.some((item) => item.id !== id && item.name.toLocaleLowerCase() === nextName.toLocaleLowerCase())) {\n throw new Error(`A checkpoint named “${nextName}” already exists. Choose a different name.`);\n }\n const checkpoint = checkpoints.find((item) => item.id === id);\n if (!checkpoint) throw new Error('Checkpoint not found. It may have been deleted in another tab.');\n await this.repository.put({ ...checkpoint, name: nextName });\n this.checkpoints.set(\n checkpoints.map((item) => item.id === id ? { ...item, name: nextName } : item).sort(recentActivityFirst),\n );\n return true;\n } catch (error) {\n this.error.set(this.storageMessage(error, 'The checkpoint could not be renamed.'));\n return false;\n } finally {\n this.busy.set(false);\n }\n }\n\n async delete(id: string): Promise<boolean> {\n this.error.set(null);\n this.busy.set(true);\n try {\n await this.repository.delete(id);\n this.checkpoints.set(this.checkpoints().filter((item) => item.id !== id));\n return true;\n } catch (error) {\n this.error.set(this.storageMessage(error, 'The checkpoint could not be deleted.'));\n return false;\n } finally {\n this.busy.set(false);\n }\n }\n\n clearError(): void {\n this.error.set(null);\n }\n\n private currentRoute(): string {\n if (!isPlatformBrowser(this.platformId)) return '/';\n return `${this.currentPathname()}${window.location.search}${window.location.hash}`;\n }\n\n private currentPathname(): string {\n if (!isPlatformBrowser(this.platformId)) return '/';\n return window.location.pathname || '/';\n }\n\n private missingStoreMessage(): string {\n return 'The NgRx root store is unavailable. Check that provideInspectorCheckpoints() is registered after provideStore().';\n }\n\n private storageMessage(error: unknown, fallback: string): string {\n if (isQuotaError(error)) {\n return 'Browser storage is full. Delete old checkpoints, then try saving again.';\n }\n return this.messageFor(error, fallback);\n }\n\n private messageFor(error: unknown, fallback: string): string {\n return error instanceof Error && error.message ? error.message : fallback;\n }\n}\n\nexport function provideInspectorCheckpoints(): EnvironmentProviders {\n return makeEnvironmentProviders([\n IndexedDbCheckpointRepository,\n {\n provide: INSPECTOR_CHECKPOINT_REPOSITORY,\n useExisting: IndexedDbCheckpointRepository,\n },\n InspectorCheckpointService,\n {\n provide: META_REDUCERS,\n multi: true,\n useValue: inspectorCheckpointMetaReducer,\n },\n ]);\n}\n\nexport function nextAutomaticName(route: string, names: string[]): string {\n const used = new Set(names.map((name) => name.toLocaleLowerCase()));\n if (!used.has(route.toLocaleLowerCase())) return route;\n for (let suffix = 2; ; suffix += 1) {\n const candidate = `${route} ${suffix}`;\n if (!used.has(candidate.toLocaleLowerCase())) return candidate;\n }\n}\n\nfunction cloneJson(\n value: unknown,\n failureMessage = 'The NgRx root state is not JSON-serializable. Remove circular or unsupported values and try again.',\n): unknown {\n try {\n const serialized = JSON.stringify(value);\n if (serialized === undefined) throw new Error();\n return JSON.parse(serialized) as unknown;\n } catch {\n throw new Error(failureMessage);\n }\n}\n\nfunction createCheckpointId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `checkpoint-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction isQuotaError(error: unknown): boolean {\n return error instanceof DOMException && (\n error.name === 'QuotaExceededError' || error.name === 'NS_ERROR_DOM_QUOTA_REACHED'\n );\n}\n\nexport function checkpointActivityAt(checkpoint: InspectorCheckpointRecord): string {\n return checkpoint.lastUsedAt && checkpoint.lastUsedAt > checkpoint.createdAt\n ? checkpoint.lastUsedAt\n : checkpoint.createdAt;\n}\n\nexport function recentActivityFirst(\n a: InspectorCheckpointRecord,\n b: InspectorCheckpointRecord,\n): number {\n return checkpointActivityAt(b).localeCompare(checkpointActivityAt(a)) ||\n b.createdAt.localeCompare(a.createdAt) ||\n b.id.localeCompare(a.id);\n}\n\nfunction isCheckpointRecord(value: unknown): value is InspectorCheckpointRecord {\n if (!value || typeof value !== 'object') return false;\n const checkpoint = value as Partial<InspectorCheckpointRecord>;\n return checkpoint.version === 1 &&\n typeof checkpoint.id === 'string' &&\n typeof checkpoint.name === 'string' &&\n typeof checkpoint.route === 'string' &&\n typeof checkpoint.createdAt === 'string' &&\n (checkpoint.lastUsedAt === undefined || typeof checkpoint.lastUsedAt === 'string') &&\n 'state' in checkpoint;\n}\n","import { Rect } from './types';\n\nexport const clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n\nexport const getViewportSize = () => ({\n width: typeof window === 'undefined' ? 1 : window.innerWidth || 1,\n height: typeof window === 'undefined' ? 1 : window.innerHeight || 1,\n});\n\nexport const rectContainsPoint = (\n rect: Rect,\n point: { x: number; y: number },\n) =>\n point.x >= rect.left &&\n point.x <= rect.left + rect.width &&\n point.y >= rect.top &&\n point.y <= rect.top + rect.height;\n\nexport const rectsEqual = (a: Rect | null, b: Rect | null, epsilon = 0.5) => {\n if (a === b) {\n return true;\n }\n\n if (!a || !b) {\n return false;\n }\n\n return (\n Math.abs(a.left - b.left) < epsilon &&\n Math.abs(a.top - b.top) < epsilon &&\n Math.abs(a.width - b.width) < epsilon &&\n Math.abs(a.height - b.height) < epsilon\n );\n};\n","import { clamp, getViewportSize } from './geometry';\nimport { DistanceOverlay, Rect } from './types';\n\nexport const getDistanceOverlay = (rectA: Rect, rectB: Rect): DistanceOverlay => {\n const rightA = rectA.left + rectA.width;\n const bottomA = rectA.top + rectA.height;\n const rightB = rectB.left + rectB.width;\n const bottomB = rectB.top + rectB.height;\n const centerAX = rectA.left + rectA.width / 2;\n const centerAY = rectA.top + rectA.height / 2;\n\n let horizontal: DistanceOverlay['horizontal'] = null;\n let vertical: DistanceOverlay['vertical'] = null;\n const connectors: DistanceOverlay['connectors'] = [];\n\n const separatedX = rightA <= rectB.left || rightB <= rectA.left;\n const separatedY = bottomA <= rectB.top || bottomB <= rectA.top;\n\n if (separatedX) {\n const aIsLeft = rightA <= rectB.left;\n const x1 = aIsLeft ? rightA : rightB;\n const x2 = aIsLeft ? rectB.left : rectA.left;\n const y = centerAY;\n horizontal = { x1, x2, y, value: Math.abs(x2 - x1) };\n\n const edgeBX = aIsLeft ? rectB.left : rightB;\n if (y < rectB.top) {\n connectors.push({ x1: edgeBX, y1: y, x2: edgeBX, y2: rectB.top });\n } else if (y > bottomB) {\n connectors.push({ x1: edgeBX, y1: y, x2: edgeBX, y2: bottomB });\n }\n }\n\n if (separatedY) {\n const aIsTop = bottomA <= rectB.top;\n const y1 = aIsTop ? bottomA : bottomB;\n const y2 = aIsTop ? rectB.top : rectA.top;\n const x = centerAX;\n vertical = { y1, y2, x, value: Math.abs(y2 - y1) };\n\n const edgeBY = aIsTop ? rectB.top : bottomB;\n if (x < rectB.left) {\n connectors.push({ x1: x, y1: edgeBY, x2: rectB.left, y2: edgeBY });\n } else if (x > rightB) {\n connectors.push({ x1: x, y1: edgeBY, x2: rightB, y2: edgeBY });\n }\n }\n\n const viewport = getViewportSize();\n\n return {\n rectA,\n rectB,\n horizontal,\n vertical,\n connectors: connectors\n .map((segment) => ({\n x1: clamp(segment.x1, 0, viewport.width),\n y1: clamp(segment.y1, 0, viewport.height),\n x2: clamp(segment.x2, 0, viewport.width),\n y2: clamp(segment.y2, 0, viewport.height),\n }))\n .filter(\n (segment) =>\n Math.abs(segment.x1 - segment.x2) > 0.5 ||\n Math.abs(segment.y1 - segment.y2) > 0.5,\n ),\n };\n};\n","import { InspectMeasurement, Rect, TextBlockAnnotation, TextInspection } from './types';\n\nexport const getRectFromDom = (element: Element): Rect => {\n const rect = element.getBoundingClientRect();\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n};\n\nexport const getElementLabel = (element: HTMLElement) => {\n const tag = element.tagName.toLowerCase();\n const id = element.id ? `#${element.id}` : '';\n const className = element.className\n ? `.${element.className.toString().split(' ')[0]}`\n : '';\n return `${tag}${id}${className}`;\n};\n\nconst toHex = (value: number) => value.toString(16).padStart(2, '0');\n\nconst normalizeColorToHex = (color: string) => {\n const trimmed = color.trim().toLowerCase();\n if (trimmed.startsWith('#')) {\n if (trimmed.length === 4) {\n return `#${trimmed[1]}${trimmed[1]}${trimmed[2]}${trimmed[2]}${trimmed[3]}${trimmed[3]}`;\n }\n return trimmed;\n }\n\n const rgbMatch = trimmed.match(\n /^rgba?\\(\\s*([0-9.]+)\\s*,\\s*([0-9.]+)\\s*,\\s*([0-9.]+)(?:\\s*,\\s*[0-9.]+\\s*)?\\)$/,\n );\n if (!rgbMatch) {\n return color;\n }\n\n const [, r, g, b] = rgbMatch;\n return `#${toHex(Math.round(Number(r)))}${toHex(Math.round(Number(g)))}${toHex(Math.round(Number(b)))}`;\n};\n\nexport const getTextInspection = (element: HTMLElement): TextInspection => {\n const style = window.getComputedStyle(element);\n return {\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontWeight: style.fontWeight,\n lineHeight: style.lineHeight,\n letterSpacing: style.letterSpacing,\n color: normalizeColorToHex(style.color),\n textAlign: style.textAlign,\n };\n};\n\nconst parseEdge = (value: string) => Number.parseFloat(value) || 0;\n\nexport const getInspectMeasurement = (element: HTMLElement): InspectMeasurement => {\n const rect = getRectFromDom(element);\n const style = window.getComputedStyle(element);\n const parentElement = element.parentElement;\n const parentStyle = parentElement ? window.getComputedStyle(parentElement) : null;\n const padding = {\n top: parseEdge(style.paddingTop),\n right: parseEdge(style.paddingRight),\n bottom: parseEdge(style.paddingBottom),\n left: parseEdge(style.paddingLeft),\n };\n const margin = {\n top: parseEdge(style.marginTop),\n right: parseEdge(style.marginRight),\n bottom: parseEdge(style.marginBottom),\n left: parseEdge(style.marginLeft),\n };\n const rowGap = parentStyle ? parseEdge(parentStyle.rowGap) : 0;\n const columnGap = parentStyle ? parseEdge(parentStyle.columnGap) : 0;\n const parentDisplay = parentStyle?.display ?? '';\n const hasGap =\n !!parentElement &&\n (parentDisplay.includes('flex') || parentDisplay.includes('grid')) &&\n (rowGap > 0 || columnGap > 0);\n\n return {\n rect,\n paddingRect: {\n left: rect.left + padding.left,\n top: rect.top + padding.top,\n width: Math.max(0, rect.width - padding.left - padding.right),\n height: Math.max(0, rect.height - padding.top - padding.bottom),\n },\n marginRect: {\n left: rect.left - margin.left,\n top: rect.top - margin.top,\n width: rect.width + margin.left + margin.right,\n height: rect.height + margin.top + margin.bottom,\n },\n padding,\n margin,\n gap: {\n row: rowGap,\n column: columnGap,\n active: hasGap,\n },\n parentRect: hasGap && parentElement ? getRectFromDom(parentElement) : null,\n label: getElementLabel(element),\n styles: getTextInspection(element),\n };\n};\n\nconst isVisibleTextCandidate = (element: HTMLElement) => {\n const text = element.innerText?.trim() ?? '';\n if (!text) {\n return false;\n }\n\n const style = window.getComputedStyle(element);\n if (\n style.display === 'none' ||\n style.visibility === 'hidden' ||\n Number.parseFloat(style.opacity || '1') === 0\n ) {\n return false;\n }\n\n const rect = element.getBoundingClientRect();\n if (rect.width < 8 || rect.height < 8) {\n return false;\n }\n\n for (const child of Array.from(element.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if ((child.innerText?.trim() ?? '') && child.getBoundingClientRect().height > 0) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const getVisibleTextBlocks = (\n overlayElement: HTMLElement | null,\n limit = 160,\n): TextBlockAnnotation[] => {\n if (typeof document === 'undefined') {\n return [];\n }\n\n const nodes = Array.from(document.querySelectorAll('body *'));\n const blocks: TextBlockAnnotation[] = [];\n\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) {\n continue;\n }\n if (overlayElement && overlayElement.contains(node)) {\n continue;\n }\n if (!isVisibleTextCandidate(node)) {\n continue;\n }\n\n const rect = getRectFromDom(node);\n const text = (node.innerText || node.textContent || '').replace(/\\s+/g, ' ').trim();\n blocks.push({\n id: `${node.tagName.toLowerCase()}-${Math.round(rect.left)}-${Math.round(rect.top)}-${text.slice(0, 24)}`,\n rect,\n text,\n styles: getTextInspection(node),\n });\n\n if (blocks.length >= limit) {\n break;\n }\n }\n\n return blocks;\n};\n\nexport const getTargetElement = (\n point: { x: number; y: number },\n overlayElement: HTMLElement | null,\n) => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n if (overlayElement) {\n const previous = overlayElement.style.pointerEvents;\n overlayElement.style.pointerEvents = 'none';\n const elements = document.elementsFromPoint(point.x, point.y);\n overlayElement.style.pointerEvents = previous;\n\n for (const element of elements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (overlayElement.contains(element)) {\n continue;\n }\n if (element === document.body || element === document.documentElement) {\n continue;\n }\n const rect = element.getBoundingClientRect();\n if (rect.width <= 2 || rect.height <= 2) {\n continue;\n }\n return element;\n }\n\n return null;\n }\n\n return document.elementFromPoint(point.x, point.y) as HTMLElement | null;\n};\n","import {\n InspectorCheckpointRecord,\n recentActivityFirst,\n} from './checkpoints';\n\ninterface RankedCheckpoint {\n checkpoint: InspectorCheckpointRecord;\n score: number;\n}\n\nexport function fuzzyCheckpoints(\n checkpoints: InspectorCheckpointRecord[],\n query: string,\n): InspectorCheckpointRecord[] {\n const normalizedQuery = normalize(query.trim());\n if (!normalizedQuery) return [...checkpoints].sort(recentActivityFirst);\n\n return checkpoints\n .map((checkpoint): RankedCheckpoint | null => {\n const score = fuzzyScore(checkpoint.name, normalizedQuery);\n return score === null ? null : { checkpoint, score };\n })\n .filter((item): item is RankedCheckpoint => item !== null)\n .sort((a, b) => b.score - a.score || recentActivityFirst(a.checkpoint, b.checkpoint))\n .map(({ checkpoint }) => checkpoint);\n}\n\nexport function fuzzyScore(value: string, normalizedQuery: string): number | null {\n const candidate = normalize(value);\n if (candidate === normalizedQuery) return 10_000;\n if (candidate.startsWith(normalizedQuery)) return 8_000 - candidate.length;\n\n const substringIndex = candidate.indexOf(normalizedQuery);\n if (substringIndex >= 0) return 6_000 - substringIndex * 10 - candidate.length;\n\n let queryIndex = 0;\n let firstIndex = -1;\n let lastIndex = -1;\n let gapPenalty = 0;\n for (let index = 0; index < candidate.length && queryIndex < normalizedQuery.length; index += 1) {\n if (candidate[index] !== normalizedQuery[queryIndex]) continue;\n if (firstIndex < 0) firstIndex = index;\n if (lastIndex >= 0) gapPenalty += index - lastIndex - 1;\n lastIndex = index;\n queryIndex += 1;\n }\n if (queryIndex !== normalizedQuery.length) return null;\n return 4_000 - firstIndex * 10 - gapPenalty * 20 - candidate.length;\n}\n\nfunction normalize(value: string): string {\n return value\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLocaleLowerCase();\n}\n","export const createId = () =>\n typeof crypto !== 'undefined' && 'randomUUID' in crypto\n ? crypto.randomUUID()\n : `${Date.now()}-${Math.random()}`;\n\nexport const formatValue = (value: number) => Math.round(value);\n\n/** Ultra-compact relative time for dense command-palette metadata. */\nexport const formatRelativeTime = (iso: string, now = Date.now()): string => {\n const then = Date.parse(iso);\n if (Number.isNaN(then)) {\n return '';\n }\n\n const seconds = Math.round((now - then) / 1000);\n if (seconds < 45) {\n return 'now';\n }\n if (seconds < 90) {\n return '1m';\n }\n\n const minutes = Math.round(seconds / 60);\n if (minutes < 60) {\n return `${minutes}m`;\n }\n\n const hours = Math.round(minutes / 60);\n if (hours < 24) {\n return `${hours}h`;\n }\n\n const days = Math.round(hours / 24);\n if (days < 30) {\n return `${days}d`;\n }\n\n const months = Math.round(days / 30);\n if (months < 12) {\n return `${months}mo`;\n }\n\n return `${Math.round(months / 12)}y`;\n};\n","/**\n * RunCat frames from Jas0nG/RunCat_for_Linux, licensed under Apache-2.0.\n * The original ICO frames were converted into a WebP sprite sheet.\n * See the packaged THIRD_PARTY_NOTICES.md for attribution.\n */\nexport const RUNCAT_SPRITE_SRC = 'data:image/webp;base64,UklGRhoEAABXRUJQVlA4TA4EAAAvn8AHEAUcSZLDNvP/T3cA4ADJduQkggKy/YvjiK9uK/WGMPWQyvld3Xvu7rrGEdaou67W3d1dV4cQQl1Xpu6pexvCSlgZ3glI//ZNYyW7wPl3yfF98symzxgCPrOcU2DQnyUNxsnyyLLPuCjBBrA88OlHtFYhJjli1sYyFQCvv79MS70+YpCLvlcGRfwfMUjAGqgCeBmLXtLkuOqibRI0v+B0W4kxFgjZtrHJK/cEAWVivokbViQ5tr2zj88GAJD4CX5AQfLMIhF2pZSkYc+WpvmI3zIJEHbEiM3KJVEQZl0wTFD/nZ4CDphlkaAjzzRXBhjhY3Dx8DzTQRYAJodHjolBSsnn0nzNLYJhiHmAVwYkUb4X4+3Fl3AMwoASdU8pJVtg3IgHHiRT5OhwwfCjRB8urltmFMBv3DN7AOiXYJgVrAdc0phKnGCxcfYsTXXiA+R5AcBFHh18C0BR4mWJ8/8o8cMIWfZI1Hgj1XXJNtgm4JV+E83FMNkAFPEYZAsE4BEbLj/wrwMuOmaVUwAg6AkAc3Ya+tgUW+xRwLRHlm9Nwy3b+6OULMBcCcNVG5ITMx9idc+AlJIfYYMcgGmG+idvWiaEsV1JkeuWiBkxfG+EZGdwydIwpaSTGDl4zrKIO13adrF1ZMa3AXjU9yUANpMNm5KfXTWHI2lskC24dcqHQjIS78CHfLhXYZG6KaUkFWBZIdXP+umnF7fLV7akuQ7GsfBQgHPka5w9AgB/JmETjPC9fwF4IAyA1yz2CIBHgg4s6id1DWMCTKkyLtzkTFt1ddEy7XX36AqKvDnxszAeCng7jbV1e7DlMwe6iLEteVMeAJYR3k5J+AbgSikJCAsAsM+7KXFemJJuOWRg7BnfAvj6JBVPVfGJG0nAUx+mlLTl4kirDTO2mzZxp5SSI4CAWbqnlBKnqpnkG32UYajGKVM0Tz5nLqYdjMDZK0VesVWxhTYAZEx0f2JMGmvp8sQsRjqK0jgdmTs5pvED0OtCT2HsLZMo2YecaWsAyyNd0tEquGiGRGFAjWQRSQSDg6G57nYslojRZyJiccQuVQPL/KxLuuQeCKSn9mxMSUkUG46kObcawCovAFX+TnNN01mUASkZATjBlYZ+dw+wL81tAkxLicOPZinwaCMrXXtzIO8NCx4oA3ybkgTAoAsJUMDNLQzXdUofBRxIc41lKYNRM20B76etpkILBM240ZpX6GDNG5PAEuEMPFM3SXXd3+lSfY6UHIInotJPdxk8u2QSoMo9wJmblDQXA3giRhkseqMhYECywzn102OXoXv68fZAn0NyGap04tQzvTTDOp2SI+B/k/wOaJ1+dQ6D0plDCHLSe70Axpsk0VU9f7e5XoJeaPou+dUiLR/9ywY=';\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n GUIDE_HITBOX_SIZE,\n GUIDE_SNAP_DISTANCE,\n inspector_STATE_VERSION,\n inspector_STORAGE_KEY,\n} from './constants';\nimport {\n getInspectMeasurement,\n getRectFromDom,\n getTargetElement,\n getVisibleTextBlocks,\n} from './dom';\nimport { getDistanceOverlay } from './distances';\nimport { clamp, getViewportSize, rectsEqual } from './geometry';\nimport {\n DistanceOverlay,\n Guide,\n GuideOrientation,\n InspectMeasurement,\n inspectorLegacyPersistedState,\n inspectorPersistedState,\n Rect,\n TextBlockAnnotation,\n ToolMode,\n} from './types';\nimport {\n checkpointActivityAt,\n InspectorCheckpointRecord,\n InspectorCheckpointService,\n} from './checkpoints';\nimport { fuzzyCheckpoints } from './checkpoint-search';\nimport { createId, formatRelativeTime, formatValue } from './utils';\nimport { RUNCAT_SPRITE_SRC } from './runcat';\n\ntype InspectorCommandActionId = 'select' | 'type' | 'save' | 'vertical' | 'horizontal' | 'off';\n\ninterface InspectorCommandAction {\n readonly id: InspectorCommandActionId;\n readonly label: string;\n readonly ariaLabel: string;\n readonly keywords: string;\n}\n\nconst INSPECTOR_COMMAND_ACTIONS: readonly InspectorCommandAction[] = [\n { id: 'save', label: 'Save', ariaLabel: 'Save checkpoint', keywords: 'save checkpoint capture state' },\n { id: 'select', label: 'Select', ariaLabel: 'Select mode', keywords: 'select inspect pointer element' },\n { id: 'type', label: 'Type', ariaLabel: 'Toggle typography overlay', keywords: 'type typography text overlay' },\n { id: 'vertical', label: 'V', ariaLabel: 'Vertical guides', keywords: 'vertical v guide guides' },\n { id: 'horizontal', label: 'H', ariaLabel: 'Horizontal guides', keywords: 'horizontal h guide guides' },\n { id: 'off', label: 'Off', ariaLabel: 'Disable inspector', keywords: 'off disable inspector power' },\n];\n\n@Component({\n selector: 'inspector-overlay',\n standalone: true,\n imports: [],\n templateUrl: './inspector.component.html',\n styleUrl: './inspector.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class inspectorComponent implements OnDestroy {\n readonly Math = Math;\n readonly runcatSpriteSrc = RUNCAT_SPRITE_SRC;\n readonly checkpointActivityAt = checkpointActivityAt;\n readonly formatValue = formatValue;\n readonly formatRelativeTime = formatRelativeTime;\n readonly guideHitboxSize = GUIDE_HITBOX_SIZE;\n readonly overlayRoot = viewChild<ElementRef<HTMLElement>>('overlayRoot');\n readonly checkpointDialog = viewChild<ElementRef<HTMLDialogElement>>('checkpointDialog');\n readonly checkpointSearch = viewChild<ElementRef<HTMLInputElement>>('checkpointSearch');\n\n @Input() highlightColor = '#4f8cff';\n @Input() guideColor = '#ff7a00';\n @Input() hoverHighlightEnabled = true;\n @Input() persistOnReload = false;\n\n readonly checkpointService = inject(InspectorCheckpointService, { optional: true });\n readonly commandBarOpen = signal(false);\n readonly checkpointQuery = signal('');\n readonly activeCommandIndex = signal(0);\n readonly editingCheckpointId = signal<string | null>(null);\n readonly deletingCheckpointId = signal<string | null>(null);\n readonly renameDraft = signal('');\n readonly checkpointToast = signal<string | null>(null);\n readonly checkpointToastIsError = signal(false);\n readonly filteredCheckpoints = computed(() =>\n fuzzyCheckpoints(\n this.checkpointService?.checkpoints() ?? [],\n this.checkpointQuery(),\n ),\n );\n readonly filteredInspectorActions = computed(() => {\n const terms = this.checkpointQuery().trim().toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n if (!terms.length) return INSPECTOR_COMMAND_ACTIONS;\n return INSPECTOR_COMMAND_ACTIONS.filter((action) => {\n const searchableText = `${action.label} ${action.ariaLabel} ${action.keywords}`.toLocaleLowerCase();\n return terms.every((term) => searchableText.includes(term));\n });\n });\n readonly commandResultCount = computed(\n () => this.filteredCheckpoints().length + this.filteredInspectorActions().length,\n );\n readonly activeCommandResultId = computed(() => {\n const checkpoint = this.filteredCheckpoints()[this.activeCommandIndex()];\n if (checkpoint) return `inspector-checkpoint-${checkpoint.id}`;\n const actionIndex = this.activeCommandIndex() - this.filteredCheckpoints().length;\n const action = this.filteredInspectorActions()[actionIndex];\n return action ? `inspector-action-${action.id}` : null;\n });\n\n readonly enabled = signal(true);\n readonly toolMode = signal<ToolMode>('none');\n readonly guideOrientation = signal<GuideOrientation>('vertical');\n readonly guides = signal<Guide[]>([]);\n readonly hoverRect = signal<Rect | null>(null);\n readonly selectedGuideId = signal<string | null>(null);\n readonly selectedMeasurement = signal<InspectMeasurement | null>(null);\n readonly showTypography = signal(false);\n readonly altPressed = signal(false);\n readonly distanceOverlay = signal<DistanceOverlay | null>(null);\n readonly textBlocks = signal<TextBlockAnnotation[]>([]);\n readonly guidePreview = signal<Guide | null>(null);\n\n readonly selectedMetaLine = computed(() => {\n const selected = this.selectedMeasurement();\n if (!selected) {\n return '';\n }\n return `${selected.label} · ${formatValue(selected.rect.width)} x ${formatValue(selected.rect.height)} · ${selected.styles.fontSize} / ${selected.styles.lineHeight} / ${selected.styles.color}`;\n });\n\n private readonly isBrowser: boolean;\n private readonly hydrated = signal(false);\n private readonly history = signal<Guide[][]>([]);\n private readonly historyIndex = signal(-1);\n private readonly handleCapturedClick = (event: MouseEvent) => {\n if (\n !event.shiftKey ||\n !this.canInspectClick(event) ||\n !this.selectElementAtPoint(event)\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n };\n private draggingGuideId: string | null = null;\n private selectedElement: HTMLElement | null = null;\n private hoverElement: HTMLElement | null = null;\n private toastTimer: ReturnType<typeof setTimeout> | null = null;\n\n readonly canUndo = computed(() => this.historyIndex() > 0);\n readonly canRedo = computed(\n () =>\n this.historyIndex() >= 0 &&\n this.historyIndex() < this.history().length - 1,\n );\n\n constructor(@Inject(PLATFORM_ID) platformId: object) {\n this.isBrowser = isPlatformBrowser(platformId);\n\n effect(() => {\n if (!this.persistOnReload || !this.isBrowser || !this.hydrated()) {\n return;\n }\n\n const payload: inspectorPersistedState = {\n version: inspector_STATE_VERSION,\n enabled: this.enabled(),\n toolMode: this.toolMode(),\n guideOrientation: this.guideOrientation(),\n guides: this.guides(),\n showTypography: this.showTypography(),\n };\n\n window.localStorage.setItem(\n inspector_STORAGE_KEY,\n JSON.stringify(payload),\n );\n });\n }\n\n ngOnInit() {\n if (!this.isBrowser) {\n this.hydrated.set(true);\n return;\n }\n\n window.addEventListener('click', this.handleCapturedClick, {\n capture: true,\n });\n\n if (!this.persistOnReload) {\n this.hydrated.set(true);\n return;\n }\n\n const stored = window.localStorage.getItem(inspector_STORAGE_KEY);\n if (!stored) {\n this.hydrated.set(true);\n return;\n }\n\n try {\n const parsed = JSON.parse(stored) as\n | inspectorPersistedState\n | inspectorLegacyPersistedState;\n if (parsed.version === inspector_STATE_VERSION || parsed.version === 1) {\n this.enabled.set(true);\n this.toolMode.set(parsed.toolMode);\n this.guideOrientation.set(parsed.guideOrientation);\n this.guides.set(parsed.guides ?? []);\n this.showTypography.set(\n parsed.version === 1 ? false : (parsed.showTypography ?? false),\n );\n this.recordHistory(parsed.guides ?? []);\n }\n } catch {\n // ignore malformed state\n }\n\n this.hydrated.set(true);\n this.refreshTypographyBlocks();\n }\n\n ngOnDestroy() {\n if (!this.isBrowser) {\n return;\n }\n\n window.removeEventListener('click', this.handleCapturedClick, {\n capture: true,\n });\n if (this.toastTimer) clearTimeout(this.toastTimer);\n }\n\n setToolMode(mode: ToolMode) {\n if (!this.enabled()) {\n this.enabled.set(true);\n }\n\n this.toolMode.set(this.toolMode() === mode ? 'none' : mode);\n this.hoverRect.set(null);\n this.guidePreview.set(null);\n this.distanceOverlay.set(null);\n this.refreshTypographyBlocks();\n }\n\n setGuideOrientation(orientation: GuideOrientation) {\n this.guideOrientation.set(orientation);\n this.guidePreview.set(null);\n }\n\n activateGuideOrientation(orientation: GuideOrientation) {\n const isActive = this.toolMode() === 'guides' && this.guideOrientation() === orientation;\n this.setGuideOrientation(orientation);\n if (isActive || this.toolMode() !== 'guides') {\n this.setToolMode('guides');\n }\n }\n\n toggleTypography() {\n this.showTypography.update((value) => !value);\n this.refreshTypographyBlocks();\n }\n\n disableInspector() {\n this.setInspectorEnabled(false);\n }\n\n async saveCheckpoint() {\n const checkpoint = await this.checkpointService?.save();\n if (checkpoint) {\n this.showCheckpointToast(`Saved “${checkpoint.name}”.`);\n } else if (this.checkpointService?.error()) {\n this.showCheckpointToast(this.checkpointService.error()!, true);\n }\n }\n\n async openCheckpointCommandBar() {\n if (!this.checkpointService || !this.isBrowser || this.commandBarOpen()) return;\n this.commandBarOpen.set(true);\n this.checkpointQuery.set('');\n this.activeCommandIndex.set(0);\n this.editingCheckpointId.set(null);\n this.deletingCheckpointId.set(null);\n this.checkpointService.clearError();\n this.checkpointDialog()?.nativeElement.showModal();\n queueMicrotask(() => this.checkpointSearch()?.nativeElement.focus());\n await this.checkpointService.load();\n this.clampActiveCommand();\n }\n\n closeCheckpointCommandBar() {\n if (this.checkpointService?.busy()) return;\n this.checkpointDialog()?.nativeElement.close();\n this.commandBarOpen.set(false);\n this.editingCheckpointId.set(null);\n this.deletingCheckpointId.set(null);\n }\n\n updateCheckpointQuery(event: Event) {\n this.checkpointQuery.set((event.target as HTMLInputElement).value);\n this.activeCommandIndex.set(0);\n this.editingCheckpointId.set(null);\n this.deletingCheckpointId.set(null);\n this.checkpointService?.clearError();\n }\n\n setActiveCheckpoint(index: number) {\n this.activeCommandIndex.set(index);\n }\n\n shouldShowCheckpointRoute(checkpoint: InspectorCheckpointRecord) {\n if (!checkpoint.route.trim()) return false;\n return this.normalizeCheckpointLabel(checkpoint.name) !== this.normalizeCheckpointLabel(checkpoint.route);\n }\n\n setActiveInspectorAction(index: number) {\n this.activeCommandIndex.set(this.filteredCheckpoints().length + index);\n }\n\n async executeInspectorAction(action: InspectorCommandAction) {\n if (this.checkpointService?.busy()) return;\n switch (action.id) {\n case 'select':\n this.setToolMode('select');\n this.closeCheckpointCommandBar();\n break;\n case 'type':\n this.toggleTypography();\n this.closeCheckpointCommandBar();\n break;\n case 'save':\n await this.saveCheckpoint();\n if (this.commandBarOpen()) {\n const index = this.filteredInspectorActions().findIndex(({ id }) => id === action.id);\n if (index >= 0) this.setActiveInspectorAction(index);\n }\n break;\n case 'vertical':\n this.activateGuideOrientation('vertical');\n this.closeCheckpointCommandBar();\n break;\n case 'horizontal':\n this.activateGuideOrientation('horizontal');\n this.closeCheckpointCommandBar();\n break;\n case 'off':\n this.closeCheckpointCommandBar();\n this.disableInspector();\n break;\n }\n }\n\n async restoreCheckpoint(checkpoint: InspectorCheckpointRecord) {\n if (!this.checkpointService || this.checkpointService.busy()) return;\n const restored = await this.checkpointService.restore(checkpoint.id);\n if (!restored) return;\n this.checkpointDialog()?.nativeElement.close();\n this.commandBarOpen.set(false);\n this.showCheckpointToast(`Restored “${checkpoint.name}”.`);\n }\n\n beginRename(checkpoint: InspectorCheckpointRecord, event?: Event) {\n event?.stopPropagation();\n if (this.checkpointService?.busy()) return;\n this.editingCheckpointId.set(checkpoint.id);\n this.deletingCheckpointId.set(null);\n this.renameDraft.set(checkpoint.name);\n queueMicrotask(() => {\n const input = this.checkpointDialog()?.nativeElement.querySelector<HTMLInputElement>(\n '.inspector-command-row__rename',\n );\n input?.focus();\n input?.select();\n });\n }\n\n updateRenameDraft(event: Event) {\n this.renameDraft.set((event.target as HTMLInputElement).value);\n this.checkpointService?.clearError();\n }\n\n async finishRename(checkpoint: InspectorCheckpointRecord) {\n if (await this.checkpointService?.rename(checkpoint.id, this.renameDraft())) {\n this.editingCheckpointId.set(null);\n this.checkpointSearch()?.nativeElement.focus();\n }\n }\n\n cancelRename() {\n this.editingCheckpointId.set(null);\n this.checkpointService?.clearError();\n this.checkpointSearch()?.nativeElement.focus();\n }\n\n beginDelete(checkpoint: InspectorCheckpointRecord, event?: Event) {\n event?.stopPropagation();\n if (this.checkpointService?.busy()) return;\n this.deletingCheckpointId.set(checkpoint.id);\n this.editingCheckpointId.set(null);\n }\n\n cancelDelete(event?: Event) {\n event?.stopPropagation();\n this.deletingCheckpointId.set(null);\n this.checkpointSearch()?.nativeElement.focus();\n }\n\n async confirmDelete(checkpoint: InspectorCheckpointRecord, event?: Event) {\n event?.stopPropagation();\n if (!await this.checkpointService?.delete(checkpoint.id)) return;\n this.deletingCheckpointId.set(null);\n this.clampActiveCommand();\n this.checkpointSearch()?.nativeElement.focus();\n }\n\n handleCheckpointDialogClick(event: MouseEvent) {\n if (\n event.target === this.checkpointDialog()?.nativeElement &&\n !this.checkpointService?.busy() &&\n !this.deletingCheckpointId()\n ) {\n this.closeCheckpointCommandBar();\n }\n }\n\n clearGuides() {\n this.guides.set([]);\n this.selectedGuideId.set(null);\n this.recordHistory([]);\n }\n\n trackGuide = (_index: number, guide: Guide) => guide.id;\n trackTextBlock = (_index: number, block: TextBlockAnnotation) => block.id;\n trackConnector = (\n _index: number,\n connector: DistanceOverlay['connectors'][number],\n ) => `${connector.x1}:${connector.y1}:${connector.x2}:${connector.y2}`;\n\n startGuideDrag(event: PointerEvent, guide: Guide) {\n event.preventDefault();\n event.stopPropagation();\n this.draggingGuideId = guide.id;\n this.selectedGuideId.set(guide.id);\n }\n\n formatEdges(edges: InspectMeasurement['padding']) {\n return `${formatValue(edges.top)} ${formatValue(edges.right)} ${formatValue(edges.bottom)} ${formatValue(edges.left)}`;\n }\n\n formatGap(selected: InspectMeasurement) {\n return `${formatValue(selected.gap.row)} / ${formatValue(selected.gap.column)}`;\n }\n\n @HostListener('window:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n const key = event.key.toLowerCase();\n\n if (\n this.checkpointService &&\n !event.repeat &&\n (event.metaKey || event.ctrlKey) &&\n event.shiftKey &&\n key === 'p'\n ) {\n event.preventDefault();\n this.commandBarOpen() ? this.closeCheckpointCommandBar() : void this.openCheckpointCommandBar();\n return;\n }\n\n if (this.commandBarOpen()) {\n this.handleCommandBarKeydown(event, key);\n return;\n }\n\n if (key === 'escape') {\n event.preventDefault();\n this.clearInspectorCanvas();\n }\n }\n\n private clearInspectorCanvas() {\n this.selectedMeasurement.set(null);\n this.selectedGuideId.set(null);\n this.hoverRect.set(null);\n this.distanceOverlay.set(null);\n this.altPressed.set(false);\n this.selectedElement = null;\n this.hoverElement = null;\n this.guidePreview.set(null);\n this.draggingGuideId = null;\n this.clearGuides();\n this.refreshTypographyBlocks();\n }\n\n private normalizeCheckpointLabel(value: string) {\n return value\n .trim()\n .toLocaleLowerCase()\n .replace(/^\\/+|\\/+$/g, '');\n }\n\n @HostListener('window:pointermove', ['$event'])\n handlePointerMove(event: PointerEvent) {\n if (!this.enabled() || !this.isBrowser) {\n return;\n }\n\n if (this.draggingGuideId) {\n this.guidePreview.set(null);\n const viewport = getViewportSize();\n this.guides.set(\n this.guides().map((guide) => {\n if (guide.id !== this.draggingGuideId) {\n return guide;\n }\n const rawPosition =\n guide.orientation === 'vertical' ? event.clientX : event.clientY;\n const max =\n guide.orientation === 'vertical' ? viewport.width : viewport.height;\n return { ...guide, position: clamp(rawPosition, 0, max) };\n }),\n );\n return;\n }\n\n if (this.toolMode() === 'guides') {\n this.hoverRect.set(null);\n this.hoverElement = null;\n this.distanceOverlay.set(null);\n\n if (\n this.overlayRoot()?.nativeElement.contains(event.target as Node) ??\n false\n ) {\n this.guidePreview.set(null);\n return;\n }\n\n this.guidePreview.set(this.getGuidePreview(event));\n return;\n }\n\n this.guidePreview.set(null);\n\n if (this.toolMode() !== 'select' || !this.hoverHighlightEnabled) {\n this.hoverRect.set(null);\n this.hoverElement = null;\n if (!this.altPressed()) {\n return;\n }\n }\n\n const target = getTargetElement(\n { x: event.clientX, y: event.clientY },\n this.overlayRoot()?.nativeElement ?? null,\n );\n if (!target) {\n this.hoverRect.set(null);\n this.hoverElement = null;\n this.distanceOverlay.set(null);\n return;\n }\n\n const rect = getRectFromDom(target);\n this.hoverElement = target;\n if (!rectsEqual(rect, this.hoverRect())) {\n this.hoverRect.set(rect);\n }\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n }\n\n @HostListener('window:pointerup')\n handlePointerUp() {\n if (!this.draggingGuideId) {\n return;\n }\n this.recordHistory(this.guides());\n this.draggingGuideId = null;\n }\n\n @HostListener('window:click', ['$event'])\n handleClick(event: MouseEvent) {\n if (!this.enabled() || !this.isBrowser) {\n return;\n }\n\n const overlay = this.overlayRoot()?.nativeElement ?? null;\n\n if (this.toolMode() === 'guides') {\n if (overlay && overlay.contains(event.target as Node)) {\n return;\n }\n const guide = this.getGuidePreview(event);\n this.addGuide({ ...guide, id: createId() });\n this.guidePreview.set(guide);\n return;\n }\n\n if (!this.canInspectClick(event)) {\n return;\n }\n\n this.selectElementAtPoint(event);\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n handleViewportChange() {\n if (this.selectedElement && document.contains(this.selectedElement)) {\n this.selectedMeasurement.set(getInspectMeasurement(this.selectedElement));\n }\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n }\n\n private canInspectClick(event: MouseEvent) {\n if (!this.enabled() || !this.isBrowser || this.toolMode() !== 'select') {\n return false;\n }\n\n const overlay = this.overlayRoot()?.nativeElement ?? null;\n return !(overlay && overlay.contains(event.target as Node));\n }\n\n private setInspectorEnabled(enabled: boolean) {\n this.enabled.set(enabled);\n if (!enabled) {\n this.toolMode.set('none');\n this.hoverRect.set(null);\n this.selectedGuideId.set(null);\n this.selectedMeasurement.set(null);\n this.distanceOverlay.set(null);\n this.textBlocks.set([]);\n this.guidePreview.set(null);\n this.altPressed.set(false);\n this.selectedElement = null;\n this.hoverElement = null;\n this.draggingGuideId = null;\n }\n this.refreshTypographyBlocks();\n }\n\n private handleCommandBarKeydown(event: KeyboardEvent, key: string) {\n const checkpoints = this.filteredCheckpoints();\n const actions = this.filteredInspectorActions();\n const activeCheckpoint = checkpoints[this.activeCommandIndex()];\n const activeActionIndex = this.activeCommandIndex() - checkpoints.length;\n const activeAction = actions[activeActionIndex];\n const target = event.target as HTMLElement | null;\n const isRenameInput = target?.classList?.contains('inspector-command-row__rename') ?? false;\n\n if (key === 'escape') {\n event.preventDefault();\n if (this.editingCheckpointId()) this.cancelRename();\n else if (this.deletingCheckpointId()) this.cancelDelete();\n else this.closeCheckpointCommandBar();\n return;\n }\n if (this.checkpointService?.busy()) return;\n const editingCheckpoint = checkpoints.find(({ id }) => id === this.editingCheckpointId());\n if (isRenameInput && key === 'enter' && editingCheckpoint) {\n event.preventDefault();\n void this.finishRename(editingCheckpoint);\n return;\n }\n if (isRenameInput) return;\n if (key === 'arrowdown') {\n event.preventDefault();\n if (activeCheckpoint) {\n const nextIndex = this.activeCommandIndex() < checkpoints.length - 1\n ? this.activeCommandIndex() + 1\n : actions.length ? checkpoints.length : this.activeCommandIndex();\n this.activeCommandIndex.set(nextIndex);\n }\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'arrowup') {\n event.preventDefault();\n if (activeAction && checkpoints.length) {\n this.activeCommandIndex.set(checkpoints.length - 1);\n } else if (activeCheckpoint) {\n this.activeCommandIndex.set(Math.max(0, this.activeCommandIndex() - 1));\n }\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'arrowright' && (activeCheckpoint || activeAction) && actions.length) {\n event.preventDefault();\n const nextActionIndex = activeAction\n ? Math.min(activeActionIndex + 1, actions.length - 1)\n : 0;\n this.activeCommandIndex.set(checkpoints.length + nextActionIndex);\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'arrowleft' && activeAction) {\n event.preventDefault();\n this.activeCommandIndex.set(checkpoints.length + Math.max(0, activeActionIndex - 1));\n this.scrollActiveCommandIntoView();\n return;\n }\n if (key === 'enter' && activeCheckpoint && !this.deletingCheckpointId()) {\n event.preventDefault();\n void this.restoreCheckpoint(activeCheckpoint);\n return;\n }\n if (key === 'enter' && activeAction) {\n event.preventDefault();\n void this.executeInspectorAction(activeAction);\n return;\n }\n }\n\n private clampActiveCommand() {\n this.activeCommandIndex.set(\n Math.min(this.activeCommandIndex(), Math.max(0, this.commandResultCount() - 1)),\n );\n }\n\n private scrollActiveCommandIntoView() {\n queueMicrotask(() => {\n const row = this.checkpointDialog()?.nativeElement.querySelector<HTMLElement>(\n `[data-command-index=\"${this.activeCommandIndex()}\"]`,\n );\n row?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n private showCheckpointToast(message: string, isError = false) {\n if (this.toastTimer) clearTimeout(this.toastTimer);\n this.checkpointToastIsError.set(isError);\n this.checkpointToast.set(message);\n this.toastTimer = setTimeout(() => {\n this.checkpointToast.set(null);\n this.checkpointToastIsError.set(false);\n }, 2500);\n }\n\n private selectElementAtPoint(event: MouseEvent) {\n const overlay = this.overlayRoot()?.nativeElement ?? null;\n const target = getTargetElement(\n { x: event.clientX, y: event.clientY },\n overlay,\n );\n if (!target) {\n this.selectedMeasurement.set(null);\n this.selectedElement = null;\n this.distanceOverlay.set(null);\n this.refreshTypographyBlocks();\n return false;\n }\n\n // Ctrl+click: select the minimum common parent of current selection and clicked element\n if ((event.ctrlKey || event.metaKey) && this.selectedElement) {\n const commonParent = this.findMinimumCommonParent(\n this.selectedElement,\n target,\n );\n if (\n commonParent &&\n commonParent !== document.body &&\n commonParent !== document.documentElement\n ) {\n this.selectedMeasurement.set(getInspectMeasurement(commonParent));\n this.selectedElement = commonParent;\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n return true;\n }\n }\n\n this.selectedMeasurement.set(getInspectMeasurement(target));\n this.selectedElement = target;\n this.selectedGuideId.set(\n this.findGuideAtPoint(event.clientX, event.clientY),\n );\n this.updateDistanceOverlay();\n this.refreshTypographyBlocks();\n return true;\n }\n\n private updateDistanceOverlay() {\n if (\n !this.altPressed() ||\n !this.selectedElement ||\n !this.hoverElement ||\n this.selectedElement === this.hoverElement ||\n this.selectedElement.contains(this.hoverElement) ||\n this.hoverElement.contains(this.selectedElement)\n ) {\n this.distanceOverlay.set(null);\n return;\n }\n\n this.distanceOverlay.set(\n getDistanceOverlay(\n getRectFromDom(this.selectedElement),\n getRectFromDom(this.hoverElement),\n ),\n );\n }\n\n private refreshTypographyBlocks() {\n if (!this.isBrowser || !this.enabled() || !this.showTypography()) {\n this.textBlocks.set([]);\n return;\n }\n\n const viewport = getViewportSize();\n this.textBlocks.set(\n getVisibleTextBlocks(this.overlayRoot()?.nativeElement ?? null)\n .filter(\n (block) =>\n block.rect.top >= 0 &&\n block.rect.top <= viewport.height &&\n block.rect.left >= 0 &&\n block.rect.left <= viewport.width,\n )\n .map((block) => ({\n ...block,\n rect: {\n ...block.rect,\n left: clamp(block.rect.left, 0, viewport.width - 12),\n top: clamp(block.rect.top, 14, viewport.height),\n },\n })),\n );\n }\n\n private addGuide(guide: Guide) {\n const nextGuides = [...this.guides(), guide];\n this.guides.set(nextGuides);\n this.selectedGuideId.set(guide.id);\n this.recordHistory(nextGuides);\n }\n\n private getGuidePreview(event: PointerEvent | MouseEvent): Guide {\n const viewport = getViewportSize();\n const orientation = this.guideOrientation();\n const rawPosition =\n orientation === 'vertical' ? event.clientX : event.clientY;\n const max = orientation === 'vertical' ? viewport.width : viewport.height;\n\n return {\n id: 'preview',\n orientation,\n position: this.snapGuide(clamp(rawPosition, 0, max)),\n };\n }\n\n private snapGuide(position: number) {\n for (const guide of this.guides()) {\n if (Math.abs(guide.position - position) <= GUIDE_SNAP_DISTANCE) {\n return guide.position;\n }\n }\n return position;\n }\n\n private findGuideAtPoint(x: number, y: number) {\n for (const guide of this.guides()) {\n if (\n guide.orientation === 'vertical' &&\n Math.abs(guide.position - x) <= GUIDE_HITBOX_SIZE\n ) {\n return guide.id;\n }\n if (\n guide.orientation === 'horizontal' &&\n Math.abs(guide.position - y) <= GUIDE_HITBOX_SIZE\n ) {\n return guide.id;\n }\n }\n return null;\n }\n\n private undo() {\n if (!this.canUndo()) {\n return;\n }\n const nextIndex = this.historyIndex() - 1;\n this.historyIndex.set(nextIndex);\n this.guides.set(this.cloneGuides(this.history()[nextIndex]));\n }\n\n private redo() {\n if (!this.canRedo()) {\n return;\n }\n const nextIndex = this.historyIndex() + 1;\n this.historyIndex.set(nextIndex);\n this.guides.set(this.cloneGuides(this.history()[nextIndex]));\n }\n\n private recordHistory(guides: Guide[]) {\n const base = this.history().slice(0, this.historyIndex() + 1);\n base.push(this.cloneGuides(guides));\n this.history.set(base);\n this.historyIndex.set(base.length - 1);\n }\n\n private cloneGuides(guides: Guide[]) {\n return guides.map((guide) => ({ ...guide }));\n }\n\n private findMinimumCommonParent(\n elementA: HTMLElement,\n elementB: HTMLElement,\n ): HTMLElement | null {\n // Build ancestor chain for element A\n const ancestorsA = new Set<Element>();\n let current: Element | null = elementA;\n while (current) {\n ancestorsA.add(current);\n current = current.parentElement;\n }\n\n // Walk up from elementB until we find a common ancestor\n current = elementB;\n while (current) {\n if (ancestorsA.has(current)) {\n return current as HTMLElement;\n }\n current = current.parentElement;\n }\n\n return null;\n }\n}\n","<div class=\"inspector-root\" #overlayRoot>\n @if (checkpointService) {\n <dialog\n #checkpointDialog\n class=\"inspector-command-dialog\"\n aria-labelledby=\"inspector-command-title\"\n (cancel)=\"$event.preventDefault(); closeCheckpointCommandBar()\"\n (click)=\"handleCheckpointDialogClick($event)\"\n >\n <section class=\"inspector-command\" (click)=\"$event.stopPropagation()\">\n <header class=\"inspector-command__search\">\n <label\n id=\"inspector-command-title\"\n class=\"inspector-visually-hidden\"\n for=\"inspector-checkpoint-search\"\n >\n inspector-ng command palette\n </label>\n <span class=\"inspector-command__runcat\" aria-hidden=\"true\">\n <img\n class=\"inspector-command__runcat-sprite\"\n [src]=\"runcatSpriteSrc\"\n alt=\"\"\n draggable=\"false\"\n />\n </span>\n <input\n #checkpointSearch\n id=\"inspector-checkpoint-search\"\n type=\"search\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n placeholder=\"inspector-ng…\"\n [value]=\"checkpointQuery()\"\n [attr.aria-controls]=\"'inspector-checkpoint-results inspector-command-actions'\"\n [attr.aria-activedescendant]=\"activeCommandResultId()\"\n (input)=\"updateCheckpointQuery($event)\"\n />\n </header>\n\n @if (checkpointService.error(); as error) {\n <p\n class=\"inspector-command__message inspector-command__message--error\"\n role=\"alert\"\n >\n {{ error }}\n </p>\n }\n\n <div\n id=\"inspector-checkpoint-results\"\n class=\"inspector-command__results\"\n role=\"listbox\"\n aria-label=\"Saved checkpoints\"\n >\n @if (checkpointService.loading()) {\n <p class=\"inspector-command__message\" role=\"status\">Loading…</p>\n } @else if (\n !checkpointService.checkpoints().length && !checkpointQuery().trim()\n ) {\n <p class=\"inspector-command__message\" role=\"status\">\n No checkpoints yet\n </p>\n } @else if (\n !filteredCheckpoints().length && !filteredInspectorActions().length\n ) {\n <p class=\"inspector-command__message\" role=\"status\">No matches</p>\n } @else {\n @for (\n checkpoint of filteredCheckpoints();\n track checkpoint.id;\n let index = $index\n ) {\n <div\n class=\"inspector-command-row\"\n role=\"option\"\n [id]=\"'inspector-checkpoint-' + checkpoint.id\"\n [attr.data-command-index]=\"index\"\n [attr.aria-selected]=\"activeCommandIndex() === index\"\n [class.is-active]=\"activeCommandIndex() === index\"\n [class.is-busy]=\"\n checkpointService.busy() && activeCommandIndex() === index\n \"\n (mouseenter)=\"setActiveCheckpoint(index)\"\n (click)=\"\n deletingCheckpointId() === checkpoint.id ||\n editingCheckpointId() === checkpoint.id\n ? null\n : restoreCheckpoint(checkpoint)\n \"\n >\n @if (deletingCheckpointId() === checkpoint.id) {\n <span class=\"inspector-command-row__confirm\"\n >Delete “{{ checkpoint.name }}”?</span\n >\n <span class=\"inspector-command-row__confirm-actions\">\n <button\n type=\"button\"\n class=\"is-danger\"\n (click)=\"confirmDelete(checkpoint, $event)\"\n >\n Delete\n </button>\n <button type=\"button\" (click)=\"cancelDelete($event)\">\n Keep\n </button>\n </span>\n } @else if (editingCheckpointId() === checkpoint.id) {\n <input\n class=\"inspector-command-row__rename\"\n aria-label=\"Checkpoint name\"\n [value]=\"renameDraft()\"\n (input)=\"updateRenameDraft($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <span class=\"inspector-command-row__content\">\n <span class=\"inspector-command-row__name\">\n @if (\n checkpointService.busy() &&\n activeCommandIndex() === index\n ) {\n Restoring…\n } @else {\n {{ checkpoint.name }}\n }\n </span>\n <span class=\"inspector-command-row__meta\">\n @if (shouldShowCheckpointRoute(checkpoint)) {\n <span class=\"inspector-command-row__route\">{{\n checkpoint.route\n }}</span>\n <span\n class=\"inspector-command-row__separator\"\n aria-hidden=\"true\"\n >·</span\n >\n }\n <span class=\"inspector-command-row__activity\">\n {{ checkpoint.lastUsedAt ? \"Used\" : \"Saved\" }}\n {{\n formatRelativeTime(checkpointActivityAt(checkpoint))\n }}\n </span>\n </span>\n </span>\n <span class=\"inspector-command-row__actions\">\n <button\n type=\"button\"\n (click)=\"beginRename(checkpoint, $event)\"\n [attr.aria-label]=\"'Rename ' + checkpoint.name\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"m11.8 1.8 2.4 2.4-8.3 8.3-3.1.7.7-3.1zm-8 10.4 1.5-.3-1.2-1.2z\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n (click)=\"beginDelete(checkpoint, $event)\"\n [attr.aria-label]=\"'Delete ' + checkpoint.name\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M5.5 2h5l.5 1H14v1.25H2V3h3zm-2 3.25h9L12 14H4z\"\n />\n </svg>\n </button>\n </span>\n }\n </div>\n }\n }\n </div>\n\n @if (filteredInspectorActions().length) {\n <footer\n id=\"inspector-command-actions\"\n class=\"inspector-command__actions\"\n role=\"listbox\"\n aria-label=\"Inspector actions\"\n aria-orientation=\"horizontal\"\n >\n @for (\n action of filteredInspectorActions();\n track action.id;\n let index = $index\n ) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"inspector-command-action\"\n [id]=\"'inspector-action-' + action.id\"\n [attr.data-command-index]=\"filteredCheckpoints().length + index\"\n [attr.aria-label]=\"action.ariaLabel\"\n [attr.aria-selected]=\"\n activeCommandIndex() === filteredCheckpoints().length + index\n \"\n [attr.aria-disabled]=\"checkpointService.busy()\"\n [class.is-selected]=\"\n activeCommandIndex() === filteredCheckpoints().length + index\n \"\n [class.is-active]=\"\n (action.id === 'select' && toolMode() === 'select') ||\n (action.id === 'type' && showTypography()) ||\n (action.id === 'vertical' &&\n toolMode() === 'guides' &&\n guideOrientation() === 'vertical') ||\n (action.id === 'horizontal' &&\n toolMode() === 'guides' &&\n guideOrientation() === 'horizontal')\n \"\n [class.inspector-command-action--danger]=\"action.id === 'off'\"\n [disabled]=\"checkpointService.busy()\"\n (mouseenter)=\"setActiveInspectorAction(index)\"\n (click)=\"executeInspectorAction(action)\"\n >\n @switch (action.id) {\n @case (\"select\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M3 2l8 8-3 .7L6.7 13 6 10 3 2z\" />\n </svg>\n }\n @case (\"type\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M3 4V2h10v2h-4v10H7V4z\" />\n </svg>\n }\n @case (\"save\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M2.5 2h9.6l1.4 1.4V14h-11zm2 1.5v3h6v-3zm.5 6V12h6V9.5z\"\n />\n </svg>\n }\n @case (\"vertical\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M7.25 2h1.5v12h-1.5z\" />\n </svg>\n }\n @case (\"horizontal\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M2 7.25h12v1.5H2z\" />\n </svg>\n }\n @case (\"off\") {\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M7.25 1.5h1.5v6h-1.5zM4.1 3.35l.96 1.15A4.25 4.25 0 1 0 10.94 4.5l.96-1.15A5.75 5.75 0 1 1 4.1 3.35z\"\n />\n </svg>\n }\n }\n <span>{{ action.label }}</span>\n </button>\n }\n </footer>\n }\n </section>\n </dialog>\n }\n\n @if (checkpointToast(); as toast) {\n <p\n class=\"inspector-checkpoint-toast\"\n [class.inspector-checkpoint-toast--error]=\"checkpointToastIsError()\"\n [attr.role]=\"checkpointToastIsError() ? 'alert' : 'status'\"\n >\n {{ toast }}\n </p>\n }\n\n @if (enabled() && toolMode() === \"select\") {\n @if (hoverRect() && hoverHighlightEnabled) {\n <div\n class=\"inspector-box inspector-box--hover\"\n [style.left.px]=\"hoverRect()!.left\"\n [style.top.px]=\"hoverRect()!.top\"\n [style.width.px]=\"hoverRect()!.width\"\n [style.height.px]=\"hoverRect()!.height\"\n [style.--inspector-accent]=\"highlightColor\"\n ></div>\n }\n\n @if (selectedMeasurement(); as selected) {\n @if (selected.gap.active && selected.parentRect) {\n <div\n class=\"inspector-box inspector-box--gap\"\n [style.left.px]=\"selected.parentRect.left\"\n [style.top.px]=\"selected.parentRect.top\"\n [style.width.px]=\"selected.parentRect.width\"\n [style.height.px]=\"selected.parentRect.height\"\n ></div>\n <div\n class=\"inspector-box-tag inspector-box-tag--gap\"\n [style.left.px]=\"selected.parentRect.left\"\n [style.top.px]=\"selected.parentRect.top - 8\"\n >\n G {{ formatGap(selected) }}\n </div>\n }\n\n <div\n class=\"inspector-box inspector-box--margin\"\n [style.left.px]=\"selected.marginRect.left\"\n [style.top.px]=\"selected.marginRect.top\"\n [style.width.px]=\"selected.marginRect.width\"\n [style.height.px]=\"selected.marginRect.height\"\n ></div>\n <div\n class=\"inspector-box-tag inspector-box-tag--margin\"\n [style.left.px]=\"selected.marginRect.left\"\n [style.top.px]=\"selected.marginRect.top - 8\"\n >\n M {{ formatEdges(selected.margin) }}\n </div>\n\n <div\n class=\"inspector-box inspector-box--selected\"\n [style.left.px]=\"selected.rect.left\"\n [style.top.px]=\"selected.rect.top\"\n [style.width.px]=\"selected.rect.width\"\n [style.height.px]=\"selected.rect.height\"\n [style.--inspector-accent]=\"highlightColor\"\n >\n <div class=\"inspector-label\">{{ selectedMetaLine() }}</div>\n </div>\n\n <div\n class=\"inspector-box inspector-box--padding\"\n [style.left.px]=\"selected.paddingRect.left\"\n [style.top.px]=\"selected.paddingRect.top\"\n [style.width.px]=\"selected.paddingRect.width\"\n [style.height.px]=\"selected.paddingRect.height\"\n ></div>\n <div\n class=\"inspector-box-tag inspector-box-tag--padding\"\n [style.left.px]=\"selected.paddingRect.left\"\n [style.top.px]=\"\n selected.paddingRect.top + selected.paddingRect.height + 8\n \"\n >\n P {{ formatEdges(selected.padding) }}\n </div>\n }\n }\n\n @if (enabled() && showTypography()) {\n @for (block of textBlocks(); track block.id) {\n <div\n class=\"inspector-text-chip\"\n [style.left.px]=\"block.rect.left\"\n [style.top.px]=\"block.rect.top - 8\"\n >\n <span\n class=\"inspector-text-chip__swatch\"\n [style.background]=\"block.styles.color\"\n ></span>\n <span>{{ block.styles.fontSize }}</span>\n <span>{{ block.styles.lineHeight }}</span>\n <span>{{ block.styles.color }}</span>\n </div>\n }\n }\n\n @if (enabled() && altPressed() && distanceOverlay(); as distance) {\n <div\n class=\"inspector-box inspector-box--distance\"\n [style.left.px]=\"distance.rectA.left\"\n [style.top.px]=\"distance.rectA.top\"\n [style.width.px]=\"distance.rectA.width\"\n [style.height.px]=\"distance.rectA.height\"\n ></div>\n <div\n class=\"inspector-box inspector-box--distance\"\n [style.left.px]=\"distance.rectB.left\"\n [style.top.px]=\"distance.rectB.top\"\n [style.width.px]=\"distance.rectB.width\"\n [style.height.px]=\"distance.rectB.height\"\n ></div>\n\n @for (\n connector of distance.connectors;\n track trackConnector($index, connector)\n ) {\n <div\n class=\"inspector-connector\"\n [class.inspector-connector--vertical]=\"connector.x1 === connector.x2\"\n [class.inspector-connector--horizontal]=\"connector.y1 === connector.y2\"\n [style.left.px]=\"Math.min(connector.x1, connector.x2)\"\n [style.top.px]=\"Math.min(connector.y1, connector.y2)\"\n [style.width.px]=\"Math.max(1, Math.abs(connector.x2 - connector.x1))\"\n [style.height.px]=\"Math.max(1, Math.abs(connector.y2 - connector.y1))\"\n ></div>\n }\n\n @if (distance.horizontal && distance.horizontal.value > 0) {\n <div\n class=\"inspector-distance-line inspector-distance-line--horizontal\"\n [style.left.px]=\"\n Math.min(distance.horizontal.x1!, distance.horizontal.x2!)\n \"\n [style.top.px]=\"distance.horizontal.y!\"\n [style.width.px]=\"\n Math.abs(distance.horizontal.x2! - distance.horizontal.x1!)\n \"\n ></div>\n <div\n class=\"inspector-distance-tag\"\n [style.left.px]=\"\n (distance.horizontal.x1! + distance.horizontal.x2!) / 2\n \"\n [style.top.px]=\"distance.horizontal.y! + 10\"\n >\n {{ formatValue(distance.horizontal.value) }}\n </div>\n }\n\n @if (distance.vertical && distance.vertical.value > 0) {\n <div\n class=\"inspector-distance-line inspector-distance-line--vertical\"\n [style.left.px]=\"distance.vertical.x!\"\n [style.top.px]=\"Math.min(distance.vertical.y1!, distance.vertical.y2!)\"\n [style.height.px]=\"\n Math.abs(distance.vertical.y2! - distance.vertical.y1!)\n \"\n ></div>\n <div\n class=\"inspector-distance-tag inspector-distance-tag--vertical\"\n [style.left.px]=\"distance.vertical.x! + 10\"\n [style.top.px]=\"(distance.vertical.y1! + distance.vertical.y2!) / 2\"\n >\n {{ formatValue(distance.vertical.value) }}\n </div>\n }\n }\n\n @if (enabled()) {\n @if (toolMode() === \"guides\") {\n @if (guidePreview(); as preview) {\n <div\n class=\"inspector-guide inspector-guide--preview\"\n [class.inspector-guide--vertical]=\"preview.orientation === 'vertical'\"\n [class.inspector-guide--horizontal]=\"\n preview.orientation === 'horizontal'\n \"\n [style.left.px]=\"\n preview.orientation === 'vertical' ? preview.position : null\n \"\n [style.top.px]=\"\n preview.orientation === 'horizontal' ? preview.position : null\n \"\n [style.--inspector-guide]=\"guideColor\"\n >\n <span class=\"inspector-guide-line\"></span>\n </div>\n }\n }\n\n @for (guide of guides(); track guide.id) {\n <button\n type=\"button\"\n class=\"inspector-guide\"\n [class.inspector-guide--vertical]=\"guide.orientation === 'vertical'\"\n [class.inspector-guide--horizontal]=\"guide.orientation === 'horizontal'\"\n [class.inspector-guide--selected]=\"selectedGuideId() === guide.id\"\n [style.left.px]=\"\n guide.orientation === 'vertical' ? guide.position : null\n \"\n [style.top.px]=\"\n guide.orientation === 'horizontal' ? guide.position : null\n \"\n [style.--inspector-guide]=\"guideColor\"\n (pointerdown)=\"startGuideDrag($event, guide)\"\n >\n <span class=\"inspector-guide-line\"></span>\n </button>\n }\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}