@jami-studio/pinpoint 0.1.12
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/.agents/skills/pinpoint/SKILL.md +77 -0
- package/README.md +412 -0
- package/dist/agent-context-HBCZ4MBN.js +13 -0
- package/dist/agent-context-HBCZ4MBN.js.map +1 -0
- package/dist/chunk-B7TY4FPP.js +569 -0
- package/dist/chunk-B7TY4FPP.js.map +1 -0
- package/dist/chunk-CGJZ7BOM.js +88 -0
- package/dist/chunk-CGJZ7BOM.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-HAEYE6KB.js +25 -0
- package/dist/chunk-HAEYE6KB.js.map +1 -0
- package/dist/chunk-J5PXKVTM.js +53 -0
- package/dist/chunk-J5PXKVTM.js.map +1 -0
- package/dist/chunk-XBX2J7WU.js +94 -0
- package/dist/chunk-XBX2J7WU.js.map +1 -0
- package/dist/chunk-ZW7IO3EW.js +4927 -0
- package/dist/chunk-ZW7IO3EW.js.map +1 -0
- package/dist/cli.js +71 -0
- package/dist/cli.js.map +1 -0
- package/dist/formatter-CR4COA5Z.js +8 -0
- package/dist/formatter-CR4COA5Z.js.map +1 -0
- package/dist/index-NvFcZ4SO.d.ts +200 -0
- package/dist/index.browser.d.ts +377 -0
- package/dist/index.browser.js +620 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.js +936 -0
- package/dist/index.js.map +1 -0
- package/dist/open-file-WR2JHI4P.js +8 -0
- package/dist/open-file-WR2JHI4P.js.map +1 -0
- package/dist/primitives/index.js +28 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/react.d.ts +23 -0
- package/dist/react.js +20 -0
- package/dist/react.js.map +1 -0
- package/dist/server/index.js +457 -0
- package/dist/server/index.js.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +88 -0
- package/src/scripts/create-pin.ts +43 -0
- package/src/scripts/delete-pin.ts +16 -0
- package/src/scripts/get-pins.ts +36 -0
- package/src/scripts/list-sessions.ts +33 -0
- package/src/scripts/resolve-pin.ts +27 -0
- package/src/scripts/run.ts +8 -0
- package/src/scripts/update-pin.ts +32 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/memory-store.ts","../src/storage/schemas.ts","../src/storage/rest-client.ts","../src/detection/element-picker.ts","../src/detection/selector-builder.ts","../src/detection/element-info.ts","../src/detection/drag-select.ts","../src/detection/text-select.ts","../src/frameworks/adapter.ts","../src/ui/components/PinMarker.tsx","../../../node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/dist/solid.js","../../../node_modules/.pnpm/solid-js@1.9.13/node_modules/solid-js/web/dist/web.js","../src/ui/icons/index.ts","../src/ui/components/ContextMenu.tsx","../src/ui/components/OverlayCanvas.tsx","../src/ui/components/PinPopup.tsx","../src/ui/components/PromptMode.tsx","../src/ui/components/SelectionLabel.tsx","../src/ui/components/TextInputPopup.tsx","../src/ui/components/Toolbar.tsx","../src/ui/components/PinpointApp.tsx","../src/ui/styles/theme.ts","../src/ui/mount.ts"],"sourcesContent":["// @agent-native/pinpoint — In-memory storage adapter\r\n// MIT License\r\n//\r\n// Used for standalone/clipboard-only mode. Pins live in memory for\r\n// the current session. NOT localStorage (violates agent-native Rule 1).\r\n// Pins are lost on page reload — intentional. Connect to a server for persistence.\r\n\r\nimport type { Pin, PinStatus, PinStorage } from \"../types/index.js\";\r\n\r\nexport class MemoryStore implements PinStorage {\r\n private pins: Map<string, Pin> = new Map();\r\n\r\n async load(pageUrl: string): Promise<Pin[]> {\r\n return Array.from(this.pins.values()).filter(\r\n (pin) => pin.pageUrl === pageUrl,\r\n );\r\n }\r\n\r\n async save(pin: Pin): Promise<void> {\r\n this.pins.set(pin.id, { ...pin });\r\n }\r\n\r\n async update(id: string, patch: Partial<Pin>): Promise<void> {\r\n const existing = this.pins.get(id);\r\n if (!existing) return;\r\n this.pins.set(id, {\r\n ...existing,\r\n ...patch,\r\n id: existing.id, // never overwrite ID\r\n updatedAt: new Date().toISOString(),\r\n });\r\n }\r\n\r\n async delete(id: string): Promise<void> {\r\n this.pins.delete(id);\r\n }\r\n\r\n async list(filter?: {\r\n pageUrl?: string;\r\n status?: PinStatus;\r\n }): Promise<Pin[]> {\r\n let result = Array.from(this.pins.values());\r\n if (filter?.pageUrl) {\r\n result = result.filter((pin) => pin.pageUrl === filter.pageUrl);\r\n }\r\n if (filter?.status) {\r\n result = result.filter((pin) => pin.status.state === filter.status);\r\n }\r\n return result;\r\n }\r\n\r\n async clear(pageUrl?: string): Promise<void> {\r\n if (pageUrl) {\r\n for (const [id, pin] of this.pins) {\r\n if (pin.pageUrl === pageUrl) {\r\n this.pins.delete(id);\r\n }\r\n }\r\n } else {\r\n this.pins.clear();\r\n }\r\n }\r\n}\r\n","// @agent-native/pinpoint — Zod schemas for runtime validation\r\n// MIT License\r\n\r\nimport { z } from \"zod\";\r\n\r\nexport const ElementInfoSchema = z.object({\r\n tagName: z.string(),\r\n id: z.string().optional(),\r\n classNames: z.array(z.string()),\r\n selector: z.string(),\r\n textContent: z.string().optional(),\r\n boundingRect: z.object({\r\n x: z.number(),\r\n y: z.number(),\r\n width: z.number(),\r\n height: z.number(),\r\n }),\r\n computedStyles: z.record(z.string(), z.string()).optional(),\r\n ariaAttributes: z.record(z.string(), z.string()).optional(),\r\n dataAttributes: z.record(z.string(), z.string()).optional(),\r\n domPath: z.string().optional(),\r\n});\r\n\r\nexport const FrameworkInfoSchema = z.object({\r\n framework: z.string(),\r\n componentPath: z.string(),\r\n sourceFile: z.string().optional(),\r\n frameworkVersion: z.string().optional(),\r\n});\r\n\r\nexport const PinStatusSchema = z.enum([\r\n \"open\",\r\n \"acknowledged\",\r\n \"resolved\",\r\n \"dismissed\",\r\n]);\r\n\r\nexport const PinSchema = z.object({\r\n id: z.string().uuid(),\r\n pageUrl: z.string(),\r\n createdAt: z.string().datetime(),\r\n updatedAt: z.string().datetime(),\r\n author: z.string().optional(),\r\n comment: z.string(),\r\n element: ElementInfoSchema,\r\n framework: FrameworkInfoSchema.optional(),\r\n status: z.object({\r\n state: PinStatusSchema,\r\n changedAt: z.string().datetime(),\r\n changedBy: z.string().optional(),\r\n }),\r\n});\r\n\r\nexport type PinSchemaType = z.infer<typeof PinSchema>;\r\n","// @agent-native/pinpoint — Browser-side REST client storage adapter\r\n// MIT License\r\n//\r\n// The browser never writes files directly — it always goes through the server.\r\n// This is the default adapter when a server endpoint is available.\r\n\r\nimport type { Pin, PinStatus, PinStorage } from \"../types/index.js\";\r\nimport { PinSchema } from \"./schemas.js\";\r\n\r\nexport class RestClient implements PinStorage {\r\n constructor(private endpoint: string) {\r\n // Normalize: remove trailing slash\r\n this.endpoint = endpoint.replace(/\\/+$/, \"\");\r\n }\r\n\r\n async load(pageUrl: string): Promise<Pin[]> {\r\n const params = new URLSearchParams({ pageUrl });\r\n const res = await fetch(`${this.endpoint}?${params}`);\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n return Array.isArray(data)\r\n ? data.filter((item) => PinSchema.safeParse(item).success)\r\n : [];\r\n }\r\n\r\n async save(pin: Pin): Promise<void> {\r\n const res = await fetch(this.endpoint, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(pin),\r\n });\r\n if (!res.ok) throw new Error(`Failed to save pin: ${res.status}`);\r\n }\r\n\r\n async update(id: string, patch: Partial<Pin>): Promise<void> {\r\n const res = await fetch(`${this.endpoint}/${encodeURIComponent(id)}`, {\r\n method: \"PATCH\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(patch),\r\n });\r\n if (!res.ok) throw new Error(`Failed to update pin: ${res.status}`);\r\n }\r\n\r\n async delete(id: string): Promise<void> {\r\n const res = await fetch(`${this.endpoint}/${encodeURIComponent(id)}`, {\r\n method: \"DELETE\",\r\n });\r\n if (!res.ok) throw new Error(`Failed to delete pin: ${res.status}`);\r\n }\r\n\r\n async list(filter?: {\r\n pageUrl?: string;\r\n status?: PinStatus;\r\n }): Promise<Pin[]> {\r\n const params = new URLSearchParams();\r\n if (filter?.pageUrl) params.set(\"pageUrl\", filter.pageUrl);\r\n if (filter?.status) params.set(\"status\", filter.status);\r\n const res = await fetch(`${this.endpoint}?${params}`);\r\n if (!res.ok) return [];\r\n const data = await res.json();\r\n return Array.isArray(data)\r\n ? data.filter((item) => PinSchema.safeParse(item).success)\r\n : [];\r\n }\r\n\r\n async clear(pageUrl?: string): Promise<void> {\r\n const params = new URLSearchParams();\r\n if (pageUrl) params.set(\"pageUrl\", pageUrl);\r\n const res = await fetch(`${this.endpoint}?${params}`, { method: \"DELETE\" });\r\n if (!res.ok) throw new Error(`Failed to clear pins: ${res.status}`);\r\n }\r\n}\r\n","// @agent-native/pinpoint — Element selection via document.elementFromPoint()\r\n// MIT License\r\n//\r\n// rAF-gated throttling (60fps). Target-identity short-circuit.\r\n// Two-tier hover: fast path (highlight rect) + deferred path (component info after 100ms).\r\n// Stash hovered element ref to prevent ghost-element race on click.\r\n\r\nexport interface ElementPickerOptions {\r\n /** Called on hover with the element under the cursor */\r\n onHover?: (element: Element | null, rect: DOMRect | null) => void;\r\n /** Called after stable hover (100ms) with full element context */\r\n onStableHover?: (element: Element) => void;\r\n /** Called when an element is clicked/selected */\r\n onSelect?: (element: Element) => void;\r\n /** Elements to ignore (e.g., pinpoint's own UI) */\r\n ignoreSelector?: string;\r\n /** Whether to block page interactions during selection */\r\n blockInteractions?: boolean;\r\n}\r\n\r\nexport class ElementPicker {\r\n private active = false;\r\n private paused = false;\r\n private hoveredElement: Element | null = null;\r\n private rafId: number | null = null;\r\n private stableTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private lastTarget: Element | null = null;\r\n private options: ElementPickerOptions;\r\n\r\n private handleMouseMove: (e: MouseEvent) => void;\r\n private handleClick: (e: MouseEvent) => void;\r\n private handleKeyDown: (e: KeyboardEvent) => void;\r\n\r\n constructor(options: ElementPickerOptions = {}) {\r\n this.options = options;\r\n\r\n this.handleMouseMove = (e: MouseEvent) => {\r\n if (!this.active || this.paused) return;\r\n if (this.isOwnUI(e)) return;\r\n // rAF-gated throttling for 60fps\r\n if (this.rafId !== null) return;\r\n this.rafId = requestAnimationFrame(() => {\r\n this.rafId = null;\r\n this.processHover(e.clientX, e.clientY);\r\n });\r\n };\r\n\r\n this.handleClick = (e: MouseEvent) => {\r\n if (!this.active || this.paused) return;\r\n\r\n // Don't intercept clicks on our own UI (Shadow DOM overlay)\r\n if (this.isOwnUI(e)) return;\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.stopImmediatePropagation();\r\n\r\n // Use the stashed hovered element to prevent ghost-element race\r\n const target = this.hoveredElement;\r\n if (target && !this.shouldIgnore(target)) {\r\n this.options.onSelect?.(target);\r\n }\r\n };\r\n\r\n this.handleKeyDown = (e: KeyboardEvent) => {\r\n if (!this.active) return;\r\n if (e.key === \"Escape\") {\r\n this.deactivate();\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Check if an event originates from Pinpoint's own UI.\r\n * Uses composedPath() to cross Shadow DOM boundaries.\r\n */\r\n private isOwnUI(e: Event): boolean {\r\n const path = e.composedPath();\r\n for (const node of path) {\r\n if (node instanceof HTMLElement) {\r\n if (node.id === \"pinpoint-root\") return true;\r\n if (node.hasAttribute?.(\"data-pinpoint-marker\")) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private shouldIgnore(element: Element): boolean {\r\n // Check if element is inside our Shadow DOM\r\n const root = element.getRootNode();\r\n if (root instanceof ShadowRoot) {\r\n const host = root.host;\r\n if (host.id === \"pinpoint-root\") return true;\r\n }\r\n\r\n // Check if it's a pinpoint marker\r\n if (element.hasAttribute(\"data-pinpoint-marker\")) return true;\r\n if (element.closest?.(\"[data-pinpoint-marker]\")) return true;\r\n\r\n if (!this.options.ignoreSelector) return false;\r\n return (\r\n element.closest(this.options.ignoreSelector) !== null ||\r\n element.matches(this.options.ignoreSelector)\r\n );\r\n }\r\n\r\n private pierceElementFromPoint(x: number, y: number): Element | null {\r\n let element = document.elementFromPoint(x, y);\r\n if (!element) return null;\r\n\r\n // Pierce through Shadow DOM\r\n while (element?.shadowRoot) {\r\n const inner = element.shadowRoot.elementFromPoint(x, y);\r\n if (!inner || inner === element) break;\r\n element = inner;\r\n }\r\n\r\n return element;\r\n }\r\n\r\n private processHover(x: number, y: number): void {\r\n const element = this.pierceElementFromPoint(x, y);\r\n\r\n if (!element || this.shouldIgnore(element)) {\r\n if (this.hoveredElement) {\r\n this.hoveredElement = null;\r\n this.lastTarget = null;\r\n this.clearStableTimeout();\r\n this.options.onHover?.(null, null);\r\n }\r\n return;\r\n }\r\n\r\n // Target-identity short-circuit: skip processing if same element\r\n if (element === this.lastTarget) return;\r\n this.lastTarget = element;\r\n this.hoveredElement = element;\r\n\r\n // Fast path: immediate highlight rect\r\n const rect = element.getBoundingClientRect();\r\n this.options.onHover?.(element, rect);\r\n\r\n // Deferred path: component info after 100ms stable hover\r\n this.clearStableTimeout();\r\n this.stableTimeout = setTimeout(() => {\r\n if (this.hoveredElement === element) {\r\n this.options.onStableHover?.(element);\r\n }\r\n }, 100);\r\n }\r\n\r\n private clearStableTimeout(): void {\r\n if (this.stableTimeout !== null) {\r\n clearTimeout(this.stableTimeout);\r\n this.stableTimeout = null;\r\n }\r\n }\r\n\r\n activate(): void {\r\n if (this.active) return;\r\n this.active = true;\r\n\r\n // Use capture to intercept before any element handlers\r\n document.addEventListener(\"mousemove\", this.handleMouseMove, true);\r\n document.addEventListener(\"click\", this.handleClick, true);\r\n document.addEventListener(\"keydown\", this.handleKeyDown, true);\r\n\r\n if (this.options.blockInteractions) {\r\n document.body.style.pointerEvents = \"none\";\r\n // Re-enable pointer events on our own overlay\r\n const overlay = document.getElementById(\"pinpoint-root\");\r\n if (overlay) overlay.style.pointerEvents = \"auto\";\r\n }\r\n }\r\n\r\n deactivate(): void {\r\n if (!this.active) return;\r\n this.active = false;\r\n\r\n document.removeEventListener(\"mousemove\", this.handleMouseMove, true);\r\n document.removeEventListener(\"click\", this.handleClick, true);\r\n document.removeEventListener(\"keydown\", this.handleKeyDown, true);\r\n\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n this.rafId = null;\r\n }\r\n this.clearStableTimeout();\r\n this.hoveredElement = null;\r\n this.lastTarget = null;\r\n\r\n if (this.options.blockInteractions) {\r\n document.body.style.pointerEvents = \"\";\r\n }\r\n\r\n this.options.onHover?.(null, null);\r\n }\r\n\r\n /** Update blockInteractions at runtime (called from settings toggle) */\r\n setBlockInteractions(value: boolean): void {\r\n const wasBlocking = this.options.blockInteractions;\r\n this.options.blockInteractions = value;\r\n\r\n if (this.active) {\r\n if (value && !wasBlocking) {\r\n document.body.style.pointerEvents = \"none\";\r\n const overlay = document.getElementById(\"pinpoint-root\");\r\n if (overlay) overlay.style.pointerEvents = \"auto\";\r\n } else if (!value && wasBlocking) {\r\n document.body.style.pointerEvents = \"\";\r\n }\r\n }\r\n }\r\n\r\n /** Pause picking without removing listeners (e.g., while popup is open) */\r\n pause(): void {\r\n this.paused = true;\r\n this.hoveredElement = null;\r\n this.lastTarget = null;\r\n this.clearStableTimeout();\r\n this.options.onHover?.(null, null);\r\n }\r\n\r\n /** Resume picking after pause */\r\n resume(): void {\r\n this.paused = false;\r\n }\r\n\r\n isPaused(): boolean {\r\n return this.paused;\r\n }\r\n\r\n isActive(): boolean {\r\n return this.active;\r\n }\r\n\r\n /** Get the currently hovered element */\r\n getHoveredElement(): Element | null {\r\n return this.hoveredElement;\r\n }\r\n\r\n dispose(): void {\r\n this.deactivate();\r\n }\r\n}\r\n","// @agent-native/pinpoint — CSS selector generation using @medv/finder\r\n// MIT License\r\n\r\nimport { finder } from \"@medv/finder\";\r\n\r\nexport interface SelectorOptions {\r\n /** Timeout for selector generation (ms) */\r\n timeoutMs?: number;\r\n /** Additional class names to skip */\r\n skipClassPatterns?: RegExp[];\r\n}\r\n\r\nconst DEFAULT_SKIP_CLASSES = [\r\n /^css-/, // CSS-in-JS (Emotion, etc.)\r\n /^_/, // CSS Modules hashes\r\n /^sc-/, // styled-components\r\n /^go\\d/, // Goober\r\n /^tw-/, // Tailwind utilities (sometimes hashed)\r\n /^chakra-/, // Chakra UI internals\r\n];\r\n\r\nconst DEFAULT_SKIP_IDS = [\r\n /^:r[0-9]/, // React auto-generated IDs\r\n /^radix-/, // Radix UI auto IDs\r\n /^headlessui-/, // HeadlessUI auto IDs\r\n];\r\n\r\n/**\r\n * Generate a unique, human-readable CSS selector for an element.\r\n * Uses @medv/finder (MIT) with configuration to skip CSS-in-JS hashes.\r\n */\r\nexport function buildSelector(\r\n element: Element,\r\n options: SelectorOptions = {},\r\n): string {\r\n const { timeoutMs = 200, skipClassPatterns = [] } = options;\r\n\r\n const allSkipClasses = [...DEFAULT_SKIP_CLASSES, ...skipClassPatterns];\r\n\r\n try {\r\n return finder(element, {\r\n className: (name: string) =>\r\n !allSkipClasses.some((pattern) => pattern.test(name)),\r\n idName: (name: string) =>\r\n !DEFAULT_SKIP_IDS.some((pattern) => pattern.test(name)),\r\n attr: (name: string) =>\r\n name.startsWith(\"data-testid\") || name.startsWith(\"data-cy\"),\r\n timeoutMs,\r\n });\r\n } catch {\r\n // Fallback: build a basic selector from tag + classes\r\n return buildFallbackSelector(element);\r\n }\r\n}\r\n\r\nfunction buildFallbackSelector(element: Element): string {\r\n const parts: string[] = [];\r\n\r\n if (element.id) {\r\n return `#${CSS.escape(element.id)}`;\r\n }\r\n\r\n parts.push(element.tagName.toLowerCase());\r\n\r\n // Use data-testid if available\r\n const testId = element.getAttribute(\"data-testid\");\r\n if (testId) {\r\n return `[data-testid=\"${CSS.escape(testId)}\"]`;\r\n }\r\n\r\n // Add meaningful class names\r\n const classes = Array.from(element.classList).filter(\r\n (name) => !DEFAULT_SKIP_CLASSES.some((pattern) => pattern.test(name)),\r\n );\r\n if (classes.length > 0) {\r\n parts.push(`.${classes.map((c) => CSS.escape(c)).join(\".\")}`);\r\n }\r\n\r\n // Add nth-child for uniqueness\r\n const parent = element.parentElement;\r\n if (parent) {\r\n const siblings = Array.from(parent.children).filter(\r\n (child) => child.tagName === element.tagName,\r\n );\r\n if (siblings.length > 1) {\r\n const index = siblings.indexOf(element) + 1;\r\n parts.push(`:nth-child(${index})`);\r\n }\r\n }\r\n\r\n return parts.join(\"\");\r\n}\r\n","// @agent-native/pinpoint — Element metadata extraction\r\n// MIT License\r\n\r\nimport type {\r\n ElementInfo,\r\n ElementContext,\r\n FrameworkInfo,\r\n} from \"../types/index.js\";\r\nimport { buildSelector } from \"./selector-builder.js\";\r\n\r\n/** Relevant computed style properties to capture */\r\nconst STYLE_KEYS = [\r\n \"color\",\r\n \"backgroundColor\",\r\n \"fontSize\",\r\n \"fontFamily\",\r\n \"fontWeight\",\r\n \"lineHeight\",\r\n \"padding\",\r\n \"margin\",\r\n \"border\",\r\n \"borderRadius\",\r\n \"display\",\r\n \"position\",\r\n \"width\",\r\n \"height\",\r\n \"opacity\",\r\n \"zIndex\",\r\n \"overflow\",\r\n \"textAlign\",\r\n \"textDecoration\",\r\n] as const;\r\n\r\n/**\r\n * Extract comprehensive metadata from a DOM element.\r\n */\r\nexport function extractElementInfo(element: Element): ElementInfo {\r\n const rect = element.getBoundingClientRect();\r\n const computed = window.getComputedStyle(element);\r\n\r\n // Extract computed styles (relevant subset)\r\n const computedStyles: Record<string, string> = {};\r\n for (const key of STYLE_KEYS) {\r\n const value = computed.getPropertyValue(\r\n key.replace(/([A-Z])/g, \"-$1\").toLowerCase(),\r\n );\r\n if (value) {\r\n computedStyles[key] = value;\r\n }\r\n }\r\n\r\n // Extract ARIA attributes\r\n const ariaAttributes: Record<string, string> = {};\r\n for (const attr of element.attributes) {\r\n if (attr.name.startsWith(\"aria-\") || attr.name === \"role\") {\r\n ariaAttributes[attr.name] = attr.value;\r\n }\r\n }\r\n\r\n // Extract data attributes\r\n const dataAttributes: Record<string, string> = {};\r\n for (const attr of element.attributes) {\r\n if (attr.name.startsWith(\"data-\")) {\r\n dataAttributes[attr.name] = attr.value;\r\n }\r\n }\r\n\r\n // Build DOM path\r\n const domPath = buildDomPath(element);\r\n\r\n // Get text content (truncated)\r\n const textContent = getTextContent(element);\r\n\r\n return {\r\n tagName: element.tagName.toLowerCase(),\r\n id: element.id || undefined,\r\n classNames: Array.from(element.classList),\r\n selector: buildSelector(element),\r\n textContent,\r\n boundingRect: {\r\n x: Math.round(rect.x),\r\n y: Math.round(rect.y),\r\n width: Math.round(rect.width),\r\n height: Math.round(rect.height),\r\n },\r\n computedStyles,\r\n ariaAttributes:\r\n Object.keys(ariaAttributes).length > 0 ? ariaAttributes : undefined,\r\n dataAttributes:\r\n Object.keys(dataAttributes).length > 0 ? dataAttributes : undefined,\r\n domPath,\r\n };\r\n}\r\n\r\n/**\r\n * Build a full ElementContext including HTML snippet and framework info.\r\n */\r\nexport function buildElementContext(\r\n element: Element,\r\n frameworkInfo?: FrameworkInfo,\r\n): ElementContext {\r\n const info = extractElementInfo(element);\r\n const htmlSnippet = getCleanedHtml(element);\r\n\r\n return {\r\n element: info,\r\n framework: frameworkInfo,\r\n htmlSnippet,\r\n cssSelector: info.selector,\r\n computedStyles: info.computedStyles || {},\r\n };\r\n}\r\n\r\n/**\r\n * Get text content of an element, truncated to 200 characters.\r\n * Only includes direct text nodes, not deeply nested text.\r\n */\r\nfunction getTextContent(element: Element): string | undefined {\r\n // Get direct text content only (not children's text)\r\n let text = \"\";\r\n for (const node of element.childNodes) {\r\n if (node.nodeType === Node.TEXT_NODE) {\r\n text += node.textContent?.trim() || \"\";\r\n }\r\n }\r\n\r\n // Fallback to full textContent if no direct text\r\n if (!text) {\r\n text = element.textContent?.trim() || \"\";\r\n }\r\n\r\n if (!text) return undefined;\r\n return text.length > 200 ? text.slice(0, 200) + \"...\" : text;\r\n}\r\n\r\n/**\r\n * Build a DOM path string like: html > body > div#root > main > section.hero\r\n */\r\nfunction buildDomPath(element: Element): string {\r\n const parts: string[] = [];\r\n let current: Element | null = element;\r\n\r\n while (current && current !== document.documentElement) {\r\n let part = current.tagName.toLowerCase();\r\n if (current.id) {\r\n part += `#${current.id}`;\r\n } else if (current.classList.length > 0) {\r\n const firstClass = current.classList[0];\r\n if (firstClass && !/^(css-|_|sc-)/.test(firstClass)) {\r\n part += `.${firstClass}`;\r\n }\r\n }\r\n parts.unshift(part);\r\n current = current.parentElement;\r\n }\r\n\r\n return parts.join(\" > \");\r\n}\r\n\r\n/**\r\n * Get a cleaned HTML snippet of an element.\r\n * Removes inline event handlers and excessive whitespace.\r\n */\r\nfunction getCleanedHtml(element: Element, maxLength = 500): string {\r\n const clone = element.cloneNode(true) as Element;\r\n\r\n // Remove event handler attributes\r\n const allElements = [clone, ...Array.from(clone.querySelectorAll(\"*\"))];\r\n for (const el of allElements) {\r\n for (const attr of Array.from(el.attributes)) {\r\n if (attr.name.startsWith(\"on\")) {\r\n el.removeAttribute(attr.name);\r\n }\r\n }\r\n }\r\n\r\n let html = clone.outerHTML;\r\n // Collapse whitespace\r\n html = html.replace(/\\s+/g, \" \").trim();\r\n\r\n if (html.length > maxLength) {\r\n // Truncate but keep the opening tag intact\r\n const openTagEnd = html.indexOf(\">\") + 1;\r\n if (openTagEnd > 0 && openTagEnd < maxLength) {\r\n html = html.slice(0, maxLength) + \"...\";\r\n }\r\n }\r\n\r\n return html;\r\n}\r\n","// @agent-native/pinpoint — Click-and-drag multi-element selection\r\n// MIT License\r\n//\r\n// Inspired by react-grab pattern: 75% coverage threshold.\r\n// Collect elements within selection rectangle via bounding rect comparison.\r\n\r\nexport interface DragSelectOptions {\r\n /** Minimum coverage threshold (0-1) for an element to be considered selected */\r\n coverageThreshold?: number;\r\n /** Called when drag starts */\r\n onDragStart?: (rect: DOMRect) => void;\r\n /** Called during drag with the current selection rectangle */\r\n onDragMove?: (rect: DOMRect) => void;\r\n /** Called when drag ends with selected elements */\r\n onDragEnd?: (elements: Element[]) => void;\r\n /** Elements to ignore */\r\n ignoreSelector?: string;\r\n}\r\n\r\nexport interface SelectionRect {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport class DragSelect {\r\n private active = false;\r\n private dragging = false;\r\n private startX = 0;\r\n private startY = 0;\r\n private options: DragSelectOptions;\r\n\r\n private handleMouseDown: (e: MouseEvent) => void;\r\n private handleMouseMove: (e: MouseEvent) => void;\r\n private handleMouseUp: (e: MouseEvent) => void;\r\n\r\n constructor(options: DragSelectOptions = {}) {\r\n this.options = { coverageThreshold: 0.75, ...options };\r\n\r\n this.handleMouseDown = (e: MouseEvent) => {\r\n if (!this.active || e.button !== 0) return;\r\n // Only start drag if holding Shift (to distinguish from single click)\r\n if (!e.shiftKey) return;\r\n\r\n e.preventDefault();\r\n this.dragging = true;\r\n this.startX = e.clientX;\r\n this.startY = e.clientY;\r\n\r\n const rect = this.buildRect(e.clientX, e.clientY);\r\n this.options.onDragStart?.(\r\n new DOMRect(rect.x, rect.y, rect.width, rect.height),\r\n );\r\n };\r\n\r\n this.handleMouseMove = (e: MouseEvent) => {\r\n if (!this.dragging) return;\r\n e.preventDefault();\r\n const rect = this.buildRect(e.clientX, e.clientY);\r\n this.options.onDragMove?.(\r\n new DOMRect(rect.x, rect.y, rect.width, rect.height),\r\n );\r\n };\r\n\r\n this.handleMouseUp = (e: MouseEvent) => {\r\n if (!this.dragging) return;\r\n this.dragging = false;\r\n const selectionRect = this.buildRect(e.clientX, e.clientY);\r\n\r\n // Skip tiny drags (accidental)\r\n if (selectionRect.width < 5 && selectionRect.height < 5) return;\r\n\r\n const selected = this.getElementsInRect(selectionRect);\r\n this.options.onDragEnd?.(selected);\r\n };\r\n }\r\n\r\n private buildRect(currentX: number, currentY: number): SelectionRect {\r\n return {\r\n x: Math.min(this.startX, currentX),\r\n y: Math.min(this.startY, currentY),\r\n width: Math.abs(currentX - this.startX),\r\n height: Math.abs(currentY - this.startY),\r\n };\r\n }\r\n\r\n private getElementsInRect(selectionRect: SelectionRect): Element[] {\r\n const threshold = this.options.coverageThreshold!;\r\n const elements: Element[] = [];\r\n\r\n // Walk all visible elements\r\n const walker = document.createTreeWalker(\r\n document.body,\r\n NodeFilter.SHOW_ELEMENT,\r\n {\r\n acceptNode: (node) => {\r\n const el = node as Element;\r\n if (\r\n this.options.ignoreSelector &&\r\n el.matches(this.options.ignoreSelector)\r\n ) {\r\n return NodeFilter.FILTER_REJECT;\r\n }\r\n return NodeFilter.FILTER_ACCEPT;\r\n },\r\n },\r\n );\r\n\r\n let node: Node | null;\r\n while ((node = walker.nextNode())) {\r\n const el = node as Element;\r\n const rect = el.getBoundingClientRect();\r\n\r\n // Skip invisible elements\r\n if (rect.width === 0 || rect.height === 0) continue;\r\n\r\n // Calculate overlap\r\n const overlapX = Math.max(\r\n 0,\r\n Math.min(rect.right, selectionRect.x + selectionRect.width) -\r\n Math.max(rect.left, selectionRect.x),\r\n );\r\n const overlapY = Math.max(\r\n 0,\r\n Math.min(rect.bottom, selectionRect.y + selectionRect.height) -\r\n Math.max(rect.top, selectionRect.y),\r\n );\r\n const overlapArea = overlapX * overlapY;\r\n const elementArea = rect.width * rect.height;\r\n const coverage = overlapArea / elementArea;\r\n\r\n if (coverage >= threshold) {\r\n // Only add leaf-ish elements (avoid selecting huge containers)\r\n if (el.children.length === 0 || rect.width < 400) {\r\n elements.push(el);\r\n }\r\n }\r\n }\r\n\r\n return elements;\r\n }\r\n\r\n activate(): void {\r\n if (this.active) return;\r\n this.active = true;\r\n document.addEventListener(\"mousedown\", this.handleMouseDown, true);\r\n document.addEventListener(\"mousemove\", this.handleMouseMove, true);\r\n document.addEventListener(\"mouseup\", this.handleMouseUp, true);\r\n }\r\n\r\n deactivate(): void {\r\n if (!this.active) return;\r\n this.active = false;\r\n this.dragging = false;\r\n document.removeEventListener(\"mousedown\", this.handleMouseDown, true);\r\n document.removeEventListener(\"mousemove\", this.handleMouseMove, true);\r\n document.removeEventListener(\"mouseup\", this.handleMouseUp, true);\r\n }\r\n\r\n isDragging(): boolean {\r\n return this.dragging;\r\n }\r\n\r\n dispose(): void {\r\n this.deactivate();\r\n }\r\n}\r\n","// @agent-native/pinpoint — Text range selection\r\n// MIT License\r\n//\r\n// Listens for selectionchange, captures Selection.getRangeAt(0),\r\n// extracts container element and surrounding context.\r\n\r\nexport interface TextSelection {\r\n /** The selected text */\r\n text: string;\r\n /** The container element */\r\n container: Element;\r\n /** Start offset within the container */\r\n startOffset: number;\r\n /** End offset within the container */\r\n endOffset: number;\r\n /** Surrounding context (text before + selected + text after) */\r\n context: string;\r\n /** Bounding rect of the selection */\r\n rect: DOMRect;\r\n}\r\n\r\nexport interface TextSelectOptions {\r\n /** Called when text selection changes */\r\n onSelect?: (selection: TextSelection | null) => void;\r\n /** Minimum characters to trigger selection callback */\r\n minLength?: number;\r\n}\r\n\r\nexport class TextSelect {\r\n private active = false;\r\n private options: TextSelectOptions;\r\n private handleSelectionChange: () => void;\r\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n constructor(options: TextSelectOptions = {}) {\r\n this.options = { minLength: 3, ...options };\r\n\r\n this.handleSelectionChange = () => {\r\n if (!this.active) return;\r\n\r\n // Debounce to avoid excessive callbacks during selection\r\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\r\n this.debounceTimer = setTimeout(() => {\r\n const selection = this.getTextSelection();\r\n this.options.onSelect?.(selection);\r\n }, 150);\r\n };\r\n }\r\n\r\n private getTextSelection(): TextSelection | null {\r\n const selection = window.getSelection();\r\n if (!selection || selection.isCollapsed || selection.rangeCount === 0) {\r\n return null;\r\n }\r\n\r\n const text = selection.toString().trim();\r\n if (text.length < (this.options.minLength ?? 3)) {\r\n return null;\r\n }\r\n\r\n const range = selection.getRangeAt(0);\r\n const container =\r\n range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\r\n ? (range.commonAncestorContainer as Element)\r\n : range.commonAncestorContainer.parentElement;\r\n\r\n if (!container) return null;\r\n\r\n // Get surrounding context\r\n const fullText = container.textContent || \"\";\r\n const startOffset = range.startOffset;\r\n const endOffset = range.endOffset;\r\n const contextBefore = fullText.slice(\r\n Math.max(0, startOffset - 50),\r\n startOffset,\r\n );\r\n const contextAfter = fullText.slice(endOffset, endOffset + 50);\r\n const context = `...${contextBefore}[${text}]${contextAfter}...`;\r\n\r\n const rect = range.getBoundingClientRect();\r\n\r\n return {\r\n text,\r\n container,\r\n startOffset,\r\n endOffset,\r\n context,\r\n rect,\r\n };\r\n }\r\n\r\n activate(): void {\r\n if (this.active) return;\r\n this.active = true;\r\n document.addEventListener(\"selectionchange\", this.handleSelectionChange);\r\n }\r\n\r\n deactivate(): void {\r\n if (!this.active) return;\r\n this.active = false;\r\n document.removeEventListener(\"selectionchange\", this.handleSelectionChange);\r\n if (this.debounceTimer) {\r\n clearTimeout(this.debounceTimer);\r\n this.debounceTimer = null;\r\n }\r\n }\r\n\r\n /** Get the current text selection, if any */\r\n getCurrentSelection(): TextSelection | null {\r\n return this.getTextSelection();\r\n }\r\n\r\n dispose(): void {\r\n this.deactivate();\r\n }\r\n}\r\n","// @agent-native/pinpoint — Framework adapter interface and auto-detection\r\n// MIT License\r\n\r\nimport type {\r\n FrameworkAdapter,\r\n ComponentInfo,\r\n SourceLocation,\r\n} from \"../types/index.js\";\r\n\r\n/** Registry of framework adapters, tried in order */\r\nconst adapters: FrameworkAdapter[] = [];\r\n\r\n/** The currently detected adapter (cached after first detection) */\r\nlet detectedAdapter: FrameworkAdapter | null = null;\r\nlet detected = false;\r\n\r\n/**\r\n * Register a framework adapter. Adapters are tried in registration order.\r\n */\r\nexport function registerAdapter(adapter: FrameworkAdapter): void {\r\n adapters.push(adapter);\r\n // Reset detection cache when new adapters are registered\r\n detected = false;\r\n detectedAdapter = null;\r\n}\r\n\r\n/**\r\n * Auto-detect the current framework by trying each adapter's detect() method.\r\n * Returns the first matching adapter, or the generic fallback.\r\n */\r\nexport function detectFramework(): FrameworkAdapter {\r\n if (detected && detectedAdapter) return detectedAdapter;\r\n\r\n for (const adapter of adapters) {\r\n try {\r\n if (adapter.detect()) {\r\n detectedAdapter = adapter;\r\n detected = true;\r\n return adapter;\r\n }\r\n } catch {\r\n // Adapter detection failed, try next\r\n }\r\n }\r\n\r\n // Return generic adapter as fallback\r\n detectedAdapter = genericAdapter;\r\n detected = true;\r\n return genericAdapter;\r\n}\r\n\r\n/**\r\n * Get component info for an element using the detected framework adapter.\r\n */\r\nexport function getComponentInfo(element: Element): ComponentInfo | null {\r\n const adapter = detectFramework();\r\n try {\r\n return adapter.getComponentInfo(element);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Get source location for an element using the detected framework adapter.\r\n */\r\nexport function getSourceLocation(element: Element): SourceLocation | null {\r\n const adapter = detectFramework();\r\n try {\r\n return adapter.getSourceLocation(element);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Reset detection cache. Useful for testing or when the page framework changes.\r\n */\r\nexport function resetDetection(): void {\r\n detected = false;\r\n detectedAdapter = null;\r\n}\r\n\r\n/**\r\n * Get all registered adapters.\r\n */\r\nexport function getAdapters(): FrameworkAdapter[] {\r\n return [...adapters];\r\n}\r\n\r\n/** Generic fallback adapter for non-framework pages */\r\nconst genericAdapter: FrameworkAdapter = {\r\n name: \"generic\",\r\n detect: () => true, // Always matches as fallback\r\n getComponentInfo: () => null,\r\n getSourceLocation: () => null,\r\n};\r\n","// @agent-native/pinpoint — Pin markers: outline + numbered badge per element\r\n// MIT License\r\n//\r\n// Each pin gets a wrapper div containing:\r\n// 1. An outline border div (positioned over the element)\r\n// 2. A numbered badge circle (at the top-right corner)\r\n// 3. An optional selection checkbox (at the top-left corner)\r\n// 4. A resolved checkmark overlay when status is resolved\r\n// Rendered outside Shadow DOM on document.body.\r\n\r\nimport type { Pin, PinStatus } from \"../../types/index.js\";\r\n\r\nconst MAX_MARKERS = 100;\r\n\r\n// Badge sizing constants\r\nconst BADGE_SIZE = 20;\r\nconst BADGE_FONT = 11;\r\nconst BADGE_OFFSET = -10;\r\n\r\n// Status colors\r\nconst STATUS_COLORS: Record<PinStatus, string> = {\r\n open: \"#3b82f6\",\r\n acknowledged: \"#eab308\",\r\n resolved: \"#22c55e\",\r\n dismissed: \"#a1a1aa\",\r\n};\r\n\r\ninterface MarkerPair {\r\n wrapper: HTMLElement;\r\n outline: HTMLElement;\r\n badge: HTMLElement;\r\n checkbox: HTMLElement;\r\n resolvedOverlay: HTMLElement;\r\n}\r\n\r\nexport class PinMarkerManager {\r\n private markers: Map<string, MarkerPair> = new Map();\r\n private updateTimer: ReturnType<typeof setInterval> | null = null;\r\n private onClick: ((pin: Pin) => void) | null = null;\r\n private onToggleSelect: ((pin: Pin) => void) | null = null;\r\n private selectedPinIds: Set<string> = new Set();\r\n private showCheckboxes = false;\r\n\r\n constructor(private markerColor = \"#3b82f6\") {}\r\n\r\n setOnClick(handler: (pin: Pin) => void) {\r\n this.onClick = handler;\r\n }\r\n\r\n setOnToggleSelect(handler: (pin: Pin) => void) {\r\n this.onToggleSelect = handler;\r\n }\r\n\r\n setSelectedPins(ids: Set<string>) {\r\n this.selectedPinIds = ids;\r\n // Update checkbox visuals\r\n for (const [id, pair] of this.markers) {\r\n this.updateCheckboxVisual(pair.checkbox, ids.has(id));\r\n }\r\n }\r\n\r\n setShowCheckboxes(show: boolean) {\r\n this.showCheckboxes = show;\r\n for (const pair of this.markers.values()) {\r\n pair.checkbox.style.display = show ? \"flex\" : \"none\";\r\n }\r\n }\r\n\r\n update(pins: Pin[]) {\r\n const visiblePins = pins.slice(0, MAX_MARKERS);\r\n const pinIds = new Set(visiblePins.map((p) => p.id));\r\n\r\n for (const [id, pair] of this.markers) {\r\n if (!pinIds.has(id)) {\r\n pair.wrapper.remove();\r\n this.markers.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0; i < visiblePins.length; i++) {\r\n this.updateMarker(visiblePins[i], i + 1);\r\n }\r\n }\r\n\r\n private updateCheckboxVisual(checkbox: HTMLElement, selected: boolean) {\r\n const inner = checkbox.querySelector(\r\n \".pp-marker-checkbox-inner\",\r\n ) as HTMLElement;\r\n if (!inner) return;\r\n if (selected) {\r\n inner.style.background = \"#3b82f6\";\r\n inner.style.borderColor = \"#3b82f6\";\r\n inner.innerHTML = `<svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12l5 5l10 -10\"/></svg>`;\r\n } else {\r\n inner.style.background = \"rgba(0,0,0,0.5)\";\r\n inner.style.borderColor = \"rgba(255,255,255,0.3)\";\r\n inner.innerHTML = \"\";\r\n }\r\n }\r\n\r\n private updateMarker(pin: Pin, number: number) {\r\n const element = document.querySelector(pin.element.selector);\r\n if (!element) {\r\n const existing = this.markers.get(pin.id);\r\n if (existing) existing.wrapper.style.display = \"none\";\r\n return;\r\n }\r\n\r\n let pair = this.markers.get(pin.id);\r\n const statusColor = STATUS_COLORS[pin.status.state] || this.markerColor;\r\n\r\n if (!pair) {\r\n // Wrapper\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.setAttribute(\"data-pinpoint-marker\", pin.id);\r\n wrapper.style.cssText = `\r\n position: fixed;\r\n z-index: 2147483646;\r\n pointer-events: none;\r\n `;\r\n\r\n // Outline border\r\n const outline = document.createElement(\"div\");\r\n outline.style.cssText = `\r\n position: absolute;\r\n top: 0; left: 0;\r\n width: 100%; height: 100%;\r\n border: 1.5px solid ${statusColor};\r\n border-radius: 3px;\r\n pointer-events: none;\r\n opacity: 0.6;\r\n `;\r\n\r\n // Numbered badge\r\n const badge = document.createElement(\"div\");\r\n badge.style.cssText = `\r\n position: absolute;\r\n top: ${BADGE_OFFSET}px;\r\n right: ${BADGE_OFFSET}px;\r\n width: ${BADGE_SIZE}px;\r\n height: ${BADGE_SIZE}px;\r\n min-width: ${BADGE_SIZE}px;\r\n padding: 0 4px;\r\n border-radius: ${BADGE_SIZE / 2}px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: ${BADGE_FONT}px;\r\n font-weight: 600;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n font-variant-numeric: tabular-nums;\r\n color: #fff;\r\n background: ${statusColor};\r\n box-shadow: 0 1px 4px rgba(0,0,0,0.2);\r\n cursor: pointer;\r\n pointer-events: auto;\r\n user-select: none;\r\n z-index: 1;\r\n animation: pp-badge-appear 0.2s cubic-bezier(0.16, 1, 0.3, 1);\r\n `;\r\n\r\n // Add keyframes if not yet added\r\n if (!document.getElementById(\"pp-marker-keyframes\")) {\r\n const style = document.createElement(\"style\");\r\n style.id = \"pp-marker-keyframes\";\r\n style.textContent = `\r\n @keyframes pp-badge-appear {\r\n from { transform: scale(0); opacity: 0; }\r\n to { transform: scale(1); opacity: 1; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n\r\n badge.addEventListener(\"click\", (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.onClick?.(pin);\r\n });\r\n\r\n badge.addEventListener(\"mouseenter\", () => {\r\n badge.style.transform = \"scale(1.15)\";\r\n });\r\n badge.addEventListener(\"mouseleave\", () => {\r\n badge.style.transform = \"scale(1)\";\r\n });\r\n\r\n // Selection checkbox\r\n const checkbox = document.createElement(\"div\");\r\n checkbox.style.cssText = `\r\n position: absolute;\r\n top: ${BADGE_OFFSET}px;\r\n left: ${BADGE_OFFSET}px;\r\n width: ${BADGE_SIZE}px;\r\n height: ${BADGE_SIZE}px;\r\n display: ${this.showCheckboxes ? \"flex\" : \"none\"};\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n z-index: 1;\r\n `;\r\n\r\n const checkboxInner = document.createElement(\"div\");\r\n checkboxInner.className = \"pp-marker-checkbox-inner\";\r\n checkboxInner.style.cssText = `\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 4px;\r\n border: 1.5px solid rgba(255,255,255,0.3);\r\n background: rgba(0,0,0,0.5);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n `;\r\n checkbox.appendChild(checkboxInner);\r\n\r\n checkbox.addEventListener(\"click\", (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.onToggleSelect?.(pin);\r\n });\r\n\r\n // Resolved overlay checkmark\r\n const resolvedOverlay = document.createElement(\"div\");\r\n resolvedOverlay.style.cssText = `\r\n position: absolute;\r\n top: 0; left: 0;\r\n width: 100%; height: 100%;\r\n display: ${pin.status.state === \"resolved\" ? \"flex\" : \"none\"};\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(34, 197, 94, 0.12);\r\n border-radius: 3px;\r\n pointer-events: none;\r\n `;\r\n resolvedOverlay.innerHTML = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#22c55e\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12l5 5l10 -10\"/></svg>`;\r\n\r\n wrapper.appendChild(outline);\r\n wrapper.appendChild(badge);\r\n wrapper.appendChild(checkbox);\r\n wrapper.appendChild(resolvedOverlay);\r\n document.body.appendChild(wrapper);\r\n\r\n pair = { wrapper, outline, badge, checkbox, resolvedOverlay };\r\n this.markers.set(pin.id, pair);\r\n }\r\n\r\n // Update dynamic properties\r\n pair.badge.textContent = String(number);\r\n pair.badge.title = pin.comment;\r\n pair.badge.style.background = statusColor;\r\n pair.outline.style.borderColor = statusColor;\r\n pair.resolvedOverlay.style.display =\r\n pin.status.state === \"resolved\" ? \"flex\" : \"none\";\r\n this.updateCheckboxVisual(pair.checkbox, this.selectedPinIds.has(pin.id));\r\n\r\n // Position wrapper to cover the element\r\n const rect = element.getBoundingClientRect();\r\n pair.wrapper.style.left = `${rect.left}px`;\r\n pair.wrapper.style.top = `${rect.top}px`;\r\n pair.wrapper.style.width = `${rect.width}px`;\r\n pair.wrapper.style.height = `${rect.height}px`;\r\n\r\n // Visibility\r\n const visible =\r\n rect.bottom > 0 &&\r\n rect.top < window.innerHeight &&\r\n rect.right > 0 &&\r\n rect.left < window.innerWidth;\r\n pair.wrapper.style.display = visible ? \"block\" : \"none\";\r\n }\r\n\r\n startTracking(pins: Pin[]) {\r\n this.stopTracking();\r\n this.update(pins);\r\n this.updateTimer = setInterval(() => this.update(pins), 200);\r\n }\r\n\r\n stopTracking() {\r\n if (this.updateTimer) {\r\n clearInterval(this.updateTimer);\r\n this.updateTimer = null;\r\n }\r\n }\r\n\r\n dispose() {\r\n this.stopTracking();\r\n for (const pair of this.markers.values()) {\r\n pair.wrapper.remove();\r\n }\r\n this.markers.clear();\r\n }\r\n}\r\n","let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port1 = channel.port1,\n port = channel.port2;\n if (typeof port1.unref === \"function\") port1.unref();\n if (typeof port.unref === \"function\") port.unref();\n scheduleCallback = () => port.postMessage(null);\n port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const observers = this.observers;\n if (!observers || observers[observers.length - 1] !== Listener) {\n const sSlot = observers ? observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n if (!Transition.sources.has(node)) node.value = nextValue;\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const sourceFn = c.fn;\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(sourceFn, trigger);\n onCleanup(() => ordinary.dispose());\n let inTransition;\n const triggerInTransition = () => startTransition(trigger).then(() => {\n if (inTransition) {\n inTransition.dispose();\n inTransition = undefined;\n }\n });\n c.fn = x => {\n track();\n if (Transition && Transition.running) {\n if (!inTransition) inTransition = ExternalSourceConfig.factory(sourceFn, triggerInTransition);\n return inTransition.track(x);\n }\n return ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n if (Array.isArray(result)) {\n if (result.length < 32768) results.push.apply(results, result);else for (let j = 0; j < result.length; j++) results.push(result[j]);\n } else {\n results.push(result);\n }\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const res = keys.map(k => {\n return new Proxy({\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n }\n let Comp;\n return createMemo(() => (Comp = comp()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, sharedConfig, createRenderEffect, createRoot, untrack, splitProps, getOwner, createEffect, runWithOwner, createSignal, onCleanup, enableHydration } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","// @agent-native/pinpoint — SVG icons from Tabler Icons (MIT)\r\n// https://github.com/tabler/tabler-icons\r\n//\r\n// All icons: 24x24 viewBox, stroke-width 2, stroke-linecap round,\r\n// stroke-linejoin round. Rendered at 16x16 for our UI.\r\n\r\nconst S =\r\n 'width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"';\r\n\r\nexport const icons = {\r\n pin: `<svg ${S}><path d=\"M15 4.5l-4 4l-4 1.5l-1.5 1.5l7 7l1.5 -1.5l1.5 -4l4 -4\"/><path d=\"M9 15l-4.5 4.5\"/><path d=\"M14.5 4l5.5 5.5\"/></svg>`,\r\n\r\n mapPin: `<svg ${S}><path d=\"M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\"/><path d=\"M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0\"/></svg>`,\r\n\r\n crosshair: `<svg ${S}><path d=\"M4 8v-2a2 2 0 0 1 2 -2h2\"/><path d=\"M4 16v2a2 2 0 0 0 2 2h2\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v2\"/><path d=\"M16 20h2a2 2 0 0 0 2 -2v-2\"/><path d=\"M9 12l6 0\"/><path d=\"M12 9l0 6\"/></svg>`,\r\n\r\n send: `<svg ${S}><path d=\"M10 14l11 -11\"/><path d=\"M21 3l-6.5 18a.55 .55 0 0 1 -1 0l-3.5 -7l-7 -3.5a.55 .55 0 0 1 0 -1l18 -6.5\"/></svg>`,\r\n\r\n copy: `<svg ${S}><path d=\"M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z\"/><path d=\"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1\"/></svg>`,\r\n\r\n trash: `<svg ${S}><path d=\"M4 7l16 0\"/><path d=\"M10 11l0 6\"/><path d=\"M14 11l0 6\"/><path d=\"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\"/><path d=\"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\"/></svg>`,\r\n\r\n settings: `<svg ${S}><path d=\"M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065\"/><path d=\"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\"/></svg>`,\r\n\r\n x: `<svg ${S}><path d=\"M18 6l-12 12\"/><path d=\"M6 6l12 12\"/></svg>`,\r\n\r\n chevronDown: `<svg ${S}><path d=\"M6 9l6 6l6 -6\"/></svg>`,\r\n\r\n check: `<svg ${S}><path d=\"M5 12l5 5l10 -10\"/></svg>`,\r\n\r\n messageSquare: `<svg ${S}><path d=\"M8 9h8\"/><path d=\"M8 13h6\"/><path d=\"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12\"/></svg>`,\r\n\r\n eye: `<svg ${S}><path d=\"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0\"/><path d=\"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6\"/></svg>`,\r\n\r\n fileCode: `<svg ${S}><path d=\"M14 3v4a1 1 0 0 0 1 1h4\"/><path d=\"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2\"/><path d=\"M10 13l-1 2l1 2\"/><path d=\"M14 13l1 2l-1 2\"/></svg>`,\r\n\r\n history: `<svg ${S}><path d=\"M12 8l0 4l2 2\"/><path d=\"M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5\"/></svg>`,\r\n\r\n minus: `<svg ${S}><path d=\"M5 12l14 0\"/></svg>`,\r\n\r\n // Draw mode icons\r\n pencil: `<svg ${S}><path d=\"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4\"/><path d=\"M13.5 6.5l4 4\"/></svg>`,\r\n arrowUpRight: `<svg ${S}><path d=\"M17 7l-10 10\"/><path d=\"M8 7l9 0l0 9\"/></svg>`,\r\n circle: `<svg ${S}><circle cx=\"12\" cy=\"12\" r=\"9\"/></svg>`,\r\n square: `<svg ${S}><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/></svg>`,\r\n typography: `<svg ${S}><path d=\"M4 20l3 0\"/><path d=\"M14 20l7 0\"/><path d=\"M6.9 15l6.9 0\"/><path d=\"M10.2 6.3l5.8 13.7\"/><path d=\"M5 20l6 -16l2 0l7 16\"/></svg>`,\r\n undo: `<svg ${S}><path d=\"M9 14l-4 -4l4 -4\"/><path d=\"M5 10h11a4 4 0 1 1 0 8h-1\"/></svg>`,\r\n palette: `<svg ${S}><path d=\"M12 21a9 9 0 0 1 0 -18c4.97 0 9 3.582 9 8c0 1.06 -.474 2.078 -1.318 2.828c-.844 .75 -1.989 1.172 -3.182 1.172h-2.5a2 2 0 0 0 -1 3.75a1.3 1.3 0 0 1 -1 2.25\"/><circle cx=\"8.5\" cy=\"10.5\" r=\"1\"/><circle cx=\"12.5\" cy=\"7.5\" r=\"1\"/><circle cx=\"16.5\" cy=\"10.5\" r=\"1\"/></svg>`,\r\n lineWeight: `<svg ${S}><path d=\"M4 6h16\"/><path d=\"M4 12h16\" stroke-width=\"3\"/><path d=\"M4 18h16\" stroke-width=\"5\"/></svg>`,\r\n\r\n // Voice icon\r\n microphone: `<svg ${S}><path d=\"M9 2m0 3a3 3 0 0 1 3 -3h0a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3h0a3 3 0 0 1 -3 -3z\"/><path d=\"M5 10a7 7 0 0 0 14 0\"/><path d=\"M8 21l8 0\"/><path d=\"M12 17l0 4\"/></svg>`,\r\n microphoneOff: `<svg ${S}><path d=\"M3 3l18 18\"/><path d=\"M9 5a3 3 0 0 1 6 0v5a3 3 0 0 1 -.13 .874m-2 2a3 3 0 0 1 -3.87 -2.872v-1\"/><path d=\"M5 10a7 7 0 0 0 10.846 5.85m2 -2a6.967 6.967 0 0 0 1.152 -3.85\"/><path d=\"M8 21l8 0\"/><path d=\"M12 17l0 4\"/></svg>`,\r\n\r\n // Queue & batch icons\r\n plus: `<svg ${S}><path d=\"M12 5l0 14\"/><path d=\"M5 12l14 0\"/></svg>`,\r\n stack: `<svg ${S}><path d=\"M12 2l-8 4l8 4l8 -4l-8 -4\"/><path d=\"M4 10l8 4l8 -4\"/><path d=\"M4 14l8 4l8 -4\"/></svg>`,\r\n checkSquare: `<svg ${S}><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M9 12l2 2l4 -4\"/></svg>`,\r\n squareEmpty: `<svg ${S}><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/></svg>`,\r\n bolt: `<svg ${S}><path d=\"M13 3l0 7l6 0l-8 11l0 -7l-6 0l8 -11\"/></svg>`,\r\n checkCircle: `<svg ${S}><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M9 12l2 2l4 -4\"/></svg>`,\r\n} as const;\r\n\r\nexport type IconName = keyof typeof icons;\r\n","// @agent-native/pinpoint — Right-click context menu\r\n// MIT License\r\n\r\nimport { onMount, onCleanup, type Component } from \"solid-js\";\r\n\r\nimport { icons } from \"../icons/index.js\";\r\n\r\ninterface ContextMenuProps {\r\n position: { x: number; y: number };\r\n element: Element;\r\n onClose: () => void;\r\n onAnnotate: () => void;\r\n onCopyContext: () => void;\r\n onPrompt: () => void;\r\n}\r\n\r\nexport const ContextMenu: Component<ContextMenuProps> = (props) => {\r\n let menuRef: HTMLDivElement | undefined;\r\n\r\n // Close on click outside\r\n onMount(() => {\r\n const handleClick = (e: MouseEvent) => {\r\n // Use composedPath to pierce Shadow DOM boundary\r\n if (menuRef && !e.composedPath().includes(menuRef)) {\r\n props.onClose();\r\n }\r\n };\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") props.onClose();\r\n };\r\n // Delay to avoid closing immediately from the contextmenu event\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", handleClick, true);\r\n document.addEventListener(\"keydown\", handleKeyDown, true);\r\n }, 0);\r\n\r\n onCleanup(() => {\r\n document.removeEventListener(\"click\", handleClick, true);\r\n document.removeEventListener(\"keydown\", handleKeyDown, true);\r\n });\r\n });\r\n\r\n // Ensure menu stays within viewport\r\n const x = Math.min(props.position.x, window.innerWidth - 200);\r\n const y = Math.min(props.position.y, window.innerHeight - 250);\r\n\r\n return (\r\n <div\r\n ref={menuRef}\r\n class=\"pp-context-menu\"\r\n style={{ left: `${x}px`, top: `${y}px` }}\r\n >\r\n <div class=\"pp-context-menu__item\" on:click={() => props.onAnnotate()}>\r\n <span innerHTML={icons.pin} />\r\n Add Annotation\r\n </div>\r\n <div class=\"pp-context-menu__item\" on:click={() => props.onPrompt()}>\r\n <span innerHTML={icons.messageSquare} />\r\n Quick Prompt\r\n </div>\r\n <div class=\"pp-context-menu__separator\" />\r\n <div class=\"pp-context-menu__item\" on:click={() => props.onCopyContext()}>\r\n <span innerHTML={icons.copy} />\r\n Copy Element Context\r\n </div>\r\n <div\r\n class=\"pp-context-menu__item\"\r\n on:click={async () => {\r\n const html = props.element.outerHTML\r\n .replace(/\\s+/g, \" \")\r\n .trim()\r\n .slice(0, 500);\r\n await navigator.clipboard.writeText(html);\r\n props.onClose();\r\n }}\r\n >\r\n <span innerHTML={icons.fileCode} />\r\n Copy HTML Snippet\r\n </div>\r\n <div\r\n class=\"pp-context-menu__item\"\r\n on:click={async () => {\r\n const styles = window.getComputedStyle(props.element);\r\n const relevant = [\r\n \"color\",\r\n \"background-color\",\r\n \"font-size\",\r\n \"font-family\",\r\n \"padding\",\r\n \"margin\",\r\n \"border\",\r\n \"display\",\r\n \"position\",\r\n \"width\",\r\n \"height\",\r\n ];\r\n const result = relevant\r\n .map((key) => `${key}: ${styles.getPropertyValue(key)}`)\r\n .join(\"\\n\");\r\n await navigator.clipboard.writeText(result);\r\n props.onClose();\r\n }}\r\n >\r\n <span innerHTML={icons.eye} />\r\n Copy Computed Styles\r\n </div>\r\n </div>\r\n );\r\n};\r\n","// @agent-native/pinpoint — Canvas-based selection overlay + draw mode\r\n// MIT License\r\n//\r\n// Uses <canvas> for hover highlight, drag rectangle, pin outlines,\r\n// and freehand/shape drawing.\r\n// LERP interpolation for smooth hover animation.\r\n\r\nimport { onMount, onCleanup, type Component } from \"solid-js\";\r\n\r\nimport type {\r\n Pin,\r\n DrawStroke,\r\n DrawToolType,\r\n TextNote,\r\n} from \"../../types/index.js\";\r\n\r\ninterface OverlayCanvasProps {\r\n hoveredRect: DOMRect | null;\r\n dragRect: DOMRect | null;\r\n pins: Pin[];\r\n active: boolean;\r\n // Draw mode\r\n drawMode: boolean;\r\n drawStrokes: DrawStroke[];\r\n currentStroke: DrawStroke | null;\r\n drawColor: string;\r\n drawLineWidth: number;\r\n drawTool: DrawToolType;\r\n textNotes: TextNote[];\r\n onDrawStart: (x: number, y: number) => void;\r\n onDrawMove: (x: number, y: number) => void;\r\n onDrawEnd: () => void;\r\n onTextPlace: (x: number, y: number) => void;\r\n}\r\n\r\n// LERP interpolation for smooth transitions\r\nfunction lerp(start: number, end: number, t: number): number {\r\n return start + (end - start) * t;\r\n}\r\n\r\ninterface AnimatedRect {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport const OverlayCanvas: Component<OverlayCanvasProps> = (props) => {\r\n let canvasRef: HTMLCanvasElement | undefined;\r\n let animFrameId: number | null = null;\r\n let currentRect: AnimatedRect = { x: 0, y: 0, width: 0, height: 0 };\r\n let targetRect: AnimatedRect | null = null;\r\n const LERP_SPEED = 0.25;\r\n\r\n function resizeCanvas() {\r\n if (!canvasRef) return;\r\n const dpr = window.devicePixelRatio || 1;\r\n canvasRef.width = window.innerWidth * dpr;\r\n canvasRef.height = window.innerHeight * dpr;\r\n canvasRef.style.width = `${window.innerWidth}px`;\r\n canvasRef.style.height = `${window.innerHeight}px`;\r\n const ctx = canvasRef.getContext(\"2d\");\r\n if (ctx) ctx.scale(dpr, dpr);\r\n }\r\n\r\n function drawStroke(ctx: CanvasRenderingContext2D, stroke: DrawStroke) {\r\n if (stroke.points.length < 1) return;\r\n\r\n ctx.strokeStyle = stroke.color;\r\n ctx.lineWidth = stroke.lineWidth;\r\n ctx.lineCap = \"round\";\r\n ctx.lineJoin = \"round\";\r\n ctx.setLineDash([]);\r\n\r\n if (stroke.type === \"freehand\") {\r\n ctx.beginPath();\r\n ctx.moveTo(stroke.points[0].x, stroke.points[0].y);\r\n for (let i = 1; i < stroke.points.length; i++) {\r\n ctx.lineTo(stroke.points[i].x, stroke.points[i].y);\r\n }\r\n ctx.stroke();\r\n } else if (stroke.type === \"arrow\") {\r\n if (stroke.points.length < 2) return;\r\n const start = stroke.points[0];\r\n const end = stroke.points[stroke.points.length - 1];\r\n\r\n // Line\r\n ctx.beginPath();\r\n ctx.moveTo(start.x, start.y);\r\n ctx.lineTo(end.x, end.y);\r\n ctx.stroke();\r\n\r\n // Arrowhead\r\n const angle = Math.atan2(end.y - start.y, end.x - start.x);\r\n const headLen = 12 + stroke.lineWidth * 2;\r\n ctx.beginPath();\r\n ctx.moveTo(end.x, end.y);\r\n ctx.lineTo(\r\n end.x - headLen * Math.cos(angle - Math.PI / 6),\r\n end.y - headLen * Math.sin(angle - Math.PI / 6),\r\n );\r\n ctx.moveTo(end.x, end.y);\r\n ctx.lineTo(\r\n end.x - headLen * Math.cos(angle + Math.PI / 6),\r\n end.y - headLen * Math.sin(angle + Math.PI / 6),\r\n );\r\n ctx.stroke();\r\n } else if (stroke.type === \"circle\") {\r\n if (stroke.points.length < 2) return;\r\n const start = stroke.points[0];\r\n const end = stroke.points[stroke.points.length - 1];\r\n const rx = Math.abs(end.x - start.x) / 2;\r\n const ry = Math.abs(end.y - start.y) / 2;\r\n const cx = (start.x + end.x) / 2;\r\n const cy = (start.y + end.y) / 2;\r\n ctx.beginPath();\r\n ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);\r\n ctx.stroke();\r\n } else if (stroke.type === \"rect\") {\r\n if (stroke.points.length < 2) return;\r\n const start = stroke.points[0];\r\n const end = stroke.points[stroke.points.length - 1];\r\n ctx.strokeRect(start.x, start.y, end.x - start.x, end.y - start.y);\r\n }\r\n }\r\n\r\n function drawTextNote(ctx: CanvasRenderingContext2D, note: TextNote) {\r\n const fontSize = 13;\r\n const padding = 6;\r\n ctx.font = `500 ${fontSize}px -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif`;\r\n\r\n const metrics = ctx.measureText(note.text);\r\n const textWidth = metrics.width;\r\n const textHeight = fontSize + 2;\r\n\r\n // Background\r\n ctx.fillStyle = \"rgba(0, 0, 0, 0.75)\";\r\n const bgX = note.x - 2;\r\n const bgY = note.y - textHeight - padding / 2;\r\n const bgW = textWidth + padding * 2;\r\n const bgH = textHeight + padding;\r\n const r = 4;\r\n ctx.beginPath();\r\n ctx.moveTo(bgX + r, bgY);\r\n ctx.lineTo(bgX + bgW - r, bgY);\r\n ctx.quadraticCurveTo(bgX + bgW, bgY, bgX + bgW, bgY + r);\r\n ctx.lineTo(bgX + bgW, bgY + bgH - r);\r\n ctx.quadraticCurveTo(bgX + bgW, bgY + bgH, bgX + bgW - r, bgY + bgH);\r\n ctx.lineTo(bgX + r, bgY + bgH);\r\n ctx.quadraticCurveTo(bgX, bgY + bgH, bgX, bgY + bgH - r);\r\n ctx.lineTo(bgX, bgY + r);\r\n ctx.quadraticCurveTo(bgX, bgY, bgX + r, bgY);\r\n ctx.closePath();\r\n ctx.fill();\r\n\r\n // Colored indicator dot\r\n ctx.fillStyle = note.color;\r\n ctx.beginPath();\r\n ctx.arc(bgX + padding, bgY + bgH / 2, 3, 0, Math.PI * 2);\r\n ctx.fill();\r\n\r\n // Text\r\n ctx.fillStyle = \"#ffffff\";\r\n ctx.fillText(note.text, bgX + padding + 10, note.y - 2);\r\n }\r\n\r\n function draw() {\r\n if (!canvasRef) return;\r\n const ctx = canvasRef.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n const dpr = window.devicePixelRatio || 1;\r\n ctx.clearRect(0, 0, canvasRef.width / dpr, canvasRef.height / dpr);\r\n\r\n // Draw hover highlight with LERP interpolation (only when active and not in draw mode)\r\n if (props.active && !props.drawMode && props.hoveredRect) {\r\n targetRect = {\r\n x: props.hoveredRect.x,\r\n y: props.hoveredRect.y,\r\n width: props.hoveredRect.width,\r\n height: props.hoveredRect.height,\r\n };\r\n } else if (props.active && !props.drawMode) {\r\n targetRect = null;\r\n }\r\n\r\n if (props.active && !props.drawMode && targetRect) {\r\n currentRect.x = lerp(currentRect.x, targetRect.x, LERP_SPEED);\r\n currentRect.y = lerp(currentRect.y, targetRect.y, LERP_SPEED);\r\n currentRect.width = lerp(currentRect.width, targetRect.width, LERP_SPEED);\r\n currentRect.height = lerp(\r\n currentRect.height,\r\n targetRect.height,\r\n LERP_SPEED,\r\n );\r\n\r\n // Hover highlight box\r\n ctx.strokeStyle = \"rgba(59, 130, 246, 0.8)\";\r\n ctx.lineWidth = 2;\r\n ctx.setLineDash([]);\r\n ctx.strokeRect(\r\n currentRect.x,\r\n currentRect.y,\r\n currentRect.width,\r\n currentRect.height,\r\n );\r\n\r\n // Fill with semi-transparent overlay\r\n ctx.fillStyle = \"rgba(59, 130, 246, 0.06)\";\r\n ctx.fillRect(\r\n currentRect.x,\r\n currentRect.y,\r\n currentRect.width,\r\n currentRect.height,\r\n );\r\n }\r\n\r\n // Draw drag selection rectangle (only when active)\r\n if (props.active && !props.drawMode && props.dragRect) {\r\n ctx.strokeStyle = \"rgba(59, 130, 246, 0.6)\";\r\n ctx.lineWidth = 1;\r\n ctx.setLineDash([4, 4]);\r\n ctx.strokeRect(\r\n props.dragRect.x,\r\n props.dragRect.y,\r\n props.dragRect.width,\r\n props.dragRect.height,\r\n );\r\n\r\n ctx.fillStyle = \"rgba(59, 130, 246, 0.08)\";\r\n ctx.fillRect(\r\n props.dragRect.x,\r\n props.dragRect.y,\r\n props.dragRect.width,\r\n props.dragRect.height,\r\n );\r\n }\r\n\r\n // Draw all completed strokes\r\n for (const stroke of props.drawStrokes) {\r\n drawStroke(ctx, stroke);\r\n }\r\n\r\n // Draw current in-progress stroke\r\n if (props.currentStroke) {\r\n drawStroke(ctx, props.currentStroke);\r\n }\r\n\r\n // Draw text notes\r\n for (const note of props.textNotes) {\r\n drawTextNote(ctx, note);\r\n }\r\n\r\n animFrameId = requestAnimationFrame(draw);\r\n }\r\n\r\n // Mouse handlers for draw mode\r\n function handleMouseDown(e: MouseEvent) {\r\n if (!props.drawMode) return;\r\n if (props.drawTool === \"text\") {\r\n props.onTextPlace(e.clientX, e.clientY);\r\n } else {\r\n props.onDrawStart(e.clientX, e.clientY);\r\n }\r\n }\r\n\r\n function handleMouseMove(e: MouseEvent) {\r\n if (!props.drawMode) return;\r\n props.onDrawMove(e.clientX, e.clientY);\r\n }\r\n\r\n function handleMouseUp(_e: MouseEvent) {\r\n if (!props.drawMode) return;\r\n props.onDrawEnd();\r\n }\r\n\r\n // Touch handlers for draw mode\r\n function handleTouchStart(e: TouchEvent) {\r\n if (!props.drawMode) return;\r\n e.preventDefault();\r\n const touch = e.touches[0];\r\n if (props.drawTool === \"text\") {\r\n props.onTextPlace(touch.clientX, touch.clientY);\r\n } else {\r\n props.onDrawStart(touch.clientX, touch.clientY);\r\n }\r\n }\r\n\r\n function handleTouchMove(e: TouchEvent) {\r\n if (!props.drawMode) return;\r\n e.preventDefault();\r\n const touch = e.touches[0];\r\n props.onDrawMove(touch.clientX, touch.clientY);\r\n }\r\n\r\n function handleTouchEnd(e: TouchEvent) {\r\n if (!props.drawMode) return;\r\n e.preventDefault();\r\n props.onDrawEnd();\r\n }\r\n\r\n onMount(() => {\r\n resizeCanvas();\r\n window.addEventListener(\"resize\", resizeCanvas);\r\n animFrameId = requestAnimationFrame(draw);\r\n });\r\n\r\n onCleanup(() => {\r\n window.removeEventListener(\"resize\", resizeCanvas);\r\n if (animFrameId !== null) {\r\n cancelAnimationFrame(animFrameId);\r\n }\r\n });\r\n\r\n return (\r\n <canvas\r\n ref={canvasRef}\r\n onMouseDown={handleMouseDown}\r\n onMouseMove={handleMouseMove}\r\n onMouseUp={handleMouseUp}\r\n onTouchStart={handleTouchStart}\r\n onTouchMove={handleTouchMove}\r\n onTouchEnd={handleTouchEnd}\r\n style={{\r\n position: \"fixed\",\r\n top: \"0\",\r\n left: \"0\",\r\n \"pointer-events\": props.drawMode ? \"auto\" : \"none\",\r\n \"z-index\": \"2147483645\",\r\n cursor: props.drawMode\r\n ? props.drawTool === \"text\"\r\n ? \"text\"\r\n : \"crosshair\"\r\n : \"default\",\r\n }}\r\n />\r\n );\r\n};\r\n","// @agent-native/pinpoint — Pin creation/edit popup with voice + queue\r\n// MIT License\r\n\r\nimport {\r\n createSignal,\r\n Show,\r\n onMount,\r\n onCleanup,\r\n type Component,\r\n} from \"solid-js\";\r\n\r\nimport type { ElementContext } from \"../../types/index.js\";\r\nimport { icons } from \"../icons/index.js\";\r\n\r\ninterface PinPopupProps {\r\n context: ElementContext;\r\n /** Pre-filled comment for editing an existing pin */\r\n initialComment?: string;\r\n /** Whether this is editing an existing pin */\r\n isEditing?: boolean;\r\n /** Compact mode — hide technical details behind chevron toggle */\r\n compactPopup?: boolean;\r\n /** Whether queue mode is enabled */\r\n queueMode?: boolean;\r\n onAdd: (comment: string) => void;\r\n onQueue?: (comment: string) => void;\r\n onFixThis?: (comment: string) => void;\r\n onCancel: () => void;\r\n}\r\n\r\n// Check Speech API availability\r\nfunction getSpeechRecognition(): (new () => any) | null {\r\n const w = window as any;\r\n return w.SpeechRecognition || w.webkitSpeechRecognition || null;\r\n}\r\n\r\nexport const PinPopup: Component<PinPopupProps> = (props) => {\r\n const [comment, setComment] = createSignal(props.initialComment || \"\");\r\n const [showDetails, setShowDetails] = createSignal(false);\r\n const [isRecording, setIsRecording] = createSignal(false);\r\n let textareaRef: HTMLTextAreaElement | undefined;\r\n let recognitionRef: any = null;\r\n\r\n const compact = () => props.compactPopup ?? true;\r\n const hasSpeechAPI = !!getSpeechRecognition();\r\n\r\n // Friendly display name: component name or HTML tag\r\n const displayName = () => {\r\n if (props.context.framework?.componentPath) {\r\n return props.context.framework.componentPath;\r\n }\r\n return `<${props.context.element.tagName.toLowerCase()}>`;\r\n };\r\n\r\n // Reactive popup positioning\r\n const popupPosition = () => {\r\n const rect = props.context.element.boundingRect;\r\n const estimatedHeight = compact() && showDetails() ? 260 : 220;\r\n const popupX = Math.min(rect.x, window.innerWidth - 380);\r\n const popupY = rect.y + rect.height + 8;\r\n const adjustedY =\r\n popupY + estimatedHeight > window.innerHeight\r\n ? rect.y - estimatedHeight - 8\r\n : popupY;\r\n return { x: Math.max(8, popupX), y: Math.max(8, adjustedY) };\r\n };\r\n\r\n async function openFileHandler() {\r\n try {\r\n const file = props.context.framework?.sourceFile;\r\n if (!file) return;\r\n const { openFile } = await import(\"../../utils/open-file.js\");\r\n openFile(file);\r\n } catch {\r\n // Can't open file\r\n }\r\n }\r\n\r\n // Voice recording\r\n function toggleRecording() {\r\n if (isRecording()) {\r\n stopRecording();\r\n } else {\r\n startRecording();\r\n }\r\n }\r\n\r\n function startRecording() {\r\n const SpeechRecognitionClass = getSpeechRecognition();\r\n if (!SpeechRecognitionClass) return;\r\n\r\n const recognition = new SpeechRecognitionClass();\r\n recognition.continuous = true;\r\n recognition.interimResults = true;\r\n recognition.lang = \"en-US\";\r\n\r\n let finalTranscript = \"\";\r\n\r\n recognition.onresult = (event: any) => {\r\n let interim = \"\";\r\n for (let i = event.resultIndex; i < event.results.length; i++) {\r\n const transcript = event.results[i][0].transcript;\r\n if (event.results[i].isFinal) {\r\n finalTranscript += transcript;\r\n } else {\r\n interim = transcript;\r\n }\r\n }\r\n // Append transcribed text to existing comment\r\n const current = comment();\r\n const separator = current && !current.endsWith(\" \") ? \" \" : \"\";\r\n setComment(current + separator + finalTranscript + interim);\r\n finalTranscript = \"\";\r\n\r\n // Update textarea height\r\n if (textareaRef) {\r\n textareaRef.style.height = \"auto\";\r\n textareaRef.style.height =\r\n Math.min(textareaRef.scrollHeight, 120) + \"px\";\r\n }\r\n };\r\n\r\n recognition.onerror = () => {\r\n setIsRecording(false);\r\n };\r\n\r\n recognition.onend = () => {\r\n setIsRecording(false);\r\n };\r\n\r\n recognition.start();\r\n recognitionRef = recognition;\r\n setIsRecording(true);\r\n }\r\n\r\n function stopRecording() {\r\n recognitionRef?.stop();\r\n recognitionRef = null;\r\n setIsRecording(false);\r\n }\r\n\r\n onMount(() => {\r\n textareaRef?.focus();\r\n if (props.initialComment && textareaRef) {\r\n textareaRef.selectionStart = textareaRef.value.length;\r\n }\r\n\r\n // Global Escape listener\r\n const onEsc = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n e.stopPropagation();\r\n stopRecording();\r\n props.onCancel();\r\n }\r\n };\r\n document.addEventListener(\"keydown\", onEsc, true);\r\n onCleanup(() => {\r\n document.removeEventListener(\"keydown\", onEsc, true);\r\n stopRecording();\r\n });\r\n });\r\n\r\n function handleSubmit() {\r\n const text = comment().trim();\r\n if (!text) return;\r\n stopRecording();\r\n props.onAdd(text);\r\n }\r\n\r\n function handleQueue() {\r\n const text = comment().trim();\r\n if (!text) return;\r\n stopRecording();\r\n props.onQueue?.(text);\r\n }\r\n\r\n function handleFixThis() {\r\n const text = comment().trim() || `Fix this ${displayName()}`;\r\n stopRecording();\r\n props.onFixThis?.(text);\r\n }\r\n\r\n function handleKeyDown(e: KeyboardEvent) {\r\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\r\n e.preventDefault();\r\n handleSubmit();\r\n }\r\n if (e.key === \"Escape\") {\r\n stopRecording();\r\n props.onCancel();\r\n }\r\n }\r\n\r\n function handleAutoGrow(e: Event) {\r\n const el = e.currentTarget as HTMLTextAreaElement;\r\n setComment(el.value);\r\n el.style.height = \"auto\";\r\n el.style.height = Math.min(el.scrollHeight, 120) + \"px\";\r\n }\r\n\r\n return (\r\n <div\r\n class=\"pp-popup\"\r\n style={{\r\n left: `${popupPosition().x}px`,\r\n top: `${popupPosition().y}px`,\r\n }}\r\n >\r\n {compact() ? (\r\n /* Compact mode — friendly name + collapsible details */\r\n <>\r\n {/* Header with chevron toggle */}\r\n <div\r\n class=\"pp-popup__header\"\r\n on:click={() => setShowDetails(!showDetails())}\r\n >\r\n <span class=\"pp-popup__name\">{displayName()}</span>\r\n <span\r\n class={`pp-popup__chevron ${showDetails() ? \"pp-popup__chevron--open\" : \"\"}`}\r\n innerHTML={icons.chevronDown}\r\n aria-expanded={showDetails()}\r\n />\r\n </div>\r\n\r\n {/* Collapsible technical details */}\r\n <div\r\n class={`pp-popup__details ${showDetails() ? \"pp-popup__details--open\" : \"\"}`}\r\n >\r\n <div class=\"pp-popup__details-inner\">\r\n <div class=\"pp-popup__element-info\">\r\n {props.context.cssSelector}\r\n </div>\r\n <Show when={props.context.framework?.sourceFile}>\r\n {(file) => (\r\n <div\r\n class=\"pp-popup__source\"\r\n on:click={openFileHandler}\r\n title={file()}\r\n >\r\n <span\r\n innerHTML={icons.fileCode}\r\n style={{\r\n display: \"inline-flex\",\r\n \"vertical-align\": \"middle\",\r\n }}\r\n />{\" \"}\r\n {file().split(\"/\").pop()}\r\n </div>\r\n )}\r\n </Show>\r\n </div>\r\n </div>\r\n </>\r\n ) : (\r\n /* Expanded mode — all info visible */\r\n <>\r\n <div class=\"pp-popup__component\">{displayName()}</div>\r\n <div class=\"pp-popup__element-info\">{props.context.cssSelector}</div>\r\n <Show when={props.context.framework?.sourceFile}>\r\n {(file) => (\r\n <div\r\n class=\"pp-popup__source\"\r\n on:click={openFileHandler}\r\n title={file()}\r\n >\r\n <span\r\n innerHTML={icons.fileCode}\r\n style={{ display: \"inline-flex\", \"vertical-align\": \"middle\" }}\r\n />{\" \"}\r\n {file().split(\"/\").pop()}\r\n </div>\r\n )}\r\n </Show>\r\n </>\r\n )}\r\n\r\n {/* Comment textarea with voice mic */}\r\n <div class=\"pp-popup__input-row\">\r\n <textarea\r\n ref={textareaRef}\r\n class=\"pp-popup__textarea\"\r\n placeholder=\"Add your feedback...\"\r\n value={comment()}\r\n on:input={handleAutoGrow}\r\n on:keydown={handleKeyDown}\r\n />\r\n {hasSpeechAPI && (\r\n <button\r\n class={`pp-btn--icon pp-popup__mic ${isRecording() ? \"pp-popup__mic--recording\" : \"\"}`}\r\n on:click={toggleRecording}\r\n title={isRecording() ? \"Stop recording\" : \"Voice input\"}\r\n aria-label={isRecording() ? \"Stop recording\" : \"Voice input\"}\r\n innerHTML={isRecording() ? icons.microphoneOff : icons.microphone}\r\n />\r\n )}\r\n </div>\r\n\r\n {/* Actions */}\r\n <div class=\"pp-popup__actions\">\r\n <button\r\n class=\"pp-btn pp-btn--ghost\"\r\n on:click={handleFixThis}\r\n title=\"Send 'Fix this' to agent\"\r\n >\r\n <span innerHTML={icons.bolt} style={{ display: \"inline-flex\" }} />\r\n Fix\r\n </button>\r\n\r\n <div style={{ flex: \"1\" }} />\r\n\r\n <button class=\"pp-btn\" on:click={() => props.onCancel()}>\r\n Cancel\r\n </button>\r\n\r\n {props.queueMode && props.onQueue && (\r\n <button\r\n class=\"pp-btn\"\r\n on:click={handleQueue}\r\n disabled={!comment().trim()}\r\n title=\"Add to queue\"\r\n >\r\n <span innerHTML={icons.plus} style={{ display: \"inline-flex\" }} />\r\n Queue\r\n </button>\r\n )}\r\n\r\n <button\r\n class=\"pp-btn pp-btn--primary\"\r\n on:click={() => handleSubmit()}\r\n disabled={!comment().trim()}\r\n >\r\n {props.isEditing ? \"Save\" : \"Add Pin\"}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","// @agent-native/pinpoint — Prompt mode for quick agent instructions\r\n// MIT License\r\n\r\nimport { createSignal, onMount, type Component } from \"solid-js\";\r\n\r\nimport { icons } from \"../icons/index.js\";\r\n\r\ninterface PromptModeProps {\r\n element: Element;\r\n onSend: (instruction: string) => void;\r\n onCancel: () => void;\r\n}\r\n\r\nexport const PromptMode: Component<PromptModeProps> = (props) => {\r\n const [instruction, setInstruction] = createSignal(\"\");\r\n let inputRef: HTMLInputElement | undefined;\r\n\r\n onMount(() => inputRef?.focus());\r\n\r\n function handleSubmit() {\r\n const text = instruction().trim();\r\n if (!text) return;\r\n props.onSend(text);\r\n }\r\n\r\n // Position near the element\r\n const rect = props.element.getBoundingClientRect();\r\n const x = Math.max(8, Math.min(rect.left, window.innerWidth - 300));\r\n const y =\r\n rect.bottom + 8 > window.innerHeight - 40 ? rect.top - 40 : rect.bottom + 8;\r\n\r\n return (\r\n <div class=\"pp-prompt\" style={{ left: `${x}px`, top: `${y}px` }}>\r\n <input\r\n ref={inputRef}\r\n class=\"pp-prompt__input\"\r\n type=\"text\"\r\n placeholder=\"Tell the agent what to do...\"\r\n value={instruction()}\r\n onInput={(e) => setInstruction(e.currentTarget.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") handleSubmit();\r\n if (e.key === \"Escape\") props.onCancel();\r\n }}\r\n />\r\n <button class=\"pp-btn pp-btn--primary pp-btn--sm\" onClick={handleSubmit}>\r\n <span innerHTML={icons.send} />\r\n </button>\r\n </div>\r\n );\r\n};\r\n","// @agent-native/pinpoint — Floating label near hovered element\r\n// MIT License\r\n\r\nimport { Show, type Component } from \"solid-js\";\r\n\r\ninterface SelectionLabelProps {\r\n info: { text: string; rect: DOMRect } | null;\r\n}\r\n\r\nexport const SelectionLabel: Component<SelectionLabelProps> = (props) => {\r\n return (\r\n <Show when={props.info}>\r\n {(info) => {\r\n const { text, rect } = info();\r\n const y = rect.top > 30 ? rect.top - 24 : rect.bottom + 4;\r\n const x = Math.max(4, Math.min(rect.left, window.innerWidth - 300));\r\n return (\r\n <div\r\n class=\"pp-selection-label\"\r\n style={{ left: `${x}px`, top: `${y}px` }}\r\n >\r\n {text}\r\n </div>\r\n );\r\n }}\r\n </Show>\r\n );\r\n};\r\n","// @agent-native/pinpoint — Text annotation input popup for draw mode\r\n// MIT License\r\n\r\nimport { createSignal, onMount, type Component } from \"solid-js\";\r\n\r\ninterface TextInputPopupProps {\r\n x: number;\r\n y: number;\r\n color: string;\r\n onSubmit: (text: string) => void;\r\n onCancel: () => void;\r\n}\r\n\r\nexport const TextInputPopup: Component<TextInputPopupProps> = (props) => {\r\n const [text, setText] = createSignal(\"\");\r\n let inputRef: HTMLInputElement | undefined;\r\n\r\n onMount(() => inputRef?.focus());\r\n\r\n function handleSubmit() {\r\n const t = text().trim();\r\n if (t) props.onSubmit(t);\r\n else props.onCancel();\r\n }\r\n\r\n // Position below the click point, adjusted for viewport\r\n const x = Math.max(8, Math.min(props.x, window.innerWidth - 260));\r\n const y = Math.max(8, Math.min(props.y + 8, window.innerHeight - 50));\r\n\r\n return (\r\n <div class=\"pp-text-input-popup\" style={{ left: `${x}px`, top: `${y}px` }}>\r\n <div\r\n class=\"pp-text-input-popup__indicator\"\r\n style={{ background: props.color }}\r\n />\r\n <input\r\n ref={inputRef}\r\n class=\"pp-text-input-popup__input\"\r\n type=\"text\"\r\n placeholder=\"Add text note...\"\r\n value={text()}\r\n onInput={(e) => setText(e.currentTarget.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") handleSubmit();\r\n if (e.key === \"Escape\") props.onCancel();\r\n }}\r\n onBlur={handleSubmit}\r\n />\r\n </div>\r\n );\r\n};\r\n","// @agent-native/pinpoint — Pill-style floating toolbar with mode tabs\r\n// MIT License\r\n//\r\n// Collapsed: small pill with pin count. Expanded: mode-tabbed controls.\r\n// Modes: Select (element picking), Draw (freehand/shapes), Queue (batch send).\r\n\r\nimport {\r\n createSignal,\r\n Show,\r\n For,\r\n onCleanup,\r\n onMount,\r\n type Component,\r\n} from \"solid-js\";\r\n\r\nimport type {\r\n Pin,\r\n OutputFormat,\r\n ToolbarMode,\r\n DrawToolType,\r\n QueuedAnnotation,\r\n} from \"../../types/index.js\";\r\nimport { icons } from \"../icons/index.js\";\r\n\r\nconst DRAW_COLORS = [\r\n { color: \"#EF4444\", name: \"Red\" },\r\n { color: \"#3B82F6\", name: \"Blue\" },\r\n { color: \"#22C55E\", name: \"Green\" },\r\n { color: \"#EAB308\", name: \"Yellow\" },\r\n];\r\n\r\nconst LINE_WIDTHS = [\r\n { width: 2, name: \"Thin\" },\r\n { width: 4, name: \"Medium\" },\r\n { width: 8, name: \"Thick\" },\r\n];\r\n\r\nconst EDGE_GAP = 16;\r\nconst COLLAPSED_TOOLBAR_SIZE = 60;\r\nconst EXPANDED_TOOLBAR_WIDTH = 320;\r\nconst AGENT_SIDEBAR_SELECTOR = \".agent-sidebar-panel\";\r\n\r\nfunction clampRightOffset(right: number, toolbarWidth: number): number {\r\n if (typeof window === \"undefined\") return right;\r\n\r\n const maxRight = Math.max(0, window.innerWidth - toolbarWidth - EDGE_GAP);\r\n return Math.min(right, maxRight);\r\n}\r\n\r\nfunction getVisibleRightSidebarInset(): number {\r\n if (typeof window === \"undefined\") return 0;\r\n\r\n let inset = 0;\r\n for (const panel of document.querySelectorAll<HTMLElement>(\r\n AGENT_SIDEBAR_SELECTOR,\r\n )) {\r\n const style = window.getComputedStyle(panel);\r\n if (\r\n style.display === \"none\" ||\r\n style.visibility === \"hidden\" ||\r\n panel.getAttribute(\"aria-hidden\") === \"true\"\r\n ) {\r\n continue;\r\n }\r\n\r\n const rect = panel.getBoundingClientRect();\r\n const isVisible = rect.width > 0 && rect.height > 0;\r\n const isAnchoredToRight =\r\n rect.right >= window.innerWidth - 1 && rect.left < window.innerWidth - 1;\r\n if (!isVisible || !isAnchoredToRight) continue;\r\n\r\n inset = Math.max(inset, Math.ceil(window.innerWidth - rect.left));\r\n }\r\n\r\n return inset;\r\n}\r\n\r\ninterface ToolbarProps {\r\n expanded: boolean;\r\n active: boolean;\r\n pins: Pin[];\r\n position?: { x: number; y: number };\r\n author?: string;\r\n showSettings: boolean;\r\n outputFormat: OutputFormat;\r\n clearOnSend: boolean;\r\n blockInteractions: boolean;\r\n autoSubmit: boolean;\r\n compactPopup: boolean;\r\n webhookUrl?: string;\r\n // Mode state\r\n mode: ToolbarMode;\r\n drawTool: DrawToolType;\r\n drawColor: string;\r\n drawLineWidth: number;\r\n drawStrokeCount: number;\r\n // Queue state\r\n queue: QueuedAnnotation[];\r\n selectedPinIds: Set<string>;\r\n // Callbacks\r\n onToggleExpand: () => void;\r\n onModeChange: (mode: ToolbarMode) => void;\r\n onSend: () => void;\r\n onCopy: () => void;\r\n onClear: () => void;\r\n onRemovePin: (id: string) => void;\r\n onEditPin: (pin: Pin) => void;\r\n onToggleSettings: () => void;\r\n onOutputFormatChange: (format: OutputFormat) => void;\r\n onClearOnSendChange: (value: boolean) => void;\r\n onBlockInteractionsChange: (value: boolean) => void;\r\n onAutoSubmitChange: (value: boolean) => void;\r\n onCompactPopupChange: (value: boolean) => void;\r\n // Draw callbacks\r\n onDrawToolChange: (tool: DrawToolType) => void;\r\n onDrawColorChange: (color: string) => void;\r\n onDrawLineWidthChange: (width: number) => void;\r\n onDrawUndo: () => void;\r\n onDrawClear: () => void;\r\n // Queue callbacks\r\n onQueueAdd: () => void;\r\n onQueueSend: () => void;\r\n onQueueClear: () => void;\r\n // Select-for-send\r\n onSendSelected: () => void;\r\n onTogglePinSelect: (pin: Pin) => void;\r\n}\r\n\r\nexport const Toolbar: Component<ToolbarProps> = (props) => {\r\n // Position stored as right/bottom offsets for edge anchoring\r\n const [pos, setPos] = createSignal<{ right: number; bottom: number }>(\r\n props.position\r\n ? {\r\n right: window.innerWidth - props.position.x,\r\n bottom: window.innerHeight - props.position.y,\r\n }\r\n : { right: EDGE_GAP, bottom: EDGE_GAP },\r\n );\r\n const [reservedRight, setReservedRight] = createSignal(0);\r\n const [dragStart, setDragStart] = createSignal({\r\n x: 0,\r\n y: 0,\r\n right: 0,\r\n bottom: 0,\r\n });\r\n const [didDrag, setDidDrag] = createSignal(false);\r\n\r\n onMount(() => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n let resizeObserver: ResizeObserver | undefined;\r\n const updateReservedRight = () => {\r\n setReservedRight(getVisibleRightSidebarInset());\r\n\r\n resizeObserver?.disconnect();\r\n if (typeof ResizeObserver === \"undefined\") return;\r\n\r\n resizeObserver = new ResizeObserver(() => {\r\n setReservedRight(getVisibleRightSidebarInset());\r\n });\r\n for (const panel of document.querySelectorAll<HTMLElement>(\r\n AGENT_SIDEBAR_SELECTOR,\r\n )) {\r\n resizeObserver.observe(panel);\r\n }\r\n };\r\n\r\n updateReservedRight();\r\n\r\n const mutationObserver = new MutationObserver(updateReservedRight);\r\n mutationObserver.observe(document.body, {\r\n attributes: true,\r\n attributeFilter: [\"class\", \"style\", \"aria-hidden\"],\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n window.addEventListener(\"resize\", updateReservedRight);\r\n\r\n onCleanup(() => {\r\n mutationObserver.disconnect();\r\n resizeObserver?.disconnect();\r\n window.removeEventListener(\"resize\", updateReservedRight);\r\n });\r\n });\r\n\r\n const toolbarRight = () => {\r\n const toolbarWidth = props.expanded\r\n ? EXPANDED_TOOLBAR_WIDTH\r\n : COLLAPSED_TOOLBAR_SIZE;\r\n return clampRightOffset(\r\n (props.expanded ? EDGE_GAP : pos().right) + reservedRight(),\r\n toolbarWidth,\r\n );\r\n };\r\n\r\n function handleMouseDown(e: MouseEvent) {\r\n if (props.expanded) return;\r\n setDidDrag(false);\r\n setDragStart({\r\n x: e.clientX,\r\n y: e.clientY,\r\n right: pos().right,\r\n bottom: pos().bottom,\r\n });\r\n\r\n const handleMove = (e: MouseEvent) => {\r\n setDidDrag(true);\r\n const start = dragStart();\r\n const dx = e.clientX - start.x;\r\n const dy = e.clientY - start.y;\r\n const maxRight = Math.max(\r\n 0,\r\n window.innerWidth - reservedRight() - COLLAPSED_TOOLBAR_SIZE,\r\n );\r\n setPos({\r\n right: Math.max(0, Math.min(maxRight, start.right - dx)),\r\n bottom: Math.max(\r\n 0,\r\n Math.min(\r\n window.innerHeight - COLLAPSED_TOOLBAR_SIZE,\r\n start.bottom - dy,\r\n ),\r\n ),\r\n });\r\n };\r\n\r\n const handleUp = () => {\r\n window.removeEventListener(\"mousemove\", handleMove);\r\n window.removeEventListener(\"mouseup\", handleUp);\r\n };\r\n\r\n window.addEventListener(\"mousemove\", handleMove);\r\n window.addEventListener(\"mouseup\", handleUp);\r\n }\r\n\r\n function handleClick() {\r\n if (props.expanded) return;\r\n if (didDrag()) return;\r\n props.onToggleExpand();\r\n }\r\n\r\n // Queue summary counts\r\n const queueSummary = () => {\r\n const q = props.queue;\r\n let draws = 0;\r\n let clicks = 0;\r\n for (const item of q) {\r\n if (item.drawings?.length || item.textNotes?.length) draws++;\r\n if (item.pin) clicks++;\r\n }\r\n const parts: string[] = [];\r\n if (draws > 0) parts.push(`Draw x${draws}`);\r\n if (clicks > 0) parts.push(`Click x${clicks}`);\r\n return parts.join(\" / \") || \"Empty\";\r\n };\r\n\r\n const totalBadgeCount = () =>\r\n props.pins.length + props.queue.length + props.drawStrokeCount;\r\n\r\n return (\r\n <div\r\n class={`pp-toolbar ${props.expanded ? \"pp-toolbar--expanded\" : \"pp-toolbar--collapsed\"}`}\r\n style={{\r\n ...(props.expanded\r\n ? { bottom: `${EDGE_GAP}px`, right: `${toolbarRight()}px` }\r\n : { right: `${toolbarRight()}px`, bottom: `${pos().bottom}px` }),\r\n }}\r\n onMouseDown={props.expanded ? undefined : handleMouseDown}\r\n on:click={handleClick}\r\n >\r\n {!props.expanded ? (\r\n /* Collapsed pill */\r\n <div\r\n style={{\r\n display: \"flex\",\r\n \"align-items\": \"center\",\r\n \"justify-content\": \"center\",\r\n gap: \"6px\",\r\n }}\r\n >\r\n {totalBadgeCount() > 0 && (\r\n <span class=\"pp-toolbar__badge\">{totalBadgeCount()}</span>\r\n )}\r\n <span\r\n innerHTML={icons.pin}\r\n style={{ display: \"flex\", \"align-items\": \"center\" }}\r\n />\r\n </div>\r\n ) : (\r\n /* Expanded toolbar */\r\n <div\r\n on:click={(e: Event) => e.stopPropagation()}\r\n style={{ display: \"contents\" }}\r\n >\r\n {/* Header */}\r\n <div\r\n style={{\r\n display: \"flex\",\r\n \"align-items\": \"center\",\r\n \"justify-content\": \"space-between\",\r\n \"font-size\": \"12px\",\r\n \"font-weight\": \"600\",\r\n \"letter-spacing\": \"0.02em\",\r\n color: \"var(--pp-text-muted)\",\r\n }}\r\n >\r\n <span>{props.author || \"Pinpoint\"}</span>\r\n {props.queue.length > 0 && (\r\n <span class=\"pp-toolbar__queue-badge\">{props.queue.length}</span>\r\n )}\r\n </div>\r\n\r\n {/* Mode tabs */}\r\n <div class=\"pp-mode-tabs\" role=\"tablist\">\r\n <button\r\n class={`pp-mode-tab ${props.mode === \"select\" ? \"pp-mode-tab--active\" : \"\"}`}\r\n on:click={() => props.onModeChange(\"select\")}\r\n role=\"tab\"\r\n aria-selected={props.mode === \"select\"}\r\n >\r\n <span innerHTML={icons.crosshair} />\r\n Select\r\n </button>\r\n <button\r\n class={`pp-mode-tab ${props.mode === \"draw\" ? \"pp-mode-tab--active\" : \"\"}`}\r\n on:click={() => props.onModeChange(\"draw\")}\r\n role=\"tab\"\r\n aria-selected={props.mode === \"draw\"}\r\n >\r\n <span innerHTML={icons.pencil} />\r\n Draw\r\n </button>\r\n <button\r\n class={`pp-mode-tab ${props.mode === \"queue\" ? \"pp-mode-tab--active\" : \"\"}`}\r\n on:click={() => props.onModeChange(\"queue\")}\r\n role=\"tab\"\r\n aria-selected={props.mode === \"queue\"}\r\n >\r\n <span innerHTML={icons.stack} />\r\n Queue\r\n {props.queue.length > 0 && (\r\n <span class=\"pp-mode-tab__count\">{props.queue.length}</span>\r\n )}\r\n </button>\r\n </div>\r\n\r\n {/* SELECT MODE content */}\r\n <Show when={props.mode === \"select\"}>\r\n {/* Active indicator when no pins */}\r\n {props.pins.length === 0 && (\r\n <div\r\n style={{\r\n \"font-size\": \"11px\",\r\n color: \"var(--pp-accent)\",\r\n display: \"flex\",\r\n \"align-items\": \"center\",\r\n gap: \"4px\",\r\n }}\r\n >\r\n <span innerHTML={icons.crosshair} />\r\n Click any element to annotate\r\n </div>\r\n )}\r\n\r\n {/* Pin list */}\r\n {props.pins.length > 0 && (\r\n <div class=\"pp-pin-list\">\r\n <For each={props.pins}>\r\n {(pin, index) => (\r\n <div\r\n class=\"pp-pin-item\"\r\n on:click={() => props.onEditPin(pin)}\r\n >\r\n <div\r\n class={`pp-pin-item__status pp-pin-item__status--${pin.status.state}`}\r\n />\r\n <span class=\"pp-pin-item__number\">{index() + 1}</span>\r\n <div class=\"pp-pin-item__content\">\r\n <div class=\"pp-pin-item__comment\">\r\n {pin.comment || (\r\n <span\r\n style={{\r\n color: \"var(--pp-text-muted)\",\r\n \"font-style\": \"italic\",\r\n }}\r\n >\r\n No comment\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n {/* Select checkbox */}\r\n <button\r\n class=\"pp-btn--icon pp-btn--icon-sm\"\r\n on:click={(e: Event) => {\r\n e.stopPropagation();\r\n props.onTogglePinSelect(pin);\r\n }}\r\n title={\r\n props.selectedPinIds.has(pin.id)\r\n ? \"Deselect\"\r\n : \"Select for send\"\r\n }\r\n aria-label={\r\n props.selectedPinIds.has(pin.id)\r\n ? \"Deselect\"\r\n : \"Select for send\"\r\n }\r\n innerHTML={\r\n props.selectedPinIds.has(pin.id)\r\n ? icons.checkSquare\r\n : icons.squareEmpty\r\n }\r\n style={{\r\n opacity: \"1\",\r\n \"pointer-events\": \"auto\",\r\n color: props.selectedPinIds.has(pin.id)\r\n ? \"var(--pp-accent)\"\r\n : \"var(--pp-text-muted)\",\r\n }}\r\n />\r\n <button\r\n class=\"pp-btn--icon pp-btn--icon-sm\"\r\n on:click={(e: Event) => {\r\n e.stopPropagation();\r\n props.onRemovePin(pin.id);\r\n }}\r\n title=\"Remove pin\"\r\n aria-label=\"Remove pin\"\r\n innerHTML={icons.minus}\r\n />\r\n </div>\r\n )}\r\n </For>\r\n </div>\r\n )}\r\n\r\n {/* Send selected button */}\r\n <Show when={props.selectedPinIds.size > 0}>\r\n <button\r\n class=\"pp-btn pp-btn--primary\"\r\n style={{ width: \"100%\" }}\r\n on:click={() => props.onSendSelected()}\r\n >\r\n <span\r\n innerHTML={icons.send}\r\n style={{ display: \"inline-flex\" }}\r\n />\r\n Send {props.selectedPinIds.size} selected to Claude\r\n </button>\r\n </Show>\r\n </Show>\r\n\r\n {/* DRAW MODE content */}\r\n <Show when={props.mode === \"draw\"}>\r\n {/* Draw tool selector */}\r\n <div class=\"pp-draw-tools\">\r\n <button\r\n class={`pp-draw-tool ${props.drawTool === \"freehand\" ? \"pp-draw-tool--active\" : \"\"}`}\r\n on:click={() => props.onDrawToolChange(\"freehand\")}\r\n title=\"Freehand\"\r\n innerHTML={icons.pencil}\r\n />\r\n <button\r\n class={`pp-draw-tool ${props.drawTool === \"arrow\" ? \"pp-draw-tool--active\" : \"\"}`}\r\n on:click={() => props.onDrawToolChange(\"arrow\")}\r\n title=\"Arrow\"\r\n innerHTML={icons.arrowUpRight}\r\n />\r\n <button\r\n class={`pp-draw-tool ${props.drawTool === \"circle\" ? \"pp-draw-tool--active\" : \"\"}`}\r\n on:click={() => props.onDrawToolChange(\"circle\")}\r\n title=\"Circle\"\r\n innerHTML={icons.circle}\r\n />\r\n <button\r\n class={`pp-draw-tool ${props.drawTool === \"rect\" ? \"pp-draw-tool--active\" : \"\"}`}\r\n on:click={() => props.onDrawToolChange(\"rect\")}\r\n title=\"Rectangle\"\r\n innerHTML={icons.square}\r\n />\r\n <button\r\n class={`pp-draw-tool ${props.drawTool === \"text\" ? \"pp-draw-tool--active\" : \"\"}`}\r\n on:click={() => props.onDrawToolChange(\"text\")}\r\n title=\"Text note\"\r\n innerHTML={icons.typography}\r\n />\r\n <div style={{ flex: \"1\" }} />\r\n <button\r\n class=\"pp-draw-tool\"\r\n on:click={() => props.onDrawUndo()}\r\n title=\"Undo (remove last stroke)\"\r\n innerHTML={icons.undo}\r\n disabled={props.drawStrokeCount === 0}\r\n />\r\n <button\r\n class=\"pp-draw-tool\"\r\n on:click={() => props.onDrawClear()}\r\n title=\"Clear drawing\"\r\n innerHTML={icons.trash}\r\n disabled={props.drawStrokeCount === 0}\r\n />\r\n </div>\r\n\r\n {/* Color picker */}\r\n <div class=\"pp-draw-options\">\r\n <div class=\"pp-draw-colors\">\r\n <For each={DRAW_COLORS}>\r\n {(c) => (\r\n <button\r\n class={`pp-color-swatch ${props.drawColor === c.color ? \"pp-color-swatch--active\" : \"\"}`}\r\n style={{ background: c.color }}\r\n on:click={() => props.onDrawColorChange(c.color)}\r\n title={c.name}\r\n />\r\n )}\r\n </For>\r\n </div>\r\n\r\n {/* Line width */}\r\n <div class=\"pp-draw-widths\">\r\n <For each={LINE_WIDTHS}>\r\n {(w) => (\r\n <button\r\n class={`pp-width-btn ${props.drawLineWidth === w.width ? \"pp-width-btn--active\" : \"\"}`}\r\n on:click={() => props.onDrawLineWidthChange(w.width)}\r\n title={w.name}\r\n >\r\n <div\r\n style={{\r\n width: \"16px\",\r\n height: `${w.width}px`,\r\n background: props.drawColor,\r\n \"border-radius\": `${w.width / 2}px`,\r\n }}\r\n />\r\n </button>\r\n )}\r\n </For>\r\n </div>\r\n </div>\r\n\r\n {/* Draw stroke count */}\r\n <Show when={props.drawStrokeCount > 0}>\r\n <div\r\n style={{\r\n \"font-size\": \"11px\",\r\n color: \"var(--pp-text-muted)\",\r\n \"text-align\": \"center\",\r\n }}\r\n >\r\n {props.drawStrokeCount} stroke\r\n {props.drawStrokeCount !== 1 ? \"s\" : \"\"}\r\n </div>\r\n </Show>\r\n </Show>\r\n\r\n {/* QUEUE MODE content */}\r\n <Show when={props.mode === \"queue\"}>\r\n {props.queue.length === 0 ? (\r\n <div\r\n style={{\r\n \"font-size\": \"11px\",\r\n color: \"var(--pp-text-muted)\",\r\n \"text-align\": \"center\",\r\n padding: \"8px 0\",\r\n }}\r\n >\r\n Queue is empty. Add pins or drawings, then queue them here.\r\n </div>\r\n ) : (\r\n <>\r\n <div\r\n style={{\r\n \"font-size\": \"11px\",\r\n color: \"var(--pp-text-muted)\",\r\n \"text-align\": \"center\",\r\n }}\r\n >\r\n {queueSummary()}\r\n </div>\r\n\r\n <div class=\"pp-pin-list\">\r\n <For each={props.queue}>\r\n {(item, index) => (\r\n <div class=\"pp-pin-item\">\r\n <span class=\"pp-pin-item__number\">{index() + 1}</span>\r\n <div class=\"pp-pin-item__content\">\r\n <div class=\"pp-pin-item__comment\">\r\n {item.pin\r\n ? item.pin.comment || \"Pin annotation\"\r\n : `Drawing (${(item.drawings?.length || 0) + (item.textNotes?.length || 0)} items)`}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </For>\r\n </div>\r\n\r\n <div style={{ display: \"flex\", gap: \"6px\" }}>\r\n <button\r\n class=\"pp-btn\"\r\n style={{ flex: \"1\" }}\r\n on:click={() => props.onQueueClear()}\r\n >\r\n Clear\r\n </button>\r\n <button\r\n class=\"pp-btn pp-btn--primary\"\r\n style={{ flex: \"1\" }}\r\n on:click={() => props.onQueueSend()}\r\n >\r\n <span\r\n innerHTML={icons.send}\r\n style={{ display: \"inline-flex\" }}\r\n />\r\n Send All\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </Show>\r\n\r\n {/* Settings panel */}\r\n <Show when={props.showSettings}>\r\n <div class=\"pp-settings\">\r\n <div class=\"pp-settings__row\">\r\n <span class=\"pp-settings__label\">Output detail</span>\r\n <select\r\n style={{\r\n background: \"var(--pp-bg-solid)\",\r\n color: \"var(--pp-text)\",\r\n border: \"1px solid var(--pp-border)\",\r\n \"border-radius\": \"var(--pp-radius-sm)\",\r\n padding: \"2px 6px\",\r\n \"font-size\": \"11px\",\r\n }}\r\n value={props.outputFormat}\r\n onChange={(e) =>\r\n props.onOutputFormatChange(\r\n e.currentTarget.value as OutputFormat,\r\n )\r\n }\r\n >\r\n <option value=\"compact\">Compact</option>\r\n <option value=\"standard\">Standard</option>\r\n <option value=\"detailed\">Detailed</option>\r\n </select>\r\n </div>\r\n <div class=\"pp-settings__row\">\r\n <span class=\"pp-settings__label\">Auto-submit</span>\r\n <div\r\n class={`pp-toggle ${props.autoSubmit ? \"pp-toggle--active\" : \"\"}`}\r\n on:click={() => props.onAutoSubmitChange(!props.autoSubmit)}\r\n >\r\n <div class=\"pp-toggle__thumb\" />\r\n </div>\r\n </div>\r\n <div class=\"pp-settings__row\">\r\n <span class=\"pp-settings__label\">Clear on send</span>\r\n <div\r\n class={`pp-toggle ${props.clearOnSend ? \"pp-toggle--active\" : \"\"}`}\r\n on:click={() => props.onClearOnSendChange(!props.clearOnSend)}\r\n >\r\n <div class=\"pp-toggle__thumb\" />\r\n </div>\r\n </div>\r\n <div class=\"pp-settings__row\">\r\n <span class=\"pp-settings__label\">Block page clicks</span>\r\n <div\r\n class={`pp-toggle ${props.blockInteractions ? \"pp-toggle--active\" : \"\"}`}\r\n on:click={() =>\r\n props.onBlockInteractionsChange(!props.blockInteractions)\r\n }\r\n >\r\n <div class=\"pp-toggle__thumb\" />\r\n </div>\r\n </div>\r\n <div class=\"pp-settings__row\">\r\n <span class=\"pp-settings__label\">Compact popup</span>\r\n <div\r\n class={`pp-toggle ${props.compactPopup ? \"pp-toggle--active\" : \"\"}`}\r\n on:click={() =>\r\n props.onCompactPopupChange(!props.compactPopup)\r\n }\r\n >\r\n <div class=\"pp-toggle__thumb\" />\r\n </div>\r\n </div>\r\n </div>\r\n </Show>\r\n\r\n {/* Bottom action bar */}\r\n <div class=\"pp-actions\" role=\"toolbar\" aria-label=\"Pinpoint actions\">\r\n <button\r\n class=\"pp-btn--icon\"\r\n on:click={() => props.onSend()}\r\n title=\"Send to agent\"\r\n aria-label=\"Send to agent\"\r\n innerHTML={icons.send}\r\n />\r\n <button\r\n class=\"pp-btn--icon\"\r\n on:click={() => props.onCopy()}\r\n title=\"Copy to clipboard\"\r\n aria-label=\"Copy to clipboard\"\r\n innerHTML={icons.copy}\r\n />\r\n {props.pins.length > 0 && (\r\n <button\r\n class=\"pp-btn--icon\"\r\n on:click={() => props.onClear()}\r\n title=\"Clear all\"\r\n aria-label=\"Clear all pins\"\r\n innerHTML={icons.trash}\r\n />\r\n )}\r\n <button\r\n class=\"pp-btn--icon\"\r\n on:click={() => props.onToggleSettings()}\r\n title=\"Settings\"\r\n aria-label=\"Toggle settings\"\r\n innerHTML={icons.settings}\r\n />\r\n <button\r\n class=\"pp-btn--icon\"\r\n on:click={() => props.onToggleExpand()}\r\n title=\"Close\"\r\n aria-label=\"Close toolbar\"\r\n innerHTML={icons.x}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// @agent-native/pinpoint — Root SolidJS application component\r\n// MIT License\r\n\r\nimport {\r\n createSignal,\r\n createEffect,\r\n onCleanup,\r\n type Component,\r\n} from \"solid-js\";\r\n\r\nimport { DragSelect } from \"../../detection/drag-select.js\";\r\nimport {\r\n buildElementContext,\r\n extractElementInfo,\r\n} from \"../../detection/element-info.js\";\r\nimport { ElementPicker } from \"../../detection/element-picker.js\";\r\nimport { TextSelect } from \"../../detection/text-select.js\";\r\nimport { detectFramework } from \"../../frameworks/adapter.js\";\r\nimport { MemoryStore } from \"../../storage/memory-store.js\";\r\nimport { RestClient } from \"../../storage/rest-client.js\";\r\nimport type {\r\n PinpointConfig,\r\n Pin,\r\n ElementContext,\r\n DrawStroke,\r\n DrawToolType,\r\n TextNote,\r\n ToolbarMode,\r\n QueuedAnnotation,\r\n AgentOutput,\r\n} from \"../../types/index.js\";\r\nimport type { PinStorage } from \"../../types/index.js\";\r\nimport { ContextMenu } from \"./ContextMenu.js\";\r\nimport { OverlayCanvas } from \"./OverlayCanvas.js\";\r\nimport { PinMarkerManager } from \"./PinMarker.js\";\r\nimport { PinPopup } from \"./PinPopup.js\";\r\nimport { PromptMode } from \"./PromptMode.js\";\r\nimport { SelectionLabel } from \"./SelectionLabel.js\";\r\nimport { TextInputPopup } from \"./TextInputPopup.js\";\r\nimport { Toolbar } from \"./Toolbar.js\";\r\n\r\nexport interface PinpointAppProps {\r\n config: PinpointConfig;\r\n}\r\n\r\nexport const PinpointApp: Component<PinpointAppProps> = (props) => {\r\n // Core state\r\n const [active, setActive] = createSignal(false);\r\n const [expanded, setExpanded] = createSignal(false);\r\n const [pins, setPins] = createSignal<Pin[]>([]);\r\n const [hoveredRect, setHoveredRect] = createSignal<DOMRect | null>(null);\r\n const [selectedElement, setSelectedElement] = createSignal<Element | null>(\r\n null,\r\n );\r\n const [selectedContext, setSelectedContext] =\r\n createSignal<ElementContext | null>(null);\r\n const [showPopup, setShowPopup] = createSignal(false);\r\n const [editingPin, setEditingPin] = createSignal<Pin | null>(null);\r\n const [showContextMenu, setShowContextMenu] = createSignal(false);\r\n const [contextMenuPos, setContextMenuPos] = createSignal({ x: 0, y: 0 });\r\n const [showSettings, setShowSettings] = createSignal(false);\r\n const [showPrompt, setShowPrompt] = createSignal(false);\r\n const [selectionLabelInfo, setSelectionLabelInfo] = createSignal<{\r\n text: string;\r\n rect: DOMRect;\r\n } | null>(null);\r\n const [dragRect, setDragRect] = createSignal<DOMRect | null>(null);\r\n\r\n // Mode state\r\n const [mode, setMode] = createSignal<ToolbarMode>(\"select\");\r\n\r\n // Draw mode state\r\n const [drawMode, setDrawMode] = createSignal(false);\r\n const [drawStrokes, setDrawStrokes] = createSignal<DrawStroke[]>([]);\r\n const [currentStroke, setCurrentStroke] = createSignal<DrawStroke | null>(\r\n null,\r\n );\r\n const [drawColor, setDrawColor] = createSignal(\"#EF4444\");\r\n const [drawLineWidth, setDrawLineWidth] = createSignal(4);\r\n const [drawTool, setDrawTool] = createSignal<DrawToolType>(\"freehand\");\r\n const [textNotes, setTextNotes] = createSignal<TextNote[]>([]);\r\n const [showTextInput, setShowTextInput] = createSignal(false);\r\n const [textInputPos, setTextInputPos] = createSignal({ x: 0, y: 0 });\r\n let isDrawing = false;\r\n\r\n // Queue state\r\n const [queue, setQueue] = createSignal<QueuedAnnotation[]>([]);\r\n\r\n // Select-for-send state\r\n const [selectedPinIds, setSelectedPinIds] = createSignal<Set<string>>(\r\n new Set(),\r\n );\r\n\r\n // Settings state\r\n const [outputFormat, setOutputFormat] = createSignal(\r\n props.config.outputFormat || \"detailed\",\r\n );\r\n const [clearOnSend, setClearOnSend] = createSignal(\r\n props.config.clearOnSend ?? false,\r\n );\r\n const [blockInteractions, setBlockInteractions] = createSignal(\r\n props.config.blockInteractions ?? false,\r\n );\r\n const [autoSubmit, setAutoSubmit] = createSignal(\r\n props.config.autoSubmit ?? true,\r\n );\r\n const [compactPopup, setCompactPopup] = createSignal(\r\n props.config.compactPopup ?? true,\r\n );\r\n\r\n async function deliverToAgent(output: AgentOutput) {\r\n const agentOutput = {\r\n ...output,\r\n submit: output.submit ?? autoSubmit(),\r\n };\r\n\r\n if (props.config.sendToAgent) {\r\n await props.config.sendToAgent(agentOutput);\r\n return;\r\n }\r\n\r\n try {\r\n const { sendToAgentChat } = await import(\"@agent-native/core/client\");\r\n sendToAgentChat(agentOutput);\r\n } catch {\r\n await navigator.clipboard.writeText(\r\n [agentOutput.message, agentOutput.context].filter(Boolean).join(\"\\n\\n\"),\r\n );\r\n }\r\n }\r\n\r\n // Storage adapter\r\n const storage: PinStorage =\r\n props.config.storage ||\r\n (props.config.endpoint\r\n ? new RestClient(props.config.endpoint)\r\n : new MemoryStore());\r\n\r\n // Element picker\r\n const picker = new ElementPicker({\r\n ignoreSelector: \"#pinpoint-root, [data-pinpoint-marker]\",\r\n blockInteractions: blockInteractions(),\r\n onHover: (element, rect) => {\r\n setHoveredRect(rect);\r\n\r\n if (element && rect) {\r\n const framework = detectFramework();\r\n const componentInfo = framework.getComponentInfo(element);\r\n const tagName = element.tagName.toLowerCase();\r\n const componentName = componentInfo?.name;\r\n const sourceFile = framework.getSourceLocation(element)?.file;\r\n\r\n const parts = [tagName];\r\n if (componentName) parts.push(componentName);\r\n if (sourceFile) parts.push(sourceFile);\r\n\r\n setSelectionLabelInfo({ text: parts.join(\" · \"), rect });\r\n } else {\r\n setSelectionLabelInfo(null);\r\n }\r\n },\r\n onStableHover: (_element) => {\r\n // Could load full component context here\r\n },\r\n onSelect: (element) => {\r\n const framework = detectFramework();\r\n const frameworkInfo = (() => {\r\n const info = framework.getComponentInfo(element);\r\n const source = framework.getSourceLocation(element);\r\n if (!info && !source) return undefined;\r\n return {\r\n framework: framework.name,\r\n componentPath: info?.name ? `<${info.name}>` : \"\",\r\n sourceFile: source\r\n ? `${source.file}${source.line ? `:${source.line}` : \"\"}`\r\n : undefined,\r\n frameworkVersion: undefined,\r\n };\r\n })();\r\n\r\n const context = buildElementContext(element, frameworkInfo);\r\n setSelectedElement(element);\r\n setSelectedContext(context);\r\n setShowPopup(true);\r\n picker.pause();\r\n },\r\n });\r\n\r\n // Drag select\r\n const dragSelect = new DragSelect({\r\n ignoreSelector: \"#pinpoint-root, [data-pinpoint-marker]\",\r\n onDragStart: (rect) => setDragRect(rect),\r\n onDragMove: (rect) => setDragRect(rect),\r\n onDragEnd: (elements) => {\r\n setDragRect(null);\r\n for (const el of elements) {\r\n addPin(el, \"Multi-selected element\");\r\n }\r\n },\r\n });\r\n\r\n // Text select\r\n const textSelect = new TextSelect({\r\n onSelect: (_selection) => {\r\n // Text selection handling\r\n },\r\n });\r\n\r\n // Keyboard shortcuts\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n const mod = e.metaKey || e.ctrlKey;\r\n\r\n // Cmd/Ctrl+Shift+. -> Toggle toolbar\r\n if (mod && e.shiftKey && e.key === \".\") {\r\n e.preventDefault();\r\n toggleActive();\r\n return;\r\n }\r\n\r\n // Cmd/Ctrl+Shift+D -> Toggle draw mode\r\n if (mod && e.shiftKey && (e.key === \"D\" || e.key === \"d\")) {\r\n e.preventDefault();\r\n if (active()) {\r\n if (mode() === \"draw\") {\r\n handleModeChange(\"select\");\r\n } else {\r\n handleModeChange(\"draw\");\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!active()) return;\r\n\r\n // Cmd/Ctrl+Shift+C -> Copy annotations\r\n if (mod && e.shiftKey && e.key === \"C\") {\r\n e.preventDefault();\r\n copyPins();\r\n return;\r\n }\r\n\r\n // Cmd/Ctrl+Shift+Enter -> Send queue/selected to agent\r\n if (mod && e.shiftKey && e.key === \"Enter\") {\r\n e.preventDefault();\r\n if (queue().length > 0) {\r\n sendQueue();\r\n } else if (selectedPinIds().size > 0) {\r\n sendSelected();\r\n } else {\r\n sendPins();\r\n }\r\n return;\r\n }\r\n\r\n // Cmd/Ctrl+Z -> Undo draw stroke\r\n if (mod && e.key === \"z\" && drawMode()) {\r\n e.preventDefault();\r\n undoDrawStroke();\r\n return;\r\n }\r\n\r\n // Esc -> Close popup/exit draw mode/collapse toolbar\r\n if (e.key === \"Escape\") {\r\n if (showTextInput()) {\r\n setShowTextInput(false);\r\n } else if (showPopup()) {\r\n closePopup();\r\n } else if (showContextMenu()) {\r\n setShowContextMenu(false);\r\n } else if (showPrompt()) {\r\n setShowPrompt(false);\r\n } else if (drawMode()) {\r\n handleModeChange(\"select\");\r\n } else if (expanded()) {\r\n setExpanded(false);\r\n } else {\r\n deactivateSelection();\r\n }\r\n }\r\n };\r\n\r\n // Right-click context menu\r\n const handleContextMenu = (e: MouseEvent) => {\r\n if (!active() || drawMode()) return;\r\n const element = document.elementFromPoint(e.clientX, e.clientY);\r\n if (!element || element.closest(\"#pinpoint-root\")) return;\r\n\r\n e.preventDefault();\r\n setSelectedElement(element);\r\n setContextMenuPos({ x: e.clientX, y: e.clientY });\r\n setShowContextMenu(true);\r\n };\r\n\r\n // Propagate blockInteractions setting changes\r\n createEffect(() => {\r\n picker.setBlockInteractions(blockInteractions());\r\n });\r\n\r\n createEffect(() => {\r\n document.addEventListener(\"keydown\", handleKeyDown, true);\r\n document.addEventListener(\"contextmenu\", handleContextMenu, true);\r\n\r\n onCleanup(() => {\r\n document.removeEventListener(\"keydown\", handleKeyDown, true);\r\n document.removeEventListener(\"contextmenu\", handleContextMenu, true);\r\n picker.dispose();\r\n dragSelect.dispose();\r\n textSelect.dispose();\r\n markerManager.dispose();\r\n });\r\n });\r\n\r\n // Pin marker manager (DOM badges outside Shadow DOM)\r\n const markerManager = new PinMarkerManager(props.config.markerColor);\r\n markerManager.setOnClick((pin) => openEditPopup(pin));\r\n markerManager.setOnToggleSelect((pin) => togglePinSelect(pin));\r\n\r\n // Load existing pins\r\n createEffect(() => {\r\n const pageUrl = window.location.pathname;\r\n storage.load(pageUrl).then((loaded) => setPins(loaded));\r\n });\r\n\r\n // Sync DOM markers whenever pins change\r\n createEffect(() => {\r\n const currentPins = pins();\r\n markerManager.update(currentPins);\r\n });\r\n\r\n // Sync selected pin IDs to marker manager\r\n createEffect(() => {\r\n markerManager.setSelectedPins(selectedPinIds());\r\n });\r\n\r\n // Mode change handler\r\n function handleModeChange(newMode: ToolbarMode) {\r\n setMode(newMode);\r\n\r\n if (newMode === \"draw\") {\r\n setDrawMode(true);\r\n picker.pause();\r\n dragSelect.deactivate();\r\n textSelect.deactivate();\r\n markerManager.setShowCheckboxes(false);\r\n } else if (newMode === \"select\") {\r\n setDrawMode(false);\r\n picker.resume();\r\n if (active()) {\r\n dragSelect.activate();\r\n textSelect.activate();\r\n }\r\n markerManager.setShowCheckboxes(false);\r\n } else if (newMode === \"queue\") {\r\n setDrawMode(false);\r\n picker.pause();\r\n markerManager.setShowCheckboxes(true);\r\n }\r\n }\r\n\r\n // Draw mode handlers\r\n function handleDrawStart(x: number, y: number) {\r\n isDrawing = true;\r\n const toolType = drawTool();\r\n if (toolType === \"text\") return; // Handled separately\r\n setCurrentStroke({\r\n points: [{ x, y }],\r\n color: drawColor(),\r\n lineWidth: drawLineWidth(),\r\n type: toolType as DrawStroke[\"type\"],\r\n });\r\n }\r\n\r\n function handleDrawMove(x: number, y: number) {\r\n if (!isDrawing) return;\r\n const stroke = currentStroke();\r\n if (!stroke) return;\r\n\r\n if (stroke.type === \"freehand\") {\r\n setCurrentStroke({\r\n ...stroke,\r\n points: [...stroke.points, { x, y }],\r\n });\r\n } else {\r\n // For shapes, keep start and replace end\r\n setCurrentStroke({\r\n ...stroke,\r\n points: [stroke.points[0], { x, y }],\r\n });\r\n }\r\n }\r\n\r\n function handleDrawEnd() {\r\n if (!isDrawing) return;\r\n isDrawing = false;\r\n const stroke = currentStroke();\r\n if (stroke && stroke.points.length > 1) {\r\n setDrawStrokes((prev) => [...prev, stroke]);\r\n }\r\n setCurrentStroke(null);\r\n }\r\n\r\n function handleTextPlace(x: number, y: number) {\r\n setTextInputPos({ x, y });\r\n setShowTextInput(true);\r\n }\r\n\r\n function handleTextSubmit(text: string) {\r\n setTextNotes((prev) => [\r\n ...prev,\r\n { x: textInputPos().x, y: textInputPos().y, text, color: drawColor() },\r\n ]);\r\n setShowTextInput(false);\r\n }\r\n\r\n function undoDrawStroke() {\r\n if (textNotes().length > 0) {\r\n setTextNotes((prev) => prev.slice(0, -1));\r\n } else if (drawStrokes().length > 0) {\r\n setDrawStrokes((prev) => prev.slice(0, -1));\r\n }\r\n }\r\n\r\n function clearDrawing() {\r\n setDrawStrokes([]);\r\n setTextNotes([]);\r\n setCurrentStroke(null);\r\n }\r\n\r\n // Queue handlers\r\n function addToQueue(pin?: Pin) {\r\n const item: QueuedAnnotation = {\r\n id: crypto.randomUUID(),\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n if (pin) {\r\n item.pin = pin;\r\n }\r\n\r\n // Include current drawings if any\r\n const strokes = drawStrokes();\r\n const notes = textNotes();\r\n if (strokes.length > 0 || notes.length > 0) {\r\n item.drawings = [...strokes];\r\n item.textNotes = [...notes];\r\n clearDrawing();\r\n }\r\n\r\n setQueue((prev) => [...prev, item]);\r\n }\r\n\r\n async function sendQueue() {\r\n const items = queue();\r\n if (items.length === 0) return;\r\n\r\n const { formatQueueForAgent } =\r\n await import(\"../../output/agent-context.js\");\r\n const { message, context } = formatQueueForAgent(items, outputFormat());\r\n\r\n await deliverToAgent({ message, context });\r\n\r\n setQueue([]);\r\n\r\n if (clearOnSend()) {\r\n const pageUrl = window.location.pathname;\r\n await storage.clear(pageUrl);\r\n setPins([]);\r\n }\r\n }\r\n\r\n function clearQueue() {\r\n setQueue([]);\r\n }\r\n\r\n // Pin select-for-send\r\n function togglePinSelect(pin: Pin) {\r\n setSelectedPinIds((prev) => {\r\n const next = new Set(prev);\r\n if (next.has(pin.id)) {\r\n next.delete(pin.id);\r\n } else {\r\n next.add(pin.id);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n async function sendSelected() {\r\n const ids = selectedPinIds();\r\n if (ids.size === 0) return;\r\n\r\n const selected = pins().filter((p) => ids.has(p.id));\r\n const { formatPinsForAgent } =\r\n await import(\"../../output/agent-context.js\");\r\n const { message, context } = formatPinsForAgent(selected, outputFormat());\r\n\r\n await deliverToAgent({ message, context });\r\n\r\n setSelectedPinIds(new Set<string>());\r\n }\r\n\r\n function toggleActive() {\r\n if (active()) {\r\n deactivateSelection();\r\n } else {\r\n activateSelection();\r\n }\r\n }\r\n\r\n function activateSelection() {\r\n setActive(true);\r\n setExpanded(true);\r\n if (mode() !== \"draw\") {\r\n picker.activate();\r\n dragSelect.activate();\r\n textSelect.activate();\r\n }\r\n }\r\n\r\n function deactivateSelection() {\r\n setActive(false);\r\n setDrawMode(false);\r\n setMode(\"select\");\r\n picker.deactivate();\r\n dragSelect.deactivate();\r\n textSelect.deactivate();\r\n setHoveredRect(null);\r\n setSelectionLabelInfo(null);\r\n }\r\n\r\n function closePopup() {\r\n setShowPopup(false);\r\n setEditingPin(null);\r\n if (mode() !== \"draw\") {\r\n picker.resume();\r\n }\r\n }\r\n\r\n function addPin(element: Element, comment: string) {\r\n const framework = detectFramework();\r\n const frameworkInfo = (() => {\r\n const info = framework.getComponentInfo(element);\r\n const source = framework.getSourceLocation(element);\r\n if (!info && !source) return undefined;\r\n return {\r\n framework: framework.name,\r\n componentPath: info?.name ? `<${info.name}>` : \"\",\r\n sourceFile: source\r\n ? `${source.file}${source.line ? `:${source.line}` : \"\"}`\r\n : undefined,\r\n frameworkVersion: undefined,\r\n };\r\n })();\r\n\r\n const elementInfo = extractElementInfo(element);\r\n const now = new Date().toISOString();\r\n const pin: Pin = {\r\n id: crypto.randomUUID(),\r\n pageUrl: window.location.pathname,\r\n createdAt: now,\r\n updatedAt: now,\r\n author: props.config.author,\r\n comment,\r\n element: elementInfo,\r\n framework: frameworkInfo,\r\n status: { state: \"open\", changedAt: now, changedBy: \"user\" },\r\n };\r\n\r\n setPins((prev) => [...prev, pin]);\r\n storage.save(pin);\r\n closePopup();\r\n return pin;\r\n }\r\n\r\n function handleQueueFromPopup(comment: string) {\r\n const el = selectedElement();\r\n if (!el) return;\r\n const pin = addPin(el, comment);\r\n addToQueue(pin);\r\n }\r\n\r\n async function handleFixThis(comment: string) {\r\n const el = selectedElement();\r\n if (!el) return;\r\n const pin = addPin(el, comment);\r\n\r\n // Format rich context\r\n const { formatRichPinContext } =\r\n await import(\"../../output/agent-context.js\");\r\n const richMessage = `Please fix: ${formatRichPinContext(pin)}`;\r\n\r\n await deliverToAgent({\r\n message: richMessage,\r\n context: \"\",\r\n });\r\n }\r\n\r\n function openEditPopup(pin: Pin) {\r\n setShowPopup(false);\r\n\r\n queueMicrotask(() => {\r\n const el = document.querySelector(pin.element.selector);\r\n setEditingPin(pin);\r\n setSelectedContext(\r\n buildElementContext(el || document.body, pin.framework),\r\n );\r\n setShowPopup(true);\r\n picker.pause();\r\n });\r\n }\r\n\r\n function updatePin(comment: string) {\r\n const pin = editingPin();\r\n if (!pin) return;\r\n const now = new Date().toISOString();\r\n const updated = { ...pin, comment, updatedAt: now };\r\n setPins((prev) => prev.map((p) => (p.id === pin.id ? updated : p)));\r\n storage.update(pin.id, { comment, updatedAt: now });\r\n closePopup();\r\n }\r\n\r\n async function copyPins() {\r\n const { formatPins } = await import(\"../../output/formatter.js\");\r\n const text = formatPins(pins(), outputFormat());\r\n await navigator.clipboard.writeText(text);\r\n }\r\n\r\n async function sendPins() {\r\n const { formatPinsForAgent } =\r\n await import(\"../../output/agent-context.js\");\r\n const { message, context } = formatPinsForAgent(pins(), outputFormat());\r\n\r\n await deliverToAgent({ message, context });\r\n\r\n if (clearOnSend()) {\r\n const pageUrl = window.location.pathname;\r\n await storage.clear(pageUrl);\r\n setPins([]);\r\n }\r\n }\r\n\r\n function removePin(id: string) {\r\n setPins((prev) => prev.filter((p) => p.id !== id));\r\n storage.delete(id);\r\n // Also remove from selected\r\n setSelectedPinIds((prev) => {\r\n const next = new Set(prev);\r\n next.delete(id);\r\n return next;\r\n });\r\n }\r\n\r\n function clearPins() {\r\n const pageUrl = window.location.pathname;\r\n storage.clear(pageUrl);\r\n setPins([]);\r\n setSelectedPinIds(new Set<string>());\r\n }\r\n\r\n return (\r\n <>\r\n {/* Canvas overlay for hover/selection/drawing */}\r\n <OverlayCanvas\r\n hoveredRect={hoveredRect()}\r\n dragRect={dragRect()}\r\n pins={pins()}\r\n active={active()}\r\n drawMode={drawMode()}\r\n drawStrokes={drawStrokes()}\r\n currentStroke={currentStroke()}\r\n drawColor={drawColor()}\r\n drawLineWidth={drawLineWidth()}\r\n drawTool={drawTool()}\r\n textNotes={textNotes()}\r\n onDrawStart={handleDrawStart}\r\n onDrawMove={handleDrawMove}\r\n onDrawEnd={handleDrawEnd}\r\n onTextPlace={handleTextPlace}\r\n />\r\n\r\n {/* Selection label near hovered element */}\r\n <SelectionLabel info={selectionLabelInfo()} />\r\n\r\n {/* Toolbar */}\r\n <Toolbar\r\n expanded={expanded()}\r\n active={active()}\r\n pins={pins()}\r\n position={props.config.position}\r\n author={props.config.author}\r\n showSettings={showSettings()}\r\n outputFormat={outputFormat()}\r\n clearOnSend={clearOnSend()}\r\n blockInteractions={blockInteractions()}\r\n autoSubmit={autoSubmit()}\r\n webhookUrl={props.config.webhookUrl}\r\n compactPopup={compactPopup()}\r\n mode={mode()}\r\n drawTool={drawTool()}\r\n drawColor={drawColor()}\r\n drawLineWidth={drawLineWidth()}\r\n drawStrokeCount={drawStrokes().length + textNotes().length}\r\n queue={queue()}\r\n selectedPinIds={selectedPinIds()}\r\n onToggleExpand={() => {\r\n const willExpand = !expanded();\r\n setExpanded(willExpand);\r\n if (willExpand) {\r\n activateSelection();\r\n } else {\r\n deactivateSelection();\r\n setShowSettings(false);\r\n if (showPopup()) {\r\n closePopup();\r\n }\r\n }\r\n }}\r\n onModeChange={handleModeChange}\r\n onSend={sendPins}\r\n onCopy={copyPins}\r\n onClear={clearPins}\r\n onRemovePin={removePin}\r\n onEditPin={openEditPopup}\r\n onToggleSettings={() => setShowSettings(!showSettings())}\r\n onOutputFormatChange={setOutputFormat}\r\n onClearOnSendChange={setClearOnSend}\r\n onBlockInteractionsChange={setBlockInteractions}\r\n onAutoSubmitChange={setAutoSubmit}\r\n onCompactPopupChange={setCompactPopup}\r\n onDrawToolChange={setDrawTool}\r\n onDrawColorChange={setDrawColor}\r\n onDrawLineWidthChange={setDrawLineWidth}\r\n onDrawUndo={undoDrawStroke}\r\n onDrawClear={clearDrawing}\r\n onQueueAdd={() => addToQueue()}\r\n onQueueSend={sendQueue}\r\n onQueueClear={clearQueue}\r\n onSendSelected={sendSelected}\r\n onTogglePinSelect={togglePinSelect}\r\n />\r\n\r\n {/* Pin popup for annotation */}\r\n {showPopup() && selectedContext() && (\r\n <PinPopup\r\n context={selectedContext()!}\r\n initialComment={editingPin()?.comment}\r\n isEditing={!!editingPin()}\r\n compactPopup={compactPopup()}\r\n queueMode={mode() === \"queue\"}\r\n onAdd={(comment) => {\r\n if (editingPin()) {\r\n updatePin(comment);\r\n } else {\r\n addPin(selectedElement()!, comment);\r\n }\r\n }}\r\n onQueue={handleQueueFromPopup}\r\n onFixThis={handleFixThis}\r\n onCancel={() => closePopup()}\r\n />\r\n )}\r\n\r\n {/* Text input popup for draw-mode text annotations */}\r\n {showTextInput() && (\r\n <TextInputPopup\r\n x={textInputPos().x}\r\n y={textInputPos().y}\r\n color={drawColor()}\r\n onSubmit={handleTextSubmit}\r\n onCancel={() => setShowTextInput(false)}\r\n />\r\n )}\r\n\r\n {/* Context menu */}\r\n {showContextMenu() && selectedElement() && (\r\n <ContextMenu\r\n position={contextMenuPos()}\r\n element={selectedElement()!}\r\n onClose={() => setShowContextMenu(false)}\r\n onAnnotate={() => {\r\n setShowContextMenu(false);\r\n const el = selectedElement()!;\r\n const framework = detectFramework();\r\n const frameworkInfo = (() => {\r\n const info = framework.getComponentInfo(el);\r\n const source = framework.getSourceLocation(el);\r\n if (!info && !source) return undefined;\r\n return {\r\n framework: framework.name,\r\n componentPath: info?.name ? `<${info.name}>` : \"\",\r\n sourceFile: source?.file,\r\n frameworkVersion: undefined,\r\n };\r\n })();\r\n setSelectedContext(buildElementContext(el, frameworkInfo));\r\n setShowPopup(true);\r\n picker.pause();\r\n }}\r\n onCopyContext={async () => {\r\n const el = selectedElement()!;\r\n const context = buildElementContext(el);\r\n await navigator.clipboard.writeText(\r\n JSON.stringify(context, null, 2),\r\n );\r\n setShowContextMenu(false);\r\n }}\r\n onPrompt={() => {\r\n setShowContextMenu(false);\r\n setShowPrompt(true);\r\n }}\r\n />\r\n )}\r\n\r\n {/* Prompt mode */}\r\n {showPrompt() && selectedElement() && (\r\n <PromptMode\r\n element={selectedElement()!}\r\n onSend={async (instruction) => {\r\n const context = buildElementContext(selectedElement()!);\r\n await deliverToAgent({\r\n message: instruction,\r\n context: JSON.stringify(context, null, 2),\r\n });\r\n setShowPrompt(false);\r\n }}\r\n onCancel={() => setShowPrompt(false)}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n","// @agent-native/pinpoint — CSS theme and styles\r\n// MIT License\r\n//\r\n// Compiled CSS for Shadow DOM injection via CSSStyleSheet.\r\n// Uses CSS custom properties with --pp- prefix for theming.\r\n\r\nexport const overlayStyles = `\r\n:host {\r\n all: initial;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\r\n font-size: 13px;\r\n line-height: 1.4;\r\n color: var(--pp-text);\r\n pointer-events: none;\r\n}\r\n\r\n*,\r\n*::before,\r\n*::after {\r\n box-sizing: border-box;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n/* Theme variables */\r\n:host {\r\n --pp-bg: rgba(24, 24, 27, 0.92);\r\n --pp-bg-solid: #18181b;\r\n --pp-text: #fafafa;\r\n --pp-text-muted: #a1a1aa;\r\n --pp-border: rgba(63, 63, 70, 0.6);\r\n --pp-accent: #3b82f6;\r\n --pp-accent-hover: #60a5fa;\r\n --pp-success: #22c55e;\r\n --pp-warning: #eab308;\r\n --pp-danger: #ef4444;\r\n --pp-shadow: 0 4px 24px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 255, 255, 0.06);\r\n --pp-radius: 10px;\r\n --pp-radius-sm: 6px;\r\n}\r\n\r\n:host([data-theme=\"light\"]) {\r\n --pp-bg: rgba(255, 255, 255, 0.92);\r\n --pp-bg-solid: #ffffff;\r\n --pp-text: #18181b;\r\n --pp-text-muted: #71717a;\r\n --pp-border: rgba(228, 228, 231, 0.8);\r\n --pp-accent: #2563eb;\r\n --pp-accent-hover: #3b82f6;\r\n --pp-shadow: 0 4px 24px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.06);\r\n}\r\n\r\n:host([data-theme=\"light\"]) .pp-popup__textarea {\r\n background: rgba(0, 0, 0, 0.06);\r\n}\r\n\r\n/* Toolbar */\r\n.pp-toolbar {\r\n position: fixed;\r\n z-index: 2147483646;\r\n pointer-events: auto;\r\n backdrop-filter: blur(12px) saturate(180%);\r\n -webkit-backdrop-filter: blur(12px) saturate(180%);\r\n background: var(--pp-bg);\r\n border: 1px solid var(--pp-border);\r\n border-radius: var(--pp-radius);\r\n box-shadow: var(--pp-shadow);\r\n transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);\r\n user-select: none;\r\n cursor: default;\r\n}\r\n\r\n.pp-toolbar--collapsed {\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 6px;\r\n cursor: pointer;\r\n}\r\n\r\n.pp-toolbar--expanded {\r\n padding: 12px;\r\n width: 320px;\r\n max-height: 420px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n}\r\n\r\n.pp-toolbar__badge {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 18px;\r\n height: 18px;\r\n padding: 0 5px;\r\n border-radius: 9px;\r\n background: var(--pp-accent);\r\n color: #fff;\r\n font-size: 11px;\r\n font-weight: 600;\r\n}\r\n\r\n/* Buttons */\r\n.pp-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n padding: 5px 10px;\r\n border: 1px solid var(--pp-border);\r\n border-radius: var(--pp-radius-sm);\r\n background: transparent;\r\n color: var(--pp-text);\r\n font-size: 12px;\r\n font-weight: 500;\r\n cursor: pointer;\r\n transition: all 0.15s ease;\r\n white-space: nowrap;\r\n}\r\n\r\n.pp-btn:hover {\r\n background: rgba(255, 255, 255, 0.06);\r\n border-color: var(--pp-accent);\r\n}\r\n\r\n.pp-btn--primary {\r\n background: var(--pp-accent);\r\n border-color: var(--pp-accent);\r\n color: #fff;\r\n}\r\n\r\n.pp-btn--primary:hover {\r\n background: var(--pp-accent-hover);\r\n}\r\n\r\n.pp-btn--sm {\r\n padding: 3px 6px;\r\n font-size: 11px;\r\n}\r\n\r\n.pp-btn--icon {\r\n padding: 4px;\r\n border: none;\r\n background: transparent;\r\n color: var(--pp-text-muted);\r\n cursor: pointer;\r\n border-radius: var(--pp-radius-sm);\r\n}\r\n\r\n.pp-btn--icon:hover {\r\n background: rgba(255, 255, 255, 0.06);\r\n color: var(--pp-text);\r\n}\r\n\r\n.pp-btn--icon-sm {\r\n padding: 2px;\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity 0.15s ease, color 0.15s ease, background-color 0.15s ease;\r\n}\r\n\r\n.pp-pin-item:hover .pp-btn--icon-sm,\r\n.pp-pin-item:focus-within .pp-btn--icon-sm {\r\n opacity: 1;\r\n pointer-events: auto;\r\n}\r\n\r\n.pp-btn--icon-sm:hover {\r\n background: rgba(239, 68, 68, 0.15);\r\n color: var(--pp-danger);\r\n}\r\n\r\n@media (hover: none) {\r\n .pp-btn--icon-sm {\r\n opacity: 0.6;\r\n pointer-events: auto;\r\n }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .pp-btn--icon-sm { transition: none; }\r\n}\r\n\r\n/* Pin list */\r\n.pp-pin-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n overflow-y: auto;\r\n max-height: 240px;\r\n scrollbar-width: thin;\r\n scrollbar-color: var(--pp-border) transparent;\r\n}\r\n\r\n.pp-pin-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n padding: 6px 8px;\r\n border-radius: var(--pp-radius-sm);\r\n cursor: pointer;\r\n transition: background 0.1s;\r\n}\r\n\r\n.pp-pin-item:hover {\r\n background: rgba(255, 255, 255, 0.04);\r\n}\r\n\r\n.pp-pin-item__number {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 22px;\r\n height: 22px;\r\n min-width: 22px;\r\n padding: 0 4px;\r\n border-radius: 11px;\r\n background: var(--pp-accent);\r\n color: #fff;\r\n font-size: 11px;\r\n font-weight: 600;\r\n font-variant-numeric: tabular-nums;\r\n flex-shrink: 0;\r\n}\r\n\r\n.pp-pin-item__content {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n.pp-pin-item__comment {\r\n font-size: 12px;\r\n color: var(--pp-text);\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n word-break: break-word;\r\n}\r\n\r\n.pp-pin-item__status {\r\n width: 6px;\r\n height: 6px;\r\n border-radius: 50%;\r\n flex-shrink: 0;\r\n}\r\n\r\n.pp-pin-item__status--open { background: var(--pp-danger); }\r\n.pp-pin-item__status--acknowledged { background: var(--pp-warning); }\r\n.pp-pin-item__status--resolved { background: var(--pp-success); }\r\n.pp-pin-item__status--dismissed { background: var(--pp-text-muted); }\r\n\r\n/* Action bar — horizontal icon bar at bottom */\r\n.pp-actions {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 6px;\r\n padding-top: 8px;\r\n border-top: 1px solid var(--pp-border);\r\n}\r\n\r\n.pp-actions .pp-btn--icon {\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.pp-actions .pp-btn--icon:focus-visible {\r\n outline: 2px solid var(--pp-accent);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* Popup */\r\n.pp-popup {\r\n position: fixed;\r\n z-index: 2147483647;\r\n pointer-events: auto;\r\n backdrop-filter: blur(12px) saturate(180%);\r\n -webkit-backdrop-filter: blur(12px) saturate(180%);\r\n background: var(--pp-bg);\r\n border: 1px solid var(--pp-border);\r\n border-radius: var(--pp-radius);\r\n box-shadow: var(--pp-shadow);\r\n padding: 10px;\r\n min-width: 280px;\r\n max-width: 360px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n\r\n.pp-popup__element-info {\r\n font-size: 11px;\r\n font-family: 'SF Mono', 'Fira Code', monospace;\r\n color: var(--pp-accent);\r\n word-break: break-all;\r\n}\r\n\r\n.pp-popup__component {\r\n font-size: 12px;\r\n color: var(--pp-text-muted);\r\n}\r\n\r\n.pp-popup__source {\r\n font-size: 11px;\r\n color: var(--pp-text-muted);\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n}\r\n\r\n.pp-popup__source:hover {\r\n color: var(--pp-accent);\r\n text-decoration: underline;\r\n}\r\n\r\n/* Popup header with chevron toggle */\r\n.pp-popup__header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n cursor: pointer;\r\n padding: 2px 0;\r\n}\r\n\r\n.pp-popup__name {\r\n font-size: 12px;\r\n font-weight: 500;\r\n color: var(--pp-text);\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n max-width: 280px;\r\n}\r\n\r\n.pp-popup__chevron {\r\n color: var(--pp-text-muted);\r\n transition: transform 0.15s ease;\r\n display: flex;\r\n align-items: center;\r\n flex-shrink: 0;\r\n transform: rotate(-90deg);\r\n}\r\n\r\n.pp-popup__chevron--open {\r\n transform: rotate(0deg);\r\n}\r\n\r\n/* CSS-based collapsible — keeps DOM, animates height */\r\n.pp-popup__details {\r\n display: grid;\r\n grid-template-rows: 0fr;\r\n transition: grid-template-rows 0.2s ease-out;\r\n}\r\n\r\n.pp-popup__details--open {\r\n grid-template-rows: 1fr;\r\n}\r\n\r\n.pp-popup__details-inner {\r\n overflow: hidden;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 3px;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n .pp-popup__chevron,\r\n .pp-popup__details {\r\n transition: none;\r\n }\r\n}\r\n\r\n.pp-popup__textarea {\r\n width: 100%;\r\n min-height: 48px;\r\n max-height: 120px;\r\n padding: 8px;\r\n border: 1px solid var(--pp-border);\r\n border-radius: var(--pp-radius-sm);\r\n background: rgba(0, 0, 0, 0.2);\r\n color: var(--pp-text);\r\n font-size: 13px;\r\n font-family: inherit;\r\n resize: none;\r\n overflow-y: auto;\r\n outline: none;\r\n}\r\n\r\n.pp-popup__textarea:focus {\r\n border-color: var(--pp-accent);\r\n}\r\n\r\n.pp-popup__actions {\r\n display: flex;\r\n gap: 6px;\r\n justify-content: flex-end;\r\n}\r\n\r\n.pp-popup__actions .pp-btn {\r\n height: 26px;\r\n padding: 0 10px;\r\n font-size: 12px;\r\n}\r\n\r\n/* Selection label */\r\n.pp-selection-label {\r\n position: fixed;\r\n z-index: 2147483646;\r\n pointer-events: none;\r\n padding: 3px 8px;\r\n border-radius: 4px;\r\n background: var(--pp-accent);\r\n color: #fff;\r\n font-size: 11px;\r\n font-weight: 500;\r\n white-space: nowrap;\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n/* Context menu */\r\n.pp-context-menu {\r\n position: fixed;\r\n z-index: 2147483647;\r\n pointer-events: auto;\r\n background: var(--pp-bg-solid);\r\n border: 1px solid var(--pp-border);\r\n border-radius: var(--pp-radius-sm);\r\n box-shadow: var(--pp-shadow);\r\n padding: 4px;\r\n min-width: 180px;\r\n}\r\n\r\n.pp-context-menu__item {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n padding: 6px 8px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 12px;\r\n color: var(--pp-text);\r\n transition: background 0.1s;\r\n}\r\n\r\n.pp-context-menu__item:hover {\r\n background: rgba(255, 255, 255, 0.06);\r\n}\r\n\r\n.pp-context-menu__separator {\r\n height: 1px;\r\n background: var(--pp-border);\r\n margin: 4px 0;\r\n}\r\n\r\n/* Prompt mode */\r\n.pp-prompt {\r\n position: fixed;\r\n z-index: 2147483647;\r\n pointer-events: auto;\r\n display: flex;\r\n gap: 6px;\r\n align-items: center;\r\n}\r\n\r\n.pp-prompt__input {\r\n padding: 6px 10px;\r\n border: 1px solid var(--pp-accent);\r\n border-radius: var(--pp-radius-sm);\r\n background: var(--pp-bg);\r\n color: var(--pp-text);\r\n font-size: 13px;\r\n font-family: inherit;\r\n min-width: 240px;\r\n outline: none;\r\n backdrop-filter: blur(12px) saturate(180%);\r\n}\r\n\r\n/* Settings panel */\r\n.pp-settings {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding-top: 8px;\r\n border-top: 1px solid var(--pp-border);\r\n}\r\n\r\n.pp-settings__row {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 8px;\r\n}\r\n\r\n.pp-settings__label {\r\n font-size: 12px;\r\n color: var(--pp-text);\r\n}\r\n\r\n.pp-settings__value {\r\n font-size: 11px;\r\n color: var(--pp-text-muted);\r\n}\r\n\r\n/* Toggle switch */\r\n.pp-toggle {\r\n position: relative;\r\n width: 32px;\r\n height: 18px;\r\n border-radius: 9px;\r\n background: var(--pp-border);\r\n cursor: pointer;\r\n transition: background 0.2s;\r\n}\r\n\r\n.pp-toggle--active {\r\n background: var(--pp-accent);\r\n}\r\n\r\n.pp-toggle__thumb {\r\n position: absolute;\r\n top: 2px;\r\n left: 2px;\r\n width: 14px;\r\n height: 14px;\r\n border-radius: 50%;\r\n background: #fff;\r\n transition: transform 0.2s;\r\n}\r\n\r\n.pp-toggle--active .pp-toggle__thumb {\r\n transform: translateX(14px);\r\n}\r\n\r\n/* Kbd hints */\r\n.pp-kbd {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 1px 4px;\r\n border: 1px solid var(--pp-border);\r\n border-radius: 3px;\r\n background: rgba(255, 255, 255, 0.04);\r\n font-size: 10px;\r\n font-family: inherit;\r\n color: var(--pp-text-muted);\r\n line-height: 1;\r\n}\r\n\r\n/* Mode tabs */\r\n.pp-mode-tabs {\r\n display: flex;\r\n gap: 2px;\r\n padding: 2px;\r\n background: rgba(255, 255, 255, 0.04);\r\n border-radius: var(--pp-radius-sm);\r\n}\r\n\r\n.pp-mode-tab {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n padding: 5px 8px;\r\n border: none;\r\n border-radius: 4px;\r\n background: transparent;\r\n color: var(--pp-text-muted);\r\n font-size: 11px;\r\n font-weight: 500;\r\n cursor: pointer;\r\n white-space: nowrap;\r\n}\r\n\r\n.pp-mode-tab:hover {\r\n color: var(--pp-text);\r\n background: rgba(255, 255, 255, 0.04);\r\n}\r\n\r\n.pp-mode-tab--active {\r\n background: rgba(255, 255, 255, 0.08);\r\n color: var(--pp-text);\r\n}\r\n\r\n.pp-mode-tab__count {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 16px;\r\n height: 16px;\r\n padding: 0 4px;\r\n border-radius: 8px;\r\n background: var(--pp-accent);\r\n color: #fff;\r\n font-size: 10px;\r\n font-weight: 600;\r\n}\r\n\r\n/* Draw tools bar */\r\n.pp-draw-tools {\r\n display: flex;\r\n align-items: center;\r\n gap: 2px;\r\n}\r\n\r\n.pp-draw-tool {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 32px;\r\n height: 32px;\r\n border: none;\r\n border-radius: var(--pp-radius-sm);\r\n background: transparent;\r\n color: var(--pp-text-muted);\r\n cursor: pointer;\r\n}\r\n\r\n.pp-draw-tool:hover {\r\n background: rgba(255, 255, 255, 0.06);\r\n color: var(--pp-text);\r\n}\r\n\r\n.pp-draw-tool--active {\r\n background: rgba(59, 130, 246, 0.15);\r\n color: var(--pp-accent);\r\n}\r\n\r\n.pp-draw-tool:disabled {\r\n opacity: 0.3;\r\n cursor: default;\r\n}\r\n\r\n/* Draw options row */\r\n.pp-draw-options {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 8px;\r\n}\r\n\r\n.pp-draw-colors {\r\n display: flex;\r\n gap: 4px;\r\n}\r\n\r\n.pp-color-swatch {\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 50%;\r\n border: 2px solid transparent;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.pp-color-swatch:hover {\r\n opacity: 0.85;\r\n}\r\n\r\n.pp-color-swatch--active {\r\n border-color: #fff;\r\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n.pp-draw-widths {\r\n display: flex;\r\n gap: 4px;\r\n}\r\n\r\n.pp-width-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border: none;\r\n border-radius: var(--pp-radius-sm);\r\n background: transparent;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.pp-width-btn:hover {\r\n background: rgba(255, 255, 255, 0.06);\r\n}\r\n\r\n.pp-width-btn--active {\r\n background: rgba(255, 255, 255, 0.1);\r\n outline: 1px solid var(--pp-border);\r\n}\r\n\r\n/* Queue badge in toolbar header */\r\n.pp-toolbar__queue-badge {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 18px;\r\n height: 18px;\r\n padding: 0 5px;\r\n border-radius: 9px;\r\n background: var(--pp-warning);\r\n color: #000;\r\n font-size: 10px;\r\n font-weight: 700;\r\n}\r\n\r\n/* Popup input row with mic */\r\n.pp-popup__input-row {\r\n position: relative;\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 4px;\r\n}\r\n\r\n.pp-popup__input-row .pp-popup__textarea {\r\n flex: 1;\r\n}\r\n\r\n.pp-popup__mic {\r\n flex-shrink: 0;\r\n width: 32px;\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 50%;\r\n margin-top: 4px;\r\n}\r\n\r\n.pp-popup__mic--recording {\r\n color: var(--pp-danger) !important;\r\n background: rgba(239, 68, 68, 0.15) !important;\r\n animation: pp-mic-pulse 1.2s ease-in-out infinite;\r\n}\r\n\r\n@keyframes pp-mic-pulse {\r\n 0%, 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); }\r\n 50% { box-shadow: 0 0 0 6px rgba(239, 68, 68, 0); }\r\n}\r\n\r\n/* Ghost button (Fix this) */\r\n.pp-btn--ghost {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n padding: 3px 8px;\r\n border: none;\r\n border-radius: var(--pp-radius-sm);\r\n background: transparent;\r\n color: var(--pp-warning);\r\n font-size: 11px;\r\n font-weight: 500;\r\n cursor: pointer;\r\n}\r\n\r\n.pp-btn--ghost:hover {\r\n background: rgba(234, 179, 8, 0.1);\r\n}\r\n\r\n/* Text input popup for draw-mode text annotations */\r\n.pp-text-input-popup {\r\n position: fixed;\r\n z-index: 2147483647;\r\n pointer-events: auto;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 4px 8px;\r\n background: var(--pp-bg);\r\n border: 1px solid var(--pp-border);\r\n border-radius: var(--pp-radius-sm);\r\n box-shadow: var(--pp-shadow);\r\n backdrop-filter: blur(12px) saturate(180%);\r\n -webkit-backdrop-filter: blur(12px) saturate(180%);\r\n}\r\n\r\n.pp-text-input-popup__indicator {\r\n width: 8px;\r\n height: 8px;\r\n border-radius: 50%;\r\n flex-shrink: 0;\r\n}\r\n\r\n.pp-text-input-popup__input {\r\n border: none;\r\n background: transparent;\r\n color: var(--pp-text);\r\n font-size: 13px;\r\n font-family: inherit;\r\n outline: none;\r\n min-width: 200px;\r\n}\r\n\r\n/* Scrollbar */\r\n::-webkit-scrollbar {\r\n width: 4px;\r\n}\r\n\r\n::-webkit-scrollbar-track {\r\n background: transparent;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n background: var(--pp-border);\r\n border-radius: 2px;\r\n}\r\n`;\r\n","// @agent-native/pinpoint — Shadow DOM mounting with singleton guard\r\n// MIT License\r\n//\r\n// Mounts the SolidJS overlay app inside Shadow DOM for perfect CSS isolation.\r\n// Singleton guard prevents multiple toolbar instances (HMR-safe).\r\n\r\nimport { render } from \"solid-js/web\";\r\n\r\nimport type { PinpointConfig } from \"../types/index.js\";\r\nimport { PinpointApp } from \"./components/PinpointApp.js\";\r\nimport { overlayStyles } from \"./styles/theme.js\";\r\n\r\nconst CONTAINER_ID = \"pinpoint-root\";\r\n\r\ninterface MountResult {\r\n dispose: () => void;\r\n shadowRoot: ShadowRoot;\r\n container: HTMLDivElement;\r\n}\r\n\r\n/**\r\n * Mount the Pinpoint overlay into the DOM.\r\n * Uses Shadow DOM for CSS isolation.\r\n * Singleton guard prevents multiple instances (HMR-safe).\r\n */\r\nexport function mountPinpoint(\r\n config: PinpointConfig = {},\r\n target: HTMLElement = document.body,\r\n): MountResult {\r\n const w = window as any;\r\n\r\n // Singleton guard — our design from the fork, HMR-safe\r\n w.__pinpoint_instances = (w.__pinpoint_instances || 0) + 1;\r\n if (w.__pinpoint_instances > 1) {\r\n // Already mounted — dispose the old one first\r\n const existing = document.getElementById(CONTAINER_ID);\r\n if (existing) {\r\n existing.remove();\r\n }\r\n w.__pinpoint_instances = 1;\r\n }\r\n\r\n // Create the container (fixed, zero-size, highest z-index)\r\n const container = document.createElement(\"div\");\r\n container.id = CONTAINER_ID;\r\n container.style.cssText =\r\n \"position:fixed;top:0;left:0;width:0;height:0;z-index:2147483647;pointer-events:none;\";\r\n target.appendChild(container);\r\n\r\n // Create Shadow DOM\r\n const shadowRoot = container.attachShadow({ mode: \"open\" });\r\n\r\n // Inject styles via CSSStyleSheet (modern, performant)\r\n const sheet = new CSSStyleSheet();\r\n sheet.replaceSync(overlayStyles);\r\n shadowRoot.adoptedStyleSheets = [sheet];\r\n\r\n // Set theme\r\n const theme = resolveColorScheme(config.colorScheme || \"auto\");\r\n if (theme === \"light\") {\r\n container.setAttribute(\"data-theme\", \"light\");\r\n }\r\n\r\n // Render SolidJS app into Shadow DOM\r\n const solidDispose = render(() => PinpointApp({ config }), shadowRoot);\r\n\r\n const dispose = () => {\r\n solidDispose();\r\n container.remove();\r\n w.__pinpoint_instances = Math.max(0, (w.__pinpoint_instances || 1) - 1);\r\n };\r\n\r\n // Listen for HMR dispose\r\n if ((import.meta as any).hot) {\r\n (import.meta as any).hot.dispose(dispose);\r\n }\r\n\r\n return { dispose, shadowRoot, container };\r\n}\r\n\r\n/**\r\n * Unmount Pinpoint from the DOM.\r\n */\r\nexport function unmountPinpoint(): void {\r\n const container = document.getElementById(CONTAINER_ID);\r\n if (container) {\r\n container.remove();\r\n (window as any).__pinpoint_instances = 0;\r\n }\r\n}\r\n\r\nfunction resolveColorScheme(\r\n scheme: \"auto\" | \"light\" | \"dark\",\r\n): \"light\" | \"dark\" {\r\n if (scheme === \"auto\") {\r\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\r\n ? \"dark\"\r\n : \"light\";\r\n }\r\n return scheme;\r\n}\r\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACM7B,IAAM,eAAe;AAad,SAAS,cACd,SAAyB,CAAC,GAC1B,SAAsB,SAAS,MAClB;AACb,QAAM,IAAI;AAGV,IAAE,wBAAwB,EAAE,wBAAwB,KAAK;AACzD,MAAI,EAAE,uBAAuB,GAAG;AAE9B,UAAM,WAAW,SAAS,eAAe,YAAY;AACrD,QAAI,UAAU;AACZ,eAAS,OAAO;AAAA,IAClB;AACA,MAAE,uBAAuB;AAAA,EAC3B;AAGA,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,YAAU,KAAK;AACf,YAAU,MAAM,UACd;AACF,SAAO,YAAY,SAAS;AAG5B,QAAM,aAAa,UAAU,aAAa,EAAE,MAAM,OAAO,CAAC;AAG1D,QAAM,QAAQ,IAAI,cAAc;AAChC,QAAM,YAAY,aAAa;AAC/B,aAAW,qBAAqB,CAAC,KAAK;AAGtC,QAAM,QAAQ,mBAAmB,OAAO,eAAe,MAAM;AAC7D,MAAI,UAAU,SAAS;AACrB,cAAU,aAAa,cAAc,OAAO;AAAA,EAC9C;AAGA,QAAM,eAAe,OAAO,MAAM,YAAY,EAAE,OAAO,CAAC,GAAG,UAAU;AAErE,QAAMmR,WAAU,MAAM;AACpB,iBAAa;AACb,cAAU,OAAO;AACjB,MAAE,uBAAuB,KAAK,IAAI,IAAI,EAAE,wBAAwB,KAAK,CAAC;AAAA,EACxE;AAGA,MAAK,YAAoB,KAAK;AAC5B,IAAC,YAAoB,IAAI,QAAQA,QAAO;AAAA,EAC1C;AAEA,SAAO,EAAE,SAAAA,UAAS,YAAY,UAAU;AAC1C;AAKO,SAAS,kBAAwB;AACtC,QAAM,YAAY,SAAS,eAAe,YAAY;AACtD,MAAI,WAAW;AACb,cAAU,OAAO;AACjB,IAAC,OAAe,uBAAuB;AAAA,EACzC;AACF;AAEA,SAAS,mBACP,QACkB;AAClB,MAAI,WAAW,QAAQ;AACrB,WAAO,OAAO,WAAW,8BAA8B,EAAE,UACrD,SACA;AAAA,EACN;AACA,SAAO;AACT;","names":["node","MAX_MARKERS","BADGE_SIZE","BADGE_FONT","BADGE_OFFSET","STATUS_COLORS","open","acknowledged","resolved","dismissed","PinMarkerManager","markers","Map","updateTimer","onClick","onToggleSelect","selectedPinIds","Set","showCheckboxes","constructor","markerColor","setOnClick","handler","setOnToggleSelect","setSelectedPins","ids","id","pair","updateCheckboxVisual","checkbox","has","setShowCheckboxes","show","values","style","display","update","pins","visiblePins","slice","pinIds","map","p","wrapper","remove","delete","i","length","updateMarker","selected","inner","querySelector","background","borderColor","innerHTML","pin","number","element","document","selector","existing","get","statusColor","status","state","createElement","setAttribute","cssText","outline","badge","getElementById","textContent","head","appendChild","addEventListener","e","stopPropagation","preventDefault","transform","checkboxInner","className","resolvedOverlay","body","set","String","title","comment","rect","getBoundingClientRect","left","top","width","height","visible","bottom","window","innerHeight","right","innerWidth","startTracking","stopTracking","setInterval","clearInterval","dispose","clear","value","e","dispose","document","ContextMenu","props","menuRef","onMount","handleClick","e","composedPath","includes","onClose","handleKeyDown","key","setTimeout","document","addEventListener","onCleanup","removeEventListener","x","Math","min","position","window","innerWidth","y","innerHeight","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_el$1","_el$10","_ref$","_$use","_$setStyleProperty","_$addEventListener","onAnnotate","onPrompt","onCopyContext","html","element","outerHTML","replace","trim","slice","navigator","clipboard","writeText","styles","getComputedStyle","relevant","result","map","getPropertyValue","join","_$effect","_p$","_v$","icons","pin","_v$2","messageSquare","_v$3","copy","_v$4","fileCode","_v$5","eye","innerHTML","t","a","o","i","undefined","lerp","start","end","t","OverlayCanvas","props","canvasRef","animFrameId","currentRect","x","y","width","height","targetRect","LERP_SPEED","resizeCanvas","dpr","window","devicePixelRatio","innerWidth","innerHeight","style","ctx","getContext","scale","drawStroke","stroke","points","length","strokeStyle","color","lineWidth","lineCap","lineJoin","setLineDash","type","beginPath","moveTo","i","lineTo","angle","Math","atan2","headLen","cos","PI","sin","rx","abs","ry","cx","cy","ellipse","strokeRect","drawTextNote","note","fontSize","padding","font","metrics","measureText","text","textWidth","textHeight","fillStyle","bgX","bgY","bgW","bgH","r","quadraticCurveTo","closePath","fill","arc","fillText","draw","clearRect","active","drawMode","hoveredRect","fillRect","dragRect","drawStrokes","currentStroke","textNotes","requestAnimationFrame","handleMouseDown","e","drawTool","onTextPlace","clientX","clientY","onDrawStart","handleMouseMove","onDrawMove","handleMouseUp","_e","onDrawEnd","handleTouchStart","preventDefault","touch","touches","handleTouchMove","handleTouchEnd","onMount","addEventListener","onCleanup","removeEventListener","cancelAnimationFrame","_el$","_tmpl$","$$touchend","$$touchmove","$$touchstart","$$mouseup","$$mousemove","$$mousedown","_ref$","_$use","_$effect","_p$","_v$","_v$2","_$setStyleProperty","undefined","_$delegateEvents","getSpeechRecognition","w","window","SpeechRecognition","webkitSpeechRecognition","PinPopup","props","comment","setComment","createSignal","initialComment","showDetails","setShowDetails","isRecording","setIsRecording","textareaRef","recognitionRef","compact","compactPopup","hasSpeechAPI","displayName","context","framework","componentPath","element","tagName","toLowerCase","popupPosition","rect","boundingRect","estimatedHeight","popupX","Math","min","x","innerWidth","popupY","y","height","adjustedY","innerHeight","max","openFileHandler","file","sourceFile","openFile","toggleRecording","stopRecording","startRecording","SpeechRecognitionClass","recognition","continuous","interimResults","lang","finalTranscript","onresult","event","interim","i","resultIndex","results","length","transcript","isFinal","current","separator","endsWith","style","scrollHeight","onerror","onend","start","stop","onMount","focus","selectionStart","value","onEsc","e","key","stopPropagation","onCancel","document","addEventListener","onCleanup","removeEventListener","handleSubmit","text","trim","onAdd","handleQueue","onQueue","handleFixThis","onFixThis","handleKeyDown","metaKey","ctrlKey","preventDefault","handleAutoGrow","el","currentTarget","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_el$7","_el$8","_el$9","_$insert","_c$","_$memo","_el$0","_tmpl$2","_el$1","_el$10","_$addEventListener","_$effect","_p$","_v$5","_v$6","icons","chevronDown","_v$7","_$className","t","innerHTML","a","_$setAttribute","undefined","_el$11","_tmpl$3","_el$12","_el$13","cssSelector","_$createComponent","Show","when","children","_el$14","_tmpl$4","_el$15","_el$16","split","pop","_v$8","_v$9","fileCode","_el$17","_tmpl$5","_el$18","_tmpl$6","_el$19","_el$20","_el$21","_v$0","_v$1","_ref$","_$use","_el$22","_tmpl$7","_v$10","_v$11","_v$12","_v$13","microphoneOff","microphone","o","_c$2","queueMode","_el$23","_tmpl$8","_el$24","_v$14","_v$15","plus","disabled","isEditing","_v$","_v$2","_v$3","bolt","_v$4","_$setStyleProperty","PromptMode","props","instruction","setInstruction","createSignal","inputRef","onMount","focus","handleSubmit","text","trim","onSend","rect","element","getBoundingClientRect","x","Math","max","min","left","window","innerWidth","y","bottom","innerHeight","top","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_$setStyleProperty","$$keydown","e","key","onCancel","$$input","currentTarget","value","_ref$","_$use","$$click","_$effect","innerHTML","icons","send","_$delegateEvents","SelectionLabel","props","_$createComponent","Show","when","info","children","text","rect","y","top","bottom","x","Math","max","min","left","window","innerWidth","_el$","_tmpl$","_$setStyleProperty","_$insert","TextInputPopup","props","text","setText","createSignal","inputRef","onMount","focus","handleSubmit","t","trim","onSubmit","onCancel","x","Math","max","min","window","innerWidth","y","innerHeight","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$setStyleProperty","addEventListener","$$keydown","e","key","$$input","currentTarget","value","_ref$","_$use","_$effect","_$p","color","_$delegateEvents","DRAW_COLORS","color","name","LINE_WIDTHS","width","EDGE_GAP","COLLAPSED_TOOLBAR_SIZE","EXPANDED_TOOLBAR_WIDTH","AGENT_SIDEBAR_SELECTOR","clampRightOffset","right","toolbarWidth","window","maxRight","Math","max","innerWidth","min","getVisibleRightSidebarInset","inset","panel","document","querySelectorAll","style","getComputedStyle","display","visibility","getAttribute","rect","getBoundingClientRect","isVisible","height","isAnchoredToRight","left","ceil","Toolbar","props","pos","setPos","createSignal","position","x","bottom","innerHeight","y","reservedRight","setReservedRight","dragStart","setDragStart","didDrag","setDidDrag","onMount","resizeObserver","updateReservedRight","disconnect","ResizeObserver","observe","mutationObserver","MutationObserver","body","attributes","attributeFilter","childList","subtree","addEventListener","onCleanup","removeEventListener","toolbarRight","expanded","handleMouseDown","e","clientX","clientY","handleMove","start","dx","dy","handleUp","handleClick","onToggleExpand","queueSummary","q","queue","draws","clicks","item","drawings","length","textNotes","pin","parts","push","join","totalBadgeCount","pins","drawStrokeCount","_el$","_tmpl$","_$addEventListener","undefined","_$insert","_c$","_$memo","_el$2","_tmpl$2","_el$3","firstChild","_c$2","_el$4","_tmpl$3","_$effect","innerHTML","icons","_el$5","_tmpl$9","_el$6","_el$7","_el$8","nextSibling","_el$9","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$49","_el$50","_el$51","_el$52","_el$53","stopPropagation","author","_c$3","_el$54","_tmpl$0","onModeChange","_c$4","_el$55","_tmpl$1","_$createComponent","Show","when","mode","children","_el$56","_tmpl$10","_el$57","crosshair","_el$58","_tmpl$11","For","each","index","_el$59","_tmpl$12","_el$60","_el$61","_el$62","_el$63","_el$64","_el$65","onEditPin","comment","_tmpl$13","onTogglePinSelect","onRemovePin","id","_p$","_v$32","status","state","_v$33","selectedPinIds","has","_v$34","_v$35","checkSquare","squareEmpty","_v$36","_v$37","minus","_$className","t","_$setAttribute","a","o","i","_$setStyleProperty","n","size","_el$14","_tmpl$4","_el$15","_el$16","_el$18","_el$17","onSendSelected","send","_el$19","_tmpl$5","_el$20","_el$21","_el$22","_el$23","_el$24","_el$25","_el$26","_el$27","onDrawToolChange","onDrawUndo","onDrawClear","_v$3","drawTool","_v$4","pencil","_v$5","_v$6","arrowUpRight","_v$7","_v$8","circle","_v$9","_v$0","square","_v$1","_v$10","typography","_v$11","undo","_v$12","_v$13","trash","_v$14","s","h","r","d","l","u","disabled","c","w","_el$28","_tmpl$6","_el$29","_el$30","_el$67","_tmpl$14","onDrawColorChange","_v$38","drawColor","_v$39","_v$40","_el$68","_tmpl$15","_el$69","onDrawLineWidthChange","_v$41","drawLineWidth","_v$42","_v$43","_v$44","_v$45","_el$31","_tmpl$7","_el$32","_tmpl$16","_el$71","_tmpl$17","_el$72","_el$77","_tmpl$19","_el$78","_el$79","_el$80","_c$6","_el$73","_tmpl$18","_el$74","_el$75","_el$76","onQueueClear","onQueueSend","showSettings","_el$33","_tmpl$8","_el$34","_el$35","_el$36","_el$37","_el$38","_el$39","_el$40","_el$41","_el$42","_el$43","_el$44","_el$45","_el$46","_el$47","_el$48","onOutputFormatChange","currentTarget","value","onAutoSubmitChange","autoSubmit","onClearOnSendChange","clearOnSend","onBlockInteractionsChange","blockInteractions","onCompactPopupChange","compactPopup","_v$15","_v$16","_v$17","_v$18","outputFormat","onSend","onCopy","_c$5","_el$81","_tmpl$20","onClear","onToggleSettings","_v$19","_v$20","_v$21","_v$22","_v$23","_v$24","_v$25","_v$26","_v$27","stack","_v$28","_v$29","copy","_v$30","settings","_v$31","_v$","_v$2","_$style","_$delegateEvents","PinpointApp","props","active","setActive","createSignal","expanded","setExpanded","pins","setPins","hoveredRect","setHoveredRect","selectedElement","setSelectedElement","selectedContext","setSelectedContext","showPopup","setShowPopup","editingPin","setEditingPin","showContextMenu","setShowContextMenu","contextMenuPos","setContextMenuPos","x","y","showSettings","setShowSettings","showPrompt","setShowPrompt","selectionLabelInfo","setSelectionLabelInfo","dragRect","setDragRect","mode","setMode","drawMode","setDrawMode","drawStrokes","setDrawStrokes","currentStroke","setCurrentStroke","drawColor","setDrawColor","drawLineWidth","setDrawLineWidth","drawTool","setDrawTool","textNotes","setTextNotes","showTextInput","setShowTextInput","textInputPos","setTextInputPos","isDrawing","queue","setQueue","selectedPinIds","setSelectedPinIds","Set","outputFormat","setOutputFormat","config","clearOnSend","setClearOnSend","blockInteractions","setBlockInteractions","autoSubmit","setAutoSubmit","compactPopup","setCompactPopup","deliverToAgent","output","agentOutput","submit","sendToAgent","sendToAgentChat","navigator","clipboard","writeText","message","context","filter","Boolean","join","storage","endpoint","RestClient","MemoryStore","picker","ElementPicker","ignoreSelector","onHover","element","rect","framework","detectFramework","componentInfo","getComponentInfo","tagName","toLowerCase","componentName","name","sourceFile","getSourceLocation","file","parts","push","text","onStableHover","_element","onSelect","frameworkInfo","info","source","undefined","componentPath","line","frameworkVersion","buildElementContext","pause","dragSelect","DragSelect","onDragStart","onDragMove","onDragEnd","elements","el","addPin","textSelect","TextSelect","_selection","handleKeyDown","e","mod","metaKey","ctrlKey","shiftKey","key","preventDefault","toggleActive","handleModeChange","copyPins","length","sendQueue","size","sendSelected","sendPins","undoDrawStroke","closePopup","deactivateSelection","handleContextMenu","document","elementFromPoint","clientX","clientY","closest","createEffect","addEventListener","onCleanup","removeEventListener","dispose","markerManager","PinMarkerManager","markerColor","setOnClick","pin","openEditPopup","setOnToggleSelect","togglePinSelect","pageUrl","window","location","pathname","load","then","loaded","currentPins","update","setSelectedPins","newMode","deactivate","setShowCheckboxes","resume","activate","handleDrawStart","toolType","points","color","lineWidth","type","handleDrawMove","stroke","handleDrawEnd","prev","handleTextPlace","handleTextSubmit","slice","clearDrawing","addToQueue","item","id","crypto","randomUUID","timestamp","Date","toISOString","strokes","notes","drawings","items","formatQueueForAgent","clear","clearQueue","next","has","delete","add","ids","selected","p","formatPinsForAgent","activateSelection","comment","elementInfo","extractElementInfo","now","createdAt","updatedAt","author","status","state","changedAt","changedBy","save","handleQueueFromPopup","handleFixThis","formatRichPinContext","richMessage","queueMicrotask","querySelector","selector","body","updatePin","updated","map","formatPins","removePin","clearPins","_$createComponent","OverlayCanvas","onDrawStart","onDrawMove","onDrawEnd","onTextPlace","SelectionLabel","Toolbar","position","webhookUrl","drawStrokeCount","onToggleExpand","willExpand","onModeChange","onSend","onCopy","onClear","onRemovePin","onEditPin","onToggleSettings","onOutputFormatChange","onClearOnSendChange","onBlockInteractionsChange","onAutoSubmitChange","onCompactPopupChange","onDrawToolChange","onDrawColorChange","onDrawLineWidthChange","onDrawUndo","onDrawClear","onQueueAdd","onQueueSend","onQueueClear","onSendSelected","onTogglePinSelect","_$memo","PinPopup","initialComment","isEditing","queueMode","onAdd","onQueue","onFixThis","onCancel","TextInputPopup","onSubmit","ContextMenu","onClose","onAnnotate","onCopyContext","JSON","stringify","onPrompt","PromptMode","instruction","dispose"]}
|