@web-widget/inspector 2.3.1 → 3.0.0-beta.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 CHANGED
@@ -432,6 +432,21 @@ function getPriorityClass(priority) {
432
432
  return "priority-low";
433
433
  }
434
434
 
435
+ // src/utils/module-source.ts
436
+ function joinProjectRoot(projectRoot, rootRelative) {
437
+ const root = projectRoot.replace(/[/\\]+$/, "");
438
+ const useBackslash = /\\/.test(root);
439
+ const relative = rootRelative.replace(/^[/\\]+/, "");
440
+ const suffix = useBackslash ? relative.replace(/\//g, "\\") : relative;
441
+ return `${root}${useBackslash ? "\\" : "/"}${suffix}`;
442
+ }
443
+ function resolveModuleSourcePath(moduleSource, projectRoot) {
444
+ return joinProjectRoot(projectRoot, moduleSource.slice(1));
445
+ }
446
+ function isRouteModuleSource(value) {
447
+ return value.startsWith("/");
448
+ }
449
+
435
450
  // src/element.ts
436
451
  var HTMLWebWidgetInspectorElement = class extends LitElement {
437
452
  constructor() {
@@ -474,7 +489,6 @@ var HTMLWebWidgetInspectorElement = class extends LitElement {
474
489
  this.initializeEventListeners();
475
490
  this.updateWidgetCount();
476
491
  this.loadStoredState();
477
- this.loadRouteModuleSourceFromHeaders();
478
492
  }
479
493
  disconnectedCallback() {
480
494
  super.disconnectedCallback();
@@ -929,29 +943,21 @@ var HTMLWebWidgetInspectorElement = class extends LitElement {
929
943
  }
930
944
  getCurrentFilePath() {
931
945
  if (!this.pageSource) return "";
946
+ const source = this.pageSource;
947
+ if (this.dir && isRouteModuleSource(source)) {
948
+ return resolveModuleSourcePath(source, this.dir);
949
+ }
932
950
  try {
933
- if (this.pageSource.startsWith("source://")) {
934
- return this.pageSource.replace("source://", "");
951
+ const url = new URL(source, document.baseURI);
952
+ if (url.pathname.startsWith("/@fs")) {
953
+ return url.pathname.slice("/@fs".length);
954
+ }
955
+ if (this.dir && url.origin === location.origin) {
956
+ return resolveModuleSourcePath(url.pathname, this.dir);
935
957
  }
936
- const url = new URL(this.pageSource);
937
958
  return url.pathname;
938
959
  } catch {
939
- return this.pageSource;
940
- }
941
- }
942
- loadRouteModuleSourceFromHeaders() {
943
- if (!this.pageSource) {
944
- fetch(window.location.href, { method: "HEAD" }).then((response) => {
945
- const moduleSource = response.headers.get("x-module-source");
946
- if (moduleSource) {
947
- this.pageSource = moduleSource;
948
- }
949
- }).catch((error) => {
950
- console.error(
951
- "Error loading route module source from headers:",
952
- error
953
- );
954
- });
960
+ return source;
955
961
  }
956
962
  }
957
963
  /**
@@ -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/element.ts"],"names":["property"],"mappings":"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","file":"element.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>Inspector</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 route source code\"\n aria-label=\"Open current route 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>Route 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"]}
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/utils/module-source.ts","../src/element.ts"],"names":["property"],"mappings":"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","file":"element.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","function joinProjectRoot(projectRoot: string, rootRelative: string): string {\n const root = projectRoot.replace(/[/\\\\]+$/, '');\n const useBackslash = /\\\\/.test(root);\n const relative = rootRelative.replace(/^[/\\\\]+/, '');\n const suffix = useBackslash ? relative.replace(/\\//g, '\\\\') : relative;\n return `${root}${useBackslash ? '\\\\' : '/'}${suffix}`;\n}\n\n/**\n * Resolves a canonical `x-module-source` path to an absolute filesystem path.\n */\nexport function resolveModuleSourcePath(\n moduleSource: string,\n projectRoot: string\n): string {\n return joinProjectRoot(projectRoot, moduleSource.slice(1));\n}\n\n/**\n * Returns true when the value is a canonical dev route module source path.\n */\nexport function isRouteModuleSource(value: string): boolean {\n return value.startsWith('/');\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';\nimport {\n isRouteModuleSource,\n resolveModuleSourcePath,\n} from './utils/module-source';\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 }\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 const source = this.pageSource;\n\n if (this.dir && isRouteModuleSource(source)) {\n return resolveModuleSourcePath(source, this.dir);\n }\n\n try {\n const url = new URL(source, document.baseURI);\n if (url.pathname.startsWith('/@fs')) {\n return url.pathname.slice('/@fs'.length);\n }\n if (this.dir && url.origin === location.origin) {\n return resolveModuleSourcePath(url.pathname, this.dir);\n }\n return url.pathname;\n } catch {\n return source;\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>Inspector</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 route source code\"\n aria-label=\"Open current route 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>Route 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"]}
package/dist/index.js CHANGED
@@ -432,6 +432,21 @@ function getPriorityClass(priority) {
432
432
  return "priority-low";
433
433
  }
434
434
 
435
+ // src/utils/module-source.ts
436
+ function joinProjectRoot(projectRoot, rootRelative) {
437
+ const root = projectRoot.replace(/[/\\]+$/, "");
438
+ const useBackslash = /\\/.test(root);
439
+ const relative = rootRelative.replace(/^[/\\]+/, "");
440
+ const suffix = useBackslash ? relative.replace(/\//g, "\\") : relative;
441
+ return `${root}${useBackslash ? "\\" : "/"}${suffix}`;
442
+ }
443
+ function resolveModuleSourcePath(moduleSource, projectRoot) {
444
+ return joinProjectRoot(projectRoot, moduleSource.slice(1));
445
+ }
446
+ function isRouteModuleSource(value) {
447
+ return value.startsWith("/");
448
+ }
449
+
435
450
  // src/element.ts
436
451
  var HTMLWebWidgetInspectorElement = class extends LitElement {
437
452
  constructor() {
@@ -474,7 +489,6 @@ var HTMLWebWidgetInspectorElement = class extends LitElement {
474
489
  this.initializeEventListeners();
475
490
  this.updateWidgetCount();
476
491
  this.loadStoredState();
477
- this.loadRouteModuleSourceFromHeaders();
478
492
  }
479
493
  disconnectedCallback() {
480
494
  super.disconnectedCallback();
@@ -929,29 +943,21 @@ var HTMLWebWidgetInspectorElement = class extends LitElement {
929
943
  }
930
944
  getCurrentFilePath() {
931
945
  if (!this.pageSource) return "";
946
+ const source = this.pageSource;
947
+ if (this.dir && isRouteModuleSource(source)) {
948
+ return resolveModuleSourcePath(source, this.dir);
949
+ }
932
950
  try {
933
- if (this.pageSource.startsWith("source://")) {
934
- return this.pageSource.replace("source://", "");
951
+ const url = new URL(source, document.baseURI);
952
+ if (url.pathname.startsWith("/@fs")) {
953
+ return url.pathname.slice("/@fs".length);
954
+ }
955
+ if (this.dir && url.origin === location.origin) {
956
+ return resolveModuleSourcePath(url.pathname, this.dir);
935
957
  }
936
- const url = new URL(this.pageSource);
937
958
  return url.pathname;
938
959
  } catch {
939
- return this.pageSource;
940
- }
941
- }
942
- loadRouteModuleSourceFromHeaders() {
943
- if (!this.pageSource) {
944
- fetch(window.location.href, { method: "HEAD" }).then((response) => {
945
- const moduleSource = response.headers.get("x-module-source");
946
- if (moduleSource) {
947
- this.pageSource = moduleSource;
948
- }
949
- }).catch((error) => {
950
- console.error(
951
- "Error loading route module source from headers:",
952
- error
953
- );
954
- });
960
+ return source;
955
961
  }
956
962
  }
957
963
  /**
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/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>Inspector</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 route source code\"\n aria-label=\"Open current route 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>Route 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"]}
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/utils/module-source.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","function joinProjectRoot(projectRoot: string, rootRelative: string): string {\n const root = projectRoot.replace(/[/\\\\]+$/, '');\n const useBackslash = /\\\\/.test(root);\n const relative = rootRelative.replace(/^[/\\\\]+/, '');\n const suffix = useBackslash ? relative.replace(/\\//g, '\\\\') : relative;\n return `${root}${useBackslash ? '\\\\' : '/'}${suffix}`;\n}\n\n/**\n * Resolves a canonical `x-module-source` path to an absolute filesystem path.\n */\nexport function resolveModuleSourcePath(\n moduleSource: string,\n projectRoot: string\n): string {\n return joinProjectRoot(projectRoot, moduleSource.slice(1));\n}\n\n/**\n * Returns true when the value is a canonical dev route module source path.\n */\nexport function isRouteModuleSource(value: string): boolean {\n return value.startsWith('/');\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';\nimport {\n isRouteModuleSource,\n resolveModuleSourcePath,\n} from './utils/module-source';\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 }\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 const source = this.pageSource;\n\n if (this.dir && isRouteModuleSource(source)) {\n return resolveModuleSourcePath(source, this.dir);\n }\n\n try {\n const url = new URL(source, document.baseURI);\n if (url.pathname.startsWith('/@fs')) {\n return url.pathname.slice('/@fs'.length);\n }\n if (this.dir && url.origin === location.origin) {\n return resolveModuleSourcePath(url.pathname, this.dir);\n }\n return url.pathname;\n } catch {\n return source;\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>Inspector</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 route source code\"\n aria-label=\"Open current route 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>Route 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": "2.3.1",
4
+ "version": "3.0.0-beta.0",
5
5
  "homepage": "https://github.com/web-widget/web-widget#readme",
6
6
  "repository": {
7
7
  "type": "git",
@@ -14,7 +14,7 @@
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
16
  "lit": "^3.0.0",
17
- "@web-widget/web-widget": "2.3.1"
17
+ "@web-widget/web-widget": "3.0.0-beta.0"
18
18
  },
19
19
  "devDependencies": {
20
20
  "tsup": "^8.3.4",