blissful-web-agentation 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentation.esm.mjs","sources":["../src/core/state.ts","../src/ui/styles.css","../src/ui/styles.ts","../src/ui/shadow-host.ts","../src/ui/icons.ts","../src/utils/dom.ts","../src/overlay/highlight.ts","../src/utils/format.ts","../src/overlay/label.ts","../src/selector/generator.ts","../src/panel/style-reader.ts","../src/utils/clipboard.ts","../src/panel/style-panel.ts","../src/events/mouse.ts","../src/events/keyboard.ts","../src/events/scroll-resize.ts","../src/core/inspector.ts","../src/index.ts"],"sourcesContent":["const STORAGE_KEY = 'agentation-prefs';\n\nexport interface InspectorState {\n active: boolean;\n hoveredElement: HTMLElement | null;\n selectedElement: HTMLElement | null;\n panelVisible: boolean;\n shadowHost: HTMLElement | null;\n shadowRoot: ShadowRoot | null;\n highlightColor: string;\n theme: 'dark' | 'light';\n}\n\ninterface StoredPrefs {\n active: boolean;\n highlightColor: string;\n theme: 'dark' | 'light';\n}\n\nconst defaults: StoredPrefs = {\n active: false,\n highlightColor: '#0063F7',\n theme: 'dark',\n};\n\nfunction loadPrefs(): StoredPrefs {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw) {\n const parsed = JSON.parse(raw);\n return { ...defaults, ...parsed };\n }\n } catch {\n // localStorage unavailable or corrupted\n }\n return { ...defaults };\n}\n\nconst prefs = loadPrefs();\n\nexport const state: InspectorState = {\n active: false,\n hoveredElement: null,\n selectedElement: null,\n panelVisible: false,\n shadowHost: null,\n shadowRoot: null,\n highlightColor: prefs.highlightColor,\n theme: prefs.theme,\n};\n\n// Whether the inspector should auto-activate on init\nexport const savedActive: boolean = prefs.active;\n\nexport function savePrefs(): void {\n try {\n const data: StoredPrefs = {\n active: state.active,\n highlightColor: state.highlightColor,\n theme: state.theme,\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n } catch {\n // localStorage unavailable\n }\n}\n\nexport function resetState(): void {\n state.active = false;\n state.hoveredElement = null;\n state.selectedElement = null;\n state.panelVisible = false;\n state.highlightColor = '#0063F7';\n state.theme = 'dark';\n}\n","export default \"/* ============================================\\n Agentation — Element Inspector Styles\\n ============================================\\n Edit these to customize the inspector's look.\\n All styles are scoped inside Shadow DOM so they\\n won't leak into the host page.\\n ============================================ */\\n\\n/* --- Host container (don't remove) --- */\\n\\n@import url('https://fonts.googleapis.com/css2?family=Geist+Mono:wght@100..900&family=Geist:wght@100..900&display=swap');\\n\\n:host {\\n position: fixed !important;\\n top: 0 !important;\\n left: 0 !important;\\n width: 0 !important;\\n height: 0 !important;\\n overflow: visible !important;\\n z-index: 2147483647 !important;\\n pointer-events: none !important;\\n font-family: \\\"Geist\\\", sans-serif;\\n}\\n\\n*, *::before, *::after {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n}\\n\\n/* --- Highlight overlay (blue border on hover) --- */\\n\\n.ag-highlight {\\n position: fixed;\\n pointer-events: none;\\n border: 2px solid #0063F7;\\n background: #0063f717;\\n border-radius: 2px;\\n transition: top 0.15s cubic-bezier(0.4, 0, 0.2, 1), left 0.15s cubic-bezier(0.4, 0, 0.2, 1), width 0.15s cubic-bezier(0.4, 0, 0.2, 1), height 0.15s cubic-bezier(0.4, 0, 0.2, 1);\\n z-index: 2147483646;\\n}\\n\\n/* --- Floating label (tag name badge) --- */\\n\\n.ag-label {\\n position: fixed;\\n pointer-events: none;\\n background: #28293D;\\n color: #f1f5f9;\\n font-size: 12px;\\n font-weight: 500;\\n line-height: 1;\\n padding: 4px 8px;\\n border-radius: 4px;\\n white-space: nowrap;\\n z-index: 2147483647;\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\\n}\\n\\n.ag-label .ag-tag {\\n color: #57EBA1;\\n font-weight: 600;\\n}\\n\\n.ag-label .ag-class {\\n color: #DDA5E9;\\n}\\n\\n.ag-label .ag-dims {\\n color: #94a3b8;\\n margin-left: 6px;\\n}\\n\\n/* --- Toolbar (bottom-right bar) --- */\\n\\n.ag-toolbar {\\n position: fixed;\\n bottom: 16px;\\n right: 16px;\\n display: flex;\\n align-items: center;\\n gap: 0;\\n pointer-events: auto;\\n z-index: 2147483647;\\n background: #1a1a1a;\\n transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);\\n border-radius: 10px;\\n border: 0.5px solid rgba(255, 255, 255, 0.08);\\n box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.75), 0 0.5px 0 0 rgba(255, 255, 255, 0.05) inset, 0 -0.5px 0 0 rgba(0, 0, 0, 0.05) inset, 0 0 0 0.5px rgba(255, 255, 255, 0.10) inset;\\n padding: 2px;\\n}\\n\\n.ag-toolbar:active {\\n transform: scale(.99);\\n transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n\\n.ag-toolbar.ag-light {\\n background: #ffff;\\n border-color: none;\\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.06), 0px 1px 2px -1px rgba(0, 0, 0, 0.06), 0px 2px 4px 0px rgba(0, 0, 0, 0.04);\\n}\\n\\n.ag-toolbar-divider {\\n width: 1px;\\n height: 20px;\\n background: rgba(255, 255, 255, 0.1);\\n flex-shrink: 0;\\n margin: 0 2px;\\n}\\n\\n.ag-toolbar.ag-light .ag-toolbar-divider {\\n background: rgba(0, 0, 0, 0.12);\\n}\\n\\n/* --- Toggle button (inside toolbar) --- */\\n\\n.ag-toggle {\\n height: 34px;\\n border-radius: 8px;\\n background: transparent;\\n color: rgba(255, 255, 255, 0.5);\\n border: none;\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n padding: 0 8px;\\n transition: all 0.15s ease;\\n font-family: \\\"Geist\\\", sans-serif;\\n font-size: 12px;\\n font-weight: 500;\\n white-space: nowrap;\\n}\\n\\n.ag-toggle:hover {\\n background: rgba(255, 255, 255, 0.06);\\n}\\n\\n.ag-toggle.active {\\n color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ag-toolbar.ag-light .ag-toggle {\\n color: rgba(0, 0, 0, 0.45);\\n}\\n\\n.ag-toolbar.ag-light .ag-toggle:hover {\\n background: rgba(0, 0, 0, 0.05);\\n}\\n\\n.ag-toolbar.ag-light .ag-toggle.active {\\n color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ag-toggle-label {\\n pointer-events: none;\\n}\\n\\n.ag-toggle-track {\\n width: 40px;\\n height: 24px;\\n border-radius: 12px;\\n background: rgba(255, 255, 255, 0.12);\\n position: relative;\\n transition: background 0.2s ease;\\n pointer-events: none;\\n flex-shrink: 0;\\n}\\n\\n.ag-toggle.active .ag-toggle-track {\\n background: #0063F7;\\n}\\n\\n.ag-toolbar.ag-light .ag-toggle-track {\\n background: rgba(0, 0, 0, 0.15);\\n}\\n\\n.ag-toolbar.ag-light .ag-toggle.active .ag-toggle-track {\\n background: #0063F7;\\n}\\n\\n.ag-toggle-knob {\\n position: absolute;\\n top: 3px;\\n left: 3px;\\n width: 18px;\\n height: 18px;\\n border-radius: 50%;\\n background: rgba(255, 255, 255, 1);\\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.04), 0 2px 2px 0 rgba(0, 0, 0, 0.02), 0 0.5px 0 0 rgba(255, 255, 255, 0.20) inset, 0 -0.5px 0 0 rgba(0, 0, 0, 0.10) inset, 0 0 0 0.5px rgba(0, 0, 0, 0.15) inset;\\n transition: all 0.2s ease;\\n}\\n\\n.ag-toggle.active .ag-toggle-knob {\\n left: 19px;\\n background: #fff;\\n}\\n\\n/* --- Color picker --- */\\n\\n.ag-color-picker {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 34px;\\n height: 34px;\\n cursor: pointer;\\n border-radius: 8px;\\n transition: background 0.15s ease;\\n position: relative;\\n}\\n\\n.ag-color-picker:hover {\\n background: rgba(255, 255, 255, 0.06);\\n}\\n\\n.ag-toolbar.ag-light .ag-color-picker:hover {\\n background: rgba(0, 0, 0, 0.05);\\n}\\n\\n.ag-color-swatch {\\n width: 18px;\\n height: 18px;\\n border-radius: 50%;\\n border: 2px solid rgba(255, 255, 255, 0.2);\\n pointer-events: none;\\n}\\n\\n.ag-toolbar.ag-light .ag-color-swatch {\\n border-color: rgba(0, 0, 0, 0.15);\\n}\\n\\n.ag-color-picker input[type=\\\"color\\\"] {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n opacity: 0;\\n cursor: pointer;\\n top: 0;\\n left: 0;\\n}\\n\\n/* --- Theme toggle --- */\\n\\n@keyframes ag-icon-out {\\n from { transform: scale(1); opacity: 1; filter: blur(0); }\\n to { transform: scale(0.5); opacity: 0.5; filter: blur(2px); }\\n}\\n\\n@keyframes ag-icon-in {\\n from { transform: scale(0.5); opacity: 0.5; filter: blur(2px); }\\n to { transform: scale(1); opacity: 1; filter: blur(0); }\\n}\\n\\n.ag-theme-btn {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 34px;\\n height: 34px;\\n background: transparent;\\n border: none;\\n color: rgba(255, 255, 255, 0.4);\\n cursor: pointer;\\n border-radius: 8px;\\n transition: background 0.15s ease, color 0.15s ease;\\n}\\n\\n.ag-theme-btn:hover {\\n background: rgba(255, 255, 255, 0.06);\\n color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ag-toolbar.ag-light .ag-theme-btn {\\n color: rgba(0, 0, 0, 0.35);\\n}\\n\\n.ag-toolbar.ag-light .ag-theme-btn:hover {\\n background: rgba(0, 0, 0, 0.05);\\n color: rgba(0, 0, 0, 0.75);\\n}\\n\\n.ag-theme-icon {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.ag-theme-icon.ag-icon-out {\\n animation: ag-icon-out 0.15s ease forwards;\\n}\\n\\n.ag-theme-icon.ag-icon-in {\\n animation: ag-icon-in 0.15s ease forwards;\\n}\\n\\n/* --- Style panel (dark) --- */\\n\\n.ag-panel {\\n position: fixed;\\n pointer-events: auto;\\n background: #000;\\n color: #fff;\\n border-radius: 12px;\\n width: 340px;\\n max-height: 480px;\\n overflow-y: auto;\\n overscroll-behavior: none;\\n font-size: 12px;\\n line-height: 1.5;\\n box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.75), 0 4px 24px rgba(0, 0, 0, 0.5), 0 0.5px 0 0 rgba(255, 255, 255, 0.05) inset, 0 -0.5px 0 0 rgba(0, 0, 0, 0.05) inset, 0 0 0 0.5px rgba(255, 255, 255, 0.10) inset;\\n z-index: 2147483647;\\n\\n /* enter/exit animation */\\n opacity: 0;\\n filter: blur(4px);\\n transform: scale(0.96) translateY(4px);\\n transition: opacity 0.18s ease, filter 0.18s ease, transform 0.18s ease;\\n}\\n\\n.ag-panel.ag-panel-visible {\\n opacity: 1;\\n filter: blur(0);\\n transform: scale(1) translateY(0);\\n}\\n\\n.ag-panel.ag-panel-hiding {\\n opacity: 0;\\n filter: blur(4px);\\n transform: scale(0.96) translateY(4px);\\n}\\n\\n.ag-panel-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 8px 14px;\\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\\n position: sticky;\\n top: 0;\\n background: #000;\\n border-radius: 12px 12px 0 0;\\n z-index: 1;\\n}\\n\\n.ag-panel-title {\\n font-weight: 600;\\n color: #57EBA1;\\n font-size: 14px;\\n}\\n\\n.ag-panel-actions {\\n display: flex;\\n gap: 6px;\\n}\\n\\n.ag-panel-btn {\\n background: #1a1a1a;\\n color: #888;\\n border: 1px solid #2a2a2a;\\n border-radius: 6px;\\n padding: 4px 8px;\\n cursor: pointer;\\n font-size: 11px;\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n pointer-events: auto;\\n transition: all 0.1s ease;\\n}\\n\\n.ag-panel-btn:hover {\\n background: #2a2a2a;\\n color: #fff;\\n border-color: #444;\\n}\\n\\n.ag-panel-btn.copied {\\n background: #065f46;\\n color: #6ee7b7;\\n border-color: #059669;\\n}\\n\\n.ag-panel-close {\\n background: none;\\n border: none;\\n color: rgba(255, 255, 255, 0.5);\\n cursor: pointer;\\n padding-left: 12px;\\n border-left: 1px solid #2a2a2a;\\n display: flex;\\n align-items: center;\\n pointer-events: auto;\\n transition: all 0.1s ease;\\n}\\n\\n.ag-panel-close:hover {\\n color: rgba(255, 255, 255, 1);\\n}\\n\\n/* --- Selector display --- */\\n\\n.ag-selector {\\n padding: 8px 14px;\\n background: #28293D;\\n font-family: \\\"Geist Mono\\\", monospace;\\n font-size: 11px;\\n color: #DDA5E9;\\n word-break: break-all;\\n}\\n\\n/* --- Style sections --- */\\n\\n.ag-section {\\n padding: 10px 14px 0 14px;\\n /* border-bottom: 1px solid rgba(255, 255, 255, 0.1); */\\n}\\n\\n.ag-section:last-child {\\n padding-bottom: 14px;\\n border-bottom: none;\\n}\\n\\n.ag-section-title {\\n font-weight: 500;\\n color: rgba(255, 255, 255, 0.5);\\n text-transform: uppercase;\\n font-size: 10px;\\n letter-spacing: 0.5px;\\n margin-bottom: 6px;\\n}\\n\\n/* --- Code block (property list) --- */\\n\\n.ag-code {\\n background: #1a1a1a;\\n border-radius: 8px;\\n padding: 10px 14px;\\n font-family: \\\"Geist Mono\\\", monospace;\\n font-size: 12px;\\n line-height: 1.7;\\n}\\n\\n.ag-code-line {\\n white-space: normal;\\n word-break: break-all;\\n}\\n\\n.ag-prop-name {\\n color: rgba(255, 255, 255, 0.85);\\n}\\n\\n.ag-prop-value {\\n color: #DDA5E9;\\n}\\n\\n/* --- Scrollbar --- */\\n\\n.ag-panel::-webkit-scrollbar {\\n display: none;\\n}\\n\\n/* ============================================\\n Light theme overrides\\n ============================================ */\\n\\n.ag-panel.ag-light {\\n background: #fff;\\n color: #1a1a1a;\\n box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.1), 0 4px 24px rgba(0, 0, 0, 0.12);\\n}\\n\\n.ag-panel.ag-light .ag-panel-header {\\n background: #fff;\\n border-bottom-color: rgba(0, 0, 0, 0.08);\\n}\\n\\n.ag-panel.ag-light .ag-panel-title {\\n color: #0d7c4a;\\n}\\n\\n.ag-panel.ag-light .ag-panel-btn {\\n background: #f0f0f0;\\n color: #666;\\n border-color: #e0e0e0;\\n}\\n\\n.ag-panel.ag-light .ag-panel-btn:hover {\\n background: #e0e0e0;\\n color: #111;\\n border-color: #ccc;\\n}\\n\\n.ag-panel.ag-light .ag-panel-close {\\n color: rgba(0, 0, 0, 0.4);\\n border-left-color: #e0e0e0;\\n}\\n\\n.ag-panel.ag-light .ag-panel-close:hover {\\n color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ag-panel.ag-light .ag-selector {\\n background: #f0f0f5;\\n color: #8b5cf6;\\n}\\n\\n.ag-panel.ag-light .ag-section {\\n border-bottom-color: rgba(0, 0, 0, 0.06);\\n}\\n\\n.ag-panel.ag-light .ag-section-title {\\n color: rgba(0, 0, 0, 0.45);\\n}\\n\\n.ag-panel.ag-light .ag-code {\\n background: #f5f5f5;\\n}\\n\\n.ag-panel.ag-light .ag-prop-name {\\n color: rgba(0, 0, 0, 0.75);\\n}\\n\\n.ag-panel.ag-light .ag-prop-value {\\n color: #7c3aed;\\n}\\n\";","import cssText from './styles.css';\nexport const STYLES: string = cssText;\n","import { state } from '../core/state';\nimport { STYLES } from './styles';\n\nconst HOST_ID = 'agentation-inspector';\n\nexport function createShadowHost(): ShadowRoot {\n // Remove existing if any\n const existing = document.getElementById(HOST_ID);\n if (existing) existing.remove();\n\n const host = document.createElement('div');\n host.id = HOST_ID;\n host.setAttribute('data-agentation', 'true');\n\n // Set inline styles on the host so page CSS can't interfere\n host.style.cssText = 'position:fixed!important;top:0!important;left:0!important;width:0!important;height:0!important;overflow:visible!important;z-index:2147483647!important;pointer-events:none!important;';\n\n const shadow = host.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = STYLES;\n shadow.appendChild(style);\n\n document.body.appendChild(host);\n\n state.shadowHost = host;\n state.shadowRoot = shadow;\n\n return shadow;\n}\n\nexport function destroyShadowHost(): void {\n if (state.shadowHost) {\n state.shadowHost.remove();\n state.shadowHost = null;\n state.shadowRoot = null;\n }\n}\n","export const ICONS = {\n inspect: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/></svg>`,\n\n close: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>`,\n\n copy: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>`,\n\n check: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>`,\n\n sun: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"5\"/><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"/><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"/><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"/><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"/><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"/><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"/><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"/><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"/></svg>`,\n\n moon: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"/></svg>`,\n};\n","import { state } from '../core/state';\n\nconst SKIP_TAGS = new Set([\n 'SCRIPT', 'STYLE', 'LINK', 'META', 'HEAD', 'TITLE', 'BR', 'WBR',\n 'NOSCRIPT', 'TEMPLATE',\n]);\n\nexport function isInteractable(el: Element): boolean {\n if (!(el instanceof HTMLElement)) return false;\n if (SKIP_TAGS.has(el.tagName)) return false;\n\n const rect = el.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return false;\n\n return true;\n}\n\nexport function isOwnElement(el: Element): boolean {\n if (!state.shadowHost) return false;\n return state.shadowHost === el || state.shadowHost.contains(el);\n}\n","import { state } from '../core/state';\n\nlet highlightEl: HTMLElement | null = null;\n\nfunction ensureHighlight(): HTMLElement {\n if (highlightEl && state.shadowRoot?.contains(highlightEl)) {\n return highlightEl;\n }\n\n highlightEl = document.createElement('div');\n highlightEl.className = 'ag-highlight';\n state.shadowRoot?.appendChild(highlightEl);\n return highlightEl;\n}\n\nexport function showHighlight(target: HTMLElement): void {\n const el = ensureHighlight();\n const rect = target.getBoundingClientRect();\n\n el.style.top = `${rect.top}px`;\n el.style.left = `${rect.left}px`;\n el.style.width = `${rect.width}px`;\n el.style.height = `${rect.height}px`;\n el.style.borderColor = state.highlightColor;\n el.style.background = state.highlightColor + '17';\n el.style.display = 'block';\n}\n\nexport function hideHighlight(): void {\n if (highlightEl) {\n highlightEl.style.display = 'none';\n }\n}\n\nexport function destroyHighlight(): void {\n if (highlightEl) {\n highlightEl.remove();\n highlightEl = null;\n }\n}\n","export function formatDimensions(width: number, height: number): string {\n return `${Math.round(width)} × ${Math.round(height)}`;\n}\n\nexport function formatPadding(\n top: string,\n right: string,\n bottom: string,\n left: string\n): string {\n const t = parseFloat(top) || 0;\n const r = parseFloat(right) || 0;\n const b = parseFloat(bottom) || 0;\n const l = parseFloat(left) || 0;\n\n if (t === r && r === b && b === l) {\n return `${t}px`;\n }\n if (t === b && r === l) {\n return `${t}px ${r}px`;\n }\n if (r === l) {\n return `${t}px ${r}px ${b}px`;\n }\n return `${t}px ${r}px ${b}px ${l}px`;\n}\n\nexport function formatBorderRadius(\n tl: string,\n tr: string,\n br: string,\n bl: string\n): string {\n const topLeft = parseFloat(tl) || 0;\n const topRight = parseFloat(tr) || 0;\n const bottomRight = parseFloat(br) || 0;\n const bottomLeft = parseFloat(bl) || 0;\n\n if (topLeft === topRight && topRight === bottomRight && bottomRight === bottomLeft) {\n return `${topLeft}px`;\n }\n if (topLeft === bottomRight && topRight === bottomLeft) {\n return `${topLeft}px ${topRight}px`;\n }\n return `${topLeft}px ${topRight}px ${bottomRight}px ${bottomLeft}px`;\n}\n","import { state } from '../core/state';\nimport { formatDimensions } from '../utils/format';\n\nlet labelEl: HTMLElement | null = null;\n\nfunction ensureLabel(): HTMLElement {\n if (labelEl && state.shadowRoot?.contains(labelEl)) {\n return labelEl;\n }\n\n labelEl = document.createElement('div');\n labelEl.className = 'ag-label';\n state.shadowRoot?.appendChild(labelEl);\n return labelEl;\n}\n\nexport function showLabel(target: HTMLElement): void {\n const el = ensureLabel();\n const rect = target.getBoundingClientRect();\n\n // Build content\n const tag = target.tagName.toLowerCase();\n const classes = Array.from(target.classList)\n .slice(0, 3)\n .map(c => `.${c}`)\n .join('');\n const dims = formatDimensions(rect.width, rect.height);\n\n el.innerHTML =\n `<span class=\"ag-tag\">${tag}</span>` +\n (classes ? `<span class=\"ag-class\">${classes}</span>` : '') +\n `<span class=\"ag-dims\">${dims}</span>`;\n\n // Position above the element, or below if too close to top\n const labelHeight = 24;\n const gap = 6;\n let top = rect.top - labelHeight - gap;\n if (top < 4) {\n top = rect.bottom + gap;\n }\n\n let left = rect.left;\n // Clamp to viewport\n el.style.display = 'block';\n el.style.top = `${top}px`;\n el.style.left = `${Math.max(4, left)}px`;\n\n // Adjust if overflows right side\n requestAnimationFrame(() => {\n const labelRect = el.getBoundingClientRect();\n if (labelRect.right > window.innerWidth - 4) {\n el.style.left = `${window.innerWidth - labelRect.width - 4}px`;\n }\n });\n}\n\nexport function hideLabel(): void {\n if (labelEl) {\n labelEl.style.display = 'none';\n }\n}\n\nexport function destroyLabel(): void {\n if (labelEl) {\n labelEl.remove();\n labelEl = null;\n }\n}\n","const FRAMEWORK_CLASS_PATTERNS = [\n /^v-/, /^ng-/, /^_ng/, /^svelte-/, /^css-/, /^jsx-/, /^sc-/,\n /^__/, /^css-\\d/, /^rs-/, /^emotion-/,\n /^[a-zA-Z]{1,3}[A-Z][a-zA-Z0-9]{4,8}$/, // CSS-module hashes like \"aBcDeFgH\"\n];\n\nfunction isFrameworkClass(cls: string): boolean {\n return FRAMEWORK_CLASS_PATTERNS.some(p => p.test(cls));\n}\n\nfunction escapeSelector(str: string): string {\n if (typeof CSS !== 'undefined' && CSS.escape) {\n return CSS.escape(str);\n }\n // Fallback for environments without CSS.escape (e.g. jsdom)\n return str.replace(/([\\0-\\x1f\\x7f]|^-?\\d|^-$|[^\\x80-\\uFFFF\\w-])/g, (ch) => {\n if (ch === '\\0') return '\\uFFFD';\n return '\\\\' + ch;\n });\n}\n\nfunction getNthChildIndex(el: Element): number {\n let index = 1;\n let sibling = el.previousElementSibling;\n while (sibling) {\n if (sibling.tagName === el.tagName) index++;\n sibling = sibling.previousElementSibling;\n }\n return index;\n}\n\nfunction getSiblingCount(el: Element): number {\n let count = 0;\n const parent = el.parentElement;\n if (!parent) return 0;\n for (let i = 0; i < parent.children.length; i++) {\n if (parent.children[i].tagName === el.tagName) count++;\n }\n return count;\n}\n\nfunction buildSegment(el: Element): string {\n const tag = el.tagName.toLowerCase();\n\n // Prefer ID\n if (el.id && !isFrameworkClass(el.id)) {\n return `#${escapeSelector(el.id)}`;\n }\n\n // Use meaningful classes\n const classes = Array.from(el.classList).filter(c => !isFrameworkClass(c));\n if (classes.length > 0) {\n const classSelector = tag + classes.map(c => `.${escapeSelector(c)}`).join('');\n // Check if unique among siblings\n const parent = el.parentElement;\n if (parent) {\n const matches = parent.querySelectorAll(`:scope > ${classSelector}`);\n if (matches.length === 1) return classSelector;\n }\n }\n\n // Fallback to nth-of-type\n if (getSiblingCount(el) > 1) {\n return `${tag}:nth-of-type(${getNthChildIndex(el)})`;\n }\n\n return tag;\n}\n\nexport function generateSelector(el: Element): string {\n // If element has a unique ID, just return that\n if (el.id && !isFrameworkClass(el.id)) {\n const id = `#${escapeSelector(el.id)}`;\n if (document.querySelectorAll(id).length === 1) return id;\n }\n\n const parts: string[] = [];\n let current: Element | null = el;\n\n while (current && current !== document.documentElement && current !== document.body) {\n const segment = buildSegment(current);\n parts.unshift(segment);\n\n // If the selector is already unique, stop climbing\n if (segment.startsWith('#')) break;\n\n const candidate = parts.join(' > ');\n try {\n if (document.querySelectorAll(candidate).length === 1) break;\n } catch {\n // invalid selector, keep climbing\n }\n\n current = current.parentElement;\n }\n\n // Prepend body if needed for uniqueness\n const selector = parts.join(' > ');\n try {\n if (document.querySelectorAll(selector).length !== 1) {\n return 'body > ' + selector;\n }\n } catch {\n // return as-is\n }\n\n return selector;\n}\n","export interface StyleCategory {\n name: string;\n properties: { name: string; value: string }[];\n}\n\nconst CATEGORIES: { name: string; props: string[] }[] = [\n {\n name: 'Typography',\n props: [\n 'font-family', 'font-size', 'font-weight', 'font-style',\n 'line-height', 'letter-spacing', 'text-align', 'text-decoration',\n 'text-transform', 'color',\n ],\n },\n {\n name: 'Box Model',\n props: [\n 'width', 'height', 'padding', 'margin',\n 'border', 'border-radius',\n ],\n },\n {\n name: 'Background',\n props: [\n 'background-color', 'background-image', 'background-size',\n 'background-position', 'opacity',\n ],\n },\n {\n name: 'Layout',\n props: [\n 'display', 'position', 'top', 'right', 'bottom', 'left',\n 'z-index', 'overflow', 'float', 'clear',\n ],\n },\n {\n name: 'Flexbox / Grid',\n props: [\n 'flex-direction', 'flex-wrap', 'justify-content', 'align-items',\n 'align-content', 'gap', 'grid-template-columns', 'grid-template-rows',\n 'grid-column', 'grid-row',\n ],\n },\n];\n\nfunction isDefaultValue(prop: string, value: string): boolean {\n const defaults: Record<string, Set<string>> = {\n 'font-style': new Set(['normal']),\n 'letter-spacing': new Set(['normal', '0px']),\n 'text-decoration': new Set(['none', 'none solid rgb(0, 0, 0)']),\n 'text-transform': new Set(['none']),\n 'background-image': new Set(['none']),\n 'background-size': new Set(['auto']),\n 'background-position': new Set(['0% 0%']),\n 'opacity': new Set(['1']),\n 'top': new Set(['auto']),\n 'right': new Set(['auto']),\n 'bottom': new Set(['auto']),\n 'left': new Set(['auto']),\n 'z-index': new Set(['auto']),\n 'overflow': new Set(['visible']),\n 'float': new Set(['none']),\n 'clear': new Set(['none']),\n 'flex-direction': new Set(['row']),\n 'flex-wrap': new Set(['nowrap']),\n 'grid-template-columns': new Set(['none']),\n 'grid-template-rows': new Set(['none']),\n 'grid-column': new Set(['auto', 'auto / auto']),\n 'grid-row': new Set(['auto', 'auto / auto']),\n };\n\n return defaults[prop]?.has(value) ?? false;\n}\n\nfunction readShorthand(cs: CSSStyleDeclaration, prop: string): string {\n if (prop === 'padding') {\n const t = cs.paddingTop, r = cs.paddingRight, b = cs.paddingBottom, l = cs.paddingLeft;\n if (t === r && r === b && b === l) return t;\n if (t === b && r === l) return `${t} ${r}`;\n return `${t} ${r} ${b} ${l}`;\n }\n if (prop === 'margin') {\n const t = cs.marginTop, r = cs.marginRight, b = cs.marginBottom, l = cs.marginLeft;\n if (t === r && r === b && b === l) return t;\n if (t === b && r === l) return `${t} ${r}`;\n return `${t} ${r} ${b} ${l}`;\n }\n if (prop === 'border') {\n return `${cs.borderTopWidth} ${cs.borderTopStyle} ${cs.borderTopColor}`;\n }\n if (prop === 'border-radius') {\n const tl = cs.borderTopLeftRadius, tr = cs.borderTopRightRadius;\n const br = cs.borderBottomRightRadius, bl = cs.borderBottomLeftRadius;\n if (tl === tr && tr === br && br === bl) return tl;\n return `${tl} ${tr} ${br} ${bl}`;\n }\n return cs.getPropertyValue(prop);\n}\n\nexport function extractStyles(el: HTMLElement): StyleCategory[] {\n const cs = getComputedStyle(el);\n const result: StyleCategory[] = [];\n\n for (const cat of CATEGORIES) {\n const properties: { name: string; value: string }[] = [];\n\n for (const prop of cat.props) {\n const value = readShorthand(cs, prop);\n if (value && !isDefaultValue(prop, value)) {\n properties.push({ name: prop, value });\n }\n }\n\n if (properties.length > 0) {\n result.push({ name: cat.name, properties });\n }\n }\n\n return result;\n}\n\nexport function formatStylesForClipboard(categories: StyleCategory[]): string {\n const lines: string[] = [];\n for (const cat of categories) {\n lines.push(`/* ${cat.name} */`);\n for (const p of cat.properties) {\n lines.push(`${p.name}: ${p.value};`);\n }\n lines.push('');\n }\n return lines.join('\\n').trim();\n}\n","export async function copyToClipboard(text: string): Promise<boolean> {\n if (navigator.clipboard && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n // fall through to fallback\n }\n }\n\n // Fallback for non-HTTPS contexts\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.style.position = 'fixed';\n textarea.style.left = '-9999px';\n textarea.style.top = '-9999px';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n\n try {\n const ok = document.execCommand('copy');\n return ok;\n } catch {\n return false;\n } finally {\n document.body.removeChild(textarea);\n }\n}\n","import { state } from '../core/state';\nimport { ICONS } from '../ui/icons';\nimport { generateSelector } from '../selector/generator';\nimport { extractStyles, formatStylesForClipboard } from './style-reader';\nimport { copyToClipboard } from '../utils/clipboard';\n\nlet panelEl: HTMLElement | null = null;\n// Store as page (document) coordinates so panel scrolls with the page\nlet pageClickX = 0;\nlet pageClickY = 0;\n\nfunction createPanelHTML(el: HTMLElement, selector: string): string {\n const categories = extractStyles(el);\n const tag = el.tagName.toLowerCase();\n\n let sectionsHTML = '';\n for (const cat of categories) {\n let linesHTML = '';\n for (const p of cat.properties) {\n linesHTML += `<div class=\"ag-code-line\"><span class=\"ag-prop-name\">${p.name}</span>: <span class=\"ag-prop-value\">${escapeHTML(p.value)}</span>;</div>`;\n }\n sectionsHTML += `<div class=\"ag-section\"><div class=\"ag-section-title\">${cat.name}</div><div class=\"ag-code\">${linesHTML}</div></div>`;\n }\n\n return `\n <div class=\"ag-panel-header\">\n <span class=\"ag-panel-title\">&lt;${tag}&gt;</span>\n <div class=\"ag-panel-actions\">\n <button class=\"ag-panel-btn\" data-action=\"copy-selector\" title=\"Copy selector\">\n ${ICONS.copy} Selector\n </button>\n <button class=\"ag-panel-btn\" data-action=\"copy-styles\" title=\"Copy all styles\">\n ${ICONS.copy} Styles\n </button>\n <button class=\"ag-panel-close\" data-action=\"close\" title=\"Close panel\">\n ${ICONS.close}\n </button>\n </div>\n </div>\n <div class=\"ag-selector\">${escapeHTML(selector)}</div>\n ${sectionsHTML}\n `;\n}\n\nfunction escapeHTML(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\nfunction positionPanel(): void {\n if (!panelEl) return;\n const panelWidth = 340;\n const gap = 12;\n\n // Convert page coords → viewport coords so panel scrolls with the page\n const viewX = pageClickX - window.scrollX;\n const viewY = pageClickY - window.scrollY;\n\n // Position to the right of the click point\n let left = viewX + gap;\n if (left + panelWidth > window.innerWidth - 8) {\n left = viewX - panelWidth - gap;\n if (left < 8) {\n left = window.innerWidth - panelWidth - 8;\n }\n }\n\n let top = viewY - 20;\n if (top + 480 > window.innerHeight - 8) {\n top = Math.max(8, window.innerHeight - 488);\n }\n if (top < 8) top = 8;\n\n panelEl.style.top = `${top}px`;\n panelEl.style.left = `${left}px`;\n}\n\nfunction handlePanelClick(e: Event): void {\n const target = e.target as HTMLElement;\n const btn = target.closest('[data-action]') as HTMLElement | null;\n if (!btn) return;\n\n const action = btn.dataset.action;\n\n if (action === 'close') {\n hidePanel();\n return;\n }\n\n if (action === 'copy-selector' && state.selectedElement) {\n const selector = generateSelector(state.selectedElement);\n copyToClipboard(selector).then(() => flashCopied(btn));\n return;\n }\n\n if (action === 'copy-styles' && state.selectedElement) {\n const categories = extractStyles(state.selectedElement);\n const text = formatStylesForClipboard(categories);\n copyToClipboard(text).then(() => flashCopied(btn));\n return;\n }\n}\n\nfunction flashCopied(btn: HTMLElement): void {\n const original = btn.innerHTML;\n btn.innerHTML = `${ICONS.check} Copied!`;\n btn.classList.add('copied');\n setTimeout(() => {\n btn.innerHTML = original;\n btn.classList.remove('copied');\n }, 1500);\n}\n\nexport function showPanel(target: HTMLElement, cursorX: number, cursorY: number): void {\n hidePanel(true);\n\n state.selectedElement = target;\n state.panelVisible = true;\n // Store as page (document) coordinates\n pageClickX = cursorX + window.scrollX;\n pageClickY = cursorY + window.scrollY;\n\n const selector = generateSelector(target);\n\n panelEl = document.createElement('div');\n panelEl.className = 'ag-panel' + (state.theme === 'light' ? ' ag-light' : '');\n panelEl.innerHTML = createPanelHTML(target, selector);\n panelEl.addEventListener('click', handlePanelClick);\n\n state.shadowRoot?.appendChild(panelEl);\n positionPanel();\n\n // Trigger enter animation on next frame\n requestAnimationFrame(() => {\n panelEl?.classList.add('ag-panel-visible');\n });\n}\n\nexport function hidePanel(immediate = false): void {\n if (!panelEl) return;\n\n if (immediate) {\n // Remove instantly (used when replacing with a new panel)\n panelEl.removeEventListener('click', handlePanelClick);\n panelEl.remove();\n panelEl = null;\n state.selectedElement = null;\n state.panelVisible = false;\n return;\n }\n\n // Animate out\n const el = panelEl;\n el.classList.remove('ag-panel-visible');\n el.classList.add('ag-panel-hiding');\n\n const onDone = () => {\n el.removeEventListener('transitionend', onDone);\n el.removeEventListener('click', handlePanelClick);\n el.remove();\n if (panelEl === el) panelEl = null;\n };\n el.addEventListener('transitionend', onDone, { once: true });\n // Fallback in case transitionend doesn't fire\n setTimeout(onDone, 250);\n\n state.selectedElement = null;\n state.panelVisible = false;\n}\n\nexport function repositionPanel(): void {\n if (panelEl && state.panelVisible) {\n positionPanel();\n }\n}\n\nexport function destroyPanel(): void {\n hidePanel(true);\n}\n","import { state } from '../core/state';\nimport { isInteractable, isOwnElement } from '../utils/dom';\nimport { showHighlight, hideHighlight } from '../overlay/highlight';\nimport { showLabel, hideLabel } from '../overlay/label';\nimport { showPanel, hidePanel } from '../panel/style-panel';\n\nfunction onMouseMove(e: MouseEvent): void {\n if (!state.active) return;\n\n const target = e.target as Element;\n if (!target || isOwnElement(target) || !isInteractable(target)) {\n return;\n }\n\n const el = target as HTMLElement;\n if (state.hoveredElement === el) return;\n\n state.hoveredElement = el;\n showHighlight(el);\n showLabel(el);\n}\n\nfunction onMouseOut(e: MouseEvent): void {\n if (!state.active) return;\n\n // Only hide if mouse actually left the element (not entering a child)\n const related = e.relatedTarget as Element | null;\n if (related && !isOwnElement(related) && isInteractable(related)) {\n return;\n }\n\n state.hoveredElement = null;\n hideHighlight();\n hideLabel();\n}\n\nfunction onClick(e: MouseEvent): void {\n if (!state.active) return;\n\n const target = e.target as Element;\n if (!target || isOwnElement(target)) return;\n if (!isInteractable(target)) return;\n\n // Prevent the page from handling the click\n e.preventDefault();\n e.stopPropagation();\n\n const el = target as HTMLElement;\n\n if (state.panelVisible && state.selectedElement === el) {\n hidePanel();\n } else {\n showPanel(el, e.clientX, e.clientY);\n }\n}\n\nexport function bindMouseEvents(): void {\n document.addEventListener('mousemove', onMouseMove, true);\n document.addEventListener('click', onClick, true);\n}\n\nexport function unbindMouseEvents(): void {\n document.removeEventListener('mousemove', onMouseMove, true);\n document.removeEventListener('click', onClick, true);\n hideHighlight();\n hideLabel();\n}\n","import { state } from '../core/state';\nimport { hidePanel } from '../panel/style-panel';\n\nlet toggleCallback: (() => void) | null = null;\n\nfunction onKeyDown(e: KeyboardEvent): void {\n // Ctrl+Shift+A (or Cmd+Shift+A on Mac) — toggle inspector\n if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === 'A') {\n e.preventDefault();\n e.stopPropagation();\n toggleCallback?.();\n return;\n }\n\n // Escape — close panel or deactivate\n if (e.key === 'Escape' && state.active) {\n e.preventDefault();\n if (state.panelVisible) {\n hidePanel();\n } else {\n toggleCallback?.();\n }\n return;\n }\n}\n\nexport function bindKeyboardEvents(onToggle: () => void): void {\n toggleCallback = onToggle;\n document.addEventListener('keydown', onKeyDown, true);\n}\n\nexport function unbindKeyboardEvents(): void {\n document.removeEventListener('keydown', onKeyDown, true);\n toggleCallback = null;\n}\n","import { state } from '../core/state';\nimport { showHighlight } from '../overlay/highlight';\nimport { showLabel } from '../overlay/label';\nimport { repositionPanel } from '../panel/style-panel';\n\nlet rafId: number | null = null;\n\nfunction update(): void {\n rafId = null;\n\n if (!state.active) return;\n\n if (state.hoveredElement) {\n showHighlight(state.hoveredElement);\n showLabel(state.hoveredElement);\n }\n\n if (state.panelVisible) {\n repositionPanel();\n }\n}\n\nfunction onScrollOrResize(): void {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(update);\n}\n\nexport function bindScrollResize(): void {\n window.addEventListener('scroll', onScrollOrResize, true);\n window.addEventListener('resize', onScrollOrResize, true);\n}\n\nexport function unbindScrollResize(): void {\n window.removeEventListener('scroll', onScrollOrResize, true);\n window.removeEventListener('resize', onScrollOrResize, true);\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n}\n","import { state, savedActive, resetState, savePrefs } from './state';\nimport { createShadowHost, destroyShadowHost } from '../ui/shadow-host';\nimport { ICONS } from '../ui/icons';\nimport { bindMouseEvents, unbindMouseEvents } from '../events/mouse';\nimport { bindKeyboardEvents, unbindKeyboardEvents } from '../events/keyboard';\nimport { bindScrollResize, unbindScrollResize } from '../events/scroll-resize';\nimport { showHighlight, hideHighlight, destroyHighlight } from '../overlay/highlight';\nimport { hideLabel, destroyLabel } from '../overlay/label';\nimport { hidePanel, destroyPanel } from '../panel/style-panel';\n\nlet toolbar: HTMLElement | null = null;\nlet themeBtn: HTMLElement | null = null;\n\nexport class Inspector {\n private initialized = false;\n\n init(): void {\n if (this.initialized) return;\n this.initialized = true;\n\n const shadow = createShadowHost();\n this.createToolbar(shadow);\n bindKeyboardEvents(() => this.toggle());\n bindScrollResize();\n\n // Restore saved theme on the toolbar\n if (state.theme === 'light') {\n toolbar?.classList.add('ag-light');\n }\n\n // Restore active state from previous session\n if (savedActive) {\n this.activate();\n }\n }\n\n private createToolbar(shadow: ShadowRoot): void {\n toolbar = document.createElement('div');\n toolbar.className = 'ag-toolbar';\n\n // Inspect toggle\n const toggleBtn = document.createElement('button');\n toggleBtn.className = 'ag-toggle';\n toggleBtn.innerHTML = `<span class=\"ag-toggle-label\">Inspect</span><span class=\"ag-toggle-track\"><span class=\"ag-toggle-knob\"></span></span>`;\n toggleBtn.title = 'Toggle Element Inspector (Ctrl+Shift+A)';\n toggleBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n this.toggle();\n });\n\n // Divider\n const div1 = document.createElement('span');\n div1.className = 'ag-toolbar-divider';\n\n // Color picker\n const colorWrap = document.createElement('label');\n colorWrap.className = 'ag-color-picker';\n colorWrap.title = 'Highlight color';\n const colorSwatch = document.createElement('span');\n colorSwatch.className = 'ag-color-swatch';\n colorSwatch.style.background = state.highlightColor;\n const colorInput = document.createElement('input');\n colorInput.type = 'color';\n colorInput.value = state.highlightColor;\n colorInput.addEventListener('input', (e) => {\n e.stopPropagation();\n const val = (e.target as HTMLInputElement).value;\n state.highlightColor = val;\n colorSwatch.style.background = val;\n if (state.hoveredElement) {\n showHighlight(state.hoveredElement);\n }\n savePrefs();\n });\n colorInput.addEventListener('click', (e) => e.stopPropagation());\n colorWrap.appendChild(colorSwatch);\n colorWrap.appendChild(colorInput);\n\n // Divider\n const div2 = document.createElement('span');\n div2.className = 'ag-toolbar-divider';\n\n // Theme toggle\n themeBtn = document.createElement('button');\n themeBtn.className = 'ag-theme-btn';\n themeBtn.title = 'Toggle light/dark panel';\n const initIcon = state.theme === 'dark' ? ICONS.sun : ICONS.moon;\n themeBtn.innerHTML = `<span class=\"ag-theme-icon\">${initIcon}</span>`;\n themeBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n this.toggleTheme();\n });\n\n toolbar.appendChild(toggleBtn);\n toolbar.appendChild(div1);\n toolbar.appendChild(colorWrap);\n toolbar.appendChild(div2);\n toolbar.appendChild(themeBtn);\n shadow.appendChild(toolbar);\n }\n\n private toggleTheme(): void {\n state.theme = state.theme === 'dark' ? 'light' : 'dark';\n\n // Animate icon swap\n if (themeBtn) {\n const iconWrap = themeBtn.querySelector('.ag-theme-icon') as HTMLElement | null;\n if (iconWrap) {\n iconWrap.classList.add('ag-icon-out');\n setTimeout(() => {\n const newIcon = state.theme === 'dark' ? ICONS.sun : ICONS.moon;\n iconWrap.innerHTML = newIcon;\n iconWrap.classList.remove('ag-icon-out');\n iconWrap.classList.add('ag-icon-in');\n iconWrap.addEventListener('animationend', () => {\n iconWrap.classList.remove('ag-icon-in');\n }, { once: true });\n }, 150);\n }\n }\n\n state.shadowRoot?.querySelector('.ag-panel')?.classList.toggle('ag-light', state.theme === 'light');\n toolbar?.classList.toggle('ag-light', state.theme === 'light');\n savePrefs();\n }\n\n activate(): void {\n if (state.active) return;\n state.active = true;\n toolbar?.querySelector('.ag-toggle')?.classList.add('active');\n bindMouseEvents();\n savePrefs();\n }\n\n deactivate(): void {\n if (!state.active) return;\n state.active = false;\n toolbar?.querySelector('.ag-toggle')?.classList.remove('active');\n unbindMouseEvents();\n hideHighlight();\n hideLabel();\n hidePanel();\n state.hoveredElement = null;\n savePrefs();\n }\n\n toggle(): void {\n if (state.active) {\n this.deactivate();\n } else {\n this.activate();\n }\n }\n\n destroy(): void {\n this.deactivate();\n unbindKeyboardEvents();\n unbindScrollResize();\n destroyHighlight();\n destroyLabel();\n destroyPanel();\n destroyShadowHost();\n resetState();\n toolbar = null;\n themeBtn = null;\n this.initialized = false;\n }\n\n get isActive(): boolean {\n return state.active;\n }\n}\n","import { Inspector } from './core/inspector';\nexport { Inspector } from './core/inspector';\nexport { generateSelector } from './selector/generator';\n\nlet instance: Inspector | null = null;\n\nexport function init(): Inspector {\n if (!instance) {\n instance = new Inspector();\n }\n instance.init();\n return instance;\n}\n\nexport function destroy(): void {\n instance?.destroy();\n instance = null;\n}\n\nexport function getInstance(): Inspector | null {\n return instance;\n}\n"],"names":[],"mappings":"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"}