@web-widget/inspector 1.68.0 → 1.69.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.
- package/dist/element.js +497 -614
- package/dist/element.js.map +1 -1
- package/dist/index.js +497 -614
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/widget-finder.ts","../src/utils/storage.ts","../src/utils/design-system.ts","../src/utils/theme.ts","../src/utils/box.ts","../src/utils/debug-data.ts","../src/constants.ts","../src/element.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Web Widget element finder utility\n * Responsible for locating and identifying web-widget elements in the DOM\n */\n\nexport function findWebWidgetContainer(\n element: HTMLElement | null\n): HTMLElement | null {\n if (!element) {\n return null;\n }\n\n if (element.tagName === 'WEB-WIDGET' && element.hasAttribute('import')) {\n return element;\n }\n\n const container = element.closest('web-widget[import]') as HTMLElement;\n return container;\n}\n","/**\n * Local storage utility functions\n * Responsible for handling inspector configuration and state persistence\n */\n\nexport function getStoredValue<T>(key: string, defaultValue: T): T {\n const stored = localStorage.getItem(key);\n if (stored === null) {\n return defaultValue;\n }\n try {\n return JSON.parse(stored);\n } catch {\n return defaultValue;\n }\n}\n\nexport function setStoredValue<T>(key: string, value: T): void {\n localStorage.setItem(key, JSON.stringify(value));\n}\n","import type { ThemeConfig } from '../types';\n\n/**\n * Design system constants\n */\n\n// Spacing system (rem)\nconst spacing = {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '0.75rem',\n lg: '1rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '2rem',\n '4xl': '2.5rem',\n '5xl': '3rem',\n} as const;\n\n// Typography system\nconst typography = {\n fontFamily: {\n sans: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n mono: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace',\n },\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n },\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n lineHeight: {\n none: '1',\n tight: '1.25',\n normal: '1.5',\n relaxed: '1.75',\n },\n letterSpacing: {\n normal: '0',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n },\n} as const;\n\n// Border radius system\nconst borderRadius = {\n none: '0',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n '3xl': '1.5rem',\n full: '9999px',\n} as const;\n\n// Shadow system\nconst boxShadow = {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n base: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',\n} as const;\n\n// Opacity system\nconst opacity = {\n 0: '0',\n 5: '0.05',\n 10: '0.1',\n 20: '0.2',\n 25: '0.25',\n 30: '0.3',\n 40: '0.4',\n 50: '0.5',\n 60: '0.6',\n 70: '0.7',\n 75: '0.75',\n 80: '0.8',\n 85: '0.85',\n 90: '0.9',\n 95: '0.95',\n 98: '0.98',\n 100: '1',\n} as const;\n\n// Blur system\nconst backdropBlur = {\n none: '0',\n sm: '4px',\n base: '8px',\n md: '12px',\n lg: '16px',\n xl: '24px',\n '2xl': '40px',\n '3xl': '64px',\n} as const;\n\n// Transition system\nconst transition = {\n none: 'none',\n all: 'all 150ms cubic-bezier(0.4, 0, 0.2, 1)',\n colors:\n 'color 150ms cubic-bezier(0.4, 0, 0.2, 1), background-color 150ms cubic-bezier(0.4, 0, 0.2, 1), border-color 150ms cubic-bezier(0.4, 0, 0.2, 1)',\n opacity: 'opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)',\n transform: 'transform 150ms cubic-bezier(0.4, 0, 0.2, 1)',\n} as const;\n\n// Z-index system\nconst zIndex = {\n auto: 'auto',\n 0: '0',\n 10: '10',\n 20: '20',\n 30: '30',\n 40: '40',\n 50: '50',\n dropdown: '1000',\n sticky: '1020',\n fixed: '1030',\n modal: '1040',\n popover: '1050',\n tooltip: '1060',\n toast: '1070',\n} as const;\n\n// Theme configuration\nconst themes = {\n light: {\n bg: 'rgba(255, 255, 255, 0.92)',\n fg: '#222',\n fgHover: '#111',\n fgSelected: '#000',\n border: '#e5e7eb',\n accent: '#888',\n accentHover: '#666',\n accentSelected: '#444',\n primary: 'rgba(102, 126, 234, 1)',\n primaryHover: 'rgba(102, 126, 234, 0.9)',\n primarySelected: 'rgba(102, 126, 234, 1)',\n },\n dark: {\n bg: 'rgba(17, 17, 17, 0.92)',\n fg: '#f3f4f6',\n fgHover: '#ffffff',\n fgSelected: '#ffffff',\n border: '#374151',\n accent: '#9ca3af',\n accentHover: '#d1d5db',\n accentSelected: '#f3f4f6',\n primary: 'rgba(102, 126, 234, 1)',\n primaryHover: 'rgba(102, 126, 234, 0.9)',\n primarySelected: 'rgba(102, 126, 234, 1)',\n },\n} as const satisfies Record<string, ThemeConfig>;\n\n// Design system utility functions\nexport const designSystem = {\n spacing,\n typography,\n borderRadius,\n boxShadow,\n opacity,\n backdropBlur,\n transition,\n zIndex,\n themes,\n} as const;\n\nexport const DESIGN_SYSTEM = {\n spacing: spacing,\n typography: typography,\n borderRadius: borderRadius,\n boxShadow: boxShadow,\n opacity: opacity,\n backdropBlur: backdropBlur,\n transition: transition,\n zIndex: zIndex,\n} as const;\n\n// Get theme variables\nexport function getThemeVariables(theme: keyof typeof themes): ThemeConfig {\n return themes[theme];\n}\n\n// Export design system instance\nexport default designSystem;\n","import type { ThemeMap, ThemeConfig } from '../types';\nimport { getThemeVariables } from './design-system';\n\nexport function applyTheme(vars: ThemeConfig): void {\n const root = document.documentElement;\n root.style.setProperty('--wwi-bg', vars.bg);\n root.style.setProperty('--wwi-fg', vars.fg);\n root.style.setProperty('--wwi-border', vars.border);\n root.style.setProperty('--wwi-accent', vars.accent);\n}\n\nexport function detectAutoTheme(): keyof ThemeMap | undefined {\n if (\n typeof document === 'undefined' ||\n !document.body ||\n !document.documentElement\n ) {\n return undefined;\n }\n\n const bodyStyle = getComputedStyle(document.body);\n let bg = bodyStyle?.backgroundColor;\n if (!bg || bg === 'rgba(0, 0, 0, 0)' || bg === 'transparent') {\n const docStyle = getComputedStyle(document.documentElement);\n bg = docStyle?.backgroundColor;\n }\n\n let isTransparent = false;\n if (!bg || bg === 'rgba(0, 0, 0, 0)' || bg === 'transparent') {\n bg = 'rgb(255,255,255)';\n isTransparent = true;\n }\n\n let r = 255;\n let g = 255;\n let b = 255;\n\n const match = bg.match(/rgba?\\(([^)]+)\\)/);\n if (match) {\n const parts = match[1]?.split(',').map((x) => parseFloat(x.trim())) ?? [];\n r = parts[0] ?? 255;\n g = parts[1] ?? 255;\n b = parts[2] ?? 255;\n }\n\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n if (isTransparent || Number.isNaN(brightness) || brightness >= 128) {\n return 'light';\n } else {\n return 'dark';\n }\n}\n\nexport function applyThemeMode(mode: keyof ThemeMap | 'auto'): void {\n if (mode !== 'auto') {\n const theme = getThemeVariables(mode);\n if (theme) {\n applyTheme(theme);\n }\n return;\n }\n\n const autoTheme = detectAutoTheme();\n if (autoTheme) {\n const theme = getThemeVariables(autoTheme);\n if (theme) {\n applyTheme(theme);\n } else {\n // Fallback to light theme if auto detection fails\n applyTheme(getThemeVariables('light'));\n }\n } else {\n // Fallback to light theme if auto detection fails\n applyTheme(getThemeVariables('light'));\n }\n}\n","type ElementBounds = {\n width: number;\n height: number;\n top: number;\n right: number;\n bottom: number;\n left: number;\n} | null;\n\n/**\n * Check if DOMRect is valid (has actual dimensions)\n */\nfunction isValidRect(rect: DOMRect): boolean {\n return rect.width > 0 || rect.height > 0;\n}\n\n/**\n * Merge multiple DOMRects into one containing all rectangular areas\n */\nfunction mergeRects(rects: DOMRect[]): ElementBounds {\n if (rects.length === 0) return null;\n\n let top = Infinity,\n left = Infinity,\n right = -Infinity,\n bottom = -Infinity;\n\n for (const rect of rects) {\n top = Math.min(top, rect.top);\n left = Math.min(left, rect.left);\n right = Math.max(right, rect.right);\n bottom = Math.max(bottom, rect.bottom);\n }\n\n return {\n top,\n left,\n right,\n bottom,\n width: right - left,\n height: bottom - top,\n };\n}\n\n/**\n * Get all valid layout boxes (visual boxes) of a node and all its descendant nodes\n *\n * ✅ Supports:\n * - Element boxes\n * - display: contents elements\n * - Shadow DOM subtrees\n * - <slot> distributed nodes\n * - Text nodes (measured via Range)\n *\n * ❌ Not supported (technical limitations or high complexity):\n * - ::before / ::after pseudo-elements (no corresponding DOM nodes)\n * - Anonymous boxes (like blocks in editable areas)\n * - Overflow clipping hints\n * - clip-path / mask visual area restrictions\n * - Range.getClientRects (multi-line text split into multiple rects)\n */\nfunction getNodeRectsDeep(node: Node): DOMRect[] {\n const rects: DOMRect[] = [];\n\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n const style = getComputedStyle(el);\n\n // Ignore display: none elements\n if (style.display === 'none') return [];\n\n // Self visual box (display: contents elements may have no size themselves, but still recurse their children)\n const rect = el.getBoundingClientRect();\n if (isValidRect(rect)) rects.push(rect);\n\n // Shadow DOM child elements (like Web Components)\n const children = el.shadowRoot\n ? Array.from(el.shadowRoot.children)\n : Array.from(el.children);\n\n for (const child of children) {\n rects.push(...getNodeRectsDeep(child));\n }\n\n // If it's a <slot> element, get its distributed real nodes\n if (el.tagName === 'SLOT') {\n const assigned = (el as HTMLSlotElement).assignedNodes({ flatten: true });\n for (const assignedNode of assigned) {\n rects.push(...getNodeRectsDeep(assignedNode));\n }\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n // Text nodes use Range to measure their visual box (default merge all fragments into one rect)\n const range = document.createRange();\n range.selectNodeContents(node);\n const rect = range.getBoundingClientRect();\n if (isValidRect(rect)) rects.push(rect);\n }\n\n return rects;\n}\n\n/**\n * Get the complete visual box of any element (including areas expanded by child elements)\n *\n * ✅ Includes child elements, Shadow DOM, slot content, etc. that expand the size\n * ❌ Does not include pseudo-elements, anonymous layout boxes, clip clipping areas\n */\nexport function getElementBox(el: Element): ElementBounds {\n const allRects = getNodeRectsDeep(el);\n return mergeRects(allRects);\n}\n","import { getElementBox } from './box';\nimport type { ElementBounds } from '../types';\n\nexport interface DebugDataItem {\n key: string;\n value: string;\n priority: number; // 1 = highest priority, 10 = lowest priority\n}\n\nexport interface WebWidgetDebugData {\n name?: string;\n module?: string;\n loading?: string;\n renderTarget?: string;\n status?: string;\n inactive?: boolean;\n contextData?: Record<string, any>;\n loadTime?: number;\n mountTime?: number;\n}\n\nexport interface ElementDebugData {\n tag: string;\n id?: string;\n bounds: ElementBounds;\n isWebWidget: boolean;\n webWidgetData?: WebWidgetDebugData;\n}\n\nexport class DebugDataCollector {\n /**\n * Collect debug data for an element\n */\n static collectElementData(element: HTMLElement): ElementDebugData {\n const bounds = getElementBox(element) ?? {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n };\n const isWebWidget = element.tagName === 'WEB-WIDGET';\n\n const data: ElementDebugData = {\n tag: element.tagName.toLowerCase(),\n bounds,\n isWebWidget,\n };\n\n // Basic element information\n if (element.id) {\n data.id = element.id;\n }\n\n // Web Widget specific data\n if (isWebWidget) {\n data.webWidgetData = this.collectWebWidgetData(element);\n }\n\n return data;\n }\n\n /**\n * Collect debug data for Web Widget\n */\n static collectWebWidgetData(element: HTMLElement): WebWidgetDebugData {\n const data: WebWidgetDebugData = {};\n\n // Component name\n const name = element.getAttribute('name');\n if (name) {\n data.name = name;\n }\n\n // Module path\n const importUrl = element.getAttribute('import');\n if (importUrl) {\n data.module = importUrl;\n }\n\n // Loading strategy\n const loading = (element as any).loading;\n if (loading && loading !== 'eager') {\n data.loading = loading;\n }\n\n // Render target\n const renderTarget = (element as any).renderTarget;\n if (renderTarget && renderTarget !== 'light') {\n data.renderTarget = renderTarget;\n }\n\n // Status information\n const status = (element as any).status;\n if (status) {\n data.status = status;\n }\n\n // Inactive status\n if ((element as any).inactive) {\n data.inactive = true;\n }\n\n // Parameter data\n const contextData = element.getAttribute('contextdata');\n if (contextData) {\n try {\n data.contextData = JSON.parse(contextData);\n } catch {\n // Ignore when parsing fails\n }\n }\n\n // Performance data\n const performanceData = this.collectPerformanceData();\n if (performanceData.loadTime) {\n data.loadTime = performanceData.loadTime;\n }\n if (performanceData.mountTime) {\n data.mountTime = performanceData.mountTime;\n }\n\n return data;\n }\n\n /**\n * Collect performance data\n */\n static collectPerformanceData(): { loadTime?: number; mountTime?: number } {\n const data: { loadTime?: number; mountTime?: number } = {};\n\n // Web Widget uses fixed measurement names: web-widget:load and web-widget:mount\n const loadMeasure = performance.getEntriesByName('web-widget:load')[0];\n const mountMeasure = performance.getEntriesByName('web-widget:mount')[0];\n\n if (loadMeasure) {\n data.loadTime = Math.round(loadMeasure.duration);\n }\n if (mountMeasure) {\n data.mountTime = Math.round(mountMeasure.duration);\n }\n\n return data;\n }\n\n /**\n * Convert debug data to display format with priority-based sorting\n */\n static formatDebugData(data: ElementDebugData): DebugDataItem[] {\n const items: DebugDataItem[] = [];\n\n if (data.isWebWidget && data.webWidgetData) {\n // Web Widget specific information - ordered by importance\n const widgetData = data.webWidgetData;\n\n // Priority 1: Component Name (most important for identification)\n if (widgetData.name) {\n items.push({ key: 'Component', value: widgetData.name, priority: 1 });\n }\n\n // Priority 2: Module Path (essential for development)\n if (widgetData.module) {\n items.push({ key: 'Module', value: widgetData.module, priority: 2 });\n }\n\n // Priority 3: Status (critical for debugging)\n if (widgetData.status) {\n items.push({ key: 'Status', value: widgetData.status, priority: 3 });\n }\n\n // Priority 4: Inactive status (important state)\n if (widgetData.inactive) {\n items.push({ key: 'State', value: 'inactive', priority: 4 });\n }\n\n // Priority 5: Loading strategy (performance related)\n if (widgetData.loading) {\n items.push({ key: 'Loading', value: widgetData.loading, priority: 5 });\n }\n\n // Priority 6: Render target (technical detail)\n if (widgetData.renderTarget) {\n items.push({\n key: 'Render',\n value: widgetData.renderTarget,\n priority: 6,\n });\n }\n\n // Priority 7: Performance metrics (useful for optimization)\n if (widgetData.loadTime) {\n items.push({\n key: 'Load Time',\n value: `${widgetData.loadTime}ms`,\n priority: 7,\n });\n }\n\n if (widgetData.mountTime) {\n items.push({\n key: 'Mount Time',\n value: `${widgetData.mountTime}ms`,\n priority: 8,\n });\n }\n\n // Priority 9: Parameters (context data)\n if (widgetData.contextData) {\n const dataKeys = Object.keys(widgetData.contextData);\n if (dataKeys.length > 0) {\n items.push({\n key: 'Parameters',\n value: `${dataKeys.length} keys`,\n priority: 9,\n });\n }\n }\n } else {\n // Basic information for non-Web Widget elements\n items.push({ key: 'Tag', value: data.tag, priority: 1 });\n\n if (data.id) {\n items.push({ key: 'ID', value: data.id, priority: 2 });\n }\n }\n\n // Priority 10: Size information (always last, least important)\n items.push({\n key: 'Size',\n value: `${Math.round(data.bounds.width)}×${Math.round(data.bounds.height)}px`,\n priority: 10,\n });\n\n // Sort by priority (ascending)\n return items.sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Generate tooltip content with priority-based styling\n */\n static generateTooltipContent(element: HTMLElement): string {\n const debugData = this.collectElementData(element);\n const formattedData = this.formatDebugData(debugData);\n\n // Generate table HTML with priority-based styling\n const tableRows = formattedData\n .map((item) => {\n const priorityClass = this.getPriorityClass(item.priority);\n return `<tr class=\"${priorityClass}\"><td class=\"key\">${item.key}</td><td class=\"value\">${item.value}</td></tr>`;\n })\n .join('');\n\n // Add help text\n const helpText = debugData.isWebWidget\n ? '<div class=\"tooltip-help\">💡 Click to open source code</div>'\n : '';\n\n return `<table class=\"tooltip-table\">${tableRows}</table>${helpText}`;\n }\n\n /**\n * Get CSS class based on priority level\n */\n private static getPriorityClass(priority: number): string {\n if (priority <= 3) return 'priority-high';\n if (priority <= 6) return 'priority-medium';\n return 'priority-low';\n }\n}\n","/**\n * Z-Index hierarchy for Web Widget Inspector\n *\n * Hierarchy (from highest to lowest):\n * 1. Tooltip/Bubble (2147483647) - Highest priority, always on top\n * 2. Toolbar (2147483646) - Inspector controls, always visible\n * 3. Overlay (2147483645) - Element highlighting during inspection\n * 4. Page elements (default) - Normal page content\n */\n\nexport const Z_INDEX = {\n /** Tooltip/Bubble - Highest priority for information display */\n TOOLTIP: 2147483647,\n\n /** Toolbar - Inspector controls and UI */\n TOOLBAR: 2147483646,\n\n /** Overlay - Element highlighting during inspection mode */\n OVERLAY: 2147483645,\n\n /** Page elements - Default z-index for normal content */\n PAGE_ELEMENTS: 'auto',\n} as const;\n\n/**\n * CSS custom properties for z-index values\n */\nexport const Z_INDEX_CSS = {\n '--wwi-z-tooltip': Z_INDEX.TOOLTIP.toString(),\n '--wwi-z-toolbar': Z_INDEX.TOOLBAR.toString(),\n '--wwi-z-overlay': Z_INDEX.OVERLAY.toString(),\n} as const;\n","import { LitElement, html, css } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { findWebWidgetContainer } from './utils/widget-finder';\nimport { getStoredValue, setStoredValue } from './utils/storage';\nimport { applyThemeMode } from './utils/theme';\nimport { designSystem, DESIGN_SYSTEM } from './utils/design-system';\nimport { DebugDataCollector } from './utils/debug-data';\nimport type { ElementBounds } from './types';\nimport { getElementBox } from './utils/box';\nimport { Z_INDEX } from './constants';\n\nexport class HTMLWebWidgetInspectorElement extends LitElement {\n @property({ type: String })\n dir = '';\n\n @property({ type: Array })\n keys: string[] = [];\n\n @property({ type: String, attribute: 'page-source' })\n pageSource = '';\n\n private _theme: 'light' | 'dark' | 'auto' = 'auto';\n\n @property({ type: String })\n get theme(): 'light' | 'dark' | 'auto' {\n return this._theme;\n }\n\n set theme(value: 'light' | 'dark' | 'auto') {\n const oldValue = this._theme;\n this._theme = value;\n this.setAttribute('theme', value);\n if (oldValue !== value) {\n this.initializeTheme();\n }\n }\n\n @state()\n private isToolbarVisible = true;\n\n @state()\n private isInspectorMode = false;\n\n @state()\n private isMinimized = false;\n\n @state()\n private hoveredElement: HTMLElement | null = null;\n\n @state()\n private widgetCount = 0;\n\n private pressedKeys = new Set<string>();\n private tooltipElement: HTMLElement | null = null;\n private tooltipTimeout: number | null = null;\n\n static override styles = css`\n :host {\n display: contents;\n }\n\n .inspector-toolbar,\n .inspector-toolbar *,\n .inspector-tooltip,\n .inspector-tooltip * {\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',\n Arial, sans-serif !important;\n }\n\n .inspector-toolbar {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n position: fixed;\n bottom: 1rem;\n left: 1rem;\n z-index: ${Z_INDEX.TOOLBAR};\n background: var(--wwi-bg, rgba(255, 255, 255, 0.95));\n color: var(--wwi-fg, #222);\n padding: 0.75rem 1rem;\n border-radius: 0.375rem;\n border: 1px solid var(--wwi-border, #e5e7eb);\n box-shadow:\n 0 1px 3px 0 rgba(0, 0, 0, 0.1),\n 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',\n Arial, sans-serif;\n font-size: 0.875rem;\n min-width: max-content;\n transition: all 0.2s;\n backdrop-filter: blur(8px);\n }\n\n .inspector-toolbar[data-minimized='true'] {\n padding: 0 !important;\n gap: 0 !important;\n min-width: 0 !important;\n width: 32px !important;\n height: 32px !important;\n background: var(--wwi-bg, rgba(255, 255, 255, 0.95)) !important;\n border: 1px solid var(--wwi-border, #e5e7eb) !important;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06) !important;\n border-radius: 50% !important;\n cursor: pointer !important;\n justify-content: center !important;\n align-items: center !important;\n display: flex !important;\n transition:\n background 0.2s,\n border 0.2s !important;\n }\n\n .inspector-toolbar[data-minimized='true']:hover {\n background: var(--wwi-bg, rgba(255, 255, 255, 0.98)) !important;\n border: 1px solid var(--wwi-border, #e5e7eb) !important;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important;\n }\n\n .inspector-toolbar[data-minimized='true'] .inspector-header {\n display: flex !important;\n flex: 1 1 auto !important;\n align-items: center !important;\n justify-content: center !important;\n padding: 0 !important;\n margin: 0 !important;\n height: 100% !important;\n }\n\n .inspector-toolbar[data-minimized='true'] .inspector-logo {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 100% !important;\n height: 100% !important;\n margin: 0 !important;\n padding: 0 !important;\n }\n\n .inspector-toolbar[data-minimized='true'] .inspector-logo svg {\n margin: 0 !important;\n width: 16px !important;\n height: 16px !important;\n display: block !important;\n opacity: 0.7 !important;\n filter: none !important;\n transition: opacity 0.2s !important;\n }\n\n .inspector-toolbar[data-minimized='true']:hover .inspector-logo svg {\n opacity: 1 !important;\n filter: none !important;\n }\n\n .inspector-toolbar[data-minimized='true']\n .inspector-header\n .inspector-logo\n span,\n .inspector-toolbar[data-minimized='true'] .inspector-logo .logo-text,\n .inspector-toolbar[data-minimized='true'] .inspector-info,\n .inspector-toolbar[data-minimized='true'] .inspector-actions,\n .inspector-toolbar[data-minimized='true'] .inspector-controls {\n display: none !important;\n }\n\n .inspector-overlay {\n position: fixed;\n z-index: ${Z_INDEX.OVERLAY};\n pointer-events: none;\n background: repeating-linear-gradient(\n 45deg,\n rgba(102, 126, 234, 0.5),\n rgba(102, 126, 234, 0.5) 5px,\n rgba(255, 255, 255, 0.5) 5px,\n rgba(255, 255, 255, 0.5) 10px\n );\n border: 2px solid rgba(102, 126, 234, 0.9);\n border-radius: 0;\n box-sizing: border-box;\n }\n\n .inspector-tooltip {\n /* Styles dynamically injected by ensureTooltipStyles */\n display: none;\n }\n\n .inspector-header {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n padding-right: 0.5rem;\n }\n\n .inspector-logo {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-weight: 600;\n color: var(--wwi-accent, #888);\n font-size: 0.75rem;\n user-select: none;\n }\n\n .inspector-logo svg {\n cursor: pointer;\n color: var(--wwi-accent, #888);\n width: 16px;\n height: 16px;\n margin-right: 0.125rem;\n }\n\n .logo-text {\n display: flex;\n flex-direction: column;\n line-height: 1;\n gap: 0.125rem;\n align-items: flex-start;\n }\n\n .logo-title {\n font-weight: 700;\n font-size: 0.7rem;\n color: var(--wwi-accent, #888);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n }\n\n .logo-subtitle {\n font-weight: 500;\n font-size: 0.5rem;\n color: var(--wwi-accent, #888);\n opacity: 0.75;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n }\n\n .inspector-info {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n color: var(--wwi-fg, #222);\n opacity: 0.7;\n }\n\n .widget-count {\n color: var(--wwi-accent, #888);\n font-weight: 500;\n }\n\n .inspector-actions {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n }\n\n .inspector-controls {\n display: flex;\n align-items: center;\n gap: 0.125rem;\n }\n\n .inspector-btn {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n background: transparent;\n border: 1px solid transparent;\n color: var(--wwi-fg, #222);\n padding: 0.25rem 0.5rem;\n border-radius: 0.25rem;\n cursor: pointer;\n transition: all 0.15s ease;\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n opacity: 0.8;\n }\n\n .inspector-btn:hover {\n background: rgba(0, 0, 0, 0.12);\n border-color: rgba(0, 0, 0, 0.2);\n color: var(--wwi-fg, #111);\n opacity: 1;\n transform: translateY(-1px);\n box-shadow:\n 0 1px 3px 0 rgba(0, 0, 0, 0.1),\n 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n }\n\n .inspector-btn[data-selected='true'] {\n background: rgba(102, 126, 234, 0.15);\n border-color: rgba(102, 126, 234, 0.4);\n color: rgba(102, 126, 234, 1);\n box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.2);\n opacity: 1;\n position: relative;\n }\n\n .inspector-btn[data-selected='true']::before {\n content: '';\n position: absolute;\n top: -2px;\n left: -2px;\n right: -2px;\n bottom: -2px;\n background: linear-gradient(\n 45deg,\n rgba(102, 126, 234, 0.3),\n rgba(102, 126, 234, 0.1)\n );\n border-radius: 0.375rem;\n z-index: -1;\n animation: pulse 2s infinite;\n }\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 0.6;\n }\n 50% {\n opacity: 1;\n }\n }\n\n .inspector-btn[data-selected='true'] svg {\n stroke: rgba(102, 126, 234, 1);\n filter: drop-shadow(0 0 2px rgba(102, 126, 234, 0.3));\n }\n\n .inspector-btn svg {\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n stroke: currentColor;\n opacity: 0.9;\n }\n\n .inspector-toolbar[data-inspector-active='true'] {\n border-color: rgba(102, 126, 234, 0.4);\n box-shadow:\n 0 2px 8px rgba(0, 0, 0, 0.06),\n 0 0 0 1px rgba(102, 126, 234, 0.2);\n background: var(--wwi-bg, rgba(255, 255, 255, 0.98));\n }\n\n .inspector-toolbar[data-inspector-active='true']::before {\n content: '';\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n background: linear-gradient(\n 45deg,\n rgba(102, 126, 234, 0.1),\n rgba(102, 126, 234, 0.05)\n );\n border-radius: 0.5rem;\n z-index: -1;\n animation: toolbar-pulse 3s infinite;\n }\n\n @keyframes toolbar-pulse {\n 0%,\n 100% {\n opacity: 0.3;\n }\n 50% {\n opacity: 0.6;\n }\n }\n\n @media (max-width: 768px) {\n .inspector-toolbar {\n bottom: 0.75rem;\n left: 0.75rem;\n right: 0.75rem;\n flex-wrap: wrap;\n max-width: calc(100vw - 1.25rem);\n padding: 0.75rem 1rem;\n gap: 0.75rem;\n }\n\n .inspector-btn {\n padding: 0.75rem 0.75rem;\n font-size: 0.875rem;\n }\n\n .inspector-info {\n font-size: 0.875rem;\n }\n\n .logo-text {\n gap: 0.1rem;\n }\n\n .logo-title {\n font-size: 0.6rem;\n letter-spacing: 0.04em;\n }\n\n .logo-subtitle {\n font-size: 0.45rem;\n letter-spacing: 0.12em;\n }\n }\n `;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.initializeTheme();\n this.initializeEventListeners();\n this.updateWidgetCount();\n this.loadStoredState();\n this.loadRouteModuleSourceFromHeaders();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.cleanupTooltip();\n\n this.cleanupInspectorElements();\n }\n\n private initializeTheme(): void {\n applyThemeMode(this.theme);\n }\n\n private initializeEventListeners(): void {\n document.addEventListener('keydown', (e) => this.handleKeyEvent(e, true), {\n capture: true,\n });\n document.addEventListener('keyup', (e) => this.handleKeyEvent(e, false), {\n capture: true,\n });\n window.addEventListener('blur', this.clearKeys.bind(this), {\n capture: true,\n });\n document.addEventListener('mousemove', this.handleHoverEvent.bind(this), {\n capture: true,\n });\n document.addEventListener('mouseover', this.handleHoverEvent.bind(this), {\n capture: true,\n });\n document.addEventListener('click', this.handleClickEvent.bind(this), {\n capture: true,\n });\n document.addEventListener('contextmenu', this.clearKeys.bind(this), {\n capture: true,\n });\n window.addEventListener('resize', this.updateState.bind(this));\n document.addEventListener('scroll', this.updateState.bind(this));\n }\n\n private loadStoredState(): void {\n this.isToolbarVisible = getStoredValue(\n 'web-widget-inspector-visible',\n true\n );\n\n this.isMinimized = getStoredValue('web-widget-inspector-minimized', false);\n }\n\n private handleKeyEvent(event: KeyboardEvent, add: boolean): void {\n if (event.code === 'Escape' && this.isInspectorMode) {\n this.isInspectorMode = false;\n this.updateState();\n event.preventDefault();\n return;\n }\n\n if (add) {\n this.pressedKeys.add(event.code);\n } else {\n this.pressedKeys.delete(event.code);\n }\n\n this.updateState();\n }\n\n private clearKeys(): void {\n this.pressedKeys.clear();\n }\n\n private checkKeysMatch(targetKeys: string[]): boolean {\n if (!targetKeys.length) return false;\n return targetKeys.every((key: string) => {\n const normalizedKey = key === 'Shift' ? 'ShiftLeft' : key;\n return this.pressedKeys.has(key) || this.pressedKeys.has(normalizedKey);\n });\n }\n\n private handleHoverEvent(event: MouseEvent): void {\n if (!this.isInspectorMode) return;\n\n const target = findWebWidgetContainer(event.target as HTMLElement);\n\n if (this.hoveredElement !== target) {\n this.hoveredElement = target;\n this.updateState();\n }\n }\n\n private handleClickEvent(event: MouseEvent): void {\n if (this.isInspectorMode) {\n const toolbar = this.renderRoot?.querySelector('.inspector-toolbar');\n const isToolbarClick = toolbar?.contains(event.target as Node);\n\n if (isToolbarClick) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n\n const widgetTarget = findWebWidgetContainer(event.target as HTMLElement);\n const inspectUrl = widgetTarget?.getAttribute('import');\n if (inspectUrl) {\n document.body.style.cursor = 'progress';\n\n this.openInEditor(inspectUrl, this.dir);\n this.updateState();\n }\n }\n }\n\n private updateState(): void {\n const shouldShowInspector = !!(this.hoveredElement && this.isInspectorMode);\n const targetKeys = this.keys;\n const shouldShowToolbar =\n this.isToolbarVisible || this.checkKeysMatch(targetKeys);\n\n if (!this.isToolbarVisible && this.checkKeysMatch(targetKeys)) {\n this.showToolbar();\n }\n\n this.updateOverlay(shouldShowInspector);\n this.setButtonSelected(this.isInspectorMode);\n\n if (this.isInspectorMode) {\n const shouldShowPointer = !!this.hoveredElement;\n if (shouldShowPointer) {\n document.body.style.setProperty('cursor', 'pointer', 'important');\n } else {\n document.body.style.removeProperty('cursor');\n }\n } else {\n document.body.style.removeProperty('cursor');\n }\n\n this.requestUpdate();\n }\n\n private updateOverlay(show: boolean): void {\n let highlightOverlay = document.querySelector(\n '.web-widget-inspector-highlight-overlay'\n ) as HTMLElement;\n\n if (this.isInspectorMode) {\n if (show && this.hoveredElement) {\n if (!highlightOverlay) {\n highlightOverlay = document.createElement('div');\n highlightOverlay.className = 'web-widget-inspector-highlight-overlay';\n highlightOverlay.setAttribute('aria-hidden', 'true');\n document.body.appendChild(highlightOverlay);\n }\n\n const rect = getElementBox(this.hoveredElement) ?? {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n };\n\n highlightOverlay.style.cssText = `\n position: fixed !important;\n top: ${rect.top}px !important;\n left: ${rect.left}px !important;\n width: ${rect.width}px !important;\n height: ${rect.height}px !important;\n z-index: 999998 !important;\n pointer-events: none !important;\n visibility: visible !important;\n opacity: 1 !important;\n display: block !important;\n cursor: pointer !important;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif !important;\n background: repeating-linear-gradient(\n 45deg,\n rgba(102, 126, 234, 0.5),\n rgba(102, 126, 234, 0.5) 5px,\n rgba(255, 255, 255, 0.5) 5px,\n rgba(255, 255, 255, 0.5) 10px\n ) !important;\n border: 2px solid rgba(102, 126, 234, 0.9) !important;\n border-radius: 0 !important;\n box-sizing: border-box !important;\n `;\n\n this.showTooltip(this.hoveredElement);\n } else {\n if (highlightOverlay) {\n highlightOverlay.remove();\n }\n this.hideTooltip();\n }\n } else {\n if (highlightOverlay) {\n highlightOverlay.remove();\n }\n this.hideTooltip();\n }\n }\n\n private setButtonSelected(selected: boolean): void {\n const btn = this.renderRoot?.querySelector('.inspect-btn');\n if (btn) {\n btn.setAttribute('data-selected', selected ? 'true' : 'false');\n btn.setAttribute('aria-pressed', selected ? 'true' : 'false');\n }\n }\n\n private updateWidgetCount(): void {\n this.widgetCount = document.querySelectorAll('web-widget[import]').length;\n }\n\n private createTooltipElement(): HTMLElement {\n if (this.tooltipElement) {\n return this.tooltipElement;\n }\n\n if (!this.isInspectorMode) {\n const dummy = document.createElement('div');\n dummy.style.display = 'none';\n return dummy;\n }\n\n this.ensureTooltipStyles();\n\n const tooltip = document.createElement('div');\n tooltip.className = 'inspector-tooltip';\n tooltip.setAttribute('aria-hidden', 'true');\n tooltip.setAttribute('data-visible', 'false');\n\n document.body.appendChild(tooltip);\n this.tooltipElement = tooltip;\n return tooltip;\n }\n\n private ensureTooltipStyles(): void {\n if (!this.isInspectorMode) {\n return;\n }\n\n if (document.getElementById('inspector-tooltip-styles')) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = 'inspector-tooltip-styles';\n\n style.textContent = `\n .inspector-tooltip {\n position: fixed;\n z-index: ${Z_INDEX.TOOLTIP};\n pointer-events: none;\n background: var(--wwi-bg, rgba(255, 255, 255, 0.95));\n color: var(--wwi-fg, #222);\n border: 1px solid var(--wwi-border, #e5e7eb);\n border-radius: 0.375rem;\n padding: ${DESIGN_SYSTEM.spacing.lg} ${DESIGN_SYSTEM.spacing.xl};\n font-size: ${DESIGN_SYSTEM.typography.fontSize.base};\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif !important;\n line-height: ${DESIGN_SYSTEM.typography.lineHeight.normal};\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n letter-spacing: ${DESIGN_SYSTEM.typography.letterSpacing.normal};\n word-wrap: break-word;\n white-space: pre-wrap;\n box-shadow: ${DESIGN_SYSTEM.boxShadow.base};\n backdrop-filter: blur(8px);\n max-width: 640px;\n min-width: 280px;\n visibility: hidden;\n }\n\n .tooltip-table {\n width: 100%;\n border-collapse: collapse;\n font-size: ${DESIGN_SYSTEM.typography.fontSize.xs};\n line-height: ${DESIGN_SYSTEM.typography.lineHeight.normal};\n }\n\n .tooltip-table td {\n padding: ${DESIGN_SYSTEM.spacing.xs} 0;\n vertical-align: top;\n }\n\n .tooltip-table .key {\n color: var(--wwi-accent, #888);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.medium};\n padding-right: ${DESIGN_SYSTEM.spacing.lg};\n white-space: nowrap;\n text-align: left;\n opacity: 0.8;\n }\n\n .tooltip-table .value {\n color: var(--wwi-fg, #222);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n word-break: break-all;\n text-align: right;\n }\n\n /* Priority-based styling */\n .tooltip-table tr.priority-high .key {\n color: var(--wwi-fg, #222);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.semibold};\n opacity: 1;\n }\n\n .tooltip-table tr.priority-high .value {\n color: var(--wwi-fg, #222);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.medium};\n }\n\n .tooltip-table tr.priority-medium .key {\n color: var(--wwi-accent, #666);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.medium};\n opacity: 0.9;\n }\n\n .tooltip-table tr.priority-medium .value {\n color: var(--wwi-fg, #444);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n }\n\n .tooltip-table tr.priority-low .key {\n color: var(--wwi-accent, #888);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n opacity: 0.7;\n }\n\n .tooltip-table tr.priority-low .value {\n color: var(--wwi-fg, #666);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n opacity: 0.8;\n }\n\n .tooltip-help {\n margin-top: ${DESIGN_SYSTEM.spacing.md};\n padding-top: ${DESIGN_SYSTEM.spacing.md};\n border-top: 1px solid var(--wwi-border, #e5e7eb);\n font-size: ${DESIGN_SYSTEM.typography.fontSize.xs};\n color: var(--wwi-accent, #888);\n text-align: center;\n opacity: 0.8;\n }\n\n @media (max-width: 768px) {\n .inspector-toolbar {\n bottom: ${DESIGN_SYSTEM.spacing.md};\n left: ${DESIGN_SYSTEM.spacing.md};\n right: ${DESIGN_SYSTEM.spacing.md};\n flex-wrap: wrap;\n max-width: calc(100vw - ${DESIGN_SYSTEM.spacing.xl});\n padding: ${DESIGN_SYSTEM.spacing.md} ${DESIGN_SYSTEM.spacing.lg};\n gap: ${DESIGN_SYSTEM.spacing.md};\n }\n\n .inspector-btn {\n padding: ${DESIGN_SYSTEM.spacing.md} ${DESIGN_SYSTEM.spacing.md};\n font-size: ${DESIGN_SYSTEM.typography.fontSize.sm};\n }\n\n .inspector-info {\n font-size: ${DESIGN_SYSTEM.typography.fontSize.sm};\n }\n\n .inspector-tooltip {\n font-size: ${DESIGN_SYSTEM.typography.fontSize.sm};\n padding: ${DESIGN_SYSTEM.spacing.md} ${DESIGN_SYSTEM.spacing.lg};\n max-width: calc(100vw - ${DESIGN_SYSTEM.spacing.xl});\n }\n \n .tooltip-table {\n font-size: ${DESIGN_SYSTEM.typography.fontSize.sm};\n }\n }\n `;\n\n document.head.appendChild(style);\n }\n\n private calculateSimplePosition(\n elementRect: ElementBounds,\n tooltipRect: DOMRect\n ): { x: number; y: number } {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const padding = 8;\n const minMargin = 8;\n\n let x = elementRect.left;\n let y = elementRect.top - tooltipRect.height - padding;\n\n if (y < minMargin) {\n y = elementRect.top + elementRect.height + padding;\n }\n\n x = Math.max(\n minMargin,\n Math.min(viewportWidth - tooltipRect.width - minMargin, x)\n );\n y = Math.max(\n minMargin,\n Math.min(viewportHeight - tooltipRect.height - minMargin, y)\n );\n\n return { x, y };\n }\n\n private generateTooltipContent(element: HTMLElement): string {\n return DebugDataCollector.generateTooltipContent(element);\n }\n\n private showTooltip(element: HTMLElement): void {\n if (!this.isInspectorMode || !element) return;\n\n if (this.tooltipTimeout) {\n clearTimeout(this.tooltipTimeout);\n this.tooltipTimeout = null;\n }\n\n const tooltip = this.createTooltipElement();\n const content = this.generateTooltipContent(element);\n\n tooltip.innerHTML = content;\n tooltip.style.visibility = 'hidden';\n tooltip.style.display = 'block';\n\n tooltip.offsetHeight;\n\n const elementRect = getElementBox(element);\n const tooltipRect = tooltip.getBoundingClientRect();\n const position = this.calculateSimplePosition(\n elementRect ?? {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n },\n tooltipRect\n );\n\n tooltip.style.left = `${position.x}px`;\n tooltip.style.top = `${position.y}px`;\n tooltip.setAttribute('data-visible', 'true');\n tooltip.style.visibility = 'visible';\n }\n\n private hideTooltip(): void {\n if (this.tooltipTimeout) {\n clearTimeout(this.tooltipTimeout);\n this.tooltipTimeout = null;\n }\n\n if (this.tooltipElement) {\n this.tooltipElement.setAttribute('data-visible', 'false');\n this.tooltipElement.style.visibility = 'hidden';\n }\n }\n\n private cleanupTooltip(): void {\n if (this.tooltipElement) {\n this.tooltipElement.remove();\n this.tooltipElement = null;\n }\n if (this.tooltipTimeout) {\n clearTimeout(this.tooltipTimeout);\n this.tooltipTimeout = null;\n }\n }\n\n private cleanupInspectorElements(): void {\n const highlightOverlay = document.querySelector(\n '.web-widget-inspector-highlight-overlay'\n );\n if (highlightOverlay) {\n highlightOverlay.remove();\n }\n\n const tooltipStyles = document.getElementById('inspector-tooltip-styles');\n if (tooltipStyles) {\n tooltipStyles.remove();\n }\n\n if (this.tooltipElement) {\n this.tooltipElement.remove();\n this.tooltipElement = null;\n }\n\n document.body.style.removeProperty('cursor');\n }\n\n private toggleInspector(): void {\n this.isInspectorMode = !this.isInspectorMode;\n\n if (!this.isInspectorMode) {\n this.cleanupInspectorElements();\n }\n\n this.updateState();\n }\n\n private showToolbar(): void {\n this.isToolbarVisible = true;\n this.updateState();\n setStoredValue('web-widget-inspector-visible', true);\n }\n\n private hideToolbar(): void {\n this.isToolbarVisible = false;\n this.updateState();\n setStoredValue('web-widget-inspector-visible', false);\n }\n\n private minimizeToolbar(): void {\n this.isMinimized = !this.isMinimized;\n this.updateState();\n setStoredValue('web-widget-inspector-minimized', this.isMinimized);\n }\n\n private openInEditor(path: string, srcDir?: string): void {\n if (srcDir) {\n const resolvedURL = new URL(path, document.baseURI);\n if (resolvedURL.origin === location.origin) {\n const filePath = srcDir + resolvedURL.pathname;\n this.openFileInEditor(filePath);\n } else {\n location.href = resolvedURL.href;\n }\n } else {\n this.openFileInEditor(path);\n }\n }\n\n private openFileInEditor(filePath: string): void {\n document.body.style.cursor = 'progress';\n fetch(`/__open-in-editor?file=${encodeURIComponent(filePath)}`).finally(\n () => {\n document.body.style.removeProperty('cursor');\n }\n );\n }\n\n private getCurrentFilePath(): string {\n if (!this.pageSource) return '';\n\n try {\n if (this.pageSource.startsWith('source://')) {\n return this.pageSource.replace('source://', '');\n }\n const url = new URL(this.pageSource);\n return url.pathname;\n } catch {\n return this.pageSource;\n }\n }\n\n private loadRouteModuleSourceFromHeaders(): void {\n if (!this.pageSource) {\n fetch(window.location.href, { method: 'HEAD' })\n .then((response: Response) => {\n const moduleSource = response.headers.get('x-module-source');\n if (moduleSource) {\n this.pageSource = moduleSource;\n }\n })\n .catch((error) => {\n console.error(\n 'Error loading route module source from headers:',\n error\n );\n });\n }\n }\n\n override render() {\n if (!this.isToolbarVisible) {\n return html``;\n }\n\n return html`\n <div\n class=\"inspector-toolbar\"\n data-minimized=${this.isMinimized ? 'true' : 'false'}\n data-inspector-active=${this.isInspectorMode ? 'true' : 'false'}>\n <div class=\"inspector-header\">\n <div\n class=\"inspector-logo\"\n tabindex=\"0\"\n title=\"Web Widget Inspector\"\n @click=${this.minimizeToolbar}>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path\n d=\"M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2Z\" />\n </svg>\n <div class=\"logo-text\">\n <span class=\"logo-title\">WEB WIDGET</span>\n <span class=\"logo-subtitle\">DEV INSPECTOR</span>\n </div>\n </div>\n </div>\n\n <div class=\"inspector-info\">\n <span class=\"widget-count\">${this.widgetCount} widgets</span>\n </div>\n\n <div class=\"inspector-actions\">\n <button\n class=\"inspector-btn inspect-btn\"\n @click=${this.toggleInspector}\n title=\"Click to activate widget inspector (ESC to exit)\"\n aria-label=\"Activate widget inspector mode\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <span>Inspect</span>\n </button>\n\n <button\n class=\"inspector-btn page-btn\"\n @click=${() => {\n const currentFilePath = this.getCurrentFilePath();\n if (currentFilePath) {\n this.openInEditor(currentFilePath);\n }\n }}\n title=\"Open current page source code\"\n aria-label=\"Open current page source code\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M9 9h6v6H9z\" />\n </svg>\n <span>Open Source</span>\n </button>\n </div>\n\n <div class=\"inspector-controls\">\n <button\n class=\"inspector-btn hide-btn\"\n @click=${this.hideToolbar}\n title=\"Hide Web Widget Inspector\"\n aria-label=\"Hide inspector toolbar\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n <button\n class=\"inspector-btn toggle-btn\"\n @click=${this.minimizeToolbar}\n title=\"Minimize Web Widget Inspector\"\n aria-label=\"Minimize inspector toolbar\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { HTMLWebWidgetInspectorElement } from './element';\n\ncustomElements.define('web-widget-inspector', HTMLWebWidgetInspectorElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-widget-inspector': HTMLWebWidgetInspectorElement;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/widget-finder.ts","../src/utils/storage.ts","../src/utils/design-system.ts","../src/utils/theme.ts","../src/utils/box.ts","../src/utils/debug-data.ts","../src/element.ts","../src/index.ts"],"names":["property"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Web Widget element finder utility\n * Responsible for locating and identifying web-widget elements in the DOM\n */\n\nexport function findWebWidgetContainer(\n element: HTMLElement | null\n): HTMLElement | null {\n if (!element) {\n return null;\n }\n\n if (element.tagName === 'WEB-WIDGET' && element.hasAttribute('import')) {\n return element;\n }\n\n const container = element.closest('web-widget[import]') as HTMLElement;\n return container;\n}\n","/**\n * Local storage utility functions\n * Responsible for handling inspector configuration and state persistence\n */\n\nexport function getStoredValue<T>(key: string, defaultValue: T): T {\n const stored = localStorage.getItem(key);\n if (stored === null) {\n return defaultValue;\n }\n try {\n return JSON.parse(stored);\n } catch {\n return defaultValue;\n }\n}\n\nexport function setStoredValue<T>(key: string, value: T): void {\n localStorage.setItem(key, JSON.stringify(value));\n}\n","import type { ThemeConfig } from '../types';\n\n/**\n * Simplified design system with only necessary tokens\n */\n\n// Spacing system (rem) - only used values\nconst spacing = {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '0.75rem',\n lg: '1rem',\n xl: '1.25rem',\n} as const;\n\n// Typography system - only used values\nconst typography = {\n fontFamily: {\n sans: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n },\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n base: '1rem',\n },\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n },\n lineHeight: {\n normal: '1.5',\n },\n letterSpacing: {\n normal: '0',\n },\n} as const;\n\n// Box shadow system - only used values\nconst boxShadow = {\n base: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n} as const;\n\n// Z-index system\nconst zIndex = {\n TOOLTIP: 2147483647,\n TOOLBAR: 2147483646,\n OVERLAY: 2147483645,\n} as const;\n\n// Brand colors - only used values\nconst colors = {\n green: '#22c55e', // Primary green\n overlayBorder: '#22c55e',\n} as const;\n\n// Theme configuration\nconst themes = {\n light: {\n bg: 'rgba(255, 255, 255, 0.92)',\n fg: '#222',\n fgHover: '#111',\n fgSelected: '#000',\n border: '#e5e7eb',\n accent: '#888',\n accentHover: '#666',\n accentSelected: '#444',\n primary: colors.green,\n primaryHover: '#16a34a',\n primarySelected: '#15803d',\n overlayBorder: colors.overlayBorder,\n },\n dark: {\n bg: 'rgba(17, 17, 17, 0.92)',\n fg: '#f3f4f6',\n fgHover: '#ffffff',\n fgSelected: '#ffffff',\n border: '#374151',\n accent: '#9ca3af',\n accentHover: '#d1d5db',\n accentSelected: '#f3f4f6',\n primary: colors.green,\n primaryHover: '#4ade80',\n primarySelected: '#16a34a',\n overlayBorder: colors.overlayBorder,\n },\n} as const satisfies Record<string, ThemeConfig>;\n\n/**\n * Generate CSS custom properties for design system\n */\nexport function generateCSSVariables() {\n return {\n // Typography - only used values\n '--wwi-font-sans': typography.fontFamily.sans,\n '--wwi-font-size-xs': typography.fontSize.xs,\n '--wwi-font-size-sm': typography.fontSize.sm,\n '--wwi-font-size-base': typography.fontSize.base,\n '--wwi-font-weight-normal': typography.fontWeight.normal,\n '--wwi-font-weight-medium': typography.fontWeight.medium,\n '--wwi-font-weight-semibold': typography.fontWeight.semibold,\n '--wwi-line-height-normal': typography.lineHeight.normal,\n '--wwi-letter-spacing-normal': typography.letterSpacing.normal,\n\n // Spacing - only used values\n '--wwi-spacing-xs': spacing.xs,\n '--wwi-spacing-sm': spacing.sm,\n '--wwi-spacing-md': spacing.md,\n '--wwi-spacing-lg': spacing.lg,\n '--wwi-spacing-xl': spacing.xl,\n\n // Box shadow - only used values\n '--wwi-shadow-base': boxShadow.base,\n\n // Z-index - only used values\n '--wwi-z-tooltip': zIndex.TOOLTIP.toString(),\n '--wwi-z-toolbar': zIndex.TOOLBAR.toString(),\n '--wwi-z-overlay': zIndex.OVERLAY.toString(),\n\n // Brand colors - only used values\n '--wwi-green': colors.green,\n '--wwi-overlay-border': colors.overlayBorder,\n } as const;\n}\n\n// Design system utility functions\nexport const designSystem = {\n spacing,\n typography,\n boxShadow,\n zIndex,\n colors,\n themes,\n cssVariables: generateCSSVariables(),\n} as const;\n\nexport const DESIGN_SYSTEM = {\n spacing: spacing,\n typography: typography,\n boxShadow: boxShadow,\n zIndex: zIndex,\n colors: colors,\n} as const;\n\n// Get theme variables\nexport function getThemeVariables(theme: keyof typeof themes): ThemeConfig {\n return themes[theme];\n}\n\n// Export design system instance\nexport default designSystem;\n","import type { ThemeMap, ThemeConfig } from '../types';\nimport { getThemeVariables, designSystem } from './design-system';\n\nexport function applyTheme(vars: ThemeConfig): void {\n // Remove existing design system styles\n const existingStyle = document.getElementById('wwi-design-system-styles');\n if (existingStyle) {\n existingStyle.remove();\n }\n\n // Create new style element\n const style = document.createElement('style');\n style.id = 'wwi-design-system-styles';\n\n // Generate CSS variables\n const cssVariables = Object.entries(designSystem.cssVariables)\n .map(([property, value]) => ` ${property}: ${value};`)\n .join('\\n');\n\n const themeVariables = `\n --wwi-bg: ${vars.bg};\n --wwi-fg: ${vars.fg};\n --wwi-border: ${vars.border};\n --wwi-accent: ${vars.accent};\n `;\n\n style.textContent = `\n:root {\n${cssVariables}\n${themeVariables}\n}\n `;\n\n document.head.appendChild(style);\n}\n\nexport function detectAutoTheme(): keyof ThemeMap | undefined {\n if (\n typeof document === 'undefined' ||\n !document.body ||\n !document.documentElement\n ) {\n return undefined;\n }\n\n const bodyStyle = getComputedStyle(document.body);\n let bg = bodyStyle?.backgroundColor;\n if (!bg || bg === 'rgba(0, 0, 0, 0)' || bg === 'transparent') {\n const docStyle = getComputedStyle(document.documentElement);\n bg = docStyle?.backgroundColor;\n }\n\n let isTransparent = false;\n if (!bg || bg === 'rgba(0, 0, 0, 0)' || bg === 'transparent') {\n bg = 'rgb(255,255,255)';\n isTransparent = true;\n }\n\n let r = 255;\n let g = 255;\n let b = 255;\n\n const match = bg.match(/rgba?\\(([^)]+)\\)/);\n if (match) {\n const parts = match[1]?.split(',').map((x) => parseFloat(x.trim())) ?? [];\n r = parts[0] ?? 255;\n g = parts[1] ?? 255;\n b = parts[2] ?? 255;\n }\n\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n if (isTransparent || Number.isNaN(brightness) || brightness >= 128) {\n return 'light';\n } else {\n return 'dark';\n }\n}\n\nexport function applyThemeMode(mode: keyof ThemeMap | 'auto'): void {\n if (mode !== 'auto') {\n const theme = getThemeVariables(mode);\n if (theme) {\n applyTheme(theme);\n }\n return;\n }\n\n const autoTheme = detectAutoTheme();\n if (autoTheme) {\n const theme = getThemeVariables(autoTheme);\n if (theme) {\n applyTheme(theme);\n } else {\n // Fallback to light theme if auto detection fails\n applyTheme(getThemeVariables('light'));\n }\n } else {\n // Fallback to light theme if auto detection fails\n applyTheme(getThemeVariables('light'));\n }\n}\n","type ElementBounds = {\n width: number;\n height: number;\n top: number;\n right: number;\n bottom: number;\n left: number;\n} | null;\n\n/**\n * Check if DOMRect is valid (has actual dimensions)\n */\nfunction isValidRect(rect: DOMRect): boolean {\n return rect.width > 0 || rect.height > 0;\n}\n\n/**\n * Merge multiple DOMRects into one containing all rectangular areas\n */\nfunction mergeRects(rects: DOMRect[]): ElementBounds {\n if (rects.length === 0) return null;\n\n let top = Infinity,\n left = Infinity,\n right = -Infinity,\n bottom = -Infinity;\n\n for (const rect of rects) {\n top = Math.min(top, rect.top);\n left = Math.min(left, rect.left);\n right = Math.max(right, rect.right);\n bottom = Math.max(bottom, rect.bottom);\n }\n\n return {\n top,\n left,\n right,\n bottom,\n width: right - left,\n height: bottom - top,\n };\n}\n\n/**\n * Get all valid layout boxes (visual boxes) of a node and all its descendant nodes\n *\n * ✅ Supports:\n * - Element boxes\n * - display: contents elements\n * - Shadow DOM subtrees\n * - <slot> distributed nodes\n * - Text nodes (measured via Range)\n *\n * ❌ Not supported (technical limitations or high complexity):\n * - ::before / ::after pseudo-elements (no corresponding DOM nodes)\n * - Anonymous boxes (like blocks in editable areas)\n * - Overflow clipping hints\n * - clip-path / mask visual area restrictions\n * - Range.getClientRects (multi-line text split into multiple rects)\n */\nfunction getNodeRectsDeep(node: Node): DOMRect[] {\n const rects: DOMRect[] = [];\n\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n const style = getComputedStyle(el);\n\n // Ignore display: none elements\n if (style.display === 'none') return [];\n\n // Self visual box (display: contents elements may have no size themselves, but still recurse their children)\n const rect = el.getBoundingClientRect();\n if (isValidRect(rect)) rects.push(rect);\n\n // Shadow DOM child elements (like Web Components)\n const children = el.shadowRoot\n ? Array.from(el.shadowRoot.children)\n : Array.from(el.children);\n\n for (const child of children) {\n rects.push(...getNodeRectsDeep(child));\n }\n\n // If it's a <slot> element, get its distributed real nodes\n if (el.tagName === 'SLOT') {\n const assigned = (el as HTMLSlotElement).assignedNodes({ flatten: true });\n for (const assignedNode of assigned) {\n rects.push(...getNodeRectsDeep(assignedNode));\n }\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n // Text nodes use Range to measure their visual box (default merge all fragments into one rect)\n const range = document.createRange();\n range.selectNodeContents(node);\n const rect = range.getBoundingClientRect();\n if (isValidRect(rect)) rects.push(rect);\n }\n\n return rects;\n}\n\n/**\n * Get the complete visual box of any element (including areas expanded by child elements)\n *\n * ✅ Includes child elements, Shadow DOM, slot content, etc. that expand the size\n * ❌ Does not include pseudo-elements, anonymous layout boxes, clip clipping areas\n */\nexport function getElementBox(el: Element): ElementBounds {\n const allRects = getNodeRectsDeep(el);\n return mergeRects(allRects);\n}\n","import { getElementBox } from './box';\nimport type { ElementBounds } from '../types';\nimport type { HTMLWebWidgetElement } from '@web-widget/web-widget/element';\n\nexport interface DebugDataItem {\n key: string;\n value: string;\n priority: number;\n}\n\nexport interface WebWidgetDebugData {\n name?: string;\n module?: string;\n loading?: string;\n renderTarget?: string;\n status?: string;\n inactive?: boolean;\n contextData?: Record<string, any>;\n loadTime?: number;\n mountTime?: number;\n}\n\nexport interface ElementDebugData {\n tag: string;\n id?: string;\n bounds: ElementBounds;\n isWebWidget: boolean;\n webWidgetData?: WebWidgetDebugData;\n}\n\n/**\n * Collect debug data for an element\n */\nexport function collectElementData(element: HTMLElement): ElementDebugData {\n const bounds = getElementBox(element) ?? {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n };\n const isWebWidget = element.tagName === 'WEB-WIDGET';\n\n const data: ElementDebugData = {\n tag: element.tagName.toLowerCase(),\n bounds,\n isWebWidget,\n };\n\n // Basic element information\n if (element.id) {\n data.id = element.id;\n }\n\n // Web Widget specific data\n if (isWebWidget) {\n data.webWidgetData = collectWebWidgetData(element);\n }\n\n return data;\n}\n\n/**\n * Collect debug data for Web Widget\n */\nexport function collectWebWidgetData(element: HTMLElement): WebWidgetDebugData {\n const data: WebWidgetDebugData = {};\n const webWidgetElement = element as HTMLWebWidgetElement;\n\n // Component name\n const name = element.getAttribute('name');\n if (name) {\n data.name = name;\n }\n\n // Module path\n const importUrl = element.getAttribute('import');\n if (importUrl) {\n data.module = importUrl;\n }\n\n // Loading strategy\n const loading = webWidgetElement.loading;\n if (loading && loading !== 'eager') {\n data.loading = loading;\n }\n\n // Render target\n const renderTarget = webWidgetElement.renderTarget;\n if (renderTarget && renderTarget !== 'light') {\n data.renderTarget = renderTarget;\n }\n\n // Status information\n const status = webWidgetElement.status;\n if (status) {\n data.status = status;\n }\n\n // Inactive state\n if (webWidgetElement.inactive) {\n data.inactive = true;\n }\n\n // Context data\n const contextData = webWidgetElement.contextData;\n if (contextData && typeof contextData === 'object') {\n data.contextData = contextData;\n }\n\n // Performance data\n const performanceData = collectPerformanceData(element);\n if (performanceData.loadTime !== undefined) {\n data.loadTime = performanceData.loadTime;\n }\n if (performanceData.mountTime !== undefined) {\n data.mountTime = performanceData.mountTime;\n }\n\n return data;\n}\n\n/**\n * Collect performance data for a specific element\n */\nexport function collectPerformanceData(element: HTMLElement): {\n loadTime?: number;\n mountTime?: number;\n} {\n const data: { loadTime?: number; mountTime?: number } = {};\n\n // Get performance data from element's performance property (set by web-widget)\n const webWidgetElement = element as HTMLWebWidgetElement;\n const performanceData = webWidgetElement.performance;\n\n if (performanceData && typeof performanceData === 'object') {\n if (performanceData.loadTime) {\n const loadTimeStr = performanceData.loadTime;\n if (typeof loadTimeStr === 'string' && loadTimeStr.endsWith('ms')) {\n data.loadTime = parseInt(loadTimeStr, 10);\n }\n }\n if (performanceData.mountTime) {\n const mountTimeStr = performanceData.mountTime;\n if (typeof mountTimeStr === 'string' && mountTimeStr.endsWith('ms')) {\n data.mountTime = parseInt(mountTimeStr, 10);\n }\n }\n }\n\n return data;\n}\n\n/**\n * Convert debug data to display format with priority-based sorting\n */\nexport function formatDebugData(\n data: ElementDebugData,\n element: HTMLElement\n): DebugDataItem[] {\n const items: DebugDataItem[] = [];\n\n if (data.isWebWidget && data.webWidgetData) {\n // Web Widget specific information - ordered by importance\n const widgetData = data.webWidgetData;\n\n const componentName = element.getAttribute('name');\n if (componentName) {\n items.push({ key: 'Name', value: componentName, priority: 1 });\n }\n\n if (widgetData.module) {\n items.push({ key: 'Module', value: widgetData.module, priority: 2 });\n }\n\n if (widgetData.loadTime !== undefined) {\n items.push({\n key: 'Load Time',\n value: `${widgetData.loadTime}ms`,\n priority: 3,\n });\n }\n\n if (widgetData.mountTime !== undefined) {\n items.push({\n key: 'Mount Time',\n value: `${widgetData.mountTime}ms`,\n priority: 3,\n });\n }\n\n if (widgetData.status) {\n items.push({ key: 'Status', value: widgetData.status, priority: 4 });\n }\n\n if (widgetData.loading) {\n items.push({ key: 'Loading', value: widgetData.loading, priority: 4 });\n }\n\n if (widgetData.renderTarget) {\n items.push({\n key: 'Render',\n value: widgetData.renderTarget,\n priority: 4,\n });\n }\n\n if (widgetData.contextData) {\n const dataKeys = Object.keys(widgetData.contextData);\n if (dataKeys.length > 0) {\n items.push({\n key: 'Parameters',\n value: `${dataKeys.length} keys`,\n priority: 5,\n });\n }\n }\n } else {\n // Basic information for non-Web Widget elements\n items.push({ key: 'Tag', value: data.tag, priority: 1 });\n\n if (data.id) {\n items.push({ key: 'ID', value: data.id, priority: 2 });\n }\n }\n\n items.push({\n key: 'Size',\n value: `${Math.round(data.bounds.width)}×${Math.round(data.bounds.height)}px`,\n priority: 10,\n });\n\n // Sort by priority (ascending)\n return items.sort((a, b) => a.priority - b.priority);\n}\n\n/**\n * Get CSS class based on priority level\n */\nexport function getPriorityClass(priority: number): string {\n if (priority <= 3) return 'priority-high';\n if (priority <= 6) return 'priority-medium';\n return 'priority-low';\n}\n","import { LitElement, html, css } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { findWebWidgetContainer } from './utils/widget-finder';\nimport { getStoredValue, setStoredValue } from './utils/storage';\nimport { applyThemeMode } from './utils/theme';\nimport { DESIGN_SYSTEM } from './utils/design-system';\nimport {\n collectElementData,\n formatDebugData,\n getPriorityClass,\n} from './utils/debug-data';\nimport type { ElementBounds } from './types';\nimport { getElementBox } from './utils/box';\n\nexport class HTMLWebWidgetInspectorElement extends LitElement {\n @property({ type: String })\n dir = '';\n\n @property({ type: Array })\n keys: string[] = [];\n\n @property({ type: String, attribute: 'page-source' })\n pageSource = '';\n\n private _theme: 'light' | 'dark' | 'auto' = 'auto';\n\n @property({ type: String })\n get theme(): 'light' | 'dark' | 'auto' {\n return this._theme;\n }\n\n set theme(value: 'light' | 'dark' | 'auto') {\n const oldValue = this._theme;\n this._theme = value;\n this.setAttribute('theme', value);\n if (oldValue !== value) {\n this.initializeTheme();\n }\n }\n\n @state()\n private isToolbarVisible = true;\n\n @state()\n private isInspectorMode = false;\n\n @state()\n private isMinimized = false;\n\n @state()\n private hoveredElement: HTMLElement | null = null;\n\n @state()\n private widgetCount = 0;\n\n private pressedKeys = new Set<string>();\n private tooltipElement: HTMLElement | null = null;\n private currentElementBounds: ElementBounds = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n };\n\n static override styles = css`\n :host {\n display: contents;\n }\n\n .wwi-toolbar,\n .wwi-toolbar *,\n .wwi-tooltip,\n .wwi-tooltip * {\n font-family: var(\n --wwi-font-sans,\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n 'Helvetica Neue',\n Arial,\n sans-serif\n );\n }\n\n .wwi-toolbar {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n position: fixed;\n bottom: 1rem;\n left: 1rem;\n z-index: ${DESIGN_SYSTEM.zIndex.TOOLBAR};\n background: var(--wwi-bg, rgba(255, 255, 255, 0.95));\n color: var(--wwi-fg, #222);\n padding: 0.75rem 1rem;\n border-radius: 0.375rem;\n border: 1px solid var(--wwi-border, #e5e7eb);\n box-shadow:\n 0 1px 3px 0 rgba(0, 0, 0, 0.1),\n 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n font-family: var(\n --wwi-font-sans,\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n 'Helvetica Neue',\n Arial,\n sans-serif\n );\n font-size: 0.75rem;\n min-width: max-content;\n transition: all 0.2s;\n backdrop-filter: blur(8px);\n }\n\n .wwi-toolbar[data-minimized='true'] {\n padding: 0;\n gap: 0;\n min-width: 0;\n width: 32px;\n height: 32px;\n background: var(--wwi-bg, rgba(255, 255, 255, 0.95));\n border: 1px solid var(--wwi-border, #e5e7eb);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n border-radius: 50%;\n cursor: pointer;\n justify-content: center;\n align-items: center;\n display: flex;\n transition:\n background 0.2s,\n border 0.2s;\n }\n\n .wwi-toolbar[data-minimized='true']:hover {\n background: var(--wwi-bg, rgba(255, 255, 255, 0.98));\n border: 1px solid var(--wwi-border, #e5e7eb);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n\n .wwi-toolbar[data-minimized='true'] .wwi-header {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n justify-content: center;\n padding: 0;\n margin: 0;\n height: 100%;\n }\n\n .wwi-toolbar[data-minimized='true'] .wwi-logo {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n }\n\n .wwi-toolbar[data-minimized='true'] .wwi-logo svg {\n margin: 0;\n width: 16px;\n height: 16px;\n display: block;\n opacity: 0.7;\n filter: none;\n transition: opacity 0.2s;\n }\n\n .wwi-toolbar[data-minimized='true']:hover .wwi-logo svg {\n opacity: 1;\n filter: none;\n }\n\n .wwi-toolbar[data-minimized='true'] .wwi-header .wwi-logo span,\n .wwi-toolbar[data-minimized='true'] .wwi-logo .logo-text,\n .wwi-toolbar[data-minimized='true'] .wwi-info,\n .wwi-toolbar[data-minimized='true'] .wwi-actions,\n .wwi-toolbar[data-minimized='true'] .wwi-controls {\n display: none;\n }\n\n .wwi-overlay {\n position: fixed;\n z-index: ${DESIGN_SYSTEM.zIndex.OVERLAY};\n pointer-events: none;\n background: repeating-linear-gradient(\n 45deg,\n rgba(102, 126, 234, 0.5),\n rgba(102, 126, 234, 0.5) 5px,\n rgba(255, 255, 255, 0.5) 5px,\n rgba(255, 255, 255, 0.5) 10px\n );\n border: 2px solid rgba(102, 126, 234, 0.9);\n border-radius: 0;\n box-sizing: border-box;\n }\n\n .wwi-tooltip {\n /* Styles dynamically injected by ensureTooltipStyles */\n visibility: hidden;\n }\n\n .wwi-header {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n padding-right: 0.5rem;\n }\n\n .wwi-logo {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-weight: 600;\n color: var(--wwi-accent, #888);\n font-size: 0.75rem;\n user-select: none;\n }\n\n .wwi-logo svg {\n cursor: pointer;\n color: var(--wwi-accent, #888);\n width: 16px;\n height: 16px;\n margin-right: 0.125rem;\n }\n\n .logo-text {\n display: flex;\n flex-direction: column;\n line-height: 1;\n gap: 0.125rem;\n align-items: flex-start;\n }\n\n .logo-title {\n font-weight: 700;\n font-size: 0.7rem;\n color: var(--wwi-accent, #888);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n }\n\n .logo-subtitle {\n font-weight: 500;\n font-size: 0.5rem;\n color: var(--wwi-accent, #888);\n opacity: 0.75;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n }\n\n .wwi-info {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.75rem;\n color: var(--wwi-fg, #222);\n opacity: 0.7;\n }\n\n .widget-count {\n color: var(--wwi-accent, #888);\n font-weight: 500;\n }\n\n .wwi-actions {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n }\n\n .wwi-controls {\n display: flex;\n align-items: center;\n gap: 0.125rem;\n }\n\n .wwi-btn {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n background: transparent;\n border: 1px solid transparent;\n color: var(--wwi-fg, #222);\n padding: 0.25rem 0.5rem;\n border-radius: 0.25rem;\n cursor: pointer;\n transition: all 0.15s ease;\n font-size: 0.75rem;\n font-weight: 500;\n white-space: nowrap;\n opacity: 0.8;\n }\n\n .wwi-btn:hover {\n background: rgba(0, 0, 0, 0.12);\n border-color: rgba(0, 0, 0, 0.2);\n color: var(--wwi-fg, #111);\n opacity: 1;\n box-shadow:\n 0 1px 3px 0 rgba(0, 0, 0, 0.1),\n 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n }\n\n .wwi-btn[data-selected='true'] {\n background: rgba(34, 197, 94, 0.15);\n border-color: #22c55e;\n box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.2);\n opacity: 1;\n position: relative;\n }\n\n .wwi-btn svg {\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n stroke: currentColor;\n opacity: 0.9;\n }\n\n .wwi-controls .wwi-btn {\n padding: 0.25rem;\n border-radius: 50%;\n }\n\n .wwi-toolbar[data-inspector-active='true'] {\n background: var(--wwi-bg, rgba(255, 255, 255, 0.98));\n }\n\n @media (max-width: 768px) {\n .wwi-toolbar {\n bottom: 0.75rem;\n left: 0.75rem;\n right: 0.75rem;\n flex-wrap: wrap;\n max-width: calc(100vw - 1.25rem);\n }\n }\n `;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.initializeTheme();\n this.initializeEventListeners();\n this.updateWidgetCount();\n this.loadStoredState();\n this.loadRouteModuleSourceFromHeaders();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.cleanupInspectorElements();\n }\n\n private initializeTheme(): void {\n applyThemeMode(this.theme);\n }\n\n private initializeEventListeners(): void {\n document.addEventListener('keydown', (e) => this.handleKeyEvent(e, true), {\n capture: true,\n });\n document.addEventListener('keyup', (e) => this.handleKeyEvent(e, false), {\n capture: true,\n });\n window.addEventListener('blur', this.clearKeys.bind(this), {\n capture: true,\n });\n document.addEventListener('mousemove', this.handleHoverEvent.bind(this), {\n capture: true,\n });\n document.addEventListener('mouseover', this.handleHoverEvent.bind(this), {\n capture: true,\n });\n document.addEventListener('click', this.handleClickEvent.bind(this), {\n capture: true,\n });\n document.addEventListener('contextmenu', this.clearKeys.bind(this), {\n capture: true,\n });\n window.addEventListener('resize', this.updateState.bind(this));\n document.addEventListener('scroll', this.updateState.bind(this));\n }\n\n private loadStoredState(): void {\n this.isToolbarVisible = getStoredValue(\n 'web-widget-inspector-visible',\n true\n );\n\n this.isMinimized = getStoredValue('web-widget-inspector-minimized', false);\n }\n\n private handleKeyEvent(event: KeyboardEvent, add: boolean): void {\n if (event.code === 'Escape' && this.isInspectorMode) {\n this.isInspectorMode = false;\n this.updateState();\n event.preventDefault();\n return;\n }\n\n if (add) {\n this.pressedKeys.add(event.code);\n } else {\n this.pressedKeys.delete(event.code);\n }\n\n this.updateState();\n }\n\n private clearKeys(): void {\n this.pressedKeys.clear();\n }\n\n private checkKeysMatch(targetKeys: string[]): boolean {\n if (!targetKeys.length) return false;\n return targetKeys.every((key: string) => {\n const normalizedKey = key === 'Shift' ? 'ShiftLeft' : key;\n return this.pressedKeys.has(key) || this.pressedKeys.has(normalizedKey);\n });\n }\n\n private handleHoverEvent(event: MouseEvent): void {\n if (!this.isInspectorMode) return;\n\n const target = findWebWidgetContainer(event.target as HTMLElement);\n\n if (this.hoveredElement !== target) {\n if (this.hoveredElement) {\n this.hoveredElement.style.removeProperty('cursor');\n }\n\n this.hoveredElement = target;\n\n this.updateState();\n }\n }\n\n private handleClickEvent(event: MouseEvent): void {\n if (this.isInspectorMode) {\n const toolbar = this.renderRoot?.querySelector('.wwi-toolbar');\n const isToolbarClick = toolbar?.contains(event.target as Node);\n\n if (isToolbarClick) {\n return;\n }\n\n const widgetTarget = findWebWidgetContainer(event.target as HTMLElement);\n\n if (widgetTarget) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n\n const inspectUrl = widgetTarget?.getAttribute('import');\n if (inspectUrl) {\n document.body.style.cursor = 'progress';\n this.openInEditor(inspectUrl, this.dir);\n this.updateState();\n }\n }\n }\n }\n\n private updateState(): void {\n const targetKeys = this.keys;\n\n if (!this.isToolbarVisible && this.checkKeysMatch(targetKeys)) {\n this.showToolbar();\n }\n\n // Update inspector overlays based on current state\n if (this.isInspectorMode && this.hoveredElement) {\n this.updateInspectorOverlays(this.hoveredElement);\n } else {\n this.clearInspectorOverlays();\n }\n\n this.setButtonSelected(this.isInspectorMode);\n\n if (this.isInspectorMode) {\n if (this.hoveredElement) {\n this.hoveredElement.style.cursor = 'pointer';\n }\n } else {\n document.body.style.removeProperty('cursor');\n const allElements = document.querySelectorAll('*');\n allElements.forEach((el) => {\n if (el instanceof HTMLElement) {\n el.style.removeProperty('cursor');\n }\n });\n }\n\n this.requestUpdate();\n }\n\n private overlayElement: HTMLElement | null = null;\n\n private createOverlayElement(): HTMLElement {\n if (this.overlayElement) {\n return this.overlayElement;\n }\n\n if (!this.isInspectorMode) {\n const dummy = document.createElement('div');\n dummy.style.visibility = 'hidden';\n return dummy;\n }\n\n this.ensureOverlayStyles();\n\n const overlay = document.createElement('div');\n overlay.className = 'wwi-overlay';\n overlay.setAttribute('aria-hidden', 'true');\n\n document.body.appendChild(overlay);\n this.overlayElement = overlay;\n return overlay;\n }\n\n private showOverlay(element: HTMLElement): void {\n if (!this.isInspectorMode || !element) return;\n\n const overlay = this.createOverlayElement();\n const rect = this.currentElementBounds;\n\n overlay.style.top = `${rect.top}px`;\n overlay.style.left = `${rect.left}px`;\n overlay.style.width = `${rect.width}px`;\n overlay.style.height = `${rect.height}px`;\n\n overlay.style.visibility = 'visible';\n }\n\n private cleanupOverlay(): void {\n if (this.overlayElement) {\n this.overlayElement.remove();\n this.overlayElement = null;\n }\n }\n\n private setButtonSelected(selected: boolean): void {\n const btn = this.renderRoot?.querySelector('.wwi-inspect-btn');\n if (btn) {\n btn.setAttribute('data-selected', selected ? 'true' : 'false');\n btn.setAttribute('aria-pressed', selected ? 'true' : 'false');\n }\n }\n\n private updateWidgetCount(): void {\n this.widgetCount = document.querySelectorAll('web-widget[import]').length;\n }\n\n private createTooltipElement(): HTMLElement {\n if (this.tooltipElement) {\n return this.tooltipElement;\n }\n\n if (!this.isInspectorMode) {\n const dummy = document.createElement('div');\n dummy.style.visibility = 'hidden';\n return dummy;\n }\n\n this.ensureTooltipStyles();\n\n const tooltip = document.createElement('div');\n tooltip.className = 'wwi-tooltip';\n tooltip.setAttribute('aria-hidden', 'true');\n\n document.body.appendChild(tooltip);\n this.tooltipElement = tooltip;\n return tooltip;\n }\n\n private ensureOverlayStyles(): void {\n if (!this.isInspectorMode) {\n return;\n }\n\n if (document.getElementById('wwi-overlay-styles')) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = 'wwi-overlay-styles';\n\n style.textContent = `\n .wwi-overlay {\n position: fixed;\n z-index: ${DESIGN_SYSTEM.zIndex.OVERLAY};\n pointer-events: none;\n visibility: hidden;\n opacity: 1;\n display: block;\n background: rgba(34, 197, 94, 0.3);\n border: 2px solid var(--wwi-overlay-border, #22c55e);\n border-radius: 0;\n box-sizing: border-box;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n `;\n\n document.head.appendChild(style);\n }\n\n private ensureTooltipStyles(): void {\n if (!this.isInspectorMode) {\n return;\n }\n\n if (document.getElementById('wwi-tooltip-styles')) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = 'wwi-tooltip-styles';\n\n style.textContent = `\n .wwi-tooltip {\n position: fixed;\n z-index: ${DESIGN_SYSTEM.zIndex.TOOLTIP};\n pointer-events: none;\n background: var(--wwi-bg, rgba(255, 255, 255, 0.95));\n color: var(--wwi-fg, #222);\n border: 1px solid var(--wwi-border, #e5e7eb);\n border-radius: 0.375rem;\n padding: ${DESIGN_SYSTEM.spacing.lg} ${DESIGN_SYSTEM.spacing.xl};\n font-size: ${DESIGN_SYSTEM.typography.fontSize.base};\n font-family: ${DESIGN_SYSTEM.typography.fontFamily.sans};\n line-height: ${DESIGN_SYSTEM.typography.lineHeight.normal};\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n letter-spacing: ${DESIGN_SYSTEM.typography.letterSpacing.normal};\n word-wrap: break-word;\n white-space: pre-wrap;\n box-shadow: ${DESIGN_SYSTEM.boxShadow.base};\n backdrop-filter: blur(8px);\n max-width: 640px;\n min-width: 280px;\n visibility: hidden;\n display: block;\n }\n\n .wwi-tooltip-table {\n width: 100%;\n border-collapse: collapse;\n font-size: ${DESIGN_SYSTEM.typography.fontSize.xs};\n line-height: ${DESIGN_SYSTEM.typography.lineHeight.normal};\n }\n\n .wwi-tooltip-table td {\n padding: ${DESIGN_SYSTEM.spacing.xs} 0;\n vertical-align: top;\n }\n\n .wwi-tooltip-table .key {\n color: var(--wwi-accent, #888);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.medium};\n padding-right: ${DESIGN_SYSTEM.spacing.lg};\n white-space: nowrap;\n text-align: left;\n opacity: 0.8;\n }\n\n .wwi-tooltip-table .value {\n color: var(--wwi-fg, #222);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n word-break: break-all;\n text-align: right;\n }\n\n .wwi-tooltip-table tr.priority-high .key {\n color: var(--wwi-fg, #222);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.semibold};\n opacity: 1;\n }\n\n .wwi-tooltip-table tr.priority-high .value {\n color: var(--wwi-fg, #222);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.medium};\n }\n\n .wwi-tooltip-table tr.priority-medium .key {\n color: var(--wwi-accent, #666);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.medium};\n opacity: 0.9;\n }\n\n .wwi-tooltip-table tr.priority-medium .value {\n color: var(--wwi-fg, #444);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n }\n\n .wwi-tooltip-table tr.priority-low .key {\n color: var(--wwi-accent, #888);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n opacity: 0.7;\n }\n\n .wwi-tooltip-table tr.priority-low .value {\n color: var(--wwi-fg, #666);\n font-weight: ${DESIGN_SYSTEM.typography.fontWeight.normal};\n opacity: 0.8;\n }\n\n .wwi-tooltip-help {\n margin-top: ${DESIGN_SYSTEM.spacing.md};\n padding-top: ${DESIGN_SYSTEM.spacing.md};\n border-top: 1px solid var(--wwi-border, #e5e7eb);\n font-size: ${DESIGN_SYSTEM.typography.fontSize.xs};\n color: var(--wwi-accent, #888);\n text-align: center;\n opacity: 0.8;\n }\n\n @media (max-width: 768px) {\n .inspector-toolbar {\n bottom: ${DESIGN_SYSTEM.spacing.md};\n left: ${DESIGN_SYSTEM.spacing.md};\n right: ${DESIGN_SYSTEM.spacing.md};\n flex-wrap: wrap;\n max-width: calc(100vw - ${DESIGN_SYSTEM.spacing.xl});\n padding: ${DESIGN_SYSTEM.spacing.md} ${DESIGN_SYSTEM.spacing.lg};\n gap: ${DESIGN_SYSTEM.spacing.md};\n }\n }\n `;\n\n document.head.appendChild(style);\n }\n\n private calculateSimplePosition(\n elementRect: ElementBounds,\n tooltipRect: DOMRect\n ): { x: number; y: number } {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const padding = 8;\n const minMargin = 8;\n\n let x = elementRect.left;\n let y = elementRect.top - tooltipRect.height - padding;\n\n if (y < minMargin) {\n y = elementRect.top + elementRect.height + padding;\n }\n\n x = Math.max(\n minMargin,\n Math.min(viewportWidth - tooltipRect.width - minMargin, x)\n );\n y = Math.max(\n minMargin,\n Math.min(viewportHeight - tooltipRect.height - minMargin, y)\n );\n\n return { x, y };\n }\n\n private generateTooltipContent(element: HTMLElement): string {\n const debugData = collectElementData(element);\n const formattedData = formatDebugData(debugData, element);\n\n // Generate table HTML with priority-based styling\n const tableRows = formattedData\n .map((item) => {\n const priorityClass = getPriorityClass(item.priority);\n return `<tr class=\"${priorityClass}\"><td class=\"key\">${item.key}</td><td class=\"value\">${item.value}</td></tr>`;\n })\n .join('');\n\n // Add help text\n const helpText = debugData.isWebWidget\n ? '<div class=\"wwi-tooltip-help\">💡 Click to open source code</div>'\n : '';\n\n return `<table class=\"wwi-tooltip-table\">${tableRows}</table>${helpText}`;\n }\n\n private showTooltip(element: HTMLElement): void {\n if (!this.isInspectorMode || !element) return;\n\n const tooltip = this.createTooltipElement();\n const content = this.generateTooltipContent(element);\n\n tooltip.innerHTML = content;\n tooltip.style.visibility = 'hidden';\n tooltip.style.display = 'block';\n\n // Force reflow to get accurate dimensions\n tooltip.offsetHeight;\n\n const elementRect = this.currentElementBounds;\n const tooltipRect = tooltip.getBoundingClientRect();\n const position = this.calculateSimplePosition(elementRect, tooltipRect);\n\n tooltip.style.left = `${position.x}px`;\n tooltip.style.top = `${position.y}px`;\n tooltip.style.visibility = 'visible';\n }\n\n private hideTooltip(): void {\n if (this.tooltipElement) {\n this.tooltipElement.style.visibility = 'hidden';\n }\n }\n\n private cleanupTooltip(): void {\n if (this.tooltipElement) {\n this.tooltipElement.remove();\n this.tooltipElement = null;\n }\n }\n\n private updateTooltipContent(): void {\n if (this.hoveredElement && this.tooltipElement) {\n const content = this.generateTooltipContent(this.hoveredElement);\n this.tooltipElement.innerHTML = content;\n }\n }\n\n private cleanupInspectorElements(): void {\n // Cleanup overlay\n if (this.overlayElement) {\n this.overlayElement.remove();\n this.overlayElement = null;\n }\n\n // Cleanup overlay styles\n const overlayStyles = document.getElementById('wwi-overlay-styles');\n if (overlayStyles) {\n overlayStyles.remove();\n }\n\n // Cleanup tooltip styles\n const tooltipStyles = document.getElementById('wwi-tooltip-styles');\n if (tooltipStyles) {\n tooltipStyles.remove();\n }\n\n // Cleanup tooltip\n if (this.tooltipElement) {\n this.tooltipElement.remove();\n this.tooltipElement = null;\n }\n\n document.body.style.removeProperty('cursor');\n }\n\n private toggleInspector(): void {\n this.isInspectorMode = !this.isInspectorMode;\n\n if (!this.isInspectorMode) {\n this.cleanupInspectorElements();\n }\n\n this.updateState();\n }\n\n private showToolbar(): void {\n this.isToolbarVisible = true;\n this.updateState();\n setStoredValue('web-widget-inspector-visible', true);\n }\n\n private hideToolbar(): void {\n this.isToolbarVisible = false;\n this.updateState();\n setStoredValue('web-widget-inspector-visible', false);\n }\n\n private minimizeToolbar(): void {\n this.isMinimized = !this.isMinimized;\n this.updateState();\n setStoredValue('web-widget-inspector-minimized', this.isMinimized);\n }\n\n private openInEditor(path: string, srcDir?: string): void {\n if (srcDir) {\n const resolvedURL = new URL(path, document.baseURI);\n if (resolvedURL.origin === location.origin) {\n const filePath = srcDir + resolvedURL.pathname;\n this.openFileInEditor(filePath);\n } else {\n location.href = resolvedURL.href;\n }\n } else {\n this.openFileInEditor(path);\n }\n }\n\n private openFileInEditor(filePath: string): void {\n document.body.style.cursor = 'progress';\n fetch(`/__open-in-editor?file=${encodeURIComponent(filePath)}`).finally(\n () => {\n document.body.style.removeProperty('cursor');\n }\n );\n }\n\n private getCurrentFilePath(): string {\n if (!this.pageSource) return '';\n\n try {\n if (this.pageSource.startsWith('source://')) {\n return this.pageSource.replace('source://', '');\n }\n const url = new URL(this.pageSource);\n return url.pathname;\n } catch {\n return this.pageSource;\n }\n }\n\n private loadRouteModuleSourceFromHeaders(): void {\n if (!this.pageSource) {\n fetch(window.location.href, { method: 'HEAD' })\n .then((response: Response) => {\n const moduleSource = response.headers.get('x-module-source');\n if (moduleSource) {\n this.pageSource = moduleSource;\n }\n })\n .catch((error) => {\n console.error(\n 'Error loading route module source from headers:',\n error\n );\n });\n }\n }\n\n /**\n * Batch update all inspector overlays for the current hovered element\n * This avoids multiple expensive getElementBox calls\n */\n private updateInspectorOverlays(element: HTMLElement): void {\n // Get bounds once and reuse for all overlays\n const bounds = getElementBox(element);\n this.currentElementBounds = bounds ?? {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n };\n\n // Batch update all overlays\n this.showOverlay(element);\n this.showTooltip(element);\n }\n\n private clearInspectorOverlays(): void {\n // Clear current bounds\n this.currentElementBounds = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0,\n };\n\n // Remove all overlays\n this.cleanupOverlay();\n this.cleanupTooltip();\n }\n\n override render() {\n if (!this.isToolbarVisible) {\n return html``;\n }\n\n return html`\n <div\n class=\"wwi-toolbar\"\n data-minimized=${this.isMinimized ? 'true' : 'false'}\n data-inspector-active=${this.isInspectorMode ? 'true' : 'false'}>\n <div class=\"wwi-header\">\n <div\n class=\"wwi-logo\"\n tabindex=\"0\"\n title=\"Web Widget Inspector\"\n @click=${this.minimizeToolbar}>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path\n d=\"M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2Z\" />\n </svg>\n <div class=\"logo-text\">\n <span class=\"logo-title\">WEB WIDGET</span>\n <span class=\"logo-subtitle\">DEV INSPECTOR</span>\n </div>\n </div>\n </div>\n\n <div class=\"wwi-info\">\n <span class=\"widget-count\">${this.widgetCount} widgets</span>\n </div>\n\n <div class=\"wwi-actions\">\n <button\n class=\"wwi-btn wwi-inspect-btn\"\n @click=${this.toggleInspector}\n title=\"Click to activate widget inspector (ESC to exit)\"\n aria-label=\"Activate widget inspector mode\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n <span>Inspect</span>\n </button>\n\n <button\n class=\"wwi-btn wwi-page-btn\"\n @click=${() => {\n const currentFilePath = this.getCurrentFilePath();\n if (currentFilePath) {\n this.openInEditor(currentFilePath);\n }\n }}\n title=\"Open current page source code\"\n aria-label=\"Open current page source code\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M9 9h6v6H9z\" />\n </svg>\n <span>Open Source</span>\n </button>\n </div>\n\n <div class=\"wwi-controls\">\n <button\n class=\"wwi-btn wwi-hide-btn\"\n @click=${this.hideToolbar}\n title=\"Hide Web Widget Inspector\"\n aria-label=\"Hide inspector toolbar\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n <button\n class=\"wwi-btn wwi-toggle-btn\"\n @click=${this.minimizeToolbar}\n title=\"Minimize Web Widget Inspector\"\n aria-label=\"Minimize inspector toolbar\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { HTMLWebWidgetInspectorElement } from './element';\n\ncustomElements.define('web-widget-inspector', HTMLWebWidgetInspectorElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-widget-inspector': HTMLWebWidgetInspectorElement;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@web-widget/inspector",
|
|
3
3
|
"description": "Web Widget Inspector - Development toolbar for web-widget elements",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.69.0",
|
|
5
5
|
"homepage": "https://github.com/web-widget/web-widget#readme",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"lit": "^3.0.0"
|
|
16
|
+
"lit": "^3.0.0",
|
|
17
|
+
"@web-widget/web-widget": "1.69.0"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
|
19
20
|
"tsup": "^8.3.4",
|
|
20
21
|
"typescript": "^5.5.4",
|
|
21
|
-
"vite": "^5.4.10"
|
|
22
|
-
"@web-widget/web-widget": "1.68.0"
|
|
22
|
+
"vite": "^5.4.10"
|
|
23
23
|
},
|
|
24
24
|
"exports": {
|
|
25
25
|
".": {
|