@ewjdev/anyclick-react 1.1.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/AnyclickProvider.tsx","../src/context.ts","../src/ContextMenu.tsx","../src/styles.ts","../src/highlight.ts","../src/ScreenshotPreview.tsx","../../../node_modules/shared/src/utils.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/camera.ts","../../../node_modules/lucide-react/src/icons/check.ts","../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../node_modules/lucide-react/src/icons/circle-alert.ts","../../../node_modules/lucide-react/src/icons/expand.ts","../../../node_modules/lucide-react/src/icons/flag.ts","../../../node_modules/lucide-react/src/icons/grip-vertical.ts","../../../node_modules/lucide-react/src/icons/image.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/plus.ts","../../../node_modules/lucide-react/src/icons/refresh-cw.ts","../../../node_modules/lucide-react/src/icons/shrink.ts","../../../node_modules/lucide-react/src/icons/thumbs-up.ts","../../../node_modules/lucide-react/src/icons/x.ts","../src/store.ts","../src/types.ts"],"sourcesContent":["// Components\n\"use client\";\n\n// New exports\nexport { AnyclickProvider } from \"./AnyclickProvider\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport { ScreenshotPreview } from \"./ScreenshotPreview\";\n\n// Deprecated exports (for backward compatibility)\nexport { FeedbackProvider } from \"./AnyclickProvider\";\n\n// Context and hooks (new)\nexport { AnyclickContext, useAnyclick } from \"./context\";\n\n// Context and hooks (deprecated, for backward compatibility)\nexport { FeedbackContext, useFeedback } from \"./context\";\n\n// Store exports (for advanced use cases)\nexport {\n useProviderStore,\n generateProviderId,\n dispatchContextMenuEvent,\n type ProviderInstance,\n} from \"./store\";\n\n// Types (new)\nexport type {\n AnyclickProviderProps,\n AnyclickContextValue,\n AnyclickTheme,\n FeedbackMenuItem,\n ContextMenuProps,\n HighlightColors,\n HighlightConfig,\n FeedbackUserContext,\n ScreenshotPreviewProps,\n MenuPositionMode,\n} from \"./types\";\n\n// Types (deprecated, for backward compatibility)\nexport type { FeedbackProviderProps, FeedbackContextValue } from \"./types\";\n\n// Utilities\nexport { filterMenuItemsByRole } from \"./types\";\n\n// Re-export core types for convenience\nexport type {\n FeedbackType,\n FeedbackPayload,\n FeedbackAdapter,\n ElementContext,\n PageContext,\n ScreenshotData,\n ScreenshotCapture,\n ScreenshotConfig,\n ScreenshotCaptureMode,\n} from \"@ewjdev/anyclick-core\";\n\n// Re-export screenshot utilities from core\nexport {\n captureAllScreenshots,\n captureScreenshot,\n isScreenshotSupported,\n formatBytes,\n estimateTotalSize,\n DEFAULT_SCREENSHOT_CONFIG,\n DEFAULT_SENSITIVE_SELECTORS,\n} from \"@ewjdev/anyclick-core\";\n\n// Styles (for customization)\nexport { menuStyles, darkMenuStyles, menuCSSVariables } from \"./styles\";\n\n// Highlight utilities (for customization)\nexport {\n findContainerParent,\n highlightTarget,\n highlightContainer,\n clearHighlights,\n applyHighlights,\n defaultHighlightColors,\n defaultContainerSelectors,\n} from \"./highlight\";\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createFeedbackClient } from \"@ewjdev/anyclick-core\";\nimport type {\n FeedbackClient,\n FeedbackMenuEvent,\n FeedbackType,\n ScreenshotData,\n} from \"@ewjdev/anyclick-core\";\nimport { AnyclickContext, useAnyclick } from \"./context\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { findContainerParent } from \"./highlight\";\nimport {\n useProviderStore,\n generateProviderId,\n type ProviderInstance,\n} from \"./store\";\nimport type {\n AnyclickContextValue,\n AnyclickProviderProps,\n AnyclickTheme,\n FeedbackMenuItem,\n} from \"./types\";\n\n/**\n * Default menu items\n */\nconst defaultMenuItems: FeedbackMenuItem[] = [\n { type: \"issue\", label: \"Report an issue\", showComment: true },\n { type: \"feature\", label: \"Request a feature\", showComment: true },\n { type: \"like\", label: \"I like this!\", showComment: false },\n];\n\n/**\n * AnyclickProvider component - wraps your app to enable feedback capture\n * Supports scoped providers and nested theming\n */\nexport function AnyclickProvider({\n adapter,\n children,\n targetFilter,\n menuItems = defaultMenuItems,\n maxInnerTextLength,\n maxOuterHTMLLength,\n maxAncestors,\n cooldownMs,\n stripAttributes,\n metadata,\n onSubmitSuccess,\n onSubmitError,\n menuStyle,\n menuClassName,\n disabled = false,\n highlightConfig,\n screenshotConfig,\n scoped = false,\n theme,\n touchHoldDurationMs,\n touchMoveThreshold,\n}: AnyclickProviderProps) {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [menuVisible, setMenuVisible] = useState(false);\n const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });\n const [targetElement, setTargetElement] = useState<Element | null>(null);\n const [containerElement, setContainerElement] = useState<Element | null>(\n null,\n );\n\n // Generate a stable ID for this provider instance\n const providerIdRef = useRef<string>(generateProviderId());\n const providerId = providerIdRef.current;\n\n // Ref to the container element (for scoped providers)\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Track when container is ready for scoped providers\n const [containerReady, setContainerReady] = useState(!scoped);\n\n // Client reference\n const clientRef = useRef<FeedbackClient | null>(null);\n\n // Callback ref to detect when container element is mounted\n const setContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[AnyclickProvider:${providerId}] Container ref callback`, {\n scoped,\n nodeReceived: !!node,\n hadPreviousNode: !!containerRef.current,\n clientExists: !!clientRef.current,\n });\n }\n\n containerRef.current = node;\n if (scoped && node) {\n setContainerReady(true);\n // If client already exists, update its container\n if (clientRef.current) {\n clientRef.current.setContainer(node);\n }\n }\n },\n [scoped, providerId],\n );\n\n // Access parent context (if nested)\n let parentContext: AnyclickContextValue | null = null;\n try {\n // This will throw if there's no parent provider\n parentContext = useAnyclick();\n } catch {\n // No parent provider - this is a root provider\n parentContext = null;\n }\n\n // Store access\n const {\n registerProvider,\n unregisterProvider,\n updateProvider,\n getMergedTheme,\n isDisabledByAncestor,\n findParentProvider,\n isElementInDisabledScope,\n isElementInAnyScopedProvider,\n } = useProviderStore();\n\n // Determine parent ID\n const parentId = parentContext?.providerId ?? null;\n\n // Calculate depth\n const depth = parentContext ? (parentContext.scoped ? 1 : 0) : 0;\n const actualDepth = useMemo(() => {\n if (!parentContext) return 0;\n // Find actual depth by traversing store\n let d = 0;\n let currentId = parentId;\n const providers = useProviderStore.getState().providers;\n while (currentId) {\n d++;\n const parent = providers.get(currentId);\n currentId = parent?.parentId ?? null;\n }\n return d;\n }, [parentId]);\n\n // Determine if disabled by theme\n const isDisabledByTheme = theme === null || theme?.disabled === true;\n const effectiveDisabled = disabled || isDisabledByTheme;\n\n // Build the theme for this provider\n const localTheme: AnyclickTheme = useMemo(() => {\n // If theme is null, treat as disabled\n if (theme === null) {\n return { disabled: true };\n }\n\n // Merge explicit theme props with theme object\n const explicitThemeProps: AnyclickTheme = {};\n if (menuStyle) explicitThemeProps.menuStyle = menuStyle;\n if (menuClassName) explicitThemeProps.menuClassName = menuClassName;\n if (highlightConfig) explicitThemeProps.highlightConfig = highlightConfig;\n if (screenshotConfig)\n explicitThemeProps.screenshotConfig = screenshotConfig;\n\n return {\n ...explicitThemeProps,\n ...theme,\n };\n }, [theme, menuStyle, menuClassName, highlightConfig, screenshotConfig]);\n\n // Context menu handler\n // Returns false to allow native context menu (for disabled scopes)\n // Returns true (or void) to show custom menu\n const handleContextMenu = useCallback(\n (event: FeedbackMenuEvent, element: Element): boolean => {\n // For non-scoped (global) providers, check if the element is inside\n // a disabled scoped provider's container - if so, allow native menu\n if (!scoped && isElementInDisabledScope(element)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Allowing native menu - element is in disabled scope`,\n {\n targetTag: element.tagName,\n },\n );\n }\n return false; // Allow native context menu\n }\n\n // For non-scoped (global) providers on TOUCH events, check if the element\n // is inside any scoped provider's container - if so, defer to the scoped\n // provider to handle the event with its own theme\n // NOTE: For contextmenu (right-click) events, this is handled by capture\n // phase and stopPropagation in the client. But touch events don't have\n // the same propagation model, so we need to check here.\n if (!scoped && event.isTouch && isElementInAnyScopedProvider(element)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Deferring to scoped provider for touch event`,\n {\n targetTag: element.tagName,\n },\n );\n }\n return false; // Let the scoped provider handle it\n }\n\n const mergedTheme = getMergedTheme(providerId);\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] handleContextMenu called`,\n {\n scoped,\n targetTag: element.tagName,\n mergedThemeColors: mergedTheme.highlightConfig?.colors,\n position: { x: event.clientX, y: event.clientY },\n isTouch: event.isTouch,\n },\n );\n }\n\n setTargetElement(element);\n // Get merged theme for highlight config\n const container = findContainerParent(\n element,\n mergedTheme.highlightConfig ?? highlightConfig,\n );\n setContainerElement(container);\n setMenuPosition({ x: event.clientX, y: event.clientY });\n setMenuVisible(true);\n\n return true; // Handled - prevent native menu\n },\n [\n providerId,\n getMergedTheme,\n highlightConfig,\n scoped,\n isElementInDisabledScope,\n isElementInAnyScopedProvider,\n ],\n );\n\n // Register this provider in the store\n useLayoutEffect(() => {\n const providerInstance: ProviderInstance = {\n id: providerId,\n containerRef: containerRef as React.RefObject<Element | null>,\n scoped,\n theme: localTheme,\n disabled: effectiveDisabled,\n parentId,\n depth: actualDepth,\n onContextMenu: handleContextMenu,\n };\n\n registerProvider(providerInstance);\n\n return () => {\n unregisterProvider(providerId);\n };\n }, [\n providerId,\n scoped,\n localTheme,\n effectiveDisabled,\n parentId,\n actualDepth,\n handleContextMenu,\n registerProvider,\n unregisterProvider,\n ]);\n\n // Update provider when config changes\n useEffect(() => {\n updateProvider(providerId, {\n theme: localTheme,\n disabled: effectiveDisabled,\n onContextMenu: handleContextMenu,\n });\n }, [\n providerId,\n localTheme,\n effectiveDisabled,\n handleContextMenu,\n updateProvider,\n ]);\n\n // Create/update the feedback client\n // Wait for container to be ready for scoped providers\n useEffect(() => {\n // Check if disabled by any ancestor\n if (isDisabledByAncestor(providerId)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Skipping - disabled by ancestor`,\n );\n }\n return;\n }\n\n // For scoped providers, wait until container is ready\n if (scoped && !containerReady) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Waiting for container to be ready`,\n {\n scoped,\n containerReady,\n },\n );\n }\n return;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[AnyclickProvider:${providerId}] Creating client`, {\n scoped,\n containerReady,\n hasContainer: !!containerRef.current,\n effectiveDisabled,\n localThemeColors: localTheme.highlightConfig?.colors,\n });\n }\n\n const client = createFeedbackClient({\n adapter,\n targetFilter,\n maxInnerTextLength,\n maxOuterHTMLLength,\n maxAncestors,\n cooldownMs,\n stripAttributes,\n // For scoped providers, pass the container\n container: scoped ? containerRef.current : null,\n touchHoldDurationMs,\n touchMoveThreshold,\n });\n\n // Set up callbacks\n client.onSubmitSuccess = onSubmitSuccess;\n client.onSubmitError = onSubmitError;\n\n // Set up context menu handler\n client.onContextMenu = handleContextMenu;\n\n clientRef.current = client;\n\n // Attach event listeners if not disabled\n if (!effectiveDisabled) {\n client.attach();\n }\n\n return () => {\n client.detach();\n };\n }, [\n adapter,\n targetFilter,\n maxInnerTextLength,\n maxOuterHTMLLength,\n maxAncestors,\n cooldownMs,\n stripAttributes,\n onSubmitSuccess,\n onSubmitError,\n effectiveDisabled,\n scoped,\n containerReady,\n providerId,\n isDisabledByAncestor,\n handleContextMenu,\n touchHoldDurationMs,\n touchMoveThreshold,\n ]);\n\n // Submit feedback with optional screenshots\n const submitFeedback = useCallback(\n async (\n element: Element,\n type: FeedbackType,\n comment?: string,\n screenshots?: ScreenshotData,\n ) => {\n const client = clientRef.current;\n if (!client) return;\n\n setIsSubmitting(true);\n try {\n await client.submitFeedback(element, type, {\n comment,\n metadata,\n screenshots,\n });\n } finally {\n setIsSubmitting(false);\n setMenuVisible(false);\n setTargetElement(null);\n setContainerElement(null);\n }\n },\n [metadata],\n );\n\n // Open menu programmatically\n const openMenu = useCallback(\n (element: Element, position: { x: number; y: number }) => {\n setTargetElement(element);\n const mergedTheme = getMergedTheme(providerId);\n const container = findContainerParent(\n element,\n mergedTheme.highlightConfig ?? highlightConfig,\n );\n setContainerElement(container);\n setMenuPosition(position);\n setMenuVisible(true);\n },\n [providerId, getMergedTheme, highlightConfig],\n );\n\n // Close menu\n const closeMenu = useCallback(() => {\n setMenuVisible(false);\n setTargetElement(null);\n setContainerElement(null);\n }, []);\n\n // Handle menu selection\n const handleMenuSelect = useCallback(\n (type: FeedbackType, comment?: string, screenshots?: ScreenshotData) => {\n if (targetElement) {\n submitFeedback(targetElement, type, comment, screenshots);\n }\n },\n [targetElement, submitFeedback],\n );\n\n // Get merged theme for this provider\n // We use the store's getMergedTheme for inherited values (like highlightConfig),\n // but for this provider's own theme values, we use localTheme directly to avoid\n // timing issues with useMemo running before the provider is registered.\n const inheritedTheme = getMergedTheme(providerId);\n\n // Merge: inherited theme first, then local theme overrides\n const mergedTheme: AnyclickTheme = useMemo(\n () => ({\n ...inheritedTheme,\n ...localTheme,\n // Deep merge for nested configs\n highlightConfig: {\n ...inheritedTheme.highlightConfig,\n ...localTheme.highlightConfig,\n colors: {\n ...inheritedTheme.highlightConfig?.colors,\n ...localTheme.highlightConfig?.colors,\n },\n },\n screenshotConfig: {\n ...inheritedTheme.screenshotConfig,\n ...localTheme.screenshotConfig,\n },\n }),\n [inheritedTheme, localTheme],\n );\n\n // Apply merged theme styles\n const effectiveMenuStyle = mergedTheme.menuStyle ?? menuStyle;\n const effectiveMenuClassName = mergedTheme.menuClassName ?? menuClassName;\n\n // Debug: Log theme flow\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[AnyclickProvider:${providerId}] Theme Debug`, {\n scoped,\n localThemeHasMenuStyle: !!localTheme.menuStyle,\n localThemeMenuStyleKeys: localTheme.menuStyle\n ? Object.keys(localTheme.menuStyle)\n : [],\n mergedThemeHasMenuStyle: !!mergedTheme.menuStyle,\n mergedThemeMenuStyleKeys: mergedTheme.menuStyle\n ? Object.keys(mergedTheme.menuStyle)\n : [],\n effectiveMenuStyleExists: !!effectiveMenuStyle,\n effectiveMenuStyleKeys: effectiveMenuStyle\n ? Object.keys(effectiveMenuStyle)\n : [],\n menuStyleProp: !!menuStyle,\n });\n }\n const effectiveHighlightConfig =\n mergedTheme.highlightConfig ?? highlightConfig;\n const effectiveScreenshotConfig =\n mergedTheme.screenshotConfig ?? screenshotConfig;\n\n // Context value\n const contextValue: AnyclickContextValue = useMemo(\n () => ({\n isEnabled: !effectiveDisabled && !isDisabledByAncestor(providerId),\n isSubmitting,\n submitFeedback,\n openMenu,\n closeMenu,\n theme: mergedTheme,\n scoped,\n providerId,\n }),\n [\n effectiveDisabled,\n providerId,\n isDisabledByAncestor,\n isSubmitting,\n submitFeedback,\n openMenu,\n closeMenu,\n mergedTheme,\n scoped,\n ],\n );\n\n // For scoped providers, wrap children in a container div\n const content = scoped ? (\n <div ref={setContainerRef} style={{ display: \"contents\" }}>\n {children}\n </div>\n ) : (\n children\n );\n\n return (\n <AnyclickContext.Provider value={contextValue}>\n {content}\n <ContextMenu\n visible={menuVisible && !effectiveDisabled}\n position={menuPosition}\n targetElement={targetElement}\n containerElement={containerElement}\n items={menuItems}\n onSelect={handleMenuSelect}\n onClose={closeMenu}\n isSubmitting={isSubmitting}\n style={effectiveMenuStyle}\n className={effectiveMenuClassName}\n highlightConfig={effectiveHighlightConfig}\n screenshotConfig={effectiveScreenshotConfig}\n />\n </AnyclickContext.Provider>\n );\n}\n\n/**\n * @deprecated Use AnyclickProvider instead\n */\nexport const FeedbackProvider = AnyclickProvider;\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { AnyclickContextValue } from \"./types\";\n\n/**\n * React context for anyclick functionality\n */\nexport const AnyclickContext = createContext<AnyclickContextValue | null>(null);\n\n/**\n * @deprecated Use AnyclickContext instead\n */\nexport const FeedbackContext = AnyclickContext;\n\n/**\n * Hook to access anyclick context\n * @throws Error if used outside of AnyclickProvider\n */\nexport function useAnyclick(): AnyclickContextValue {\n const context = useContext(AnyclickContext);\n if (!context) {\n throw new Error(\"useAnyclick must be used within an AnyclickProvider\");\n }\n return context;\n}\n\n/**\n * @deprecated Use useAnyclick instead\n */\nexport function useFeedback(): AnyclickContextValue {\n const context = useContext(AnyclickContext);\n if (!context) {\n throw new Error(\"useFeedback must be used within a FeedbackProvider\");\n }\n return context;\n}\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport type {\n ContextMenuProps,\n FeedbackMenuItem,\n MenuPositionMode,\n} from \"./types\";\nimport type { FeedbackType, ScreenshotData } from \"@ewjdev/anyclick-core\";\nimport {\n captureAllScreenshots,\n isScreenshotSupported,\n DEFAULT_SCREENSHOT_CONFIG,\n} from \"@ewjdev/anyclick-core\";\nimport { menuStyles } from \"./styles\";\nimport { applyHighlights, clearHighlights } from \"./highlight\";\nimport { ScreenshotPreview } from \"./ScreenshotPreview\";\nimport {\n FlagIcon,\n PlusIcon,\n ThumbsUpIcon,\n ChevronRightIcon,\n ChevronLeftIcon,\n CameraIcon,\n GripVertical,\n} from \"lucide-react\";\n\n/** Padding from viewport edges in pixels */\nconst VIEWPORT_PADDING = 10;\n\nconst screenshotIndicatorStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 12px\",\n fontSize: \"11px\",\n color: \"var(--anyclick-menu-text-muted, #9ca3af)\",\n borderTop: \"1px solid var(--anyclick-menu-border, #f3f4f6)\",\n marginTop: \"4px\",\n};\n\n/**\n * Default icons for feedback types\n */\nconst defaultIcons: Record<string, React.ReactNode> = {\n issue: <FlagIcon className=\"w-4 h-4\" />,\n feature: <PlusIcon className=\"w-4 h-4\" />,\n like: <ThumbsUpIcon className=\"w-4 h-4\" />,\n};\n\n/**\n * Menu item component with touch-friendly sizing\n */\nfunction MenuItem({\n item,\n onClick,\n disabled,\n hasChildren,\n}: {\n item: FeedbackMenuItem;\n onClick: () => void;\n disabled: boolean;\n hasChildren?: boolean;\n}) {\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onTouchStart={() => setIsPressed(true)}\n onTouchEnd={() => setIsPressed(false)}\n onTouchCancel={() => setIsPressed(false)}\n style={{\n ...menuStyles.item,\n // Apply hover/pressed state for both mouse and touch\n ...(isHovered || isPressed ? menuStyles.itemHover : {}),\n ...(disabled ? { opacity: 0.5, cursor: \"not-allowed\" } : {}),\n // Ensure minimum touch target size (44px is recommended)\n minHeight: \"44px\",\n // Prevent text selection on touch\n WebkitUserSelect: \"none\",\n userSelect: \"none\",\n // Prevent touch callout on iOS\n WebkitTouchCallout: \"none\",\n }}\n >\n <span style={menuStyles.itemIcon}>\n {item.icon ?? defaultIcons[item.type]}\n </span>\n <span style={{ flex: 1 }}>{item.label}</span>\n {hasChildren && (\n <ChevronRightIcon\n className=\"w-4 h-4\"\n style={{ marginLeft: \"auto\", opacity: 0.5 }}\n />\n )}\n </button>\n );\n}\n\n/**\n * Back button for submenu navigation with touch-friendly sizing\n */\nfunction BackButton({ onClick }: { onClick: () => void }) {\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onTouchStart={() => setIsPressed(true)}\n onTouchEnd={() => setIsPressed(false)}\n onTouchCancel={() => setIsPressed(false)}\n style={{\n ...menuStyles.item,\n ...(isHovered || isPressed ? menuStyles.itemHover : {}),\n borderBottom: \"1px solid #e5e5e5\",\n marginBottom: \"4px\",\n // Ensure minimum touch target size\n minHeight: \"44px\",\n // Prevent text selection on touch\n WebkitUserSelect: \"none\",\n userSelect: \"none\",\n WebkitTouchCallout: \"none\",\n }}\n >\n <ChevronLeftIcon className=\"w-4 h-4\" style={{ opacity: 0.5 }} />\n <span style={{ opacity: 0.7 }}>Back</span>\n </button>\n );\n}\n\n/**\n * Comment form component\n */\nfunction CommentForm({\n onSubmit,\n onCancel,\n isSubmitting,\n}: {\n onSubmit: (comment: string) => void;\n onCancel: () => void;\n isSubmitting: boolean;\n}) {\n const [comment, setComment] = useState(\"\");\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n const handleSubmit = () => {\n onSubmit(comment);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n handleSubmit();\n } else if (e.key === \"Escape\") {\n onCancel();\n }\n };\n\n return (\n <div style={menuStyles.commentSection}>\n <textarea\n ref={inputRef}\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Add a comment (optional)...\"\n style={menuStyles.commentInput}\n disabled={isSubmitting}\n />\n <div style={menuStyles.buttonRow}>\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={isSubmitting}\n style={{ ...menuStyles.button, ...menuStyles.cancelButton }}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={isSubmitting}\n style={{\n ...menuStyles.button,\n ...menuStyles.submitButton,\n ...(isSubmitting ? menuStyles.submitButtonDisabled : {}),\n }}\n >\n {isSubmitting ? \"Sending...\" : \"Send\"}\n </button>\n </div>\n </div>\n );\n}\n\n/** View states for the context menu */\ntype MenuView = \"menu\" | \"comment\" | \"screenshot-preview\";\n\n/**\n * Calculate adjusted position to keep menu in viewport\n */\nfunction calculateInViewPosition(\n requestedX: number,\n requestedY: number,\n menuWidth: number,\n menuHeight: number,\n): { x: number; y: number } {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n let x = requestedX;\n let y = requestedY;\n\n // Adjust X if menu would go off the right edge\n if (x + menuWidth > viewportWidth - VIEWPORT_PADDING) {\n x = viewportWidth - menuWidth - VIEWPORT_PADDING;\n }\n // Ensure X doesn't go off the left edge\n if (x < VIEWPORT_PADDING) {\n x = VIEWPORT_PADDING;\n }\n\n // Adjust Y if menu would go off the bottom edge\n if (y + menuHeight > viewportHeight - VIEWPORT_PADDING) {\n y = viewportHeight - menuHeight - VIEWPORT_PADDING;\n }\n // Ensure Y doesn't go off the top edge\n if (y < VIEWPORT_PADDING) {\n y = VIEWPORT_PADDING;\n }\n\n return { x, y };\n}\n\n/**\n * Context menu component for selecting feedback type\n */\nexport function ContextMenu({\n visible,\n position,\n targetElement,\n containerElement,\n items,\n onSelect,\n onClose,\n isSubmitting,\n style,\n className,\n highlightConfig,\n screenshotConfig,\n positionMode = \"inView\",\n}: ContextMenuProps) {\n const [selectedType, setSelectedType] = useState<FeedbackType | null>(null);\n const [currentView, setCurrentView] = useState<MenuView>(\"menu\");\n const [pendingComment, setPendingComment] = useState<string | undefined>();\n const [submenuStack, setSubmenuStack] = useState<FeedbackMenuItem[][]>([]);\n const [screenshots, setScreenshots] = useState<ScreenshotData | null>(null);\n const [isCapturing, setIsCapturing] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Position state for different modes\n const [adjustedPosition, setAdjustedPosition] = useState<{\n x: number;\n y: number;\n }>(position);\n const [isDragging, setIsDragging] = useState(false);\n const [dragOffset, setDragOffset] = useState<{ x: number; y: number }>({\n x: 0,\n y: 0,\n });\n const dragStartRef = useRef<{ x: number; y: number } | null>(null);\n\n // Merge screenshot config with defaults\n const mergedScreenshotConfig = {\n ...DEFAULT_SCREENSHOT_CONFIG,\n ...screenshotConfig,\n };\n\n const showPreview =\n mergedScreenshotConfig.showPreview && isScreenshotSupported();\n\n // Current items to display (either root items or submenu items)\n const currentItems =\n submenuStack.length > 0 ? submenuStack[submenuStack.length - 1] : items;\n\n // Capture screenshots\n const captureScreenshots = useCallback(async () => {\n if (!targetElement || !showPreview) return;\n\n setIsCapturing(true);\n try {\n const captured = await captureAllScreenshots(\n targetElement,\n containerElement,\n mergedScreenshotConfig,\n );\n setScreenshots(captured);\n } catch (error) {\n console.error(\"Failed to capture screenshots:\", error);\n setScreenshots(null);\n } finally {\n setIsCapturing(false);\n }\n }, [targetElement, containerElement, mergedScreenshotConfig, showPreview]);\n\n // Reset state when menu closes\n useEffect(() => {\n if (!visible) {\n setSelectedType(null);\n setCurrentView(\"menu\");\n setPendingComment(undefined);\n setSubmenuStack([]);\n setScreenshots(null);\n setIsCapturing(false);\n setIsDragging(false);\n setDragOffset({ x: 0, y: 0 });\n dragStartRef.current = null;\n }\n }, [visible]);\n\n // Apply highlights to target element and container when menu opens\n useEffect(() => {\n if (visible && targetElement) {\n // Clear any existing highlights first to ensure clean state\n clearHighlights();\n // Apply highlights to the new target element\n applyHighlights(targetElement, highlightConfig);\n } else {\n // Clear highlights when menu is not visible\n clearHighlights();\n }\n\n return () => {\n clearHighlights();\n };\n }, [visible, targetElement, highlightConfig]);\n\n // Close menu when clicking outside of it\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (!menuRef.current) return;\n\n const target = event.target as Node;\n // Don't close if clicking on the drag handle\n if ((target as HTMLElement).closest?.(\"[data-drag-handle]\")) {\n return;\n }\n if (!menuRef.current.contains(target)) {\n onClose();\n }\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n };\n }, [visible, onClose]);\n\n // Reset adjusted position when menu opens at new position\n useEffect(() => {\n if (visible) {\n setAdjustedPosition(position);\n setDragOffset({ x: 0, y: 0 });\n }\n }, [visible, position.x, position.y]);\n\n // Calculate and apply position based on mode\n useEffect(() => {\n if (!visible || !menuRef.current) return;\n\n const updatePosition = () => {\n const menuElement = menuRef.current;\n if (!menuElement) return;\n\n const rect = menuElement.getBoundingClientRect();\n const baseX = position.x + dragOffset.x;\n const baseY = position.y + dragOffset.y;\n\n if (positionMode === \"static\") {\n // Static mode: use position directly (may go off-screen)\n setAdjustedPosition({ x: baseX, y: baseY });\n } else if (positionMode === \"inView\" || positionMode === \"dynamic\") {\n // inView and dynamic: keep menu in viewport\n const adjusted = calculateInViewPosition(\n baseX,\n baseY,\n rect.width,\n rect.height,\n );\n setAdjustedPosition(adjusted);\n }\n };\n\n // Initial calculation after render\n requestAnimationFrame(updatePosition);\n\n // Recalculate on resize\n window.addEventListener(\"resize\", updatePosition);\n return () => window.removeEventListener(\"resize\", updatePosition);\n }, [visible, position, positionMode, dragOffset, currentView]);\n\n // Dragging logic for dynamic mode\n useEffect(() => {\n if (!visible || positionMode !== \"dynamic\") return;\n\n const handlePointerMove = (event: PointerEvent) => {\n if (!isDragging || !dragStartRef.current) return;\n\n const deltaX = event.clientX - dragStartRef.current.x;\n const deltaY = event.clientY - dragStartRef.current.y;\n\n setDragOffset((prev) => ({\n x: prev.x + deltaX,\n y: prev.y + deltaY,\n }));\n\n dragStartRef.current = { x: event.clientX, y: event.clientY };\n };\n\n const handlePointerUp = () => {\n setIsDragging(false);\n dragStartRef.current = null;\n };\n\n if (isDragging) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp);\n document.addEventListener(\"pointercancel\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n document.removeEventListener(\"pointercancel\", handlePointerUp);\n };\n }\n }, [visible, positionMode, isDragging]);\n\n // Handle drag start\n const handleDragStart = useCallback(\n (event: React.PointerEvent) => {\n if (positionMode !== \"dynamic\") return;\n event.preventDefault();\n setIsDragging(true);\n dragStartRef.current = { x: event.clientX, y: event.clientY };\n },\n [positionMode],\n );\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (currentView === \"screenshot-preview\") {\n setCurrentView(\"comment\");\n } else if (currentView === \"comment\") {\n setCurrentView(\"menu\");\n setSelectedType(null);\n setPendingComment(undefined);\n } else if (submenuStack.length > 0) {\n // Go back one level in submenu\n setSubmenuStack((prev) => prev.slice(0, -1));\n } else {\n onClose();\n }\n }\n };\n\n if (visible) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [visible, currentView, submenuStack.length, onClose]);\n\n // Prevent touch default behaviors on menu container\n useEffect(() => {\n const menuElement = menuRef.current;\n if (!visible || !menuElement) return;\n\n // Prevent touch scrolling and other default behaviors within the menu\n const preventTouchDefault = (e: TouchEvent) => {\n // Allow touches within interactive elements (inputs, textareas)\n const target = e.target as HTMLElement;\n if (\n target.tagName === \"TEXTAREA\" ||\n target.tagName === \"INPUT\" ||\n target.isContentEditable\n ) {\n return;\n }\n // Prevent default to stop scroll/zoom behaviors\n e.preventDefault();\n };\n\n menuElement.addEventListener(\"touchmove\", preventTouchDefault, {\n passive: false,\n });\n\n return () => {\n menuElement.removeEventListener(\"touchmove\", preventTouchDefault);\n };\n }, [visible]);\n\n if (!visible || !targetElement) {\n return null;\n }\n\n const handleItemClick = (item: FeedbackMenuItem) => {\n // If item has children, navigate to submenu\n if (item.children && item.children.length > 0) {\n setSubmenuStack((prev) => [...prev, item.children!]);\n return;\n }\n\n // Otherwise, handle selection\n if (item.showComment) {\n setSelectedType(item.type);\n setCurrentView(\"comment\");\n } else {\n // If preview is enabled, capture and show preview\n if (showPreview) {\n setSelectedType(item.type);\n setCurrentView(\"screenshot-preview\");\n captureScreenshots();\n } else {\n onSelect(item.type);\n }\n }\n };\n\n const handleBack = () => {\n setSubmenuStack((prev) => prev.slice(0, -1));\n };\n\n const handleCommentSubmit = (comment: string) => {\n if (!selectedType) return;\n\n // If preview is enabled, capture and show preview\n if (showPreview) {\n setPendingComment(comment || undefined);\n setCurrentView(\"screenshot-preview\");\n captureScreenshots();\n } else {\n onSelect(selectedType, comment || undefined);\n }\n };\n\n const handleCommentCancel = () => {\n setCurrentView(\"menu\");\n setSelectedType(null);\n setPendingComment(undefined);\n };\n\n const handleScreenshotConfirm = (confirmedScreenshots: ScreenshotData) => {\n if (selectedType) {\n onSelect(selectedType, pendingComment, confirmedScreenshots);\n }\n };\n\n const handleScreenshotCancel = () => {\n // Go back to comment or menu\n if (pendingComment !== undefined) {\n setCurrentView(\"comment\");\n } else {\n setCurrentView(\"menu\");\n setSelectedType(null);\n }\n setScreenshots(null);\n };\n\n const handleRetakeScreenshots = () => {\n captureScreenshots();\n };\n\n // Determine container width based on view\n const containerWidth = currentView === \"screenshot-preview\" ? 360 : undefined;\n\n // Debug: Log received style\n if (process.env.NODE_ENV === \"development\" && visible) {\n console.log(\"[ContextMenu] Style Debug\", {\n styleExists: !!style,\n styleKeys: style ? Object.keys(style) : [],\n styleValues: style,\n className,\n });\n }\n\n return (\n <div\n ref={menuRef}\n className={className}\n style={{\n ...menuStyles.container,\n left: adjustedPosition.x,\n top: adjustedPosition.y,\n ...(containerWidth\n ? { width: containerWidth, minWidth: containerWidth }\n : {}),\n // Touch-specific styles\n WebkitUserSelect: \"none\",\n userSelect: \"none\",\n WebkitTouchCallout: \"none\",\n touchAction: \"none\", // Prevent default touch behaviors\n // Cursor style for dragging\n ...(isDragging ? { cursor: \"grabbing\" } : {}),\n ...style,\n }}\n role=\"menu\"\n aria-label=\"Feedback options\"\n >\n {/* Header with optional drag handle */}\n {currentView !== \"screenshot-preview\" && (\n <div\n style={{\n ...menuStyles.header,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>Send Feedback</span>\n {positionMode === \"dynamic\" && (\n <div\n data-drag-handle\n onPointerDown={handleDragStart}\n style={{\n cursor: isDragging ? \"grabbing\" : \"grab\",\n padding: \"4px\",\n marginRight: \"-4px\",\n borderRadius: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n opacity: 0.5,\n transition: \"opacity 0.15s\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.opacity = \"1\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.opacity = \"0.5\";\n }}\n title=\"Drag to move\"\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n )}\n </div>\n )}\n\n {currentView === \"menu\" && (\n <div style={menuStyles.itemList}>\n {submenuStack.length > 0 && <BackButton onClick={handleBack} />}\n {currentItems.map((item) => (\n <MenuItem\n key={item.type}\n item={item}\n onClick={() => handleItemClick(item)}\n disabled={isSubmitting}\n hasChildren={item.children && item.children.length > 0}\n />\n ))}\n {showPreview && (\n <div style={screenshotIndicatorStyle}>\n <CameraIcon className=\"w-3 h-3\" />\n <span>Screenshots will be captured</span>\n </div>\n )}\n </div>\n )}\n\n {currentView === \"comment\" && (\n <CommentForm\n onSubmit={handleCommentSubmit}\n onCancel={handleCommentCancel}\n isSubmitting={isSubmitting}\n />\n )}\n\n {currentView === \"screenshot-preview\" && (\n <ScreenshotPreview\n screenshots={screenshots}\n isLoading={isCapturing}\n onConfirm={handleScreenshotConfirm}\n onCancel={handleScreenshotCancel}\n onRetake={handleRetakeScreenshots}\n isSubmitting={isSubmitting}\n />\n )}\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\n\n/**\n * CSS custom properties for menu theming.\n * These can be overridden via the `style` prop on AnyclickProvider.\n *\n * Example:\n * ```tsx\n * <AnyclickProvider\n * theme={{\n * menuStyle: {\n * '--anyclick-menu-bg': 'rgba(0, 0, 0, 0.9)',\n * '--anyclick-menu-text': '#ffffff',\n * '--anyclick-menu-border': 'rgba(255, 255, 255, 0.1)',\n * '--anyclick-menu-hover': 'rgba(255, 255, 255, 0.1)',\n * '--anyclick-menu-accent': '#f59e0b',\n * }\n * }}\n * />\n * ```\n */\nexport const menuCSSVariables = {\n // Background colors\n \"--anyclick-menu-bg\": \"#ffffff\",\n \"--anyclick-menu-hover\": \"#f5f5f5\",\n // Text colors\n \"--anyclick-menu-text\": \"#333333\",\n \"--anyclick-menu-text-muted\": \"#666666\",\n // Border colors\n \"--anyclick-menu-border\": \"#e5e5e5\",\n // Accent/action colors\n \"--anyclick-menu-accent\": \"#0066cc\",\n \"--anyclick-menu-accent-text\": \"#ffffff\",\n // Input colors\n \"--anyclick-menu-input-bg\": \"#ffffff\",\n \"--anyclick-menu-input-border\": \"#dddddd\",\n // Cancel button\n \"--anyclick-menu-cancel-bg\": \"#f0f0f0\",\n \"--anyclick-menu-cancel-text\": \"#666666\",\n} as const;\n\nexport const menuStyles: Record<string, CSSProperties> = {\n overlay: {\n position: \"fixed\",\n inset: 0,\n zIndex: 9998,\n },\n container: {\n position: \"fixed\",\n zIndex: 9999,\n minWidth: \"200px\",\n backgroundColor: \"var(--anyclick-menu-bg, #ffffff)\",\n borderRadius: \"8px\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\n overflow: \"hidden\",\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: \"14px\",\n // Set default CSS variables\n ...menuCSSVariables,\n },\n header: {\n padding: \"12px 16px\",\n borderBottom: \"1px solid var(--anyclick-menu-border, #e5e5e5)\",\n color: \"var(--anyclick-menu-text-muted, #666)\",\n fontSize: \"12px\",\n fontWeight: 500,\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.5px\",\n },\n itemList: {\n padding: \"4px 0\",\n },\n item: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"10px\",\n padding: \"10px 16px\",\n cursor: \"pointer\",\n transition: \"background-color 0.15s\",\n color: \"var(--anyclick-menu-text, #333)\",\n border: \"none\",\n backgroundColor: \"transparent\",\n width: \"100%\",\n textAlign: \"left\" as const,\n fontSize: \"14px\",\n },\n itemHover: {\n backgroundColor: \"var(--anyclick-menu-hover, #f5f5f5)\",\n },\n itemIcon: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"20px\",\n height: \"20px\",\n fontSize: \"16px\",\n },\n commentSection: {\n padding: \"12px 16px\",\n borderTop: \"1px solid var(--anyclick-menu-border, #e5e5e5)\",\n },\n commentInput: {\n width: \"100%\",\n minHeight: \"60px\",\n padding: \"8px 12px\",\n border: \"1px solid var(--anyclick-menu-input-border, #ddd)\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontFamily: \"inherit\",\n resize: \"vertical\" as const,\n outline: \"none\",\n boxSizing: \"border-box\" as const,\n backgroundColor: \"var(--anyclick-menu-input-bg, #ffffff)\",\n color: \"var(--anyclick-menu-text, #333)\",\n },\n buttonRow: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n gap: \"8px\",\n marginTop: \"8px\",\n },\n button: {\n padding: \"6px 12px\",\n borderRadius: \"6px\",\n fontSize: \"13px\",\n fontWeight: 500,\n cursor: \"pointer\",\n transition: \"background-color 0.15s, opacity 0.15s\",\n border: \"none\",\n },\n cancelButton: {\n backgroundColor: \"var(--anyclick-menu-cancel-bg, #f0f0f0)\",\n color: \"var(--anyclick-menu-cancel-text, #666)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n },\n submitButton: {\n backgroundColor: \"var(--anyclick-menu-accent, #0066cc)\",\n color: \"var(--anyclick-menu-accent-text, #ffffff)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n },\n submitButtonDisabled: {\n opacity: 0.6,\n cursor: \"not-allowed\",\n },\n};\n\n// Dark mode styles\nexport const darkMenuStyles: Record<string, CSSProperties> = {\n container: {\n ...menuStyles.container,\n backgroundColor: \"#1a1a1a\",\n boxShadow:\n \"0 4px 12px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.1)\",\n },\n header: {\n ...menuStyles.header,\n borderBottom: \"1px solid #333\",\n color: \"#888\",\n },\n item: {\n ...menuStyles.item,\n color: \"#e0e0e0\",\n },\n itemHover: {\n backgroundColor: \"#2a2a2a\",\n },\n commentSection: {\n ...menuStyles.commentSection,\n borderTop: \"1px solid #333\",\n },\n commentInput: {\n ...menuStyles.commentInput,\n backgroundColor: \"#2a2a2a\",\n border: \"1px solid #444\",\n color: \"#e0e0e0\",\n },\n cancelButton: {\n ...menuStyles.cancelButton,\n backgroundColor: \"#333\",\n color: \"#ccc\",\n },\n};\n\nexport const screenshotPreviewStyles: Record<string, React.CSSProperties> = {\n container: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n },\n containerExpanded: {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"90vw\",\n maxWidth: \"800px\",\n maxHeight: \"90vh\",\n backgroundColor: \"#fff\",\n borderRadius: \"12px\",\n boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n padding: \"16px\",\n zIndex: 10000,\n },\n loadingContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"12px\",\n padding: \"24px\",\n },\n loadingText: {\n fontSize: \"13px\",\n color: \"#6b7280\",\n },\n emptyContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n padding: \"24px\",\n },\n emptyText: {\n fontSize: \"13px\",\n color: \"#6b7280\",\n fontWeight: \"500\",\n },\n emptySubtext: {\n fontSize: \"11px\",\n color: \"#9ca3af\",\n textAlign: \"center\" as const,\n },\n emptyActions: {\n display: \"flex\",\n gap: \"8px\",\n marginTop: \"8px\",\n },\n retakeButtonOutline: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 12px\",\n fontSize: \"12px\",\n color: \"#6b7280\",\n backgroundColor: \"transparent\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n },\n continueButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 12px\",\n fontSize: \"12px\",\n color: \"#fff\",\n backgroundColor: \"#3b82f6\",\n border: \"none\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n fontWeight: \"500\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"0 4px\",\n },\n headerTitle: {\n fontSize: \"12px\",\n fontWeight: \"600\",\n color: \"#374151\",\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.05em\",\n },\n headerActions: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n sizeLabel: {\n fontSize: \"11px\",\n color: \"#9ca3af\",\n },\n iconButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"24px\",\n height: \"24px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n color: \"#6b7280\",\n },\n tabContainer: {\n display: \"flex\",\n gap: \"4px\",\n borderBottom: \"1px solid #e5e7eb\",\n paddingBottom: \"8px\",\n },\n tab: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"2px 5px\",\n fontSize: \"12px\",\n color: \"#6b7280\",\n backgroundColor: \"transparent\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n tabActive: {\n backgroundColor: \"#eff6ff\",\n color: \"#3b82f6\",\n fontWeight: \"500\",\n },\n tabError: {\n color: \"#ef4444\",\n },\n tabSize: {\n fontSize: \"10px\",\n color: \"#9ca3af\",\n },\n previewContainer: {\n position: \"relative\",\n width: \"100%\",\n height: \"150px\",\n backgroundColor: \"#f9fafb\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n previewContainerExpanded: {\n height: \"60vh\",\n maxHeight: \"500px\",\n },\n previewImage: {\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n objectFit: \"contain\",\n },\n noPreview: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\",\n fontSize: \"12px\",\n color: \"#9ca3af\",\n },\n errorPreview: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n padding: \"16px\",\n textAlign: \"center\" as const,\n },\n errorTitle: {\n fontSize: \"14px\",\n fontWeight: \"600\",\n color: \"#ef4444\",\n },\n errorMessage: {\n fontSize: \"12px\",\n color: \"#6b7280\",\n maxWidth: \"250px\",\n lineHeight: \"1.4\",\n },\n dimensionsInfo: {\n fontSize: \"11px\",\n color: \"#9ca3af\",\n textAlign: \"center\" as const,\n },\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingTop: \"8px\",\n borderTop: \"1px solid #e5e7eb\",\n },\n actionsRight: {\n display: \"flex\",\n gap: \"8px\",\n },\n retakeButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 16px\",\n fontSize: \"13px\",\n color: \"#fff\",\n backgroundColor: \"#3b82f6\",\n border: \"none\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n fontWeight: \"500\",\n },\n retakeButtonSmall: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"4px 8px\",\n fontSize: \"11px\",\n color: \"#6b7280\",\n backgroundColor: \"transparent\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n },\n};\n","/**\n * Highlight utilities for feedback target elements\n */\n\nimport type { HighlightConfig, HighlightColors } from \"./types\";\n\nconst HIGHLIGHT_TARGET_CLASS = \"uifeedback-highlight-target\";\nconst HIGHLIGHT_CONTAINER_CLASS = \"uifeedback-highlight-container\";\nconst STYLE_ID = \"uifeedback-highlight-styles\";\n\n/**\n * Default highlight colors\n */\nexport const defaultHighlightColors: Required<HighlightColors> = {\n targetColor: \"#3b82f6\",\n containerColor: \"#8b5cf6\",\n targetShadowOpacity: 0.25,\n containerShadowOpacity: 0.1,\n};\n\n/**\n * Default container selectors\n */\nexport const defaultContainerSelectors: string[] = [\n \".container\",\n \".card\",\n \".panel\",\n \".section\",\n \".wrapper\",\n \".box\",\n \".modal\",\n \".dialog\",\n \".drawer\",\n '[role=\"dialog\"]',\n '[role=\"region\"]',\n '[role=\"article\"]',\n '[role=\"main\"]',\n \"article\",\n \"section\",\n \"main\",\n \"aside\",\n \"nav\",\n \"header\",\n \"footer\",\n];\n\n/**\n * Generate CSS for highlight effects based on configuration\n */\nfunction generateHighlightCSS(colors: Required<HighlightColors>): string {\n const {\n targetColor,\n containerColor,\n targetShadowOpacity,\n containerShadowOpacity,\n } = colors;\n\n // Convert hex to rgba for shadows\n const hexToRgba = (hex: string, alpha: number): string => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result) return `rgba(0, 0, 0, ${alpha})`;\n return `rgba(${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}, ${alpha})`;\n };\n\n return `\n.${HIGHLIGHT_TARGET_CLASS} {\n outline: 2px dashed ${targetColor} !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 4px ${hexToRgba(targetColor, targetShadowOpacity)}, 0 4px 12px ${hexToRgba(targetColor, targetShadowOpacity * 0.6)} !important;\n border-radius: 4px !important;\n position: relative;\n z-index: 9997;\n}\n\n.${HIGHLIGHT_CONTAINER_CLASS} {\n outline: 2px dashed ${hexToRgba(containerColor, 0.6)} !important;\n outline-offset: 4px !important;\n box-shadow: 0 0 0 6px ${hexToRgba(containerColor, containerShadowOpacity)} !important;\n border-radius: 6px !important;\n position: relative;\n z-index: 9996;\n}\n`;\n}\n\n/**\n * Inject or update highlight styles in document head\n */\nfunction injectStyles(colors: Required<HighlightColors>): void {\n if (typeof document === \"undefined\") return;\n\n // Remove existing styles if present\n const existingStyle = document.getElementById(STYLE_ID);\n if (existingStyle) {\n existingStyle.remove();\n }\n\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = generateHighlightCSS(colors);\n document.head.appendChild(style);\n}\n\n/**\n * Find the closest container parent element\n */\nexport function findContainerParent(\n element: Element,\n config?: HighlightConfig,\n): Element | null {\n const containerSelectors =\n config?.containerSelectors ?? defaultContainerSelectors;\n const minChildren = config?.minChildrenForContainer ?? 2;\n\n let current = element.parentElement;\n let fallbackContainer: Element | null = null;\n\n while (current && current !== document.body) {\n // Check if element matches any container selector\n for (const selector of containerSelectors) {\n try {\n if (current.matches(selector)) {\n return current;\n }\n } catch {\n // Invalid selector, skip\n }\n }\n\n // Check if parent has multiple meaningful children (not just text nodes)\n const meaningfulChildren = Array.from(current.children).filter((child) => {\n const tag = child.tagName.toLowerCase();\n // Exclude script, style, and hidden elements\n if (tag === \"script\" || tag === \"style\" || tag === \"noscript\") {\n return false;\n }\n // Check if element is visible\n const style = window.getComputedStyle(child);\n if (style.display === \"none\" || style.visibility === \"hidden\") {\n return false;\n }\n return true;\n });\n\n // If this parent has enough children, it's likely a container\n if (meaningfulChildren.length >= minChildren && !fallbackContainer) {\n fallbackContainer = current;\n }\n\n // If parent has 3+ children, strongly consider it a container\n if (meaningfulChildren.length >= 3) {\n return current;\n }\n\n current = current.parentElement;\n }\n\n return fallbackContainer;\n}\n\n/**\n * Apply highlight to target element\n */\nexport function highlightTarget(\n element: Element,\n colors?: HighlightColors,\n): void {\n const mergedColors = { ...defaultHighlightColors, ...colors };\n injectStyles(mergedColors);\n element.classList.add(HIGHLIGHT_TARGET_CLASS);\n}\n\n/**\n * Apply highlight to container element\n */\nexport function highlightContainer(\n element: Element,\n colors?: HighlightColors,\n): void {\n const mergedColors = { ...defaultHighlightColors, ...colors };\n injectStyles(mergedColors);\n element.classList.add(HIGHLIGHT_CONTAINER_CLASS);\n}\n\n/**\n * Remove all highlights from the document\n */\nexport function clearHighlights(): void {\n if (typeof document === \"undefined\") return;\n\n document.querySelectorAll(`.${HIGHLIGHT_TARGET_CLASS}`).forEach((el) => {\n el.classList.remove(HIGHLIGHT_TARGET_CLASS);\n });\n\n document.querySelectorAll(`.${HIGHLIGHT_CONTAINER_CLASS}`).forEach((el) => {\n el.classList.remove(HIGHLIGHT_CONTAINER_CLASS);\n });\n}\n\n/**\n * Apply highlights to target element and its container parent\n */\nexport function applyHighlights(\n targetElement: Element,\n config?: HighlightConfig,\n): {\n target: Element;\n container: Element | null;\n} {\n // If highlights are disabled, don't apply anything\n if (config?.enabled === false) {\n return { target: targetElement, container: null };\n }\n\n clearHighlights();\n\n const colors = { ...defaultHighlightColors, ...config?.colors };\n\n highlightTarget(targetElement, colors);\n\n const container = findContainerParent(targetElement, config);\n if (container && container !== targetElement) {\n highlightContainer(container, colors);\n }\n\n return { target: targetElement, container };\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport type { ScreenshotData, ScreenshotError } from \"@ewjdev/anyclick-core\";\nimport { formatBytes, estimateTotalSize } from \"@ewjdev/anyclick-core\";\nimport type { ScreenshotPreviewProps } from \"./types\";\nimport { menuStyles } from \"./styles\";\nimport { screenshotPreviewStyles as styles } from \"./styles\";\nimport {\n ImageIcon,\n RefreshCwIcon,\n CheckIcon,\n XIcon,\n Loader2Icon,\n ExpandIcon,\n ShrinkIcon,\n AlertCircleIcon,\n} from \"lucide-react\";\n\ntype TabType = \"element\" | \"container\" | \"viewport\";\n\n/**\n * Screenshot preview component - shows captured screenshots before sending\n */\nexport function ScreenshotPreview({\n screenshots,\n isLoading,\n onConfirm,\n onCancel,\n onRetake,\n isSubmitting,\n}: ScreenshotPreviewProps) {\n const [activeTab, setActiveTab] = useState<TabType>(\"element\");\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (isLoading) {\n return (\n <div style={styles.container}>\n <div style={styles.loadingContainer}>\n <Loader2Icon\n className=\"w-6 h-6 animate-spin\"\n style={{ color: \"#3b82f6\" }}\n />\n <span style={styles.loadingText}>Capturing screenshots...</span>\n </div>\n </div>\n );\n }\n\n if (!screenshots) {\n return (\n <div style={styles.container}>\n <div style={styles.emptyContainer}>\n <ImageIcon className=\"w-8 h-8\" style={{ color: \"#9ca3af\" }} />\n <span style={styles.emptyText}>Screenshots unavailable</span>\n <span style={styles.emptySubtext}>\n Some elements can&apos;t be captured (e.g., gradient text)\n </span>\n <div style={styles.emptyActions}>\n <button\n type=\"button\"\n onClick={onRetake}\n style={styles.retakeButtonOutline}\n disabled={isSubmitting}\n >\n <RefreshCwIcon className=\"w-4 h-4\" />\n Try Again\n </button>\n <button\n type=\"button\"\n onClick={() =>\n onConfirm({ capturedAt: new Date().toISOString() })\n }\n style={styles.continueButton}\n disabled={isSubmitting}\n >\n <CheckIcon className=\"w-4 h-4\" />\n Continue Without\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Get error for a specific tab\n const getError = (key: TabType): ScreenshotError | undefined => {\n return screenshots.errors?.[key];\n };\n\n const allTabs: {\n key: TabType;\n label: string;\n data: typeof screenshots.element;\n error?: ScreenshotError;\n }[] = [\n {\n key: \"element\" as const,\n label: \"Element\",\n data: screenshots.element,\n error: getError(\"element\"),\n },\n {\n key: \"container\" as const,\n label: \"Container\",\n data: screenshots.container,\n error: getError(\"container\"),\n },\n {\n key: \"viewport\" as const,\n label: \"Viewport\",\n data: screenshots.viewport,\n error: getError(\"viewport\"),\n },\n ];\n // Show tabs that have either data or errors\n const tabs = allTabs.filter((tab) => tab.data || tab.error);\n\n const activeScreenshot =\n activeTab === \"element\"\n ? screenshots.element\n : activeTab === \"container\"\n ? screenshots.container\n : screenshots.viewport;\n\n const activeError = getError(activeTab);\n\n const totalSize = estimateTotalSize(screenshots);\n\n console.log({ styles });\n\n return (\n <div\n style={{\n ...styles.container,\n ...(isExpanded ? styles.containerExpanded : {}),\n padding: \"8px\",\n }}\n >\n <div style={styles.header}>\n <span style={styles.headerTitle}>Review Screenshots</span>\n <div style={styles.headerActions}>\n <span style={styles.sizeLabel}>{formatBytes(totalSize)}</span>\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n style={styles.iconButton}\n title={isExpanded ? \"Collapse\" : \"Expand\"}\n >\n {isExpanded ? (\n <ShrinkIcon className=\"w-4 h-4\" />\n ) : (\n <ExpandIcon className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n </div>\n\n {/* Tabs */}\n <div style={styles.tabContainer}>\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n onClick={() => setActiveTab(tab.key)}\n style={{\n ...styles.tab,\n ...(activeTab === tab.key ? styles.tabActive : {}),\n ...(tab.error && !tab.data ? styles.tabError : {}),\n }}\n >\n {tab.error && !tab.data && (\n <AlertCircleIcon\n className=\"w-3 h-3\"\n style={{ color: \"#ef4444\" }}\n />\n )}\n {tab.label}\n {tab.data && (\n <span style={styles.tabSize}>\n {formatBytes(tab.data.sizeBytes)}\n </span>\n )}\n </button>\n ))}\n </div>\n\n {/* Preview image */}\n <div\n style={{\n ...styles.previewContainer,\n ...(isExpanded ? styles.previewContainerExpanded : {}),\n }}\n >\n {activeScreenshot ? (\n <img\n src={activeScreenshot.dataUrl}\n alt={`${activeTab} screenshot`}\n style={styles.previewImage}\n />\n ) : activeError ? (\n <div style={styles.errorPreview}>\n <AlertCircleIcon className=\"w-8 h-8\" style={{ color: \"#ef4444\" }} />\n <span style={styles.errorTitle}>Capture Failed</span>\n <span style={styles.errorMessage}>{activeError.message}</span>\n </div>\n ) : (\n <div style={styles.noPreview}>\n <ImageIcon className=\"w-6 h-6\" style={{ color: \"#9ca3af\" }} />\n <span>No {activeTab} screenshot</span>\n </div>\n )}\n </div>\n\n {/* Dimensions info */}\n {activeScreenshot && (\n <div style={styles.dimensionsInfo}>\n {activeScreenshot.width} × {activeScreenshot.height}px\n </div>\n )}\n\n {/* Actions */}\n <div style={styles.actions}>\n <button\n type=\"button\"\n onClick={onRetake}\n disabled={isSubmitting}\n style={styles.retakeButtonSmall}\n >\n <RefreshCwIcon className=\"w-3 h-3\" />\n Retake\n </button>\n <div style={styles.actionsRight}>\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={isSubmitting}\n className=\"flex items-center gap-1\"\n style={{ ...menuStyles.button, ...menuStyles.cancelButton }}\n >\n <XIcon className=\"w-3 h-3\" />\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={() => onConfirm(screenshots)}\n disabled={isSubmitting}\n style={{\n ...menuStyles.button,\n ...menuStyles.submitButton,\n ...(isSubmitting ? menuStyles.submitButtonDisabled : {}),\n }}\n >\n {isSubmitting ? (\n <>\n <Loader2Icon className=\"w-3 h-3 animate-spin\" />\n Sending...\n </>\n ) : (\n <>\n <CheckIcon className=\"w-3 h-3\" />\n Send\n </>\n )}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z',\n key: '18u6gg',\n },\n ],\n ['circle', { cx: '12', cy: '13', r: '3', key: '1vg3eu' }],\n];\n\n/**\n * @component @name Camera\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuOTk3IDRhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIDEuNzU5LTEuMDQ4bC40ODktLjkwNEEyIDIgMCAwIDEgMTAuMDA0IDR6IiAvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTMiIHI9IjMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/camera\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Camera = createLucideIcon('camera', __iconNode);\n\nexport default Camera;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '12', key: '1pkeuh' }],\n ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16', key: '4dfq90' }],\n];\n\n/**\n * @component @name CircleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjgiIHkyPSIxMiIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMi4wMSIgeTE9IjE2IiB5Mj0iMTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/circle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleAlert = createLucideIcon('circle-alert', __iconNode);\n\nexport default CircleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm15 15 6 6', key: '1s409w' }],\n ['path', { d: 'm15 9 6-6', key: 'ko1vev' }],\n ['path', { d: 'M21 16v5h-5', key: '1ck2sf' }],\n ['path', { d: 'M21 8V3h-5', key: '1qoq8a' }],\n ['path', { d: 'M3 16v5h5', key: '1t08am' }],\n ['path', { d: 'm3 21 6-6', key: 'wwnumi' }],\n ['path', { d: 'M3 8V3h5', key: '1ln10m' }],\n ['path', { d: 'M9 9 3 3', key: 'v551iv' }],\n];\n\n/**\n * @component @name Expand\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTUgNiA2IiAvPgogIDxwYXRoIGQ9Im0xNSA5IDYtNiIgLz4KICA8cGF0aCBkPSJNMjEgMTZ2NWgtNSIgLz4KICA8cGF0aCBkPSJNMjEgOFYzaC01IiAvPgogIDxwYXRoIGQ9Ik0zIDE2djVoNSIgLz4KICA8cGF0aCBkPSJtMyAyMSA2LTYiIC8+CiAgPHBhdGggZD0iTTMgOFYzaDUiIC8+CiAgPHBhdGggZD0iTTkgOSAzIDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/expand\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Expand = createLucideIcon('expand', __iconNode);\n\nexport default Expand;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528',\n key: '1jaruq',\n },\n ],\n];\n\n/**\n * @component @name Flag\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNCAyMlY0YTEgMSAwIDAgMSAuNC0uOEE2IDYgMCAwIDEgOCAyYzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTBhMSAxIDAgMCAxLS40LjhBNiA2IDAgMCAxIDE2IDE2Yy0zIDAtNS0yLTgtMmE2IDYgMCAwIDAtNCAxLjUyOCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/flag\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Flag = createLucideIcon('flag', __iconNode);\n\nexport default Flag;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '9', cy: '12', r: '1', key: '1vctgf' }],\n ['circle', { cx: '9', cy: '5', r: '1', key: 'hp0tcf' }],\n ['circle', { cx: '9', cy: '19', r: '1', key: 'fkjjf6' }],\n ['circle', { cx: '15', cy: '12', r: '1', key: '1tmaij' }],\n ['circle', { cx: '15', cy: '5', r: '1', key: '19l28e' }],\n ['circle', { cx: '15', cy: '19', r: '1', key: 'f4zoj3' }],\n];\n\n/**\n * @component @name GripVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjUiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjE5IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iMTUiIGN5PSI1IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTkiIHI9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/grip-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst GripVertical = createLucideIcon('grip-vertical', __iconNode);\n\nexport default GripVertical;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2', key: '1m3agn' }],\n ['circle', { cx: '9', cy: '9', r: '2', key: 'af1f0g' }],\n ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21', key: '1xmnt7' }],\n];\n\n/**\n * @component @name Image\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiByeT0iMiIgLz4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iOSIgcj0iMiIgLz4KICA8cGF0aCBkPSJtMjEgMTUtMy4wODYtMy4wODZhMiAyIDAgMCAwLTIuODI4IDBMNiAyMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/image\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Image = createLucideIcon('image', __iconNode);\n\nexport default Image;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n];\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('plus', __iconNode);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n];\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCIgLz4KICA8cGF0aCBkPSJNMjEgM3Y1aC01IiAvPgogIDxwYXRoIGQ9Ik0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgLz4KICA8cGF0aCBkPSJNOCAxNkgzdjUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/refresh-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCw = createLucideIcon('refresh-cw', __iconNode);\n\nexport default RefreshCw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm15 15 6 6m-6-6v4.8m0-4.8h4.8', key: '17vawe' }],\n ['path', { d: 'M9 19.8V15m0 0H4.2M9 15l-6 6', key: 'chjx8e' }],\n ['path', { d: 'M15 4.2V9m0 0h4.8M15 9l6-6', key: 'lav6yq' }],\n ['path', { d: 'M9 4.2V9m0 0H4.2M9 9 3 3', key: '1pxi2q' }],\n];\n\n/**\n * @component @name Shrink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTUgNiA2bS02LTZ2NC44bTAtNC44aDQuOCIgLz4KICA8cGF0aCBkPSJNOSAxOS44VjE1bTAgMEg0LjJNOSAxNWwtNiA2IiAvPgogIDxwYXRoIGQ9Ik0xNSA0LjJWOW0wIDBoNC44TTE1IDlsNi02IiAvPgogIDxwYXRoIGQ9Ik05IDQuMlY5bTAgMEg0LjJNOSA5IDMgMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/shrink\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Shrink = createLucideIcon('shrink', __iconNode);\n\nexport default Shrink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M7 10v12', key: '1qc93n' }],\n [\n 'path',\n {\n d: 'M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z',\n key: 'emmmcr',\n },\n ],\n];\n\n/**\n * @component @name ThumbsUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNyAxMHYxMiIgLz4KICA8cGF0aCBkPSJNMTUgNS44OCAxNCAxMGg1LjgzYTIgMiAwIDAgMSAxLjkyIDIuNTZsLTIuMzMgOEEyIDIgMCAwIDEgMTcuNSAyMkg0YTIgMiAwIDAgMS0yLTJ2LThhMiAyIDAgMCAxIDItMmgyLjc2YTIgMiAwIDAgMCAxLjc5LTEuMTFMMTIgMmEzLjEzIDMuMTMgMCAwIDEgMyAzLjg4WiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/thumbs-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ThumbsUp = createLucideIcon('thumbs-up', __iconNode);\n\nexport default ThumbsUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { FeedbackMenuEvent } from \"@ewjdev/anyclick-core\";\nimport type { AnyclickTheme } from \"./types\";\n\n/**\n * Registered provider instance\n */\nexport interface ProviderInstance {\n /** Unique identifier for this provider instance */\n id: string;\n /** Reference to the provider's container element (null if not scoped) */\n containerRef: React.RefObject<Element | null>;\n /** Whether this provider is scoped to its container */\n scoped: boolean;\n /** The provider's theme configuration */\n theme: AnyclickTheme | null;\n /** Whether this provider is disabled */\n disabled: boolean;\n /** Parent provider ID (if nested) */\n parentId: string | null;\n /** Depth in the provider hierarchy (0 = root) */\n depth: number;\n /** Handler to call when an event occurs in this provider's scope */\n onContextMenu?: (\n event: FeedbackMenuEvent,\n element: Element,\n ) => boolean | void;\n}\n\n/**\n * Provider registry store state\n */\ninterface ProviderStore {\n /** Map of provider ID to provider instance */\n providers: Map<string, ProviderInstance>;\n\n /**\n * Register a new provider\n */\n registerProvider: (provider: ProviderInstance) => void;\n\n /**\n * Unregister a provider\n */\n unregisterProvider: (id: string) => void;\n\n /**\n * Update a provider's configuration\n */\n updateProvider: (id: string, updates: Partial<ProviderInstance>) => void;\n\n /**\n * Find all providers that contain a given element, sorted by depth (nearest first)\n */\n findProvidersForElement: (element: Element) => ProviderInstance[];\n\n /**\n * Find the nearest parent provider for a given container\n */\n findParentProvider: (\n container: Element | null,\n excludeId?: string,\n ) => ProviderInstance | null;\n\n /**\n * Get merged theme for a provider (includes inherited parent themes)\n */\n getMergedTheme: (providerId: string) => AnyclickTheme;\n\n /**\n * Check if any ancestor provider has disabled anyclick\n */\n isDisabledByAncestor: (providerId: string) => boolean;\n\n /**\n * Check if an element is inside a disabled scoped provider's container\n * This is used to prevent the global provider from handling events\n * in areas where a disabled scoped provider should block them\n */\n isElementInDisabledScope: (element: Element) => boolean;\n\n /**\n * Check if an element is inside any scoped provider's container (enabled or not)\n * This is used to prevent the global provider from handling touch events\n * that should be handled by a scoped provider instead\n */\n isElementInAnyScopedProvider: (element: Element) => boolean;\n}\n\n/**\n * Generate a unique ID for a provider instance\n */\nlet providerIdCounter = 0;\nexport function generateProviderId(): string {\n return `anyclick-provider-${++providerIdCounter}`;\n}\n\n/**\n * Zustand store for managing provider instances\n */\nexport const useProviderStore = create<ProviderStore>((set, get) => ({\n providers: new Map(),\n\n registerProvider: (provider) => {\n set((state) => {\n const newProviders = new Map(state.providers);\n newProviders.set(provider.id, provider);\n return { providers: newProviders };\n });\n },\n\n unregisterProvider: (id) => {\n set((state) => {\n const newProviders = new Map(state.providers);\n newProviders.delete(id);\n return { providers: newProviders };\n });\n },\n\n updateProvider: (id, updates) => {\n set((state) => {\n const newProviders = new Map(state.providers);\n const existing = newProviders.get(id);\n if (existing) {\n newProviders.set(id, { ...existing, ...updates });\n }\n return { providers: newProviders };\n });\n },\n\n findProvidersForElement: (element) => {\n const { providers } = get();\n const matching: ProviderInstance[] = [];\n\n for (const provider of providers.values()) {\n // Skip disabled providers\n if (provider.disabled) continue;\n\n const container = provider.containerRef.current;\n\n // For scoped providers, check if element is within container\n if (provider.scoped && container) {\n if (container.contains(element)) {\n matching.push(provider);\n }\n } else if (!provider.scoped) {\n // Non-scoped providers match all elements\n matching.push(provider);\n }\n }\n\n // Sort by depth (nearest/deepest first)\n return matching.sort((a, b) => b.depth - a.depth);\n },\n\n findParentProvider: (container, excludeId) => {\n const { providers } = get();\n\n if (!container) return null;\n\n let nearestParent: ProviderInstance | null = null;\n let nearestDepth = -1;\n\n for (const provider of providers.values()) {\n if (provider.id === excludeId) continue;\n\n const providerContainer = provider.containerRef.current;\n if (!providerContainer) continue;\n\n // Check if this provider's container contains our container\n if (providerContainer.contains(container)) {\n // This is a potential parent - check if it's the nearest one\n if (provider.depth > nearestDepth) {\n nearestParent = provider;\n nearestDepth = provider.depth;\n }\n }\n }\n\n return nearestParent;\n },\n\n getMergedTheme: (providerId) => {\n const { providers } = get();\n const provider = providers.get(providerId);\n\n if (!provider) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[Store:getMergedTheme] Provider not found: ${providerId}`);\n }\n return {};\n }\n\n // Build ancestor chain\n const ancestors: ProviderInstance[] = [];\n let current: ProviderInstance | undefined = provider;\n\n while (current) {\n ancestors.unshift(current);\n current = current.parentId ? providers.get(current.parentId) : undefined;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[Store:getMergedTheme] Provider: ${providerId}`, {\n ancestorCount: ancestors.length,\n ancestorIds: ancestors.map((a) => a.id),\n providerHasTheme: !!provider.theme,\n providerThemeMenuStyle: provider.theme?.menuStyle\n ? Object.keys(provider.theme.menuStyle)\n : [],\n });\n }\n\n // Merge themes from root to current (later themes override earlier)\n const mergedTheme: AnyclickTheme = {};\n\n for (const ancestor of ancestors) {\n if (ancestor.theme) {\n // Deep merge for nested objects\n Object.assign(mergedTheme, ancestor.theme);\n\n // Special handling for highlightConfig and screenshotConfig\n if (ancestor.theme.highlightConfig) {\n mergedTheme.highlightConfig = {\n ...mergedTheme.highlightConfig,\n ...ancestor.theme.highlightConfig,\n colors: {\n ...mergedTheme.highlightConfig?.colors,\n ...ancestor.theme.highlightConfig.colors,\n },\n };\n }\n\n if (ancestor.theme.screenshotConfig) {\n mergedTheme.screenshotConfig = {\n ...mergedTheme.screenshotConfig,\n ...ancestor.theme.screenshotConfig,\n };\n }\n }\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[Store:getMergedTheme] Result for ${providerId}`, {\n hasMenuStyle: !!mergedTheme.menuStyle,\n menuStyleKeys: mergedTheme.menuStyle\n ? Object.keys(mergedTheme.menuStyle)\n : [],\n });\n }\n\n return mergedTheme;\n },\n\n isDisabledByAncestor: (providerId) => {\n const { providers } = get();\n const provider = providers.get(providerId);\n\n if (!provider) return false;\n\n // Check this provider and all ancestors\n let current: ProviderInstance | undefined = provider;\n\n while (current) {\n if (current.disabled || current.theme?.disabled) {\n return true;\n }\n current = current.parentId ? providers.get(current.parentId) : undefined;\n }\n\n return false;\n },\n\n isElementInDisabledScope: (element) => {\n const { providers } = get();\n\n // Check all scoped providers (including disabled ones)\n for (const provider of providers.values()) {\n // Only check scoped providers that are disabled\n if (!provider.scoped) continue;\n if (!provider.disabled && !provider.theme?.disabled) continue;\n\n const container = provider.containerRef.current;\n if (!container) continue;\n\n // If element is inside this disabled scoped provider's container\n if (container.contains(element)) {\n return true;\n }\n }\n\n return false;\n },\n\n isElementInAnyScopedProvider: (element) => {\n const { providers } = get();\n\n // Check all scoped providers (enabled or disabled)\n for (const provider of providers.values()) {\n // Only check scoped providers\n if (!provider.scoped) continue;\n\n const container = provider.containerRef.current;\n if (!container) continue;\n\n // If element is inside this scoped provider's container\n if (container.contains(element)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[Store:isElementInAnyScopedProvider] Element is in scoped provider: ${provider.id}`,\n {\n elementTag: element.tagName,\n providerId: provider.id,\n providerDisabled: provider.disabled,\n },\n );\n }\n return true;\n }\n }\n\n return false;\n },\n}));\n\n/**\n * Dispatch a context menu event to all matching providers (bubble up)\n */\nexport function dispatchContextMenuEvent(\n event: MouseEvent,\n element: Element,\n): void {\n const store = useProviderStore.getState();\n const providers = store.findProvidersForElement(element);\n\n // Convert MouseEvent to FeedbackMenuEvent\n const menuEvent: FeedbackMenuEvent = {\n clientX: event.clientX,\n clientY: event.clientY,\n originalEvent: event,\n isTouch: false,\n };\n\n // Call handlers from nearest to outermost\n for (const provider of providers) {\n // Check if disabled by theme or prop\n if (store.isDisabledByAncestor(provider.id)) {\n continue;\n }\n\n if (provider.onContextMenu) {\n provider.onContextMenu(menuEvent, element);\n // After the first handler processes, we don't need to call others\n // unless we want to implement explicit bubbling control\n break;\n }\n }\n}\n","import type {\n FeedbackAdapter,\n FeedbackPayload,\n FeedbackTriggerEvent,\n FeedbackType,\n ScreenshotConfig,\n ScreenshotData,\n} from \"@ewjdev/anyclick-core\";\nimport type { ReactNode, CSSProperties } from \"react\";\n\n/**\n * Theme configuration for AnyclickProvider\n * Supports nested theming with inheritance\n */\nexport interface AnyclickTheme {\n /** Custom styles for the context menu */\n menuStyle?: CSSProperties;\n /** Custom class name for the context menu */\n menuClassName?: string;\n /** Configuration for element highlighting */\n highlightConfig?: HighlightConfig;\n /** Configuration for screenshot capture */\n screenshotConfig?: ScreenshotConfig;\n /** Whether anyclick functionality is disabled in this theme */\n disabled?: boolean;\n}\n\n/**\n * Menu positioning modes\n * - static: Menu stays at exact click position (may go off-screen)\n * - inView: Menu adjusts position to stay fully visible in viewport\n * - dynamic: User can drag the menu to reposition it\n */\nexport type MenuPositionMode = \"static\" | \"inView\" | \"dynamic\";\n\n/**\n * Configuration for highlight colors\n */\nexport interface HighlightColors {\n /** Color for the target element highlight (default: #3b82f6 - blue) */\n targetColor?: string;\n /** Color for the container element highlight (default: #8b5cf6 - purple) */\n containerColor?: string;\n /** Opacity for the target shadow (default: 0.25) */\n targetShadowOpacity?: number;\n /** Opacity for the container shadow (default: 0.1) */\n containerShadowOpacity?: number;\n}\n\n/**\n * Configuration for highlight behavior\n */\nexport interface HighlightConfig {\n /** Whether to show highlights (default: true) */\n enabled?: boolean;\n /** Custom colors for highlights */\n colors?: HighlightColors;\n /** CSS selectors to identify container elements */\n containerSelectors?: string[];\n /** Minimum number of children for an element to be considered a container (default: 2) */\n minChildrenForContainer?: number;\n}\n\n/**\n * Menu item displayed in the feedback context menu\n */\nexport interface FeedbackMenuItem {\n /** Feedback type for this option (use unique identifier for parent items with children) */\n type: FeedbackType;\n /** Display label */\n label: string;\n /** Optional icon */\n icon?: ReactNode;\n /** Whether to show a comment input for this type */\n showComment?: boolean;\n /** Optional role(s) required to see this menu item */\n requiredRoles?: string[];\n /** Child menu items (creates a submenu) */\n children?: FeedbackMenuItem[];\n}\n\n/**\n * User context for role-based menu filtering\n */\nexport interface FeedbackUserContext {\n /** User's role(s) */\n roles?: string[];\n /** User ID */\n id?: string;\n /** User email */\n email?: string;\n}\n\n/**\n * Filter menu items based on user context\n */\nexport function filterMenuItemsByRole(\n items: FeedbackMenuItem[],\n userContext?: FeedbackUserContext,\n): FeedbackMenuItem[] {\n if (!userContext) {\n // If no user context, only show items without required roles\n return items.filter(\n (item) => !item.requiredRoles || item.requiredRoles.length === 0,\n );\n }\n\n const userRoles = userContext.roles ?? [];\n\n return items.filter((item) => {\n // If no required roles, show to everyone\n if (!item.requiredRoles || item.requiredRoles.length === 0) {\n return true;\n }\n // Check if user has any of the required roles\n return item.requiredRoles.some((role) => userRoles.includes(role));\n });\n}\n\n/**\n * Props for the AnyclickProvider component\n */\nexport interface AnyclickProviderProps {\n /** The adapter to use for submitting feedback */\n adapter: FeedbackAdapter;\n /** Child components */\n children: ReactNode;\n /**\n * Filter function to determine if feedback should be captured for a target element\n * Return true to allow feedback, false to ignore\n * Accepts both MouseEvent (right-click) and TouchEvent (press-and-hold)\n */\n targetFilter?: (event: FeedbackTriggerEvent, target: Element) => boolean;\n /** Custom menu items (defaults to Issue, Feature, Like) */\n menuItems?: FeedbackMenuItem[];\n /** Maximum length for innerText capture */\n maxInnerTextLength?: number;\n /** Maximum length for outerHTML capture */\n maxOuterHTMLLength?: number;\n /** Maximum number of ancestors to capture */\n maxAncestors?: number;\n /** Cooldown in milliseconds between submissions (rate limiting) */\n cooldownMs?: number;\n /** Attributes to strip from outerHTML for privacy */\n stripAttributes?: string[];\n /** Additional metadata to include with every submission */\n metadata?: Record<string, unknown>;\n /** Callback after successful submission */\n onSubmitSuccess?: (payload: FeedbackPayload) => void;\n /** Callback after failed submission */\n onSubmitError?: (error: Error, payload: FeedbackPayload) => void;\n /** Custom styles for the context menu */\n menuStyle?: CSSProperties;\n /** Custom class name for the context menu */\n menuClassName?: string;\n /** Whether the provider is disabled */\n disabled?: boolean;\n /** Configuration for element highlighting */\n highlightConfig?: HighlightConfig;\n /** Configuration for screenshot capture */\n screenshotConfig?: ScreenshotConfig;\n /**\n * Whether to scope this provider to its children only.\n * When true, events will only be captured for elements within this provider's subtree.\n * When false (default), events are captured for the entire document.\n */\n scoped?: boolean;\n /**\n * Theme configuration for this provider.\n * Themes are inherited from parent providers and merged (child overrides parent).\n * Set to null or { disabled: true } to disable anyclick in this subtree.\n */\n theme?: AnyclickTheme | null;\n /** Duration in ms to hold touch before triggering context menu (default: 500) */\n touchHoldDurationMs?: number;\n /** Maximum movement in px before touch hold is cancelled (default: 10) */\n touchMoveThreshold?: number;\n /** Menu positioning mode (default: 'inView') */\n menuPositionMode?: MenuPositionMode;\n}\n\n/**\n * @deprecated Use AnyclickProviderProps instead\n */\nexport type FeedbackProviderProps = AnyclickProviderProps;\n\n/**\n * Context value exposed by AnyclickProvider\n */\nexport interface AnyclickContextValue {\n /** Whether feedback is currently enabled */\n isEnabled: boolean;\n /** Whether a submission is in progress */\n isSubmitting: boolean;\n /** Submit feedback for a specific element */\n submitFeedback: (\n element: Element,\n type: FeedbackType,\n comment?: string,\n ) => Promise<void>;\n /** Open the feedback menu programmatically */\n openMenu: (element: Element, position: { x: number; y: number }) => void;\n /** Close the feedback menu */\n closeMenu: () => void;\n /** The current merged theme (inherited from ancestors) */\n theme: AnyclickTheme;\n /** Whether this provider is scoped */\n scoped: boolean;\n /** The provider's unique ID */\n providerId: string;\n}\n\n/**\n * @deprecated Use AnyclickContextValue instead\n */\nexport type FeedbackContextValue = AnyclickContextValue;\n\n/**\n * Props for the context menu component\n */\nexport interface ContextMenuProps {\n /** Whether the menu is visible */\n visible: boolean;\n /** Position of the menu */\n position: { x: number; y: number };\n /** Target element for feedback */\n targetElement: Element | null;\n /** Container element found by highlight logic */\n containerElement: Element | null;\n /** Menu items to display */\n items: FeedbackMenuItem[];\n /** Callback when an item is selected */\n onSelect: (\n type: FeedbackType,\n comment?: string,\n screenshots?: ScreenshotData,\n ) => void;\n /** Callback when menu is closed */\n onClose: () => void;\n /** Whether submission is in progress */\n isSubmitting: boolean;\n /** Custom styles */\n style?: CSSProperties;\n /** Custom class name */\n className?: string;\n /** Configuration for element highlighting */\n highlightConfig?: HighlightConfig;\n /** Configuration for screenshot capture */\n screenshotConfig?: ScreenshotConfig;\n /** Menu positioning mode (default: 'inView') */\n positionMode?: MenuPositionMode;\n}\n\n/**\n * Props for the screenshot preview component\n */\nexport interface ScreenshotPreviewProps {\n /** Captured screenshot data */\n screenshots: ScreenshotData | null;\n /** Whether screenshots are loading */\n isLoading: boolean;\n /** Callback when user confirms screenshots */\n onConfirm: (screenshots: ScreenshotData) => void;\n /** Callback when user cancels */\n onCancel: () => void;\n /** Callback when user wants to retake screenshots */\n onRetake: () => void;\n /** Whether submission is in progress */\n isSubmitting: boolean;\n}\n"],"mappings":"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","names":["import_react","import_anyclick_core","import_react","import_anyclick_core","import_react","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","import_jsx_runtime","import_jsx_runtime","mergedTheme","import_anyclick_core"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/AnyclickProvider.tsx","../src/context.ts","../src/ContextMenu.tsx","../src/styles.ts","../src/highlight.ts","../src/ScreenshotPreview.tsx","../../../node_modules/shared/src/utils.ts","../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../node_modules/lucide-react/src/Icon.ts","../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../node_modules/lucide-react/src/icons/accessibility.ts","../../../node_modules/lucide-react/src/icons/arrow-down.ts","../../../node_modules/lucide-react/src/icons/box.ts","../../../node_modules/lucide-react/src/icons/camera.ts","../../../node_modules/lucide-react/src/icons/check.ts","../../../node_modules/lucide-react/src/icons/chevron-down.ts","../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../node_modules/lucide-react/src/icons/circle-alert.ts","../../../node_modules/lucide-react/src/icons/code.ts","../../../node_modules/lucide-react/src/icons/copy.ts","../../../node_modules/lucide-react/src/icons/expand.ts","../../../node_modules/lucide-react/src/icons/external-link.ts","../../../node_modules/lucide-react/src/icons/file-code.ts","../../../node_modules/lucide-react/src/icons/flag.ts","../../../node_modules/lucide-react/src/icons/grip-vertical.ts","../../../node_modules/lucide-react/src/icons/history.ts","../../../node_modules/lucide-react/src/icons/image.ts","../../../node_modules/lucide-react/src/icons/layers.ts","../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../node_modules/lucide-react/src/icons/maximize-2.ts","../../../node_modules/lucide-react/src/icons/palette.ts","../../../node_modules/lucide-react/src/icons/panel-bottom.ts","../../../node_modules/lucide-react/src/icons/panel-left.ts","../../../node_modules/lucide-react/src/icons/panel-right.ts","../../../node_modules/lucide-react/src/icons/panel-top.ts","../../../node_modules/lucide-react/src/icons/panels-top-left.ts","../../../node_modules/lucide-react/src/icons/plus.ts","../../../node_modules/lucide-react/src/icons/refresh-cw.ts","../../../node_modules/lucide-react/src/icons/rotate-ccw.ts","../../../node_modules/lucide-react/src/icons/shrink.ts","../../../node_modules/lucide-react/src/icons/thumbs-up.ts","../../../node_modules/lucide-react/src/icons/trash-2.ts","../../../node_modules/lucide-react/src/icons/type.ts","../../../node_modules/lucide-react/src/icons/x.ts","../src/store.ts","../src/FunModeBridge.tsx","../src/InspectDialog/InspectDialogManager.tsx","../src/InspectDialog/InspectDialog.tsx","../src/ide.ts","../src/types.ts","../src/InspectDialog/inspectStore.ts","../src/InspectDialog/ElementHierarchyNav.tsx","../src/CopyButton.tsx","../src/useCompactMode.ts","../src/presets.ts","../src/AnyclickLogo.tsx","../src/InspectDialog/ModificationIndicator.tsx"],"sourcesContent":["// Components\n\"use client\";\n\n// New exports\nexport { AnyclickProvider } from \"./AnyclickProvider\";\nexport { FunModeBridge } from \"./FunModeBridge\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport { ScreenshotPreview } from \"./ScreenshotPreview\";\n\n// Deprecated exports (for backward compatibility)\nexport { FeedbackProvider } from \"./AnyclickProvider\";\n\n// Context and hooks (new)\nexport { AnyclickContext, useAnyclick } from \"./context\";\n\n// Context and hooks (deprecated, for backward compatibility)\nexport { FeedbackContext, useFeedback } from \"./context\";\n\n// Store exports (for advanced use cases)\nexport {\n useProviderStore,\n generateProviderId,\n dispatchContextMenuEvent,\n type ProviderInstance,\n} from \"./store\";\n\n// Types (new)\nexport type {\n AnyclickProviderProps,\n AnyclickContextValue,\n AnyclickTheme,\n ContextMenuItem,\n FunModeThemeConfig,\n ContextMenuProps,\n HighlightColors,\n HighlightConfig,\n AnyclickUserContext,\n ScreenshotPreviewProps,\n MenuPositionMode,\n FeedbackMenuBadge,\n FeedbackMenuStatus,\n} from \"./types\";\n\n// Presets\nexport {\n createPresetMenu,\n listPresets,\n presetDefaults,\n type PresetRole,\n type PresetConfig,\n type CreatePresetMenuOptions,\n} from \"./presets\";\n\n// Utilities\nexport { filterMenuItemsByRole } from \"./types\";\n\n// Re-export core types for convenience\nexport type {\n AnyclickType,\n AnyclickPayload,\n AnyclickAdapter,\n ElementContext,\n PageContext,\n ScreenshotData,\n ScreenshotConfig,\n ScreenshotCapture,\n ScreenshotCaptureMode,\n} from \"@ewjdev/anyclick-core\";\n\n// Re-export screenshot utilities from core\nexport {\n captureAllScreenshots,\n captureScreenshot,\n isScreenshotSupported,\n formatBytes,\n estimateTotalSize,\n DEFAULT_SCREENSHOT_CONFIG,\n DEFAULT_SENSITIVE_SELECTORS,\n} from \"@ewjdev/anyclick-core\";\n\n// Styles (for customization)\nexport { menuStyles, darkMenuStyles, menuCSSVariables } from \"./styles\";\n\n// Highlight utilities (for customization)\nexport {\n findContainerParent,\n highlightTarget,\n highlightContainer,\n clearHighlights,\n applyHighlights,\n defaultHighlightColors,\n defaultContainerSelectors,\n} from \"./highlight\";\n\n// Inspect Dialog\nexport {\n InspectDialog,\n type InspectDialogProps,\n type PinnedPosition,\n type CompactModeConfig,\n DEFAULT_COMPACT_CONFIG,\n} from \"./InspectDialog/InspectDialog\";\nexport {\n InspectDialogManager,\n openInspectDialog,\n INSPECT_DIALOG_EVENT,\n type InspectDialogManagerProps,\n type InspectDialogEventDetail,\n} from \"./InspectDialog/InspectDialogManager\";\n\n// Inspect Store (for modification tracking)\nexport {\n useInspectStore,\n useHasHydrated,\n waitForHydration,\n generateElementId,\n getElementDescription,\n type ElementModification,\n type DeletedElement,\n} from \"./InspectDialog/inspectStore\";\n\n// Anyclick Logo\nexport { AnyclickLogo, type AnyclickLogoProps } from \"./AnyclickLogo\";\n\n// Modification Indicator\nexport {\n ModificationIndicator,\n type ModificationIndicatorProps,\n} from \"./InspectDialog/ModificationIndicator\";\n\n// IDE Integration\nexport {\n openInIDE,\n buildIDEUrl,\n isIDEProtocolSupported,\n detectPreferredIDE,\n getSourceLocationFromElement,\n findSourceLocationInAncestors,\n createIDEOpener,\n formatSourceLocation,\n type IDEProtocol,\n type IDEConfig,\n type SourceLocation,\n} from \"./ide\";\n\n// Re-export inspect utilities from core\nexport {\n getComputedStyles,\n getAccessibilityInfo,\n getBoxModelInfo,\n getAttributes,\n getElementInspectInfo,\n formatStylesAsCSS,\n formatBoxModel,\n CURATED_STYLE_PROPERTIES,\n ALL_CURATED_PROPERTIES,\n} from \"@ewjdev/anyclick-core\";\n\nexport type {\n ComputedStylesInfo,\n AccessibilityInfo,\n BoxModelInfo,\n ElementInspectInfo,\n} from \"@ewjdev/anyclick-core\";\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createAnyclickClient } from \"@ewjdev/anyclick-core\";\nimport type {\n AnyclickClient,\n AnyclickMenuEvent,\n AnyclickType,\n ScreenshotData,\n} from \"@ewjdev/anyclick-core\";\nimport { AnyclickContext, useAnyclick } from \"./context\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { findContainerParent } from \"./highlight\";\nimport { useProviderStore, type ProviderInstance } from \"./store\";\nimport type {\n AnyclickContextValue,\n AnyclickProviderProps,\n AnyclickTheme,\n ContextMenuItem,\n} from \"./types\";\n\n/**\n * Default menu items\n */\nconst defaultMenuItems: ContextMenuItem[] = [\n { type: \"issue\", label: \"Report an issue\", showComment: true },\n { type: \"feature\", label: \"Request a feature\", showComment: true },\n { type: \"like\", label: \"I like this!\", showComment: false },\n];\n\n/**\n * AnyclickProvider component - wraps your app to enable feedback capture\n * Supports scoped providers and nested theming\n */\nexport function AnyclickProvider({\n adapter,\n children,\n targetFilter,\n menuItems = defaultMenuItems,\n maxInnerTextLength,\n maxOuterHTMLLength,\n maxAncestors,\n cooldownMs,\n stripAttributes,\n metadata,\n onSubmitSuccess,\n onSubmitError,\n menuStyle,\n menuClassName,\n disabled = false,\n highlightConfig,\n header,\n screenshotConfig,\n scoped = false,\n theme,\n touchHoldDurationMs,\n touchMoveThreshold,\n}: AnyclickProviderProps) {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [menuVisible, setMenuVisible] = useState(false);\n const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });\n const [targetElement, setTargetElement] = useState<Element | null>(null);\n const [containerElement, setContainerElement] = useState<Element | null>(\n null,\n );\n\n // Generate a stable ID for this provider instance using React's useId\n // This ensures consistent IDs between server and client rendering\n const providerId = useId();\n\n // Ref to the container element (for scoped providers)\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Track when container is ready for scoped providers\n const [containerReady, setContainerReady] = useState(!scoped);\n\n // Client reference\n const clientRef = useRef<AnyclickClient | null>(null);\n\n // Callback ref to detect when container element is mounted\n const setContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[AnyclickProvider:${providerId}] Container ref callback`, {\n scoped,\n nodeReceived: !!node,\n hadPreviousNode: !!containerRef.current,\n clientExists: !!clientRef.current,\n });\n }\n\n containerRef.current = node;\n if (scoped && node) {\n setContainerReady(true);\n // If client already exists, update its container\n if (clientRef.current) {\n clientRef.current.setContainer(node);\n }\n }\n },\n [scoped, providerId],\n );\n\n // Access parent context (if nested)\n let parentContext: AnyclickContextValue | null = null;\n try {\n // This will throw if there's no parent provider\n parentContext = useAnyclick();\n } catch {\n // No parent provider - this is a root provider\n parentContext = null;\n }\n\n // Store access\n const {\n registerProvider,\n unregisterProvider,\n updateProvider,\n getMergedTheme,\n isDisabledByAncestor,\n findParentProvider,\n isElementInDisabledScope,\n isElementInAnyScopedProvider,\n } = useProviderStore();\n\n // Determine parent ID\n const parentId = parentContext?.providerId ?? null;\n\n // Calculate depth\n const depth = parentContext ? (parentContext.scoped ? 1 : 0) : 0;\n const actualDepth = useMemo(() => {\n if (!parentContext) return 0;\n // Find actual depth by traversing store\n let d = 0;\n let currentId = parentId;\n const providers = useProviderStore.getState().providers;\n while (currentId) {\n d++;\n const parent = providers.get(currentId);\n currentId = parent?.parentId ?? null;\n }\n return d;\n }, [parentId]);\n\n // Determine if disabled by theme\n const isDisabledByTheme = theme === null || theme?.disabled === true;\n const effectiveDisabled = disabled || isDisabledByTheme;\n\n // Build the theme for this provider\n const localTheme: AnyclickTheme = useMemo(() => {\n // If theme is null, treat as disabled\n if (theme === null) {\n return { disabled: true };\n }\n\n // Merge explicit theme props with theme object\n const explicitThemeProps: AnyclickTheme = {};\n if (menuStyle) explicitThemeProps.menuStyle = menuStyle;\n if (menuClassName) explicitThemeProps.menuClassName = menuClassName;\n if (highlightConfig) explicitThemeProps.highlightConfig = highlightConfig;\n if (screenshotConfig)\n explicitThemeProps.screenshotConfig = screenshotConfig;\n\n return {\n ...explicitThemeProps,\n ...theme,\n };\n }, [theme, menuStyle, menuClassName, highlightConfig, screenshotConfig]);\n\n // Context menu handler\n // Returns false to allow native context menu (for disabled scopes)\n // Returns true (or void) to show custom menu\n const handleContextMenu = useCallback(\n (event: AnyclickMenuEvent, element: Element): boolean => {\n // For non-scoped (global) providers, check if the element is inside\n // a disabled scoped provider's container - if so, allow native menu\n if (!scoped && isElementInDisabledScope(element)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Allowing native menu - element is in disabled scope`,\n {\n targetTag: element.tagName,\n },\n );\n }\n return false; // Allow native context menu\n }\n\n // For non-scoped (global) providers on TOUCH events, check if the element\n // is inside any scoped provider's container - if so, defer to the scoped\n // provider to handle the event with its own theme\n // NOTE: For contextmenu (right-click) events, this is handled by capture\n // phase and stopPropagation in the client. But touch events don't have\n // the same propagation model, so we need to check here.\n if (!scoped && event.isTouch && isElementInAnyScopedProvider(element)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Deferring to scoped provider for touch event`,\n {\n targetTag: element.tagName,\n },\n );\n }\n return false; // Let the scoped provider handle it\n }\n\n const mergedTheme = getMergedTheme(providerId);\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] handleContextMenu called`,\n {\n scoped,\n targetTag: element.tagName,\n mergedThemeColors: mergedTheme.highlightConfig?.colors,\n position: { x: event.clientX, y: event.clientY },\n isTouch: event.isTouch,\n },\n );\n }\n\n setTargetElement(element);\n // Get merged theme for highlight config\n const container = findContainerParent(\n element,\n mergedTheme.highlightConfig ?? highlightConfig,\n );\n setContainerElement(container);\n setMenuPosition({ x: event.clientX, y: event.clientY });\n setMenuVisible(true);\n\n return true; // Handled - prevent native menu\n },\n [\n providerId,\n getMergedTheme,\n highlightConfig,\n scoped,\n isElementInDisabledScope,\n isElementInAnyScopedProvider,\n ],\n );\n\n // Register this provider in the store\n useLayoutEffect(() => {\n const providerInstance: ProviderInstance = {\n id: providerId,\n containerRef: containerRef as React.RefObject<Element | null>,\n scoped,\n theme: localTheme,\n disabled: effectiveDisabled,\n parentId,\n depth: actualDepth,\n onContextMenu: handleContextMenu,\n };\n\n registerProvider(providerInstance);\n\n return () => {\n unregisterProvider(providerId);\n };\n }, [\n providerId,\n scoped,\n localTheme,\n effectiveDisabled,\n parentId,\n actualDepth,\n handleContextMenu,\n registerProvider,\n unregisterProvider,\n ]);\n\n // Update provider when config changes\n useEffect(() => {\n updateProvider(providerId, {\n theme: localTheme,\n disabled: effectiveDisabled,\n onContextMenu: handleContextMenu,\n });\n }, [\n providerId,\n localTheme,\n effectiveDisabled,\n handleContextMenu,\n updateProvider,\n ]);\n\n // Create/update the feedback client\n // Wait for container to be ready for scoped providers\n useEffect(() => {\n // Check if disabled by any ancestor\n if (isDisabledByAncestor(providerId)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Skipping - disabled by ancestor`,\n );\n }\n return;\n }\n\n // For scoped providers, wait until container is ready\n if (scoped && !containerReady) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[AnyclickProvider:${providerId}] Waiting for container to be ready`,\n {\n scoped,\n containerReady,\n },\n );\n }\n return;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[AnyclickProvider:${providerId}] Creating client`, {\n scoped,\n containerReady,\n hasContainer: !!containerRef.current,\n effectiveDisabled,\n localThemeColors: localTheme.highlightConfig?.colors,\n });\n }\n\n const client = createAnyclickClient({\n adapter,\n targetFilter,\n maxInnerTextLength,\n maxOuterHTMLLength,\n maxAncestors,\n cooldownMs,\n stripAttributes,\n // For scoped providers, pass the container\n container: scoped ? containerRef.current : null,\n touchHoldDurationMs,\n touchMoveThreshold,\n });\n\n // Set up callbacks\n client.onSubmitSuccess = onSubmitSuccess;\n client.onSubmitError = onSubmitError;\n\n // Set up context menu handler\n client.onContextMenu = handleContextMenu;\n\n clientRef.current = client;\n\n // Attach event listeners if not disabled\n if (!effectiveDisabled) {\n client.attach();\n }\n\n return () => {\n client.detach();\n };\n }, [\n adapter,\n targetFilter,\n maxInnerTextLength,\n maxOuterHTMLLength,\n maxAncestors,\n cooldownMs,\n stripAttributes,\n onSubmitSuccess,\n onSubmitError,\n effectiveDisabled,\n scoped,\n containerReady,\n providerId,\n isDisabledByAncestor,\n handleContextMenu,\n touchHoldDurationMs,\n touchMoveThreshold,\n ]);\n\n // Submit feedback with optional screenshots\n const submitAnyclick = useCallback(\n async (\n element: Element,\n type: AnyclickType,\n comment?: string,\n screenshots?: ScreenshotData,\n ) => {\n const client = clientRef.current;\n if (!client) return;\n\n setIsSubmitting(true);\n try {\n await client.submitAnyclick(element, type, {\n comment,\n metadata,\n screenshots,\n });\n } finally {\n setIsSubmitting(false);\n setMenuVisible(false);\n setTargetElement(null);\n setContainerElement(null);\n }\n },\n [metadata],\n );\n\n // Open menu programmatically\n const openMenu = useCallback(\n (element: Element, position: { x: number; y: number }) => {\n setTargetElement(element);\n const mergedTheme = getMergedTheme(providerId);\n const container = findContainerParent(\n element,\n mergedTheme.highlightConfig ?? highlightConfig,\n );\n setContainerElement(container);\n setMenuPosition(position);\n setMenuVisible(true);\n },\n [providerId, getMergedTheme, highlightConfig],\n );\n\n // Close menu\n const closeMenu = useCallback(() => {\n setMenuVisible(false);\n setTargetElement(null);\n setContainerElement(null);\n }, []);\n\n // Handle menu selection\n const handleMenuSelect = useCallback(\n (type: AnyclickType, comment?: string, screenshots?: ScreenshotData) => {\n if (targetElement) {\n submitAnyclick(targetElement, type, comment, screenshots);\n }\n },\n [targetElement, submitAnyclick],\n );\n\n // Get merged theme for this provider\n // We use the store's getMergedTheme for inherited values (like highlightConfig),\n // but for this provider's own theme values, we use localTheme directly to avoid\n // timing issues with useMemo running before the provider is registered.\n const inheritedTheme = getMergedTheme(providerId);\n\n // Merge: inherited theme first, then local theme overrides\n const mergedTheme: AnyclickTheme = useMemo(\n () => ({\n ...inheritedTheme,\n ...localTheme,\n // Deep merge for nested configs\n highlightConfig: {\n ...inheritedTheme.highlightConfig,\n ...localTheme.highlightConfig,\n colors: {\n ...inheritedTheme.highlightConfig?.colors,\n ...localTheme.highlightConfig?.colors,\n },\n },\n screenshotConfig: {\n ...inheritedTheme.screenshotConfig,\n ...localTheme.screenshotConfig,\n },\n }),\n [inheritedTheme, localTheme],\n );\n\n // Apply merged theme styles\n const effectiveMenuStyle = mergedTheme.menuStyle ?? menuStyle;\n const effectiveMenuClassName = mergedTheme.menuClassName ?? menuClassName;\n\n // Debug: Log theme flow\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[AnyclickProvider:${providerId}] Theme Debug`, {\n scoped,\n localThemeHasMenuStyle: !!localTheme.menuStyle,\n localThemeMenuStyleKeys: localTheme.menuStyle\n ? Object.keys(localTheme.menuStyle)\n : [],\n mergedThemeHasMenuStyle: !!mergedTheme.menuStyle,\n mergedThemeMenuStyleKeys: mergedTheme.menuStyle\n ? Object.keys(mergedTheme.menuStyle)\n : [],\n effectiveMenuStyleExists: !!effectiveMenuStyle,\n effectiveMenuStyleKeys: effectiveMenuStyle\n ? Object.keys(effectiveMenuStyle)\n : [],\n menuStyleProp: !!menuStyle,\n });\n }\n const effectiveHighlightConfig =\n mergedTheme.highlightConfig ?? highlightConfig;\n const effectiveScreenshotConfig =\n mergedTheme.screenshotConfig ?? screenshotConfig;\n\n // Context value\n const contextValue: AnyclickContextValue = useMemo(\n () => ({\n isEnabled: !effectiveDisabled && !isDisabledByAncestor(providerId),\n isSubmitting,\n submitAnyclick,\n openMenu,\n closeMenu,\n theme: mergedTheme,\n scoped,\n providerId,\n }),\n [\n effectiveDisabled,\n providerId,\n isDisabledByAncestor,\n isSubmitting,\n submitAnyclick,\n openMenu,\n closeMenu,\n mergedTheme,\n scoped,\n ],\n );\n\n // For scoped providers, wrap children in a container div\n // Add data-anyclick-provider attribute to mark the boundary for hierarchy navigation\n const content = scoped ? (\n <div\n ref={setContainerRef}\n style={{ display: \"contents\" }}\n data-anyclick-provider={providerId}\n >\n {children}\n </div>\n ) : (\n children\n );\n\n return (\n <AnyclickContext.Provider value={contextValue}>\n {content}\n <ContextMenu\n visible={menuVisible && !effectiveDisabled}\n position={menuPosition}\n targetElement={targetElement}\n containerElement={containerElement}\n items={menuItems}\n onSelect={handleMenuSelect}\n onClose={closeMenu}\n isSubmitting={isSubmitting}\n style={effectiveMenuStyle}\n className={effectiveMenuClassName}\n highlightConfig={effectiveHighlightConfig}\n screenshotConfig={effectiveScreenshotConfig}\n header={header}\n />\n </AnyclickContext.Provider>\n );\n}\n\n/**\n * @deprecated Use AnyclickProvider instead\n */\nexport const FeedbackProvider = AnyclickProvider;\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { AnyclickContextValue } from \"./types\";\n\n/**\n * React context for anyclick functionality\n */\nexport const AnyclickContext = createContext<AnyclickContextValue | null>(null);\n\n/**\n * @deprecated Use AnyclickContext instead\n */\nexport const FeedbackContext = AnyclickContext;\n\n/**\n * Hook to access anyclick context\n * @throws Error if used outside of AnyclickProvider\n */\nexport function useAnyclick(): AnyclickContextValue {\n const context = useContext(AnyclickContext);\n if (!context) {\n throw new Error(\"useAnyclick must be used within an AnyclickProvider\");\n }\n return context;\n}\n\n/**\n * @deprecated Use useAnyclick instead\n */\nexport function useFeedback(): AnyclickContextValue {\n const context = useContext(AnyclickContext);\n if (!context) {\n throw new Error(\"useFeedback must be used within a FeedbackProvider\");\n }\n return context;\n}\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport type { ContextMenuItem, ContextMenuProps } from \"./types\";\nimport type { AnyclickType, ScreenshotData } from \"@ewjdev/anyclick-core\";\nimport {\n captureAllScreenshots,\n isScreenshotSupported,\n DEFAULT_SCREENSHOT_CONFIG,\n} from \"@ewjdev/anyclick-core\";\nimport { menuStyles } from \"./styles\";\nimport { applyHighlights, clearHighlights } from \"./highlight\";\nimport { ScreenshotPreview } from \"./ScreenshotPreview\";\nimport {\n FlagIcon,\n PlusIcon,\n ThumbsUpIcon,\n ChevronRightIcon,\n ChevronLeftIcon,\n CameraIcon,\n GripVertical,\n} from \"lucide-react\";\n\n/** Padding from viewport edges in pixels */\nconst VIEWPORT_PADDING = 10;\n\nconst screenshotIndicatorStyle: React.CSSProperties = {\n display: \"flex\",\n marginLeft: \"4px\",\n opacity: 0.7,\n justifyContent: \"flex-end\",\n flex: 1,\n};\n\n/**\n * Default icons for feedback types\n */\nconst defaultIcons: Record<string, React.ReactNode> = {\n issue: <FlagIcon className=\"w-4 h-4\" />,\n feature: <PlusIcon className=\"w-4 h-4\" />,\n like: <ThumbsUpIcon className=\"w-4 h-4\" />,\n};\n\nconst DefaultHeader = ({\n styles,\n className,\n title = \"Send Feedback\",\n children,\n}: {\n styles?: React.CSSProperties;\n className?: string;\n title?: string;\n children?: React.ReactNode;\n}) => {\n return (\n <div style={styles} className={className}>\n <span>{title}</span>\n {children}\n </div>\n );\n};\n\n/**\n * Menu item component with touch-friendly sizing\n */\nfunction MenuItem({\n item,\n onClick,\n disabled,\n hasChildren,\n}: {\n item: ContextMenuItem;\n onClick: () => any;\n disabled: boolean;\n hasChildren?: boolean;\n}) {\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n const isComingSoon = item.status === \"comingSoon\";\n const badgeLabel = item.badge?.label ?? (isComingSoon ? \"Coming soon\" : null);\n const badgeTone = item.badge?.tone ?? (isComingSoon ? \"neutral\" : \"neutral\");\n\n const badgeStyle: React.CSSProperties | undefined = badgeLabel\n ? {\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"2px 6px\",\n borderRadius: \"9999px\",\n fontSize: \"10px\",\n lineHeight: 1.2,\n backgroundColor:\n badgeTone === \"warning\"\n ? \"rgba(251, 191, 36, 0.15)\"\n : badgeTone === \"info\"\n ? \"rgba(59, 130, 246, 0.15)\"\n : badgeTone === \"success\"\n ? \"rgba(34, 197, 94, 0.15)\"\n : \"rgba(148, 163, 184, 0.15)\",\n color:\n badgeTone === \"warning\"\n ? \"#fbbf24\"\n : badgeTone === \"info\"\n ? \"#60a5fa\"\n : badgeTone === \"success\"\n ? \"#4ade80\"\n : \"#cbd5e1\",\n border:\n badgeTone === \"warning\"\n ? \"1px solid rgba(251, 191, 36, 0.3)\"\n : badgeTone === \"info\"\n ? \"1px solid rgba(59, 130, 246, 0.3)\"\n : badgeTone === \"success\"\n ? \"1px solid rgba(34, 197, 94, 0.3)\"\n : \"1px solid rgba(148, 163, 184, 0.3)\",\n }\n : undefined;\n\n const iconNode = item.icon ?? defaultIcons[item.type];\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled || isComingSoon}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onTouchStart={() => setIsPressed(true)}\n onTouchEnd={() => setIsPressed(false)}\n onTouchCancel={() => setIsPressed(false)}\n style={{\n // Slightly leaner height to match Chrome menu sizing\n minHeight: \"38px\",\n ...menuStyles.item,\n // Apply hover/pressed state for both mouse and touch\n ...(isHovered || isPressed ? menuStyles.itemHover : {}),\n ...(disabled ? { opacity: 0.5, cursor: \"not-allowed\" } : {}),\n // Prevent text selection on touch\n WebkitUserSelect: \"none\",\n userSelect: \"none\",\n // Prevent touch callout on iOS\n WebkitTouchCallout: \"none\",\n }}\n >\n {iconNode ? <span style={menuStyles.itemIcon}>{iconNode}</span> : null}\n <span\n style={{\n flex: 1,\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n {item.label}\n {badgeLabel && <span style={badgeStyle}>{badgeLabel}</span>}\n </span>\n {hasChildren && (\n <ChevronRightIcon\n className=\"w-4 h-4\"\n style={{ marginLeft: \"auto\", opacity: 0.5 }}\n />\n )}\n </button>\n );\n}\n\n/**\n * Back button for submenu navigation with touch-friendly sizing\n */\nfunction BackButton({ onClick }: { onClick: () => void }) {\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onTouchStart={() => setIsPressed(true)}\n onTouchEnd={() => setIsPressed(false)}\n onTouchCancel={() => setIsPressed(false)}\n style={{\n ...menuStyles.item,\n ...(isHovered || isPressed ? menuStyles.itemHover : {}),\n borderBottom: \"1px solid #e5e5e5\",\n marginBottom: \"4px\",\n // Ensure minimum touch target size\n minHeight: \"44px\",\n // Prevent text selection on touch\n WebkitUserSelect: \"none\",\n userSelect: \"none\",\n WebkitTouchCallout: \"none\",\n }}\n >\n <ChevronLeftIcon className=\"w-4 h-4\" style={{ opacity: 0.5 }} />\n <span style={{ opacity: 0.7 }}>Back</span>\n </button>\n );\n}\n\n/**\n * Comment form component\n */\nfunction CommentForm({\n onSubmit,\n onCancel,\n isSubmitting,\n}: {\n onSubmit: (comment: string) => void;\n onCancel: () => void;\n isSubmitting: boolean;\n}) {\n const [comment, setComment] = useState(\"\");\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n const handleSubmit = () => {\n onSubmit(comment);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n handleSubmit();\n } else if (e.key === \"Escape\") {\n onCancel();\n }\n };\n\n return (\n <div style={menuStyles.commentSection}>\n <textarea\n ref={inputRef}\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Add a comment (optional)...\"\n style={menuStyles.commentInput}\n disabled={isSubmitting}\n />\n <div style={menuStyles.buttonRow}>\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={isSubmitting}\n style={{ ...menuStyles.button, ...menuStyles.cancelButton }}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={isSubmitting}\n style={{\n ...menuStyles.button,\n ...menuStyles.submitButton,\n ...(isSubmitting ? menuStyles.submitButtonDisabled : {}),\n }}\n >\n {isSubmitting ? \"Sending...\" : \"Send\"}\n </button>\n </div>\n </div>\n );\n}\n\n/** View states for the context menu */\ntype MenuView = \"menu\" | \"comment\" | \"screenshot-preview\";\n\n/**\n * Calculate adjusted position to keep menu in viewport\n */\nfunction calculateInViewPosition(\n requestedX: number,\n requestedY: number,\n menuWidth: number,\n menuHeight: number,\n): { x: number; y: number } {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n let x = requestedX;\n let y = requestedY;\n\n // Adjust X if menu would go off the right edge\n if (x + menuWidth > viewportWidth - VIEWPORT_PADDING) {\n x = viewportWidth - menuWidth - VIEWPORT_PADDING;\n }\n // Ensure X doesn't go off the left edge\n if (x < VIEWPORT_PADDING) {\n x = VIEWPORT_PADDING;\n }\n\n // Adjust Y if menu would go off the bottom edge\n if (y + menuHeight > viewportHeight - VIEWPORT_PADDING) {\n y = viewportHeight - menuHeight - VIEWPORT_PADDING;\n }\n // Ensure Y doesn't go off the top edge\n if (y < VIEWPORT_PADDING) {\n y = VIEWPORT_PADDING;\n }\n\n return { x, y };\n}\n\n/**\n * Context menu component for selecting feedback type\n */\nexport function ContextMenu({\n visible,\n position,\n targetElement,\n containerElement,\n items,\n onSelect,\n onClose,\n isSubmitting,\n style,\n className,\n highlightConfig,\n screenshotConfig,\n positionMode = \"inView\",\n header,\n footer,\n}: ContextMenuProps) {\n const [selectedType, setSelectedType] = useState<AnyclickType | null>(null);\n const [currentView, setCurrentView] = useState<MenuView>(\"menu\");\n const [pendingComment, setPendingComment] = useState<string | undefined>();\n const [submenuStack, setSubmenuStack] = useState<ContextMenuItem[][]>([]);\n const [screenshots, setScreenshots] = useState<ScreenshotData | null>(null);\n const [isCapturing, setIsCapturing] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Position state for different modes\n const [adjustedPosition, setAdjustedPosition] = useState<{\n x: number;\n y: number;\n }>(position);\n const [isDragging, setIsDragging] = useState(false);\n const [dragOffset, setDragOffset] = useState<{ x: number; y: number }>({\n x: 0,\n y: 0,\n });\n const dragStartRef = useRef<{ x: number; y: number } | null>(null);\n\n // Merge screenshot config with defaults\n const mergedScreenshotConfig = {\n ...DEFAULT_SCREENSHOT_CONFIG,\n ...screenshotConfig,\n };\n\n const showPreview =\n mergedScreenshotConfig.showPreview && isScreenshotSupported();\n\n // Current items to display (either root items or submenu items)\n const currentItems =\n submenuStack.length > 0 ? submenuStack[submenuStack.length - 1] : items;\n\n // Capture screenshots\n const captureScreenshots = useCallback(async () => {\n if (!targetElement || !showPreview) return;\n\n setIsCapturing(true);\n try {\n const captured = await captureAllScreenshots(\n targetElement,\n containerElement,\n mergedScreenshotConfig,\n );\n setScreenshots(captured);\n } catch (error) {\n console.error(\"Failed to capture screenshots:\", error);\n setScreenshots(null);\n } finally {\n setIsCapturing(false);\n }\n }, [targetElement, containerElement, mergedScreenshotConfig, showPreview]);\n\n // Reset state when menu closes\n useEffect(() => {\n if (!visible) {\n setSelectedType(null);\n setCurrentView(\"menu\");\n setPendingComment(undefined);\n setSubmenuStack([]);\n setScreenshots(null);\n setIsCapturing(false);\n setIsDragging(false);\n setDragOffset({ x: 0, y: 0 });\n dragStartRef.current = null;\n }\n }, [visible]);\n\n // Apply highlights to target element and container when menu opens\n useEffect(() => {\n if (visible && targetElement) {\n // Clear any existing highlights first to ensure clean state\n clearHighlights();\n // Apply highlights to the new target element\n applyHighlights(targetElement, highlightConfig);\n } else {\n // Clear highlights when menu is not visible\n clearHighlights();\n }\n\n return () => {\n clearHighlights();\n };\n }, [visible, targetElement, highlightConfig]);\n\n // Close menu when clicking outside of it\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (!menuRef.current) return;\n\n const target = event.target as Node;\n // Don't close if clicking on the drag handle\n if ((target as HTMLElement).closest?.(\"[data-drag-handle]\")) {\n return;\n }\n if (!menuRef.current.contains(target)) {\n onClose();\n }\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n };\n }, [visible, onClose]);\n\n // Reset adjusted position when menu opens at new position\n useEffect(() => {\n if (visible) {\n setAdjustedPosition(position);\n setDragOffset({ x: 0, y: 0 });\n }\n }, [visible, position.x, position.y]);\n\n // Calculate and apply position based on mode\n useEffect(() => {\n if (!visible || !menuRef.current) return;\n\n const updatePosition = () => {\n const menuElement = menuRef.current;\n if (!menuElement) return;\n\n const rect = menuElement.getBoundingClientRect();\n const baseX = position.x + dragOffset.x;\n const baseY = position.y + dragOffset.y;\n\n if (positionMode === \"static\") {\n // Static mode: use position directly (may go off-screen)\n setAdjustedPosition({ x: baseX, y: baseY });\n } else if (positionMode === \"inView\" || positionMode === \"dynamic\") {\n // inView and dynamic: keep menu in viewport\n const adjusted = calculateInViewPosition(\n baseX,\n baseY,\n rect.width,\n rect.height,\n );\n setAdjustedPosition(adjusted);\n }\n };\n\n // Initial calculation after render\n requestAnimationFrame(updatePosition);\n\n // Recalculate on resize\n window.addEventListener(\"resize\", updatePosition);\n return () => window.removeEventListener(\"resize\", updatePosition);\n }, [visible, position, positionMode, dragOffset, currentView]);\n\n // Dragging logic for dynamic mode\n useEffect(() => {\n if (!visible || positionMode !== \"dynamic\") return;\n\n const handlePointerMove = (event: PointerEvent) => {\n if (!isDragging || !dragStartRef.current) return;\n\n const deltaX = event.clientX - dragStartRef.current.x;\n const deltaY = event.clientY - dragStartRef.current.y;\n\n setDragOffset((prev) => ({\n x: prev.x + deltaX,\n y: prev.y + deltaY,\n }));\n\n dragStartRef.current = { x: event.clientX, y: event.clientY };\n };\n\n const handlePointerUp = () => {\n setIsDragging(false);\n dragStartRef.current = null;\n };\n\n if (isDragging) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp);\n document.addEventListener(\"pointercancel\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n document.removeEventListener(\"pointercancel\", handlePointerUp);\n };\n }\n }, [visible, positionMode, isDragging]);\n\n // Handle drag start\n const handleDragStart = useCallback(\n (event: React.PointerEvent) => {\n if (positionMode !== \"dynamic\") return;\n event.preventDefault();\n setIsDragging(true);\n dragStartRef.current = { x: event.clientX, y: event.clientY };\n },\n [positionMode],\n );\n\n // Handle escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (currentView === \"screenshot-preview\") {\n setCurrentView(\"comment\");\n } else if (currentView === \"comment\") {\n setCurrentView(\"menu\");\n setSelectedType(null);\n setPendingComment(undefined);\n } else if (submenuStack.length > 0) {\n // Go back one level in submenu\n setSubmenuStack((prev) => prev.slice(0, -1));\n } else {\n onClose();\n }\n }\n };\n\n if (visible) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [visible, currentView, submenuStack.length, onClose]);\n\n // Prevent touch default behaviors on menu container\n useEffect(() => {\n const menuElement = menuRef.current;\n if (!visible || !menuElement) return;\n\n // Prevent touch scrolling and other default behaviors within the menu\n const preventTouchDefault = (e: TouchEvent) => {\n // Allow touches within interactive elements (inputs, textareas)\n const target = e.target as HTMLElement;\n if (\n target.tagName === \"TEXTAREA\" ||\n target.tagName === \"INPUT\" ||\n target.isContentEditable\n ) {\n return;\n }\n // Prevent default to stop scroll/zoom behaviors\n e.preventDefault();\n };\n\n menuElement.addEventListener(\"touchmove\", preventTouchDefault, {\n passive: false,\n });\n\n return () => {\n menuElement.removeEventListener(\"touchmove\", preventTouchDefault);\n };\n }, [visible]);\n\n if (!visible || !targetElement) {\n return null;\n }\n\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.status === \"comingSoon\") {\n return;\n }\n\n // If item has children, navigate to submenu\n if (item.children && item.children.length > 0) {\n setSubmenuStack((prev) => [...prev, item.children!]);\n return;\n }\n\n // Allow custom click handler; if it returns false, skip default flow\n if (item.onClick) {\n try {\n return item.onClick({\n targetElement,\n containerElement,\n closeMenu: onClose,\n });\n } catch (error) {\n console.error(\"Anyclick menu onClick error:\", error);\n return;\n }\n }\n\n // Otherwise, handle selection\n if (item.showComment) {\n setSelectedType(item.type);\n setCurrentView(\"comment\");\n } else {\n // If preview is enabled, capture and show preview\n if (showPreview) {\n setSelectedType(item.type);\n setCurrentView(\"screenshot-preview\");\n captureScreenshots();\n } else {\n onSelect(item.type);\n }\n }\n };\n\n const handleBack = () => {\n setSubmenuStack((prev) => prev.slice(0, -1));\n };\n\n const handleCommentSubmit = (comment: string) => {\n if (!selectedType) return;\n\n // If preview is enabled, capture and show preview\n if (showPreview) {\n setPendingComment(comment || undefined);\n setCurrentView(\"screenshot-preview\");\n captureScreenshots();\n } else {\n onSelect(selectedType, comment || undefined);\n }\n };\n\n const handleCommentCancel = () => {\n setCurrentView(\"menu\");\n setSelectedType(null);\n setPendingComment(undefined);\n };\n\n const handleScreenshotConfirm = (confirmedScreenshots: ScreenshotData) => {\n if (selectedType) {\n onSelect(selectedType, pendingComment, confirmedScreenshots);\n }\n };\n\n const handleScreenshotCancel = () => {\n // Go back to comment or menu\n if (pendingComment !== undefined) {\n setCurrentView(\"comment\");\n } else {\n setCurrentView(\"menu\");\n setSelectedType(null);\n }\n setScreenshots(null);\n };\n\n const handleRetakeScreenshots = () => {\n captureScreenshots();\n };\n\n // Determine container width based on view\n const containerWidth = currentView === \"screenshot-preview\" ? 360 : undefined;\n\n // Debug: Log received style\n if (process.env.NODE_ENV === \"development\" && visible) {\n console.log(\"[ContextMenu] Style Debug\", {\n styleExists: !!style,\n styleKeys: style ? Object.keys(style) : [],\n styleValues: style,\n className,\n });\n }\n\n return (\n <div\n ref={menuRef}\n className={className}\n style={{\n ...menuStyles.container,\n left: adjustedPosition.x,\n top: adjustedPosition.y,\n ...(containerWidth\n ? { width: containerWidth, minWidth: containerWidth }\n : {}),\n // Touch-specific styles\n WebkitUserSelect: \"none\",\n userSelect: \"none\",\n WebkitTouchCallout: \"none\",\n touchAction: \"none\", // Prevent default touch behaviors\n // Cursor style for dragging\n ...(isDragging ? { cursor: \"grabbing\" } : {}),\n ...style,\n }}\n role=\"menu\"\n aria-label=\"Feedback options\"\n >\n {!header && currentView !== \"screenshot-preview\" && (\n <DefaultHeader styles={menuStyles.header} title=\"Send Feedback\">\n {showPreview && (\n <div style={screenshotIndicatorStyle}>\n <CameraIcon className=\"w-3 h-3\" />\n </div>\n )}\n {positionMode === \"dynamic\" && (\n <div\n data-drag-handle\n onPointerDown={handleDragStart}\n style={{\n cursor: isDragging ? \"grabbing\" : \"grab\",\n padding: \"4px\",\n marginRight: \"-4px\",\n borderRadius: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n opacity: 0.5,\n transition: \"opacity 0.15s\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLElement).style.opacity = \"1\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.opacity = \"0.5\";\n }}\n title=\"Drag to move\"\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n )}\n </DefaultHeader>\n )}\n {!!header && header}\n\n {currentView === \"menu\" && (\n <div style={menuStyles.itemList}>\n {submenuStack.length > 0 && <BackButton onClick={handleBack} />}\n {currentItems.map((item) => (\n <MenuItem\n key={item.type}\n item={item}\n onClick={() => handleItemClick(item)}\n disabled={isSubmitting}\n hasChildren={item.children && item.children.length > 0}\n />\n ))}\n </div>\n )}\n\n {currentView === \"comment\" && (\n <CommentForm\n onSubmit={handleCommentSubmit}\n onCancel={handleCommentCancel}\n isSubmitting={isSubmitting}\n />\n )}\n\n {currentView === \"screenshot-preview\" && (\n <ScreenshotPreview\n screenshots={screenshots}\n isLoading={isCapturing}\n onConfirm={handleScreenshotConfirm}\n onCancel={handleScreenshotCancel}\n onRetake={handleRetakeScreenshots}\n isSubmitting={isSubmitting}\n />\n )}\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\n\n/**\n * CSS custom properties for menu theming.\n * These can be overridden via the `style` prop on AnyclickProvider.\n *\n * Example:\n * ```tsx\n * <AnyclickProvider\n * theme={{\n * menuStyle: {\n * '--anyclick-menu-bg': 'rgba(0, 0, 0, 0.9)',\n * '--anyclick-menu-text': '#ffffff',\n * '--anyclick-menu-border': 'rgba(255, 255, 255, 0.1)',\n * '--anyclick-menu-hover': 'rgba(255, 255, 255, 0.1)',\n * '--anyclick-menu-accent': '#f59e0b',\n * }\n * }}\n * />\n * ```\n */\nexport const menuCSSVariables = {\n // Background colors\n \"--anyclick-menu-bg\": \"#ffffff\",\n \"--anyclick-menu-hover\": \"#f5f5f5\",\n // Text colors\n \"--anyclick-menu-text\": \"#333333\",\n \"--anyclick-menu-text-muted\": \"#666666\",\n // Border colors\n \"--anyclick-menu-border\": \"#e5e5e5\",\n // Accent/action colors\n \"--anyclick-menu-accent\": \"#0066cc\",\n \"--anyclick-menu-accent-text\": \"#ffffff\",\n // Input colors\n \"--anyclick-menu-input-bg\": \"#ffffff\",\n \"--anyclick-menu-input-border\": \"#dddddd\",\n // Cancel button\n \"--anyclick-menu-cancel-bg\": \"#f0f0f0\",\n \"--anyclick-menu-cancel-text\": \"#666666\",\n} as const;\n\nexport const menuStyles: Record<string, CSSProperties> = {\n overlay: {\n position: \"fixed\",\n inset: 0,\n zIndex: 9998,\n },\n container: {\n position: \"fixed\",\n zIndex: 9999,\n minWidth: \"200px\",\n backgroundColor: \"var(--anyclick-menu-bg, #ffffff)\",\n borderRadius: \"8px\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\n overflow: \"hidden\",\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: \"14px\",\n // Set default CSS variables\n ...menuCSSVariables,\n },\n header: {\n padding: \"8px 12px\",\n borderBottom: \"1px solid var(--anyclick-menu-border, #e5e5e5)\",\n color: \"var(--anyclick-menu-text-muted, #666)\",\n fontSize: \"12px\",\n fontWeight: 500,\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.5px\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n itemList: {\n padding: \"0px 0px\",\n },\n item: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"10px\",\n padding: \"10px 16px\",\n cursor: \"pointer\",\n transition: \"background-color 0.15s\",\n color: \"var(--anyclick-menu-text, #333)\",\n border: \"none\",\n backgroundColor: \"transparent\",\n width: \"100%\",\n textAlign: \"left\" as const,\n fontSize: \"14px\",\n },\n itemHover: {\n backgroundColor: \"var(--anyclick-menu-hover, #f5f5f5)\",\n },\n itemIcon: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"20px\",\n height: \"20px\",\n fontSize: \"16px\",\n },\n commentSection: {\n padding: \"12px 16px\",\n borderTop: \"1px solid var(--anyclick-menu-border, #e5e5e5)\",\n },\n commentInput: {\n width: \"100%\",\n minHeight: \"60px\",\n padding: \"8px 12px\",\n border: \"1px solid var(--anyclick-menu-input-border, #ddd)\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n fontFamily: \"inherit\",\n resize: \"vertical\" as const,\n outline: \"none\",\n boxSizing: \"border-box\" as const,\n backgroundColor: \"var(--anyclick-menu-input-bg, #ffffff)\",\n color: \"var(--anyclick-menu-text, #333)\",\n },\n buttonRow: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n gap: \"8px\",\n marginTop: \"8px\",\n },\n button: {\n padding: \"6px 12px\",\n borderRadius: \"6px\",\n fontSize: \"13px\",\n fontWeight: 500,\n cursor: \"pointer\",\n transition: \"background-color 0.15s, opacity 0.15s\",\n border: \"none\",\n },\n cancelButton: {\n backgroundColor: \"var(--anyclick-menu-cancel-bg, #f0f0f0)\",\n color: \"var(--anyclick-menu-cancel-text, #666)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n },\n submitButton: {\n backgroundColor: \"var(--anyclick-menu-accent, #0066cc)\",\n color: \"var(--anyclick-menu-accent-text, #ffffff)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n },\n submitButtonDisabled: {\n opacity: 0.6,\n cursor: \"not-allowed\",\n },\n};\n\n// Dark mode styles\nexport const darkMenuStyles: Record<string, CSSProperties> = {\n container: {\n ...menuStyles.container,\n backgroundColor: \"#1a1a1a\",\n boxShadow:\n \"0 4px 12px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.1)\",\n },\n header: {\n ...menuStyles.header,\n borderBottom: \"1px solid #333\",\n color: \"#888\",\n },\n item: {\n ...menuStyles.item,\n color: \"#e0e0e0\",\n },\n itemHover: {\n backgroundColor: \"#2a2a2a\",\n },\n commentSection: {\n ...menuStyles.commentSection,\n borderTop: \"1px solid #333\",\n },\n commentInput: {\n ...menuStyles.commentInput,\n backgroundColor: \"#2a2a2a\",\n border: \"1px solid #444\",\n color: \"#e0e0e0\",\n },\n cancelButton: {\n ...menuStyles.cancelButton,\n backgroundColor: \"#333\",\n color: \"#ccc\",\n },\n};\n\nexport const screenshotPreviewStyles: Record<string, React.CSSProperties> = {\n container: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n },\n containerExpanded: {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"90vw\",\n maxWidth: \"800px\",\n maxHeight: \"90vh\",\n backgroundColor: \"#fff\",\n borderRadius: \"12px\",\n boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n padding: \"16px\",\n zIndex: 10000,\n },\n loadingContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"12px\",\n padding: \"24px\",\n },\n loadingText: {\n fontSize: \"13px\",\n color: \"#6b7280\",\n },\n emptyContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n padding: \"24px\",\n },\n emptyText: {\n fontSize: \"13px\",\n color: \"#6b7280\",\n fontWeight: \"500\",\n },\n emptySubtext: {\n fontSize: \"11px\",\n color: \"#9ca3af\",\n textAlign: \"center\" as const,\n },\n emptyActions: {\n display: \"flex\",\n gap: \"8px\",\n marginTop: \"8px\",\n },\n retakeButtonOutline: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 12px\",\n fontSize: \"12px\",\n color: \"#6b7280\",\n backgroundColor: \"transparent\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n },\n continueButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 12px\",\n fontSize: \"12px\",\n color: \"#fff\",\n backgroundColor: \"#3b82f6\",\n border: \"none\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n fontWeight: \"500\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"0 4px\",\n },\n headerTitle: {\n fontSize: \"12px\",\n fontWeight: \"600\",\n color: \"#374151\",\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.05em\",\n },\n headerActions: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n sizeLabel: {\n fontSize: \"11px\",\n color: \"#9ca3af\",\n },\n iconButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"24px\",\n height: \"24px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n color: \"#6b7280\",\n },\n tabContainer: {\n display: \"flex\",\n gap: \"4px\",\n borderBottom: \"1px solid #e5e7eb\",\n paddingBottom: \"8px\",\n },\n tab: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"2px 5px\",\n fontSize: \"12px\",\n color: \"#6b7280\",\n backgroundColor: \"transparent\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n },\n tabActive: {\n backgroundColor: \"#eff6ff\",\n color: \"#3b82f6\",\n fontWeight: \"500\",\n },\n tabError: {\n color: \"#ef4444\",\n },\n tabSize: {\n fontSize: \"10px\",\n color: \"#9ca3af\",\n },\n previewContainer: {\n position: \"relative\",\n width: \"100%\",\n height: \"150px\",\n backgroundColor: \"#f9fafb\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n previewContainerExpanded: {\n height: \"60vh\",\n maxHeight: \"500px\",\n },\n previewImage: {\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n objectFit: \"contain\",\n },\n noPreview: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"8px\",\n fontSize: \"12px\",\n color: \"#9ca3af\",\n },\n errorPreview: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n padding: \"16px\",\n textAlign: \"center\" as const,\n },\n errorTitle: {\n fontSize: \"14px\",\n fontWeight: \"600\",\n color: \"#ef4444\",\n },\n errorMessage: {\n fontSize: \"12px\",\n color: \"#6b7280\",\n maxWidth: \"250px\",\n lineHeight: \"1.4\",\n },\n dimensionsInfo: {\n fontSize: \"11px\",\n color: \"#9ca3af\",\n textAlign: \"center\" as const,\n },\n actions: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingTop: \"8px\",\n borderTop: \"1px solid #e5e7eb\",\n },\n actionsRight: {\n display: \"flex\",\n gap: \"8px\",\n },\n retakeButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 16px\",\n fontSize: \"13px\",\n color: \"#fff\",\n backgroundColor: \"#3b82f6\",\n border: \"none\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n fontWeight: \"500\",\n },\n retakeButtonSmall: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"4px 8px\",\n fontSize: \"11px\",\n color: \"#6b7280\",\n backgroundColor: \"transparent\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n },\n};\n","/**\n * Highlight utilities for feedback target elements\n */\n\nimport type { HighlightConfig, HighlightColors } from \"./types\";\n\nconst HIGHLIGHT_TARGET_CLASS = \"uifeedback-highlight-target\";\nconst HIGHLIGHT_CONTAINER_CLASS = \"uifeedback-highlight-container\";\nconst STYLE_ID = \"uifeedback-highlight-styles\";\n\n/**\n * Default highlight colors\n */\nexport const defaultHighlightColors: Required<HighlightColors> = {\n targetColor: \"#3b82f6\",\n containerColor: \"#8b5cf6\",\n targetShadowOpacity: 0.25,\n containerShadowOpacity: 0.1,\n};\n\n/**\n * Default container selectors\n */\nexport const defaultContainerSelectors: string[] = [\n \".container\",\n \".card\",\n \".panel\",\n \".section\",\n \".wrapper\",\n \".box\",\n \".modal\",\n \".dialog\",\n \".drawer\",\n '[role=\"dialog\"]',\n '[role=\"region\"]',\n '[role=\"article\"]',\n '[role=\"main\"]',\n \"article\",\n \"section\",\n \"main\",\n \"aside\",\n \"nav\",\n \"header\",\n \"footer\",\n];\n\n/**\n * Generate CSS for highlight effects based on configuration\n */\nfunction generateHighlightCSS(colors: Required<HighlightColors>): string {\n const {\n targetColor,\n containerColor,\n targetShadowOpacity,\n containerShadowOpacity,\n } = colors;\n\n // Convert hex to rgba for shadows\n const hexToRgba = (hex: string, alpha: number): string => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result) return `rgba(0, 0, 0, ${alpha})`;\n return `rgba(${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}, ${alpha})`;\n };\n\n return `\n.${HIGHLIGHT_TARGET_CLASS} {\n outline: 2px dashed ${targetColor} !important;\n outline-offset: 2px !important;\n box-shadow: 0 0 0 4px ${hexToRgba(targetColor, targetShadowOpacity)}, 0 4px 12px ${hexToRgba(targetColor, targetShadowOpacity * 0.6)} !important;\n border-radius: 4px !important;\n position: relative;\n z-index: 9997;\n top: 0;\n}\n\n/* SVG elements need special handling - don't apply styles that break their rendering */\nsvg.${HIGHLIGHT_TARGET_CLASS},\n.${HIGHLIGHT_TARGET_CLASS} > svg {\n outline: none !important;\n box-shadow: none !important;\n border-radius: 0 !important;\n position: static !important;\n z-index: auto !important;\n}\n\n.${HIGHLIGHT_CONTAINER_CLASS} {\n outline: 2px dashed ${hexToRgba(containerColor, 0.6)} !important;\n outline-offset: 4px !important;\n box-shadow: 0 0 0 6px ${hexToRgba(containerColor, containerShadowOpacity)} !important;\n border-radius: 6px !important;\n position: relative;\n z-index: 9996;\n}\n\n/* SVG elements in containers also need protection */\nsvg.${HIGHLIGHT_CONTAINER_CLASS},\n.${HIGHLIGHT_CONTAINER_CLASS} > svg {\n outline: none !important;\n box-shadow: none !important;\n border-radius: 0 !important;\n position: static !important;\n z-index: auto !important;\n}\n`;\n}\n\n/**\n * Inject or update highlight styles in document head\n */\nfunction injectStyles(colors: Required<HighlightColors>): void {\n if (typeof document === \"undefined\") return;\n\n // Remove existing styles if present\n const existingStyle = document.getElementById(STYLE_ID);\n if (existingStyle) {\n existingStyle.remove();\n }\n\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = generateHighlightCSS(colors);\n document.head.appendChild(style);\n}\n\n/**\n * Find the closest container parent element\n */\nexport function findContainerParent(\n element: Element,\n config?: HighlightConfig,\n): Element | null {\n const containerSelectors =\n config?.containerSelectors ?? defaultContainerSelectors;\n const minChildren = config?.minChildrenForContainer ?? 2;\n\n let current = element.parentElement;\n let fallbackContainer: Element | null = null;\n\n while (current && current !== document.body) {\n // Check if element matches any container selector\n for (const selector of containerSelectors) {\n try {\n if (current.matches(selector)) {\n return current;\n }\n } catch {\n // Invalid selector, skip\n }\n }\n\n // Check if parent has multiple meaningful children (not just text nodes)\n const meaningfulChildren = Array.from(current.children).filter((child) => {\n const tag = child.tagName.toLowerCase();\n // Exclude script, style, and hidden elements\n if (tag === \"script\" || tag === \"style\" || tag === \"noscript\") {\n return false;\n }\n // Check if element is visible\n const style = window.getComputedStyle(child);\n if (style.display === \"none\" || style.visibility === \"hidden\") {\n return false;\n }\n return true;\n });\n\n // If this parent has enough children, it's likely a container\n if (meaningfulChildren.length >= minChildren && !fallbackContainer) {\n fallbackContainer = current;\n }\n\n // If parent has 3+ children, strongly consider it a container\n if (meaningfulChildren.length >= 3) {\n return current;\n }\n\n current = current.parentElement;\n }\n\n return fallbackContainer;\n}\n\n/**\n * Apply highlight to target element\n */\nexport function highlightTarget(\n element: Element,\n colors?: HighlightColors,\n): void {\n const mergedColors = { ...defaultHighlightColors, ...colors };\n injectStyles(mergedColors);\n element.classList.add(HIGHLIGHT_TARGET_CLASS);\n}\n\n/**\n * Apply highlight to container element\n */\nexport function highlightContainer(\n element: Element,\n colors?: HighlightColors,\n): void {\n const mergedColors = { ...defaultHighlightColors, ...colors };\n injectStyles(mergedColors);\n element.classList.add(HIGHLIGHT_CONTAINER_CLASS);\n}\n\n/**\n * Remove all highlights from the document\n */\nexport function clearHighlights(): void {\n if (typeof document === \"undefined\") return;\n\n document.querySelectorAll(`.${HIGHLIGHT_TARGET_CLASS}`).forEach((el) => {\n el.classList.remove(HIGHLIGHT_TARGET_CLASS);\n });\n\n document.querySelectorAll(`.${HIGHLIGHT_CONTAINER_CLASS}`).forEach((el) => {\n el.classList.remove(HIGHLIGHT_CONTAINER_CLASS);\n });\n}\n\n/**\n * Apply highlights to target element and its container parent\n */\nexport function applyHighlights(\n targetElement: Element,\n config?: HighlightConfig,\n): {\n target: Element;\n container: Element | null;\n} {\n // If highlights are disabled, don't apply anything\n if (config?.enabled === false) {\n return { target: targetElement, container: null };\n }\n\n clearHighlights();\n\n const colors = { ...defaultHighlightColors, ...config?.colors };\n\n highlightTarget(targetElement, colors);\n\n const container = findContainerParent(targetElement, config);\n if (container && container !== targetElement) {\n highlightContainer(container, colors);\n }\n\n return { target: targetElement, container };\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport type { ScreenshotData, ScreenshotError } from \"@ewjdev/anyclick-core\";\nimport { formatBytes, estimateTotalSize } from \"@ewjdev/anyclick-core\";\nimport type { ScreenshotPreviewProps } from \"./types\";\nimport { menuStyles } from \"./styles\";\nimport { screenshotPreviewStyles as styles } from \"./styles\";\nimport {\n ImageIcon,\n RefreshCwIcon,\n CheckIcon,\n XIcon,\n Loader2Icon,\n ExpandIcon,\n ShrinkIcon,\n AlertCircleIcon,\n} from \"lucide-react\";\n\ntype TabType = \"element\" | \"container\" | \"viewport\";\n\n/**\n * Screenshot preview component - shows captured screenshots before sending\n */\nexport function ScreenshotPreview({\n screenshots,\n isLoading,\n onConfirm,\n onCancel,\n onRetake,\n isSubmitting,\n}: ScreenshotPreviewProps) {\n const [activeTab, setActiveTab] = useState<TabType>(\"element\");\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (isLoading) {\n return (\n <div style={styles.container}>\n <div style={styles.loadingContainer}>\n <Loader2Icon\n className=\"w-6 h-6 animate-spin\"\n style={{ color: \"#3b82f6\" }}\n />\n <span style={styles.loadingText}>Capturing screenshots...</span>\n </div>\n </div>\n );\n }\n\n if (!screenshots) {\n return (\n <div style={styles.container}>\n <div style={styles.emptyContainer}>\n <ImageIcon className=\"w-8 h-8\" style={{ color: \"#9ca3af\" }} />\n <span style={styles.emptyText}>Screenshots unavailable</span>\n <span style={styles.emptySubtext}>\n Some elements can&apos;t be captured (e.g., gradient text)\n </span>\n <div style={styles.emptyActions}>\n <button\n type=\"button\"\n onClick={onRetake}\n style={styles.retakeButtonOutline}\n disabled={isSubmitting}\n >\n <RefreshCwIcon className=\"w-4 h-4\" />\n Try Again\n </button>\n <button\n type=\"button\"\n onClick={() =>\n onConfirm({ capturedAt: new Date().toISOString() })\n }\n style={styles.continueButton}\n disabled={isSubmitting}\n >\n <CheckIcon className=\"w-4 h-4\" />\n Continue Without\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Get error for a specific tab\n const getError = (key: TabType): ScreenshotError | undefined => {\n return screenshots.errors?.[key];\n };\n\n const allTabs: {\n key: TabType;\n label: string;\n data: typeof screenshots.element;\n error?: ScreenshotError;\n }[] = [\n {\n key: \"element\" as const,\n label: \"Element\",\n data: screenshots.element,\n error: getError(\"element\"),\n },\n {\n key: \"container\" as const,\n label: \"Container\",\n data: screenshots.container,\n error: getError(\"container\"),\n },\n {\n key: \"viewport\" as const,\n label: \"Viewport\",\n data: screenshots.viewport,\n error: getError(\"viewport\"),\n },\n ];\n // Show tabs that have either data or errors\n const tabs = allTabs.filter((tab) => tab.data || tab.error);\n\n const activeScreenshot =\n activeTab === \"element\"\n ? screenshots.element\n : activeTab === \"container\"\n ? screenshots.container\n : screenshots.viewport;\n\n const activeError = getError(activeTab);\n\n const totalSize = estimateTotalSize(screenshots);\n\n console.log({ styles });\n\n return (\n <div\n style={{\n ...styles.container,\n ...(isExpanded ? styles.containerExpanded : {}),\n padding: \"8px\",\n }}\n >\n <div style={styles.header}>\n <span style={styles.headerTitle}>Review Screenshots</span>\n <div style={styles.headerActions}>\n <span style={styles.sizeLabel}>{formatBytes(totalSize)}</span>\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n style={styles.iconButton}\n title={isExpanded ? \"Collapse\" : \"Expand\"}\n >\n {isExpanded ? (\n <ShrinkIcon className=\"w-4 h-4\" />\n ) : (\n <ExpandIcon className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n </div>\n\n {/* Tabs */}\n <div style={styles.tabContainer}>\n {tabs.map((tab) => (\n <button\n key={tab.key}\n type=\"button\"\n onClick={() => setActiveTab(tab.key)}\n style={{\n ...styles.tab,\n ...(activeTab === tab.key ? styles.tabActive : {}),\n ...(tab.error && !tab.data ? styles.tabError : {}),\n }}\n >\n {tab.error && !tab.data && (\n <AlertCircleIcon\n className=\"w-3 h-3\"\n style={{ color: \"#ef4444\" }}\n />\n )}\n {tab.label}\n {tab.data && (\n <span style={styles.tabSize}>\n {formatBytes(tab.data.sizeBytes)}\n </span>\n )}\n </button>\n ))}\n </div>\n\n {/* Preview image */}\n <div\n style={{\n ...styles.previewContainer,\n ...(isExpanded ? styles.previewContainerExpanded : {}),\n }}\n >\n {activeScreenshot ? (\n <img\n src={activeScreenshot.dataUrl}\n alt={`${activeTab} screenshot`}\n style={styles.previewImage}\n />\n ) : activeError ? (\n <div style={styles.errorPreview}>\n <AlertCircleIcon className=\"w-8 h-8\" style={{ color: \"#ef4444\" }} />\n <span style={styles.errorTitle}>Capture Failed</span>\n <span style={styles.errorMessage}>{activeError.message}</span>\n </div>\n ) : (\n <div style={styles.noPreview}>\n <ImageIcon className=\"w-6 h-6\" style={{ color: \"#9ca3af\" }} />\n <span>No {activeTab} screenshot</span>\n </div>\n )}\n </div>\n\n {/* Dimensions info */}\n {activeScreenshot && (\n <div style={styles.dimensionsInfo}>\n {activeScreenshot.width} × {activeScreenshot.height}px\n </div>\n )}\n\n {/* Actions */}\n <div style={styles.actions}>\n <button\n type=\"button\"\n onClick={onRetake}\n disabled={isSubmitting}\n style={styles.retakeButtonSmall}\n >\n <RefreshCwIcon className=\"w-3 h-3\" />\n Retake\n </button>\n <div style={styles.actionsRight}>\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={isSubmitting}\n className=\"flex items-center gap-1\"\n style={{ ...menuStyles.button, ...menuStyles.cancelButton }}\n >\n <XIcon className=\"w-3 h-3\" />\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={() => onConfirm(screenshots)}\n disabled={isSubmitting}\n style={{\n ...menuStyles.button,\n ...menuStyles.submitButton,\n ...(isSubmitting ? menuStyles.submitButtonDisabled : {}),\n }}\n >\n {isSubmitting ? (\n <>\n <Loader2Icon className=\"w-3 h-3 animate-spin\" />\n Sending...\n </>\n ) : (\n <>\n <CheckIcon className=\"w-3 h-3\" />\n Send\n </>\n )}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '16', cy: '4', r: '1', key: '1grugj' }],\n ['path', { d: 'm18 19 1-7-6 1', key: 'r0i19z' }],\n ['path', { d: 'm5 8 3-3 5.5 3-2.36 3.5', key: '9ptxx2' }],\n ['path', { d: 'M4.24 14.5a5 5 0 0 0 6.88 6', key: '10kmtu' }],\n ['path', { d: 'M13.76 17.5a5 5 0 0 0-6.88-6', key: '2qq6rc' }],\n];\n\n/**\n * @component @name Accessibility\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxNiIgY3k9IjQiIHI9IjEiIC8+CiAgPHBhdGggZD0ibTE4IDE5IDEtNy02IDEiIC8+CiAgPHBhdGggZD0ibTUgOCAzLTMgNS41IDMtMi4zNiAzLjUiIC8+CiAgPHBhdGggZD0iTTQuMjQgMTQuNWE1IDUgMCAwIDAgNi44OCA2IiAvPgogIDxwYXRoIGQ9Ik0xMy43NiAxNy41YTUgNSAwIDAgMC02Ljg4LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/accessibility\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Accessibility = createLucideIcon('accessibility', __iconNode);\n\nexport default Accessibility;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 5v14', key: 's699le' }],\n ['path', { d: 'm19 12-7 7-7-7', key: '1idqje' }],\n];\n\n/**\n * @component @name ArrowDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KICA8cGF0aCBkPSJtMTkgMTItNyA3LTctNyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDown = createLucideIcon('arrow-down', __iconNode);\n\nexport default ArrowDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z',\n key: 'hh9hay',\n },\n ],\n ['path', { d: 'm3.3 7 8.7 5 8.7-5', key: 'g66t2b' }],\n ['path', { d: 'M12 22V12', key: 'd0xqtd' }],\n];\n\n/**\n * @component @name Box\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZaIiAvPgogIDxwYXRoIGQ9Im0zLjMgNyA4LjcgNSA4LjctNSIgLz4KICA8cGF0aCBkPSJNMTIgMjJWMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/box\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Box = createLucideIcon('box', __iconNode);\n\nexport default Box;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z',\n key: '18u6gg',\n },\n ],\n ['circle', { cx: '12', cy: '13', r: '3', key: '1vg3eu' }],\n];\n\n/**\n * @component @name Camera\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTMuOTk3IDRhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIDEuNzU5LTEuMDQ4bC40ODktLjkwNEEyIDIgMCAwIDEgMTAuMDA0IDR6IiAvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTMiIHI9IjMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/camera\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Camera = createLucideIcon('camera', __iconNode);\n\nexport default Camera;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['line', { x1: '12', x2: '12', y1: '8', y2: '12', key: '1pkeuh' }],\n ['line', { x1: '12', x2: '12.01', y1: '16', y2: '16', key: '4dfq90' }],\n];\n\n/**\n * @component @name CircleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMiIgeTE9IjgiIHkyPSIxMiIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIxMi4wMSIgeTE9IjE2IiB5Mj0iMTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/circle-alert\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleAlert = createLucideIcon('circle-alert', __iconNode);\n\nexport default CircleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm16 18 6-6-6-6', key: 'eg8j8' }],\n ['path', { d: 'm8 6-6 6 6 6', key: 'ppft3o' }],\n];\n\n/**\n * @component @name Code\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTYgMTggNi02LTYtNiIgLz4KICA8cGF0aCBkPSJtOCA2LTYgNiA2IDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/code\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Code = createLucideIcon('code', __iconNode);\n\nexport default Code;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2', key: '17jyea' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2', key: 'zix9uf' }],\n];\n\n/**\n * @component @name Copy\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHg9IjgiIHk9IjgiIHJ4PSIyIiByeT0iMiIgLz4KICA8cGF0aCBkPSJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/copy\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Copy = createLucideIcon('copy', __iconNode);\n\nexport default Copy;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm15 15 6 6', key: '1s409w' }],\n ['path', { d: 'm15 9 6-6', key: 'ko1vev' }],\n ['path', { d: 'M21 16v5h-5', key: '1ck2sf' }],\n ['path', { d: 'M21 8V3h-5', key: '1qoq8a' }],\n ['path', { d: 'M3 16v5h5', key: '1t08am' }],\n ['path', { d: 'm3 21 6-6', key: 'wwnumi' }],\n ['path', { d: 'M3 8V3h5', key: '1ln10m' }],\n ['path', { d: 'M9 9 3 3', key: 'v551iv' }],\n];\n\n/**\n * @component @name Expand\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTUgNiA2IiAvPgogIDxwYXRoIGQ9Im0xNSA5IDYtNiIgLz4KICA8cGF0aCBkPSJNMjEgMTZ2NWgtNSIgLz4KICA8cGF0aCBkPSJNMjEgOFYzaC01IiAvPgogIDxwYXRoIGQ9Ik0zIDE2djVoNSIgLz4KICA8cGF0aCBkPSJtMyAyMSA2LTYiIC8+CiAgPHBhdGggZD0iTTMgOFYzaDUiIC8+CiAgPHBhdGggZD0iTTkgOSAzIDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/expand\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Expand = createLucideIcon('expand', __iconNode);\n\nexport default Expand;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 12.5 8 15l2 2.5', key: '1tg20x' }],\n ['path', { d: 'm14 12.5 2 2.5-2 2.5', key: 'yinavb' }],\n ['path', { d: 'M14 2v4a2 2 0 0 0 2 2h4', key: 'tnqrlb' }],\n ['path', { d: 'M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z', key: '1mlx9k' }],\n];\n\n/**\n * @component @name FileCode\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMTIuNSA4IDE1bDIgMi41IiAvPgogIDxwYXRoIGQ9Im0xNCAxMi41IDIgMi41LTIgMi41IiAvPgogIDxwYXRoIGQ9Ik0xNCAydjRhMiAyIDAgMCAwIDIgMmg0IiAvPgogIDxwYXRoIGQ9Ik0xNSAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN3oiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/file-code\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCode = createLucideIcon('file-code', __iconNode);\n\nexport default FileCode;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528',\n key: '1jaruq',\n },\n ],\n];\n\n/**\n * @component @name Flag\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNCAyMlY0YTEgMSAwIDAgMSAuNC0uOEE2IDYgMCAwIDEgOCAyYzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTBhMSAxIDAgMCAxLS40LjhBNiA2IDAgMCAxIDE2IDE2Yy0zIDAtNS0yLTgtMmE2IDYgMCAwIDAtNCAxLjUyOCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/flag\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Flag = createLucideIcon('flag', __iconNode);\n\nexport default Flag;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '9', cy: '12', r: '1', key: '1vctgf' }],\n ['circle', { cx: '9', cy: '5', r: '1', key: 'hp0tcf' }],\n ['circle', { cx: '9', cy: '19', r: '1', key: 'fkjjf6' }],\n ['circle', { cx: '15', cy: '12', r: '1', key: '1tmaij' }],\n ['circle', { cx: '15', cy: '5', r: '1', key: '19l28e' }],\n ['circle', { cx: '15', cy: '19', r: '1', key: 'f4zoj3' }],\n];\n\n/**\n * @component @name GripVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjUiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjE5IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iMTUiIGN5PSI1IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTkiIHI9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/grip-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst GripVertical = createLucideIcon('grip-vertical', __iconNode);\n\nexport default GripVertical;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '1357e3' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n ['path', { d: 'M12 7v5l4 2', key: '1fdv2h' }],\n];\n\n/**\n * @component @name History\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IiAvPgogIDxwYXRoIGQ9Ik0zIDN2NWg1IiAvPgogIDxwYXRoIGQ9Ik0xMiA3djVsNCAyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/history\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst History = createLucideIcon('history', __iconNode);\n\nexport default History;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2', key: '1m3agn' }],\n ['circle', { cx: '9', cy: '9', r: '2', key: 'af1f0g' }],\n ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21', key: '1xmnt7' }],\n];\n\n/**\n * @component @name Image\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiByeT0iMiIgLz4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iOSIgcj0iMiIgLz4KICA8cGF0aCBkPSJtMjEgMTUtMy4wODYtMy4wODZhMiAyIDAgMCAwLTIuODI4IDBMNiAyMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/image\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Image = createLucideIcon('image', __iconNode);\n\nexport default Image;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z',\n key: 'zw3jo',\n },\n ],\n [\n 'path',\n {\n d: 'M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12',\n key: '1wduqc',\n },\n ],\n [\n 'path',\n {\n d: 'M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17',\n key: 'kqbvx6',\n },\n ],\n];\n\n/**\n * @component @name Layers\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAxLjY2IDBsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44M3oiIC8+CiAgPHBhdGggZD0iTTIgMTJhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDguNTgtMy45QTEgMSAwIDAgMCAyMiAxMiIgLz4KICA8cGF0aCBkPSJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsOC41OC0zLjlBMSAxIDAgMCAwIDIyIDE3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/layers\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Layers = createLucideIcon('layers', __iconNode);\n\nexport default Layers;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'm21 3-7 7', key: '1l2asr' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M9 21H3v-6', key: 'wtvkvv' }],\n];\n\n/**\n * @component @name Maximize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0ibTIxIDMtNyA3IiAvPgogIDxwYXRoIGQ9Im0zIDIxIDctNyIgLz4KICA8cGF0aCBkPSJNOSAyMUgzdi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize2 = createLucideIcon('maximize-2', __iconNode);\n\nexport default Maximize2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n key: 'e79jfc',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor', key: '1okk4w' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor', key: 'f64h9f' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor', key: 'qy21gx' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'fotxhn' }],\n];\n\n/**\n * @component @name Palette\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoiIC8+CiAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjYuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSIxNy41IiBjeT0iMTAuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KICA8Y2lyY2xlIGN4PSI2LjUiIGN5PSIxMi41IiByPSIuNSIgZmlsbD0iY3VycmVudENvbG9yIiAvPgogIDxjaXJjbGUgY3g9IjguNSIgY3k9IjcuNSIgcj0iLjUiIGZpbGw9ImN1cnJlbnRDb2xvciIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/palette\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Palette = createLucideIcon('palette', __iconNode);\n\nexport default Palette;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M3 15h18', key: '5xshup' }],\n];\n\n/**\n * @component @name PanelBottom\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0zIDE1aDE4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/panel-bottom\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelBottom = createLucideIcon('panel-bottom', __iconNode);\n\nexport default PanelBottom;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M9 3v18', key: 'fh3hqa' }],\n];\n\n/**\n * @component @name PanelLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik05IDN2MTgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/panel-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelLeft = createLucideIcon('panel-left', __iconNode);\n\nexport default PanelLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M15 3v18', key: '14nvp0' }],\n];\n\n/**\n * @component @name PanelRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0xNSAzdjE4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/panel-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelRight = createLucideIcon('panel-right', __iconNode);\n\nexport default PanelRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M3 9h18', key: '1pudct' }],\n];\n\n/**\n * @component @name PanelTop\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0zIDloMTgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/panel-top\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelTop = createLucideIcon('panel-top', __iconNode);\n\nexport default PanelTop;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M3 9h18', key: '1pudct' }],\n ['path', { d: 'M9 21V9', key: '1oto5p' }],\n];\n\n/**\n * @component @name PanelsTopLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik0zIDloMTgiIC8+CiAgPHBhdGggZD0iTTkgMjFWOSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/panels-top-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst PanelsTopLeft = createLucideIcon('panels-top-left', __iconNode);\n\nexport default PanelsTopLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n];\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('plus', __iconNode);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8', key: 'v9h5vc' }],\n ['path', { d: 'M21 3v5h-5', key: '1q7to0' }],\n ['path', { d: 'M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16', key: '3uifl3' }],\n ['path', { d: 'M8 16H3v5', key: '1cv678' }],\n];\n\n/**\n * @component @name RefreshCw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCIgLz4KICA8cGF0aCBkPSJNMjEgM3Y1aC01IiAvPgogIDxwYXRoIGQ9Ik0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgLz4KICA8cGF0aCBkPSJNOCAxNkgzdjUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/refresh-cw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RefreshCw = createLucideIcon('refresh-cw', __iconNode);\n\nexport default RefreshCw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '1357e3' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n];\n\n/**\n * @component @name RotateCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IiAvPgogIDxwYXRoIGQ9Ik0zIDN2NWg1IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/rotate-ccw\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst RotateCcw = createLucideIcon('rotate-ccw', __iconNode);\n\nexport default RotateCcw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm15 15 6 6m-6-6v4.8m0-4.8h4.8', key: '17vawe' }],\n ['path', { d: 'M9 19.8V15m0 0H4.2M9 15l-6 6', key: 'chjx8e' }],\n ['path', { d: 'M15 4.2V9m0 0h4.8M15 9l6-6', key: 'lav6yq' }],\n ['path', { d: 'M9 4.2V9m0 0H4.2M9 9 3 3', key: '1pxi2q' }],\n];\n\n/**\n * @component @name Shrink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTUgNiA2bS02LTZ2NC44bTAtNC44aDQuOCIgLz4KICA8cGF0aCBkPSJNOSAxOS44VjE1bTAgMEg0LjJNOSAxNWwtNiA2IiAvPgogIDxwYXRoIGQ9Ik0xNSA0LjJWOW0wIDBoNC44TTE1IDlsNi02IiAvPgogIDxwYXRoIGQ9Ik05IDQuMlY5bTAgMEg0LjJNOSA5IDMgMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/shrink\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Shrink = createLucideIcon('shrink', __iconNode);\n\nexport default Shrink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M7 10v12', key: '1qc93n' }],\n [\n 'path',\n {\n d: 'M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z',\n key: 'emmmcr',\n },\n ],\n];\n\n/**\n * @component @name ThumbsUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNyAxMHYxMiIgLz4KICA8cGF0aCBkPSJNMTUgNS44OCAxNCAxMGg1LjgzYTIgMiAwIDAgMSAxLjkyIDIuNTZsLTIuMzMgOEEyIDIgMCAwIDEgMTcuNSAyMkg0YTIgMiAwIDAgMS0yLTJ2LThhMiAyIDAgMCAxIDItMmgyLjc2YTIgMiAwIDAgMCAxLjc5LTEuMTFMMTIgMmEzLjEzIDMuMTMgMCAwIDEgMyAzLjg4WiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/thumbs-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ThumbsUp = createLucideIcon('thumbs-up', __iconNode);\n\nexport default ThumbsUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 11v6', key: 'nco0om' }],\n ['path', { d: 'M14 11v6', key: 'outv1u' }],\n ['path', { d: 'M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6', key: 'miytrc' }],\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2', key: 'e791ji' }],\n];\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTQgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiAvPgogIDxwYXRoIGQ9Ik0zIDZoMTgiIC8+CiAgPHBhdGggZD0iTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('trash-2', __iconNode);\n\nexport default Trash2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 4v16', key: '1654pz' }],\n ['path', { d: 'M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2', key: 'e0r10z' }],\n ['path', { d: 'M9 20h6', key: 's66wpe' }],\n];\n\n/**\n * @component @name Type\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNHYxNiIgLz4KICA8cGF0aCBkPSJNNCA3VjVhMSAxIDAgMCAxIDEtMWgxNGExIDEgMCAwIDEgMSAxdjIiIC8+CiAgPHBhdGggZD0iTTkgMjBoNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/type\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Type = createLucideIcon('type', __iconNode);\n\nexport default Type;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { AnyclickMenuEvent } from \"@ewjdev/anyclick-core\";\nimport type { AnyclickTheme } from \"./types\";\n\n/**\n * Registered provider instance\n */\nexport interface ProviderInstance {\n /** Unique identifier for this provider instance */\n id: string;\n /** Reference to the provider's container element (null if not scoped) */\n containerRef: React.RefObject<Element | null>;\n /** Whether this provider is scoped to its container */\n scoped: boolean;\n /** The provider's theme configuration */\n theme: AnyclickTheme | null;\n /** Whether this provider is disabled */\n disabled: boolean;\n /** Parent provider ID (if nested) */\n parentId: string | null;\n /** Depth in the provider hierarchy (0 = root) */\n depth: number;\n /** Handler to call when an event occurs in this provider's scope */\n onContextMenu?: (\n event: AnyclickMenuEvent,\n element: Element,\n ) => boolean | void;\n}\n\n/**\n * Provider registry store state\n */\ninterface ProviderStore {\n /** Map of provider ID to provider instance */\n providers: Map<string, ProviderInstance>;\n\n /**\n * Register a new provider\n */\n registerProvider: (provider: ProviderInstance) => void;\n\n /**\n * Unregister a provider\n */\n unregisterProvider: (id: string) => void;\n\n /**\n * Update a provider's configuration\n */\n updateProvider: (id: string, updates: Partial<ProviderInstance>) => void;\n\n /**\n * Find all providers that contain a given element, sorted by depth (nearest first)\n */\n findProvidersForElement: (element: Element) => ProviderInstance[];\n\n /**\n * Find the nearest parent provider for a given container\n */\n findParentProvider: (\n container: Element | null,\n excludeId?: string,\n ) => ProviderInstance | null;\n\n /**\n * Get merged theme for a provider (includes inherited parent themes)\n */\n getMergedTheme: (providerId: string) => AnyclickTheme;\n\n /**\n * Check if any ancestor provider has disabled anyclick\n */\n isDisabledByAncestor: (providerId: string) => boolean;\n\n /**\n * Check if an element is inside a disabled scoped provider's container\n * This is used to prevent the global provider from handling events\n * in areas where a disabled scoped provider should block them\n */\n isElementInDisabledScope: (element: Element) => boolean;\n\n /**\n * Check if an element is inside any scoped provider's container (enabled or not)\n * This is used to prevent the global provider from handling touch events\n * that should be handled by a scoped provider instead\n */\n isElementInAnyScopedProvider: (element: Element) => boolean;\n}\n\n/**\n * Generate a unique ID for a provider instance\n */\nlet providerIdCounter = 0;\nexport function generateProviderId(): string {\n return `anyclick-provider-${++providerIdCounter}`;\n}\n\n/**\n * Zustand store for managing provider instances\n */\nexport const useProviderStore = create<ProviderStore>((set, get) => ({\n providers: new Map(),\n\n registerProvider: (provider) => {\n set((state) => {\n const newProviders = new Map(state.providers);\n newProviders.set(provider.id, provider);\n return { providers: newProviders };\n });\n },\n\n unregisterProvider: (id) => {\n set((state) => {\n const newProviders = new Map(state.providers);\n newProviders.delete(id);\n return { providers: newProviders };\n });\n },\n\n updateProvider: (id, updates) => {\n set((state) => {\n const newProviders = new Map(state.providers);\n const existing = newProviders.get(id);\n if (existing) {\n newProviders.set(id, { ...existing, ...updates });\n }\n return { providers: newProviders };\n });\n },\n\n findProvidersForElement: (element) => {\n const { providers } = get();\n const matching: ProviderInstance[] = [];\n\n for (const provider of providers.values()) {\n // Skip disabled providers\n if (provider.disabled) continue;\n\n const container = provider.containerRef.current;\n\n // For scoped providers, check if element is within container\n if (provider.scoped && container) {\n if (container.contains(element)) {\n matching.push(provider);\n }\n } else if (!provider.scoped) {\n // Non-scoped providers match all elements\n matching.push(provider);\n }\n }\n\n // Sort by depth (nearest/deepest first)\n return matching.sort((a, b) => b.depth - a.depth);\n },\n\n findParentProvider: (container, excludeId) => {\n const { providers } = get();\n\n if (!container) return null;\n\n let nearestParent: ProviderInstance | null = null;\n let nearestDepth = -1;\n\n for (const provider of providers.values()) {\n if (provider.id === excludeId) continue;\n\n const providerContainer = provider.containerRef.current;\n if (!providerContainer) continue;\n\n // Check if this provider's container contains our container\n if (providerContainer.contains(container)) {\n // This is a potential parent - check if it's the nearest one\n if (provider.depth > nearestDepth) {\n nearestParent = provider;\n nearestDepth = provider.depth;\n }\n }\n }\n\n return nearestParent;\n },\n\n getMergedTheme: (providerId) => {\n const { providers } = get();\n const provider = providers.get(providerId);\n\n if (!provider) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[Store:getMergedTheme] Provider not found: ${providerId}`);\n }\n return {};\n }\n\n // Build ancestor chain\n const ancestors: ProviderInstance[] = [];\n let current: ProviderInstance | undefined = provider;\n\n while (current) {\n ancestors.unshift(current);\n current = current.parentId ? providers.get(current.parentId) : undefined;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[Store:getMergedTheme] Provider: ${providerId}`, {\n ancestorCount: ancestors.length,\n ancestorIds: ancestors.map((a) => a.id),\n providerHasTheme: !!provider.theme,\n providerThemeMenuStyle: provider.theme?.menuStyle\n ? Object.keys(provider.theme.menuStyle)\n : [],\n });\n }\n\n // Merge themes from root to current (later themes override earlier)\n const mergedTheme: AnyclickTheme = {};\n\n for (const ancestor of ancestors) {\n if (ancestor.theme) {\n // Deep merge for nested objects\n Object.assign(mergedTheme, ancestor.theme);\n\n // Special handling for highlightConfig and screenshotConfig\n if (ancestor.theme.highlightConfig) {\n mergedTheme.highlightConfig = {\n ...mergedTheme.highlightConfig,\n ...ancestor.theme.highlightConfig,\n colors: {\n ...mergedTheme.highlightConfig?.colors,\n ...ancestor.theme.highlightConfig.colors,\n },\n };\n }\n\n if (ancestor.theme.screenshotConfig) {\n mergedTheme.screenshotConfig = {\n ...mergedTheme.screenshotConfig,\n ...ancestor.theme.screenshotConfig,\n };\n }\n }\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.log(`[Store:getMergedTheme] Result for ${providerId}`, {\n hasMenuStyle: !!mergedTheme.menuStyle,\n menuStyleKeys: mergedTheme.menuStyle\n ? Object.keys(mergedTheme.menuStyle)\n : [],\n });\n }\n\n return mergedTheme;\n },\n\n isDisabledByAncestor: (providerId) => {\n const { providers } = get();\n const provider = providers.get(providerId);\n\n if (!provider) return false;\n\n // Check this provider and all ancestors\n let current: ProviderInstance | undefined = provider;\n\n while (current) {\n if (current.disabled || current.theme?.disabled) {\n return true;\n }\n current = current.parentId ? providers.get(current.parentId) : undefined;\n }\n\n return false;\n },\n\n isElementInDisabledScope: (element) => {\n const { providers } = get();\n\n // Check all scoped providers (including disabled ones)\n for (const provider of providers.values()) {\n // Only check scoped providers that are disabled\n if (!provider.scoped) continue;\n if (!provider.disabled && !provider.theme?.disabled) continue;\n\n const container = provider.containerRef.current;\n if (!container) continue;\n\n // If element is inside this disabled scoped provider's container\n if (container.contains(element)) {\n return true;\n }\n }\n\n return false;\n },\n\n isElementInAnyScopedProvider: (element) => {\n const { providers } = get();\n\n // Check all scoped providers (enabled or disabled)\n for (const provider of providers.values()) {\n // Only check scoped providers\n if (!provider.scoped) continue;\n\n const container = provider.containerRef.current;\n if (!container) continue;\n\n // If element is inside this scoped provider's container\n if (container.contains(element)) {\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n `[Store:isElementInAnyScopedProvider] Element is in scoped provider: ${provider.id}`,\n {\n elementTag: element.tagName,\n providerId: provider.id,\n providerDisabled: provider.disabled,\n },\n );\n }\n return true;\n }\n }\n\n return false;\n },\n}));\n\n/**\n * Dispatch a context menu event to all matching providers (bubble up)\n */\nexport function dispatchContextMenuEvent(\n event: MouseEvent,\n element: Element,\n): void {\n const store = useProviderStore.getState();\n const providers = store.findProvidersForElement(element);\n\n // Convert MouseEvent to AnyclickMenuEvent\n const menuEvent: AnyclickMenuEvent = {\n clientX: event.clientX,\n clientY: event.clientY,\n originalEvent: event,\n isTouch: false,\n };\n\n // Call handlers from nearest to outermost\n for (const provider of providers) {\n // Check if disabled by theme or prop\n if (store.isDisabledByAncestor(provider.id)) {\n continue;\n }\n\n if (provider.onContextMenu) {\n provider.onContextMenu(menuEvent, element);\n // After the first handler processes, we don't need to call others\n // unless we want to implement explicit bubbling control\n break;\n }\n }\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useRef } from \"react\";\nimport {\n type PointerConfig,\n type FunModeConfig,\n usePointer,\n} from \"@ewjdev/anyclick-pointer\";\nimport { useProviderStore } from \"./store\";\nimport type { AnyclickTheme, FunModeThemeConfig } from \"./types\";\n\nfunction isFunModeEnabled(\n theme?: AnyclickTheme | null,\n): theme is AnyclickTheme {\n if (!theme) return false;\n if (theme.funMode === undefined) return false;\n if (typeof theme.funMode === \"boolean\") return theme.funMode;\n return theme.funMode.enabled ?? true;\n}\n\nfunction buildFunConfig(\n theme: AnyclickTheme | null | undefined,\n container: Element,\n): FunModeConfig {\n const funTheme =\n typeof theme?.funMode === \"object\"\n ? (theme.funMode as FunModeThemeConfig)\n : {};\n const resolveTrackElement = (): HTMLElement => {\n // Some scoped containers use display: contents and report zero bounds.\n // Walk up to the first ancestor with a real box; fall back to body.\n let el: HTMLElement | null = container as HTMLElement | null;\n while (el) {\n const rect = el.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n return el;\n }\n el = el.parentElement;\n }\n return document.body;\n };\n\n const getTrackElement = () => resolveTrackElement();\n return {\n maxSpeed: funTheme.maxSpeed,\n acceleration: funTheme.acceleration,\n getTrackElement,\n getObstacles: () => {\n // Obstacles = siblings + children (lightweight bounding boxes)\n const trackElement = getTrackElement();\n const obstacles: DOMRect[] = [];\n const parent = trackElement.parentElement;\n if (parent) {\n Array.from(parent.children).forEach((sibling) => {\n if (sibling !== trackElement) {\n obstacles.push(sibling.getBoundingClientRect());\n }\n });\n }\n Array.from(trackElement.children).forEach((child) => {\n obstacles.push(child.getBoundingClientRect());\n });\n return obstacles;\n },\n };\n}\n\n/**\n * FunModeBridge watches Anyclick scoped providers and toggles the pointer\n * into fun mode (go-kart) when the cursor is within a provider with funMode enabled.\n * Requires a PointerProvider higher in the tree.\n */\nexport function FunModeBridge() {\n const { setConfig } = usePointer();\n const providerStore = useProviderStore();\n const activeProviderRef = useRef<string | null>(null);\n const cachedConfigs = useRef<Record<string, PointerConfig>>({});\n\n const findActiveFunProvider = useMemo(() => {\n return (el: Element | null) => {\n if (!el) return null;\n const providers = providerStore.findProvidersForElement(el);\n for (const provider of providers) {\n if (\n provider.scoped &&\n !provider.disabled &&\n isFunModeEnabled(provider.theme)\n ) {\n return provider;\n }\n }\n return null;\n };\n }, [providerStore]);\n\n useEffect(() => {\n const handleMove = (event: PointerEvent) => {\n const el = document.elementFromPoint(event.clientX, event.clientY);\n const provider = findActiveFunProvider(el as Element | null);\n\n if (!provider || !provider.containerRef.current) {\n if (activeProviderRef.current !== null) {\n activeProviderRef.current = null;\n setConfig({ mode: \"normal\" });\n }\n return;\n }\n\n if (activeProviderRef.current === provider.id) {\n return;\n }\n\n activeProviderRef.current = provider.id;\n if (!cachedConfigs.current[provider.id]) {\n cachedConfigs.current[provider.id] = {\n mode: \"fun\",\n funConfig: buildFunConfig(\n provider.theme,\n provider.containerRef.current,\n ),\n };\n }\n setConfig(cachedConfigs.current[provider.id]);\n };\n\n window.addEventListener(\"pointermove\", handleMove, { passive: true });\n return () => {\n window.removeEventListener(\"pointermove\", handleMove);\n };\n }, [findActiveFunProvider, setConfig]);\n\n return null;\n}\n\nexport default FunModeBridge;\n","\"use client\";\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport {\n InspectDialog,\n type PinnedPosition,\n type CompactModeConfig,\n} from \"./InspectDialog\";\nimport type { IDEConfig } from \"../ide\";\nimport type { HighlightColors } from \"../types\";\n\n/**\n * Custom event name for triggering the inspect dialog\n */\nexport const INSPECT_DIALOG_EVENT = \"anyclick:inspect\";\n\n/**\n * Custom event detail for the inspect dialog\n */\nexport interface InspectDialogEventDetail {\n targetElement: Element;\n}\n\n/**\n * Dispatch an event to open the inspect dialog for an element\n */\nexport function openInspectDialog(targetElement: Element): void {\n if (typeof window === \"undefined\") return;\n\n const event = new CustomEvent<InspectDialogEventDetail>(\n INSPECT_DIALOG_EVENT,\n {\n detail: { targetElement },\n bubbles: true,\n cancelable: true,\n },\n );\n\n window.dispatchEvent(event);\n}\n\n/**\n * Props for InspectDialogManager\n */\nexport interface InspectDialogManagerProps {\n /** IDE configuration for \"Open in IDE\" feature */\n ideConfig?: Partial<IDEConfig>;\n /** Custom styles for the dialog */\n dialogStyle?: React.CSSProperties;\n /** Custom class name for the dialog */\n dialogClassName?: string;\n /** Custom highlight colors for the element highlight */\n highlightColors?: HighlightColors;\n /** Whether to show box model overlay (padding/margin visualization). Defaults to true. */\n showBoxModelOverlay?: boolean;\n /** Initial pinned position for the dialog. Defaults to \"floating\" (centered) */\n initialPinnedPosition?: PinnedPosition;\n /** Custom compact mode configuration. Partially override DEFAULT_COMPACT_CONFIG */\n compactConfig?: Partial<CompactModeConfig>;\n}\n\n/**\n * InspectDialogManager - A component that listens for inspect events and renders the dialog\n *\n * Place this component once in your app (e.g., alongside AnyclickProvider) to enable\n * the inspect dialog functionality from the chrome preset.\n *\n * @example\n * ```tsx\n * <AnyclickProvider adapter={adapter}>\n * <InspectDialogManager ideConfig={{ protocol: \"cursor\", basePath: \"/Users/me/project\" }} />\n * {children}\n * </AnyclickProvider>\n * ```\n */\nexport function InspectDialogManager({\n ideConfig,\n dialogStyle,\n dialogClassName,\n highlightColors,\n showBoxModelOverlay = true,\n initialPinnedPosition = \"floating\",\n compactConfig,\n}: InspectDialogManagerProps) {\n const [visible, setVisible] = useState(false);\n const [targetElement, setTargetElement] = useState<Element | null>(null);\n\n const handleClose = useCallback(() => {\n setVisible(false);\n setTargetElement(null);\n }, []);\n\n // Handle selecting a different element (e.g., from modified elements list)\n const handleSelectElement = useCallback((element: Element) => {\n setTargetElement(element);\n // Keep dialog visible, just switch the target\n }, []);\n\n useEffect(() => {\n const handleInspectEvent = (event: Event) => {\n const customEvent = event as CustomEvent<InspectDialogEventDetail>;\n if (customEvent.detail?.targetElement) {\n setTargetElement(customEvent.detail.targetElement);\n setVisible(true);\n }\n };\n\n window.addEventListener(INSPECT_DIALOG_EVENT, handleInspectEvent);\n\n return () => {\n window.removeEventListener(INSPECT_DIALOG_EVENT, handleInspectEvent);\n };\n }, []);\n\n return (\n <InspectDialog\n visible={visible}\n targetElement={targetElement}\n onClose={handleClose}\n onSelectElement={handleSelectElement}\n ideConfig={ideConfig}\n style={dialogStyle}\n className={dialogClassName}\n highlightColors={highlightColors}\n showBoxModelOverlay={showBoxModelOverlay}\n initialPinnedPosition={initialPinnedPosition}\n compactConfig={compactConfig}\n />\n );\n}\n\nexport default InspectDialogManager;\n","\"use client\";\n\nimport React, {\n useState,\n useEffect,\n useCallback,\n useRef,\n createContext,\n useContext,\n} from \"react\";\nimport {\n getElementInspectInfo,\n formatStylesAsCSS,\n type ElementInspectInfo,\n type BoxModelInfo,\n} from \"@ewjdev/anyclick-core\";\nimport {\n openInIDE,\n findSourceLocationInAncestors,\n formatSourceLocation,\n type IDEConfig,\n type SourceLocation,\n} from \"../ide\";\nimport { highlightTarget, clearHighlights } from \"../highlight\";\nimport { generateCompactStyles, type HighlightColors } from \"../types\";\nimport {\n useInspectStore,\n generateElementId,\n getElementDescription as getModElementDescription,\n type ElementModification,\n} from \"./inspectStore\";\nimport {\n X,\n Copy,\n Check,\n ChevronDown,\n ChevronRight,\n ExternalLink,\n Code,\n Accessibility,\n Palette,\n Box,\n Type,\n Layout,\n Trash2,\n GripVertical,\n PanelLeft,\n PanelRight,\n PanelTop,\n PanelBottom,\n Maximize2,\n FileCode,\n Layers,\n ArrowDown,\n RotateCcw,\n History,\n} from \"lucide-react\";\nimport ElementHierarchyNav, { isBlacklisted } from \"./ElementHierarchyNav\";\n\n/**\n * Types of style origins\n */\ntype StyleOriginType =\n | \"inline\"\n | \"stylesheet\"\n | \"inherited\"\n | \"user-agent\"\n | \"initial\";\n\n/**\n * Information about where a style comes from\n */\ninterface StyleOrigin {\n type: StyleOriginType;\n selector?: string;\n specificity?: string;\n sourceFile?: string;\n lineNumber?: number;\n inherited?: boolean;\n inheritedFrom?: string;\n rulePriority?: number;\n isImportant?: boolean;\n}\n\n/**\n * Get the origin of a computed style property\n */\nfunction getStyleOrigin(element: Element, property: string): StyleOrigin {\n const kebabProperty = property.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n\n // Check if it's an inline style\n if (element instanceof HTMLElement) {\n const inlineValue = element.style.getPropertyValue(kebabProperty);\n if (inlineValue) {\n return {\n type: \"inline\",\n selector: \"element.style\",\n isImportant:\n element.style.getPropertyPriority(kebabProperty) === \"important\",\n };\n }\n }\n\n // Try to find the style in stylesheets\n const matchedRules = findMatchingCSSRules(element, kebabProperty);\n if (matchedRules.length > 0) {\n // Get the highest priority rule (last one wins in CSS, unless !important)\n const winningRule = matchedRules[matchedRules.length - 1];\n return {\n type: \"stylesheet\",\n selector: winningRule.selector,\n specificity: winningRule.specificity,\n sourceFile: winningRule.sourceFile,\n isImportant: winningRule.isImportant,\n rulePriority: matchedRules.length,\n };\n }\n\n // Check if inherited from parent\n const inheritedOrigin = checkInheritedStyle(element, kebabProperty);\n if (inheritedOrigin) {\n return inheritedOrigin;\n }\n\n // Default to user-agent or initial\n return {\n type: \"user-agent\",\n selector: \"browser default\",\n };\n}\n\n/**\n * Find CSS rules that match an element and contain a property\n */\nfunction findMatchingCSSRules(\n element: Element,\n property: string,\n): Array<{\n selector: string;\n specificity: string;\n sourceFile?: string;\n isImportant: boolean;\n}> {\n const matchedRules: Array<{\n selector: string;\n specificity: string;\n sourceFile?: string;\n isImportant: boolean;\n }> = [];\n\n try {\n // Iterate through all stylesheets\n for (let i = 0; i < document.styleSheets.length; i++) {\n const sheet = document.styleSheets[i];\n let rules: CSSRuleList;\n\n try {\n rules = sheet.cssRules || sheet.rules;\n } catch {\n // Cross-origin stylesheets throw security errors\n continue;\n }\n\n if (!rules) continue;\n\n const sourceFile = sheet.href\n ? new URL(sheet.href).pathname.split(\"/\").pop()\n : \"inline <style>\";\n\n for (let j = 0; j < rules.length; j++) {\n const rule = rules[j];\n if (rule instanceof CSSStyleRule) {\n try {\n if (element.matches(rule.selectorText)) {\n const value = rule.style.getPropertyValue(property);\n if (value) {\n matchedRules.push({\n selector: rule.selectorText,\n specificity: calculateSpecificity(rule.selectorText),\n sourceFile,\n isImportant:\n rule.style.getPropertyPriority(property) === \"important\",\n });\n }\n }\n } catch {\n // Invalid selector, skip\n }\n }\n }\n }\n } catch {\n // Fallback if stylesheet access fails\n }\n\n // Sort by specificity (simplified)\n return matchedRules.sort((a, b) => {\n if (a.isImportant !== b.isImportant) {\n return a.isImportant ? 1 : -1;\n }\n return 0;\n });\n}\n\n/**\n * Calculate CSS specificity (simplified version)\n */\nfunction calculateSpecificity(selector: string): string {\n let ids = 0;\n let classes = 0;\n let elements = 0;\n\n // Count IDs\n ids = (selector.match(/#[\\w-]+/g) || []).length;\n // Count classes, attributes, pseudo-classes\n classes = (selector.match(/\\.[\\w-]+|\\[.*?\\]|:(?!:)[\\w-]+/g) || []).length;\n // Count elements and pseudo-elements\n elements = (selector.match(/^[\\w-]+|[\\s>+~][\\w-]+|::[\\w-]+/g) || []).length;\n\n return `(${ids},${classes},${elements})`;\n}\n\n/**\n * Check if a style is inherited from a parent element\n */\nfunction checkInheritedStyle(\n element: Element,\n property: string,\n): StyleOrigin | null {\n // List of inheritable properties\n const inheritableProperties = [\n \"color\",\n \"font-family\",\n \"font-size\",\n \"font-style\",\n \"font-weight\",\n \"letter-spacing\",\n \"line-height\",\n \"text-align\",\n \"text-indent\",\n \"text-transform\",\n \"visibility\",\n \"white-space\",\n \"word-spacing\",\n \"cursor\",\n \"direction\",\n \"quotes\",\n \"list-style\",\n \"list-style-type\",\n \"list-style-position\",\n \"list-style-image\",\n ];\n\n if (!inheritableProperties.includes(property)) {\n return null;\n }\n\n let parent = element.parentElement;\n let depth = 0;\n const maxDepth = 10;\n\n while (parent && depth < maxDepth) {\n // Check inline style on parent\n if (parent instanceof HTMLElement) {\n const parentInlineValue = parent.style.getPropertyValue(property);\n if (parentInlineValue) {\n return {\n type: \"inherited\",\n inheritedFrom: getElementDescription(parent),\n selector: \"element.style\",\n };\n }\n }\n\n // Check stylesheets for parent\n const parentRules = findMatchingCSSRules(parent, property);\n if (parentRules.length > 0) {\n const winningRule = parentRules[parentRules.length - 1];\n return {\n type: \"inherited\",\n inheritedFrom: getElementDescription(parent),\n selector: winningRule.selector,\n sourceFile: winningRule.sourceFile,\n };\n }\n\n parent = parent.parentElement;\n depth++;\n }\n\n return null;\n}\n\n/**\n * Get a short description of an element\n */\nfunction getElementDescription(element: Element): string {\n let desc = element.tagName.toLowerCase();\n if (element.id) {\n desc += `#${element.id}`;\n } else if (element.className && typeof element.className === \"string\") {\n const firstClass = element.className.split(\" \")[0];\n if (firstClass) {\n desc += `.${firstClass}`;\n }\n }\n return desc;\n}\n\n/**\n * Position where the dialog is pinned\n */\nexport type PinnedPosition = \"left\" | \"right\" | \"top\" | \"bottom\" | \"floating\";\n\n/**\n * Compact mode configuration type\n * Adjust these values to control compact styling\n */\nexport interface CompactModeConfig {\n /** Base scaling factor (0.75 = 75% of normal size) */\n scale: number;\n /** Font sizes in pixels */\n fonts: {\n base: number; // Dialog base font\n title: number; // Header title\n tag: number; // Element tag/id/classes\n selector: number; // Selector code\n section: number; // Section headers\n badge: number; // Badges\n property: number; // Property labels/values\n styleRow: number; // Style property rows\n button: number; // Action buttons\n };\n /** Spacing (padding/margins) as CSS values */\n spacing: {\n headerPadding: string;\n identityPadding: string;\n sectionHeaderPadding: string;\n sectionContentPadding: string;\n footerPadding: string;\n selectorCodePadding: string;\n buttonPadding: string;\n buttonPrimaryPadding: string;\n buttonDangerPadding: string;\n badgePadding: string;\n propertyRowPadding: string;\n styleRowPadding: string;\n };\n /** Gap values as CSS values */\n gaps: {\n headerTitle: string;\n pinButtons: string;\n propertyRow: string;\n propertyValue: string;\n button: string;\n footer: string;\n };\n /** Size values in pixels */\n sizes: {\n dialogWidth: number;\n closeButton: number;\n copyButtonSmall: number;\n styleValueMaxWidth: number;\n categoryMarginBottom: number;\n styleCategoryHeaderMarginBottom: number;\n };\n /** Letter spacing values */\n letterSpacing: {\n sectionTitle: string;\n };\n}\n\n/**\n * Default compact mode configuration\n * Use this as a base to create custom configurations\n */\nexport const DEFAULT_COMPACT_CONFIG: CompactModeConfig = {\n scale: 0.5,\n fonts: {\n base: 9,\n title: 11,\n tag: 10,\n selector: 9,\n section: 9,\n badge: 8,\n property: 9,\n styleRow: 8,\n button: 9,\n },\n spacing: {\n headerPadding: \"4px 8px\",\n identityPadding: \"8px 12px\",\n sectionHeaderPadding: \"4px 10px\",\n sectionContentPadding: \"0 10px 6px 20px\",\n footerPadding: \"6px 10px\",\n selectorCodePadding: \"4px 8px\",\n buttonPadding: \"4px 8px\",\n buttonPrimaryPadding: \"4px 10px\",\n buttonDangerPadding: \"4px 6px\",\n badgePadding: \"1px 4px\",\n propertyRowPadding: \"2px 0\",\n styleRowPadding: \"1px 0\",\n },\n gaps: {\n headerTitle: \"6px\",\n pinButtons: \"1px\",\n propertyRow: \"8px\",\n propertyValue: \"4px\",\n button: \"3px\",\n footer: \"6px\",\n },\n sizes: {\n dialogWidth: 320,\n closeButton: 24,\n copyButtonSmall: 18,\n styleValueMaxWidth: 150,\n categoryMarginBottom: 8,\n styleCategoryHeaderMarginBottom: 2,\n },\n letterSpacing: {\n sectionTitle: \"0.3px\",\n },\n};\n\n/**\n * Context for compact mode (when pinned to edges)\n */\ninterface CompactModeContextValue {\n isCompact: boolean;\n styles: Record<string, React.CSSProperties>;\n}\n\nconst CompactModeContext = createContext<CompactModeContextValue>({\n isCompact: false,\n styles: {}, // Empty default, will be provided by Provider\n});\n\nconst useCompactMode = () => {\n const { isCompact, styles } = useContext(CompactModeContext);\n return { isCompact, compactStyles: styles };\n};\n\n/**\n * Context for target element editing\n */\ninterface TargetElementContextValue {\n element: Element | null;\n refreshInfo: () => void;\n}\n\nconst TargetElementContext = createContext<TargetElementContextValue>({\n element: null,\n refreshInfo: () => {},\n});\n\nconst useTargetElement = () => useContext(TargetElementContext);\n\n/**\n * Editable value component - click to edit inline\n */\nfunction EditableValue({\n value,\n onSave,\n mono = false,\n placeholder = \"value\",\n}: {\n value: string;\n onSave: (newValue: string) => void;\n mono?: boolean;\n placeholder?: string;\n}) {\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const { isCompact, compactStyles } = useCompactMode();\n\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n useEffect(() => {\n setEditValue(value);\n }, [value]);\n\n const handleSave = () => {\n if (editValue !== value) {\n onSave(editValue);\n }\n setIsEditing(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n handleSave();\n } else if (e.key === \"Escape\") {\n setEditValue(value);\n setIsEditing(false);\n }\n };\n\n if (isEditing) {\n return (\n <input\n ref={inputRef}\n type=\"text\"\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n style={{\n ...editableStyles.input,\n ...(isCompact ? editableStyles.inputCompact : {}),\n ...(mono ? inspectStyles.mono : {}),\n }}\n />\n );\n }\n\n return (\n <span\n onClick={() => setIsEditing(true)}\n style={{\n ...editableStyles.value,\n ...(mono ? inspectStyles.mono : {}),\n cursor: \"pointer\",\n }}\n title=\"Click to edit\"\n >\n {value || <span style={{ opacity: 0.5 }}>{placeholder}</span>}\n </span>\n );\n}\n\n/**\n * Editable style row - for editing CSS properties\n */\nfunction EditableStyleRow({\n prop,\n value,\n onValueChange,\n onDelete,\n}: {\n prop: string;\n value: string;\n onValueChange: (prop: string, newValue: string) => void;\n onDelete?: (prop: string) => void;\n}) {\n const { isCompact, compactStyles } = useCompactMode();\n\n return (\n <div\n style={{\n ...inspectStyles.styleRow,\n ...(isCompact ? compactStyles.styleRow : {}),\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <span style={{ ...inspectStyles.styleProp, flex: \"0 0 auto\" }}>\n {camelToKebab(prop)}:\n </span>\n <EditableValue\n value={value}\n onSave={(newValue) => onValueChange(prop, newValue)}\n mono\n placeholder=\"value\"\n />\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(prop)}\n style={editableStyles.deleteButton}\n title=\"Remove style\"\n >\n ×\n </button>\n )}\n </div>\n );\n}\n\n/**\n * Add new style/attribute row\n */\nfunction AddNewRow({\n onAdd,\n propPlaceholder = \"property\",\n valuePlaceholder = \"value\",\n}: {\n onAdd: (prop: string, value: string) => void;\n propPlaceholder?: string;\n valuePlaceholder?: string;\n}) {\n const [isAdding, setIsAdding] = useState(false);\n const [newProp, setNewProp] = useState(\"\");\n const [newValue, setNewValue] = useState(\"\");\n const propInputRef = useRef<HTMLInputElement>(null);\n const { isCompact, compactStyles } = useCompactMode();\n\n useEffect(() => {\n if (isAdding && propInputRef.current) {\n propInputRef.current.focus();\n }\n }, [isAdding]);\n\n const handleAdd = () => {\n if (newProp.trim() && newValue.trim()) {\n onAdd(newProp.trim(), newValue.trim());\n setNewProp(\"\");\n setNewValue(\"\");\n setIsAdding(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n handleAdd();\n } else if (e.key === \"Escape\") {\n setNewProp(\"\");\n setNewValue(\"\");\n setIsAdding(false);\n }\n };\n\n if (!isAdding) {\n return (\n <button\n type=\"button\"\n onClick={() => setIsAdding(true)}\n style={editableStyles.addButton}\n >\n + Add {propPlaceholder}\n </button>\n );\n }\n\n return (\n <div\n style={{\n ...inspectStyles.styleRow,\n ...(isCompact ? compactStyles.styleRow : {}),\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <input\n ref={propInputRef}\n type=\"text\"\n value={newProp}\n onChange={(e) => setNewProp(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={propPlaceholder}\n style={{\n ...editableStyles.input,\n ...(isCompact ? editableStyles.inputCompact : {}),\n width: \"80px\",\n flex: \"0 0 auto\",\n }}\n />\n <span style={{ color: \"#666\" }}>:</span>\n <input\n type=\"text\"\n value={newValue}\n onChange={(e) => setNewValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={valuePlaceholder}\n style={{\n ...editableStyles.input,\n ...(isCompact ? editableStyles.inputCompact : {}),\n flex: 1,\n }}\n />\n <button\n type=\"button\"\n onClick={handleAdd}\n style={editableStyles.confirmButton}\n title=\"Add\"\n >\n ✓\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setNewProp(\"\");\n setNewValue(\"\");\n setIsAdding(false);\n }}\n style={editableStyles.cancelButton}\n title=\"Cancel\"\n >\n ×\n </button>\n </div>\n );\n}\n\n/**\n * Editable attribute row\n */\nfunction EditableAttributeRow({\n name,\n value,\n onValueChange,\n onDelete,\n}: {\n name: string;\n value: string;\n onValueChange: (name: string, newValue: string) => void;\n onDelete?: (name: string) => void;\n}) {\n const { isCompact, compactStyles } = useCompactMode();\n\n return (\n <div\n style={{\n ...inspectStyles.propertyRow,\n ...(isCompact ? compactStyles.propertyRow : {}),\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <span\n style={{\n ...inspectStyles.propertyLabel,\n ...(isCompact ? compactStyles.propertyLabel : {}),\n flex: \"0 0 auto\",\n }}\n >\n {name}\n </span>\n <span\n style={{\n ...inspectStyles.propertyValue,\n ...(isCompact ? compactStyles.propertyValue : {}),\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <EditableValue\n value={value}\n onSave={(newValue) => onValueChange(name, newValue)}\n mono\n placeholder=\"value\"\n />\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(name)}\n style={editableStyles.deleteButton}\n title=\"Remove attribute\"\n >\n ×\n </button>\n )}\n </span>\n </div>\n );\n}\n\n/**\n * Props for the InspectDialog component\n */\nexport interface InspectDialogProps {\n /** Whether the dialog is visible */\n visible: boolean;\n /** The element being inspected */\n targetElement: Element | null;\n /** Callback when dialog is closed */\n onClose: () => void;\n /** Callback when selecting a different element (e.g., from modified elements list) */\n onSelectElement?: (element: Element) => void;\n /** IDE configuration for \"Open in IDE\" feature */\n ideConfig?: Partial<IDEConfig>;\n /** Custom styles for the dialog */\n style?: React.CSSProperties;\n /** Custom class name */\n className?: string;\n /** Custom highlight colors */\n highlightColors?: HighlightColors;\n /** Whether to show box model overlay (padding/margin visualization) */\n showBoxModelOverlay?: boolean;\n /** Initial pinned position. Defaults to \"floating\" (centered) */\n initialPinnedPosition?: PinnedPosition;\n /** Custom compact mode configuration. Partially override DEFAULT_COMPACT_CONFIG */\n compactConfig?: Partial<CompactModeConfig>;\n}\n\n/**\n * Box Model Overlay - renders visual padding and margin indicators\n */\nfunction BoxModelOverlay({\n boxModel,\n visible,\n}: {\n boxModel: BoxModelInfo;\n visible: boolean;\n}) {\n if (!visible) return null;\n\n const { position, content, padding, margin } = boxModel;\n\n // Calculate positions for each layer\n const marginRect = {\n top: position.top - margin.top,\n left: position.left - margin.left,\n width:\n content.width + padding.left + padding.right + margin.left + margin.right,\n height:\n content.height +\n padding.top +\n padding.bottom +\n margin.top +\n margin.bottom,\n };\n\n const paddingRect = {\n top: position.top,\n left: position.left,\n width: content.width + padding.left + padding.right,\n height: content.height + padding.top + padding.bottom,\n };\n\n const contentRect = {\n top: position.top + padding.top,\n left: position.left + padding.left,\n width: content.width,\n height: content.height,\n };\n\n return (\n <div style={boxModelOverlayStyles.container}>\n {/* Margin layer (orange) */}\n {(margin.top > 0 ||\n margin.right > 0 ||\n margin.bottom > 0 ||\n margin.left > 0) && (\n <>\n {/* Top margin */}\n {margin.top > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.marginBox,\n top: marginRect.top,\n left: marginRect.left,\n width: marginRect.width,\n height: margin.top,\n }}\n />\n )}\n {/* Right margin */}\n {margin.right > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.marginBox,\n top: position.top,\n left: position.left + paddingRect.width,\n width: margin.right,\n height: paddingRect.height,\n }}\n />\n )}\n {/* Bottom margin */}\n {margin.bottom > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.marginBox,\n top: position.top + paddingRect.height,\n left: marginRect.left,\n width: marginRect.width,\n height: margin.bottom,\n }}\n />\n )}\n {/* Left margin */}\n {margin.left > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.marginBox,\n top: position.top,\n left: marginRect.left,\n width: margin.left,\n height: paddingRect.height,\n }}\n />\n )}\n </>\n )}\n\n {/* Padding layer (green) */}\n {(padding.top > 0 ||\n padding.right > 0 ||\n padding.bottom > 0 ||\n padding.left > 0) && (\n <>\n {/* Top padding */}\n {padding.top > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.paddingBox,\n top: paddingRect.top,\n left: paddingRect.left,\n width: paddingRect.width,\n height: padding.top,\n }}\n />\n )}\n {/* Right padding */}\n {padding.right > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.paddingBox,\n top: paddingRect.top + padding.top,\n left: paddingRect.left + padding.left + content.width,\n width: padding.right,\n height: content.height,\n }}\n />\n )}\n {/* Bottom padding */}\n {padding.bottom > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.paddingBox,\n top: contentRect.top + content.height,\n left: paddingRect.left,\n width: paddingRect.width,\n height: padding.bottom,\n }}\n />\n )}\n {/* Left padding */}\n {padding.left > 0 && (\n <div\n style={{\n ...boxModelOverlayStyles.paddingBox,\n top: paddingRect.top + padding.top,\n left: paddingRect.left,\n width: padding.left,\n height: content.height,\n }}\n />\n )}\n </>\n )}\n\n {/* Content layer (blue) */}\n <div\n style={{\n ...boxModelOverlayStyles.contentBox,\n top: contentRect.top,\n left: contentRect.left,\n width: content.width,\n height: content.height,\n }}\n />\n </div>\n );\n}\n\nconst boxModelOverlayStyles: Record<string, React.CSSProperties> = {\n container: {\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100vw\",\n height: \"100vh\",\n pointerEvents: \"none\",\n zIndex: 9998,\n },\n marginBox: {\n position: \"fixed\",\n backgroundColor: \"rgba(255, 155, 0, 0.3)\",\n pointerEvents: \"none\",\n },\n paddingBox: {\n position: \"fixed\",\n backgroundColor: \"rgba(125, 200, 100, 0.4)\",\n pointerEvents: \"none\",\n },\n contentBox: {\n position: \"fixed\",\n backgroundColor: \"rgba(100, 150, 255, 0.25)\",\n pointerEvents: \"none\",\n },\n};\n\n/**\n * Collapsible section component\n */\nfunction Section({\n title,\n icon,\n defaultOpen = false,\n children,\n badge,\n}: {\n title: string;\n icon?: React.ReactNode;\n defaultOpen?: boolean;\n children: React.ReactNode;\n badge?: string;\n}) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const { isCompact, compactStyles } = useCompactMode();\n\n return (\n <div style={inspectStyles.section}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={{\n ...inspectStyles.sectionHeader,\n ...(isCompact ? compactStyles.sectionHeader : {}),\n }}\n >\n <span style={inspectStyles.sectionHeaderLeft}>\n {isOpen ? (\n <ChevronDown size={isCompact ? 12 : 14} />\n ) : (\n <ChevronRight size={isCompact ? 12 : 14} />\n )}\n {icon && <span style={inspectStyles.sectionIcon}>{icon}</span>}\n <span\n style={{\n ...inspectStyles.sectionTitle,\n ...(isCompact ? compactStyles.sectionTitle : {}),\n }}\n >\n {title}\n </span>\n </span>\n {badge && (\n <span\n style={{\n ...inspectStyles.badge,\n ...(isCompact ? compactStyles.badge : {}),\n }}\n >\n {badge}\n </span>\n )}\n </button>\n {isOpen && (\n <div\n style={{\n ...inspectStyles.sectionContent,\n ...(isCompact ? compactStyles.sectionContent : {}),\n }}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Copy button component with feedback\n */\nfunction CopyButton({\n text,\n label,\n size = \"small\",\n}: {\n text: string;\n label?: string;\n size?: \"small\" | \"medium\";\n}) {\n const [copied, setCopied] = useState(false);\n const { isCompact, compactStyles } = useCompactMode();\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n };\n\n const buttonStyle =\n size === \"small\" ? inspectStyles.copyButtonSmall : inspectStyles.copyButton;\n const iconSize = isCompact\n ? size === \"small\"\n ? 10\n : 12\n : size === \"small\"\n ? 12\n : 14;\n\n return (\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...buttonStyle,\n ...(isCompact ? compactStyles.copyButtonSmall : {}),\n }}\n title={`Copy ${label || \"to clipboard\"}`}\n >\n {copied ? (\n <>\n <Check size={iconSize} />\n {label && size !== \"small\" && <span>Copied!</span>}\n </>\n ) : (\n <>\n <Copy size={iconSize} />\n {label && size !== \"small\" && <span>{label}</span>}\n </>\n )}\n </button>\n );\n}\n\n/**\n * Property row component\n */\nfunction PropertyRow({\n label,\n value,\n mono = false,\n copyable = false,\n}: {\n label: string;\n value: string;\n mono?: boolean;\n copyable?: boolean;\n}) {\n const { isCompact, compactStyles } = useCompactMode();\n\n return (\n <div\n style={{\n ...inspectStyles.propertyRow,\n ...(isCompact ? compactStyles.propertyRow : {}),\n }}\n >\n <span\n style={{\n ...inspectStyles.propertyLabel,\n ...(isCompact ? compactStyles.propertyLabel : {}),\n }}\n >\n {label}\n </span>\n <span\n style={{\n ...inspectStyles.propertyValue,\n ...(isCompact ? compactStyles.propertyValue : {}),\n ...(mono ? inspectStyles.mono : {}),\n }}\n >\n {value}\n {copyable && <CopyButton text={value} size=\"small\" />}\n </span>\n </div>\n );\n}\n\n/**\n * Style origin badge colors and icons\n */\nconst styleOriginConfig: Record<\n StyleOriginType,\n { color: string; bgColor: string; label: string }\n> = {\n inline: {\n color: \"#f97316\",\n bgColor: \"rgba(249, 115, 22, 0.15)\",\n label: \"inline\",\n },\n stylesheet: {\n color: \"#22c55e\",\n bgColor: \"rgba(34, 197, 94, 0.15)\",\n label: \"css\",\n },\n inherited: {\n color: \"#a855f7\",\n bgColor: \"rgba(168, 85, 247, 0.15)\",\n label: \"inherited\",\n },\n \"user-agent\": {\n color: \"#6b7280\",\n bgColor: \"rgba(107, 114, 128, 0.15)\",\n label: \"default\",\n },\n initial: {\n color: \"#6b7280\",\n bgColor: \"rgba(107, 114, 128, 0.15)\",\n label: \"initial\",\n },\n};\n\n/**\n * Style origin badge component\n */\nfunction StyleOriginBadge({\n origin,\n compact = false,\n}: {\n origin: StyleOrigin;\n compact?: boolean;\n}) {\n const [showDetails, setShowDetails] = useState(false);\n const config = styleOriginConfig[origin.type];\n\n const getIcon = () => {\n switch (origin.type) {\n case \"inline\":\n return <Code size={compact ? 8 : 10} />;\n case \"stylesheet\":\n return <FileCode size={compact ? 8 : 10} />;\n case \"inherited\":\n return <ArrowDown size={compact ? 8 : 10} />;\n default:\n return <Layers size={compact ? 8 : 10} />;\n }\n };\n\n return (\n <div style={{ position: \"relative\", display: \"inline-flex\" }}>\n <button\n type=\"button\"\n onClick={() => setShowDetails(!showDetails)}\n style={{\n ...styleOriginStyles.badge,\n backgroundColor: config.bgColor,\n color: config.color,\n fontSize: compact ? \"7px\" : \"8px\",\n padding: compact ? \"1px 3px\" : \"2px 4px\",\n }}\n title={`Click for details - ${origin.type}`}\n >\n {getIcon()}\n {!compact && <span>{config.label}</span>}\n </button>\n\n {showDetails && (\n <div style={styleOriginStyles.tooltip}>\n <div style={styleOriginStyles.tooltipHeader}>\n <span style={{ color: config.color, fontWeight: 600 }}>\n {origin.type.charAt(0).toUpperCase() + origin.type.slice(1)}\n </span>\n <button\n type=\"button\"\n onClick={() => setShowDetails(false)}\n style={styleOriginStyles.tooltipClose}\n >\n ×\n </button>\n </div>\n <div style={styleOriginStyles.tooltipContent}>\n {origin.selector && (\n <div style={styleOriginStyles.tooltipRow}>\n <span style={styleOriginStyles.tooltipLabel}>Selector:</span>\n <code style={styleOriginStyles.tooltipCode}>\n {origin.selector}\n </code>\n </div>\n )}\n {origin.sourceFile && (\n <div style={styleOriginStyles.tooltipRow}>\n <span style={styleOriginStyles.tooltipLabel}>Source:</span>\n <code style={styleOriginStyles.tooltipCode}>\n {origin.sourceFile}\n </code>\n </div>\n )}\n {origin.specificity && (\n <div style={styleOriginStyles.tooltipRow}>\n <span style={styleOriginStyles.tooltipLabel}>Specificity:</span>\n <code style={styleOriginStyles.tooltipCode}>\n {origin.specificity}\n </code>\n </div>\n )}\n {origin.inheritedFrom && (\n <div style={styleOriginStyles.tooltipRow}>\n <span style={styleOriginStyles.tooltipLabel}>From:</span>\n <code style={styleOriginStyles.tooltipCode}>\n {origin.inheritedFrom}\n </code>\n </div>\n )}\n {origin.isImportant && (\n <div style={styleOriginStyles.tooltipRow}>\n <span style={{ color: \"#ef4444\", fontSize: \"9px\" }}>\n !important\n </span>\n </div>\n )}\n {origin.rulePriority && origin.rulePriority > 1 && (\n <div style={styleOriginStyles.tooltipRow}>\n <span style={styleOriginStyles.tooltipLabel}>Rules:</span>\n <span style={{ fontSize: \"9px\", color: \"#888\" }}>\n {origin.rulePriority} matching rules\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Computed style row with origin tracing\n */\nfunction ComputedStyleRow({\n prop,\n value,\n element,\n}: {\n prop: string;\n value: string;\n element: Element | null;\n}) {\n const { isCompact, compactStyles } = useCompactMode();\n const [origin, setOrigin] = useState<StyleOrigin | null>(null);\n\n useEffect(() => {\n if (element) {\n const styleOrigin = getStyleOrigin(element, prop);\n setOrigin(styleOrigin);\n }\n }, [element, prop]);\n\n return (\n <div\n style={{\n ...inspectStyles.styleRow,\n ...(isCompact ? compactStyles.styleRow : {}),\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <span style={{ ...inspectStyles.styleProp, flex: \"0 0 auto\" }}>\n {camelToKebab(prop)}\n </span>\n <span\n style={{\n ...inspectStyles.styleValue,\n ...(isCompact ? compactStyles.styleValue : {}),\n flex: 1,\n }}\n >\n {value}\n </span>\n {origin && <StyleOriginBadge origin={origin} compact={isCompact} />}\n </div>\n );\n}\n\n/**\n * Editable styles section for computed styles display\n */\nfunction StylesSection({\n styles,\n category,\n editable = false,\n showOrigin = false,\n}: {\n styles: Record<string, string>;\n category: string;\n editable?: boolean;\n showOrigin?: boolean;\n}) {\n const entries = Object.entries(styles);\n const { isCompact, compactStyles } = useCompactMode();\n const { element, refreshInfo } = useTargetElement();\n\n const handleStyleChange = useCallback(\n (prop: string, newValue: string) => {\n if (!element || !(element instanceof HTMLElement)) return;\n const kebabProp = camelToKebab(prop);\n element.style.setProperty(kebabProp, newValue);\n refreshInfo();\n },\n [element, refreshInfo],\n );\n\n const handleStyleDelete = useCallback(\n (prop: string) => {\n if (!element || !(element instanceof HTMLElement)) return;\n const kebabProp = camelToKebab(prop);\n element.style.removeProperty(kebabProp);\n refreshInfo();\n },\n [element, refreshInfo],\n );\n\n const handleAddStyle = useCallback(\n (prop: string, value: string) => {\n if (!element || !(element instanceof HTMLElement)) return;\n element.style.setProperty(prop, value);\n refreshInfo();\n },\n [element, refreshInfo],\n );\n\n if (entries.length === 0 && !editable) return null;\n\n return (\n <div\n style={{\n ...inspectStyles.styleCategory,\n ...(isCompact ? compactStyles.styleCategory : {}),\n }}\n >\n <div\n style={{\n ...inspectStyles.styleCategoryHeader,\n ...(isCompact ? compactStyles.styleCategoryHeader : {}),\n }}\n >\n {category}\n </div>\n {entries.map(([prop, value]) =>\n editable ? (\n <EditableStyleRow\n key={prop}\n prop={prop}\n value={value}\n onValueChange={handleStyleChange}\n onDelete={handleStyleDelete}\n />\n ) : showOrigin ? (\n <ComputedStyleRow\n key={prop}\n prop={prop}\n value={value}\n element={element}\n />\n ) : (\n <div\n key={prop}\n style={{\n ...inspectStyles.styleRow,\n ...(isCompact ? compactStyles.styleRow : {}),\n }}\n >\n <span style={inspectStyles.styleProp}>{camelToKebab(prop)}</span>\n <span\n style={{\n ...inspectStyles.styleValue,\n ...(isCompact ? compactStyles.styleValue : {}),\n }}\n >\n {value}\n </span>\n </div>\n ),\n )}\n {editable && (\n <AddNewRow\n onAdd={handleAddStyle}\n propPlaceholder=\"property\"\n valuePlaceholder=\"value\"\n />\n )}\n </div>\n );\n}\n\nfunction camelToKebab(str: string): string {\n return str.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n}\n\nfunction kebabToCamel(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Editable inline styles section\n */\nfunction EditableStylesSection({\n targetElement,\n refreshInfo,\n}: {\n targetElement: Element | null;\n refreshInfo: () => void;\n}) {\n const { isCompact, compactStyles } = useCompactMode();\n const [inlineStyles, setInlineStyles] = useState<Record<string, string>>({});\n const { trackModification } = useInspectStore();\n\n // Extract inline styles from element\n useEffect(() => {\n if (!targetElement || !(targetElement instanceof HTMLElement)) {\n setInlineStyles({});\n return;\n }\n\n const styles: Record<string, string> = {};\n const styleAttr = targetElement.getAttribute(\"style\");\n if (styleAttr) {\n const declarations = styleAttr.split(\";\").filter(Boolean);\n for (const decl of declarations) {\n const [prop, ...valueParts] = decl.split(\":\");\n if (prop && valueParts.length) {\n const cleanProp = prop.trim();\n const cleanValue = valueParts.join(\":\").trim();\n if (cleanProp && cleanValue) {\n styles[kebabToCamel(cleanProp)] = cleanValue;\n }\n }\n }\n }\n setInlineStyles(styles);\n }, [targetElement]);\n\n const handleStyleChange = useCallback(\n (prop: string, newValue: string) => {\n if (!targetElement || !(targetElement instanceof HTMLElement)) return;\n const kebabProp = camelToKebab(prop);\n const oldValue = targetElement.style.getPropertyValue(kebabProp);\n targetElement.style.setProperty(kebabProp, newValue);\n setInlineStyles((prev) => ({ ...prev, [prop]: newValue }));\n // Track the modification\n trackModification(targetElement, \"style\", kebabProp, oldValue, newValue);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const handleStyleDelete = useCallback(\n (prop: string) => {\n if (!targetElement || !(targetElement instanceof HTMLElement)) return;\n const kebabProp = camelToKebab(prop);\n const oldValue = targetElement.style.getPropertyValue(kebabProp);\n targetElement.style.removeProperty(kebabProp);\n setInlineStyles((prev) => {\n const next = { ...prev };\n delete next[prop];\n return next;\n });\n // Track the modification (null for deleted)\n trackModification(targetElement, \"style\", kebabProp, oldValue, null);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const handleAddStyle = useCallback(\n (prop: string, value: string) => {\n if (!targetElement || !(targetElement instanceof HTMLElement)) return;\n targetElement.style.setProperty(prop, value);\n setInlineStyles((prev) => ({ ...prev, [kebabToCamel(prop)]: value }));\n // Track the modification (null for original since it's new)\n trackModification(targetElement, \"style\", prop, null, value);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const entries = Object.entries(inlineStyles);\n\n return (\n <Section\n title=\"Inline Styles\"\n icon={<Palette size={14} />}\n badge={entries.length > 0 ? `${entries.length}` : \"editable\"}\n defaultOpen\n >\n <div\n style={{\n ...inspectStyles.styleCategory,\n ...(isCompact ? compactStyles.styleCategory : {}),\n }}\n >\n {entries.map(([prop, value]) => (\n <EditableStyleRow\n key={prop}\n prop={prop}\n value={value}\n onValueChange={handleStyleChange}\n onDelete={handleStyleDelete}\n />\n ))}\n <AddNewRow\n onAdd={handleAddStyle}\n propPlaceholder=\"css-property\"\n valuePlaceholder=\"value\"\n />\n </div>\n </Section>\n );\n}\n\n/**\n * Editable data attributes section\n */\nfunction EditableDataAttributesSection({\n targetElement,\n dataAttributes,\n refreshInfo,\n}: {\n targetElement: Element | null;\n dataAttributes: Record<string, string>;\n refreshInfo: () => void;\n}) {\n const { trackModification } = useInspectStore();\n\n const handleAttributeChange = useCallback(\n (name: string, newValue: string) => {\n if (!targetElement) return;\n const oldValue = targetElement.getAttribute(name);\n // name comes as \"data-xxx\" so we can use it directly\n targetElement.setAttribute(name, newValue);\n trackModification(targetElement, \"attribute\", name, oldValue, newValue);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const handleAttributeDelete = useCallback(\n (name: string) => {\n if (!targetElement) return;\n const oldValue = targetElement.getAttribute(name);\n targetElement.removeAttribute(name);\n trackModification(targetElement, \"attribute\", name, oldValue, null);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const handleAddAttribute = useCallback(\n (name: string, value: string) => {\n if (!targetElement) return;\n const attrName = name.startsWith(\"data-\") ? name : `data-${name}`;\n targetElement.setAttribute(attrName, value);\n trackModification(targetElement, \"attribute\", attrName, null, value);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const entries = Object.entries(dataAttributes);\n\n return (\n <Section\n title=\"Data Attributes\"\n icon={<Layout size={14} />}\n badge={entries.length > 0 ? `${entries.length}` : \"editable\"}\n >\n {entries.map(([key, value]) => (\n <EditableAttributeRow\n key={key}\n name={`data-${key}`}\n value={value}\n onValueChange={handleAttributeChange}\n onDelete={handleAttributeDelete}\n />\n ))}\n <AddNewRow\n onAdd={handleAddAttribute}\n propPlaceholder=\"data-name\"\n valuePlaceholder=\"value\"\n />\n </Section>\n );\n}\n\n/**\n * Editable attributes section\n */\nfunction EditableAttributesSection({\n targetElement,\n attributes,\n refreshInfo,\n}: {\n targetElement: Element | null;\n attributes: Record<string, string>;\n refreshInfo: () => void;\n}) {\n const { trackModification } = useInspectStore();\n\n // Filter out special attributes that shouldn't be edited\n const editableAttributes = Object.entries(attributes).filter(\n ([key]) =>\n !key.startsWith(\"aria-\") &&\n !key.startsWith(\"data-\") &&\n key !== \"class\" &&\n key !== \"style\" &&\n key !== \"id\",\n );\n\n const handleAttributeChange = useCallback(\n (name: string, newValue: string) => {\n if (!targetElement) return;\n const oldValue = targetElement.getAttribute(name);\n targetElement.setAttribute(name, newValue);\n trackModification(targetElement, \"attribute\", name, oldValue, newValue);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const handleAttributeDelete = useCallback(\n (name: string) => {\n if (!targetElement) return;\n const oldValue = targetElement.getAttribute(name);\n targetElement.removeAttribute(name);\n trackModification(targetElement, \"attribute\", name, oldValue, null);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n const handleAddAttribute = useCallback(\n (name: string, value: string) => {\n if (!targetElement) return;\n targetElement.setAttribute(name, value);\n trackModification(targetElement, \"attribute\", name, null, value);\n refreshInfo();\n },\n [targetElement, refreshInfo, trackModification],\n );\n\n return (\n <Section\n title=\"Attributes\"\n icon={<Type size={14} />}\n badge={\n editableAttributes.length > 0\n ? `${editableAttributes.length}`\n : \"editable\"\n }\n >\n {editableAttributes.slice(0, 15).map(([key, value]) => (\n <EditableAttributeRow\n key={key}\n name={key}\n value={value}\n onValueChange={handleAttributeChange}\n onDelete={handleAttributeDelete}\n />\n ))}\n <AddNewRow\n onAdd={handleAddAttribute}\n propPlaceholder=\"attribute\"\n valuePlaceholder=\"value\"\n />\n </Section>\n );\n}\n\n/**\n * Pin button component for docking the dialog\n */\nfunction PinButton({\n position,\n currentPosition,\n onClick,\n}: {\n position: PinnedPosition;\n currentPosition: PinnedPosition;\n onClick: (position: PinnedPosition) => void;\n}) {\n const isActive = currentPosition === position;\n const icons: Record<PinnedPosition, React.ReactNode> = {\n left: <PanelLeft size={14} />,\n right: <PanelRight size={14} />,\n top: <PanelTop size={14} />,\n bottom: <PanelBottom size={14} />,\n floating: <Maximize2 size={14} />,\n };\n\n return (\n <button\n type=\"button\"\n onClick={() => onClick(position)}\n style={{\n ...inspectStyles.pinButton,\n backgroundColor: isActive ? \"rgba(59, 130, 246, 0.2)\" : \"transparent\",\n color: isActive ? \"#3b82f6\" : \"#666\",\n }}\n title={`Pin to ${position}`}\n >\n {icons[position]}\n </button>\n );\n}\n\n/**\n * InspectDialog component - displays element inspection information\n */\n/**\n * Modified elements panel - shows list of elements with modifications\n */\nfunction ModifiedElementsPanel({\n onSelectElement,\n onClose,\n highlightColors,\n currentElement,\n}: {\n onSelectElement: (element: Element | null) => void;\n onClose: () => void;\n highlightColors?: HighlightColors;\n currentElement?: Element | null;\n}) {\n const { isCompact, compactStyles } = useCompactMode();\n const {\n modifiedElements,\n deletedElements,\n resetElement,\n getModifiedElementsInDOM,\n } = useInspectStore();\n\n // Track hovered element for highlighting\n const [hoveredElement, setHoveredElement] = useState<Element | null>(null);\n\n // Get modified elements (excluding deleted ones, which are handled separately)\n const modifiedInDOM = getModifiedElementsInDOM().filter(\n (m) => !m.modification.isDeleted,\n );\n\n // Get hidden (deleted) elements with their DOM references\n const hiddenElements = Object.values(deletedElements).map((deleted) => {\n let element: Element | null = null;\n try {\n element = document.querySelector(deleted.selector);\n } catch {\n // Invalid selector\n }\n return { deleted, element };\n });\n\n const totalCount = modifiedInDOM.length + hiddenElements.length;\n\n const formatTimestamp = (ts: number) => {\n const date = new Date(ts);\n return date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n };\n\n // Handle hover highlighting\n const handleMouseEnter = useCallback(\n (element: Element | null) => {\n if (element) {\n setHoveredElement(element);\n highlightTarget(element, highlightColors);\n }\n },\n [highlightColors],\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoveredElement(null);\n clearHighlights();\n }, []);\n\n return (\n <div style={modifiedPanelStyles.container}>\n <div style={modifiedPanelStyles.header}>\n <div style={modifiedPanelStyles.headerTitle}>\n <History size={12} />\n <span>Changed Elements ({totalCount})</span>\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n style={modifiedPanelStyles.closeButton}\n >\n <X size={12} />\n </button>\n </div>\n <div style={modifiedPanelStyles.list}>\n {totalCount === 0 ? (\n <div style={modifiedPanelStyles.empty}>No changed elements</div>\n ) : (\n <>\n {/* Hidden (deleted) elements */}\n {hiddenElements.map(({ deleted, element }) => {\n const isSelected = element && currentElement === element;\n const isHovered = hoveredElement === element;\n return (\n <div\n key={deleted.elementId}\n style={{\n ...modifiedPanelStyles.item,\n ...(isSelected ? modifiedPanelStyles.itemSelected : {}),\n ...(isHovered && !isSelected\n ? modifiedPanelStyles.itemHovered\n : {}),\n }}\n onMouseEnter={() => handleMouseEnter(element)}\n onMouseLeave={handleMouseLeave}\n >\n <div style={modifiedPanelStyles.itemMain}>\n <button\n type=\"button\"\n onClick={() => onSelectElement(element)}\n style={{\n ...modifiedPanelStyles.itemSelector,\n opacity: element ? 1 : 0.5,\n }}\n disabled={!element}\n title={\n element\n ? \"Click to inspect\"\n : \"Element not found in DOM\"\n }\n >\n <code>{deleted.description}</code>\n </button>\n <div style={modifiedPanelStyles.itemMeta}>\n <span\n style={{\n ...modifiedPanelStyles.badge,\n backgroundColor: \"rgba(239, 68, 68, 0.15)\",\n color: \"#ef4444\",\n }}\n >\n hidden\n </span>\n <span style={modifiedPanelStyles.time}>\n {formatTimestamp(deleted.deletedAt)}\n </span>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => resetElement(deleted.elementId)}\n style={modifiedPanelStyles.resetButton}\n title=\"Show this element\"\n >\n <RotateCcw size={10} />\n </button>\n </div>\n );\n })}\n\n {/* Modified elements */}\n {modifiedInDOM.map(({ modification, element }) => {\n const styleCount = Object.keys(\n modification.modifiedStyles,\n ).length;\n const attrCount = Object.keys(\n modification.modifiedAttributes,\n ).length;\n const isSelected = element && currentElement === element;\n const isHovered = hoveredElement === element;\n\n return (\n <div\n key={modification.elementId}\n style={{\n ...modifiedPanelStyles.item,\n ...(isSelected ? modifiedPanelStyles.itemSelected : {}),\n ...(isHovered && !isSelected\n ? modifiedPanelStyles.itemHovered\n : {}),\n }}\n onMouseEnter={() => handleMouseEnter(element)}\n onMouseLeave={handleMouseLeave}\n >\n <div style={modifiedPanelStyles.itemMain}>\n <button\n type=\"button\"\n onClick={() => onSelectElement(element)}\n style={{\n ...modifiedPanelStyles.itemSelector,\n opacity: element ? 1 : 0.5,\n }}\n disabled={!element}\n title={\n element\n ? \"Click to inspect\"\n : \"Element not found in DOM\"\n }\n >\n <code>{modification.description}</code>\n </button>\n <div style={modifiedPanelStyles.itemMeta}>\n {styleCount > 0 && (\n <span style={modifiedPanelStyles.badge}>\n {styleCount} style{styleCount !== 1 ? \"s\" : \"\"}\n </span>\n )}\n {attrCount > 0 && (\n <span style={modifiedPanelStyles.badge}>\n {attrCount} attr{attrCount !== 1 ? \"s\" : \"\"}\n </span>\n )}\n <span style={modifiedPanelStyles.time}>\n {formatTimestamp(modification.lastModified)}\n </span>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => resetElement(modification.elementId)}\n style={modifiedPanelStyles.resetButton}\n title=\"Reset this element\"\n >\n <RotateCcw size={10} />\n </button>\n </div>\n );\n })}\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport function InspectDialog({\n visible,\n targetElement,\n onClose,\n onSelectElement,\n ideConfig,\n style,\n className,\n highlightColors,\n showBoxModelOverlay = true,\n initialPinnedPosition = \"floating\",\n compactConfig,\n}: InspectDialogProps) {\n const [elementInfo, setElementInfo] = useState<ElementInspectInfo | null>(\n null,\n );\n const [sourceLocation, setSourceLocation] = useState<SourceLocation | null>(\n null,\n );\n const dialogRef = useRef<HTMLDivElement>(null);\n\n // Compute compact styles from config (memoized)\n const computedCompactStyles = React.useMemo(() => {\n if (!compactConfig) return compactStyles;\n const mergedConfig = mergeCompactConfig(\n DEFAULT_COMPACT_CONFIG,\n compactConfig,\n );\n return generateCompactStyles(mergedConfig);\n }, [compactConfig]);\n\n // Use Zustand store for persisted state\n const {\n pinnedPosition: storedPinnedPosition,\n setPinnedPosition: setStoredPinnedPosition,\n modifiedElements,\n deletedElements,\n trackModification,\n resetAllElements,\n getModifiedElementsInDOM,\n } = useInspectStore();\n\n // Use store position or fall back to initial prop\n const pinnedPosition = storedPinnedPosition || initialPinnedPosition;\n const setPinnedPosition = setStoredPinnedPosition;\n\n // Show modified elements panel\n const [showModifiedElements, setShowModifiedElements] = useState(false);\n\n // Drag state (local, not persisted)\n const [dragPosition, setDragPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n const dragStartRef = useRef<{\n x: number;\n y: number;\n dialogX: number;\n dialogY: number;\n } | null>(null);\n\n // Reset drag position when dialog becomes visible (but keep pinned position)\n useEffect(() => {\n if (visible) {\n setDragPosition(null);\n }\n }, [visible]);\n\n // Handle drag start\n const handleDragStart = useCallback(\n (e: React.PointerEvent) => {\n if (pinnedPosition !== \"floating\") return;\n\n e.preventDefault();\n setIsDragging(true);\n\n const rect = dialogRef.current?.getBoundingClientRect();\n if (rect) {\n dragStartRef.current = {\n x: e.clientX,\n y: e.clientY,\n dialogX: rect.left,\n dialogY: rect.top,\n };\n }\n },\n [pinnedPosition],\n );\n\n // Handle drag move\n useEffect(() => {\n if (!isDragging) return;\n\n const handlePointerMove = (e: PointerEvent) => {\n if (!dragStartRef.current) return;\n\n const deltaX = e.clientX - dragStartRef.current.x;\n const deltaY = e.clientY - dragStartRef.current.y;\n\n setDragPosition({\n x: dragStartRef.current.dialogX + deltaX,\n y: dragStartRef.current.dialogY + deltaY,\n });\n };\n\n const handlePointerUp = () => {\n setIsDragging(false);\n dragStartRef.current = null;\n };\n\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [isDragging]);\n\n // Handle pin position change\n const handlePinChange = useCallback((position: PinnedPosition) => {\n setPinnedPosition(position);\n setDragPosition(null);\n }, []);\n\n // Function to refresh element info (used for real-time DOM editing)\n const refreshElementInfo = useCallback(() => {\n if (targetElement) {\n const info = getElementInspectInfo(targetElement);\n setElementInfo(info);\n }\n }, [targetElement]);\n\n // Get element info when target changes\n useEffect(() => {\n if (visible && targetElement) {\n refreshElementInfo();\n\n // Try to find source location\n const location = findSourceLocationInAncestors(targetElement);\n setSourceLocation(location);\n } else {\n setElementInfo(null);\n setSourceLocation(null);\n }\n }, [visible, targetElement, refreshElementInfo]);\n\n // Apply highlight to target element when visible (not container)\n useEffect(() => {\n if (visible && targetElement) {\n highlightTarget(targetElement, highlightColors);\n }\n\n return () => {\n if (visible) {\n clearHighlights();\n }\n };\n }, [visible, targetElement, highlightColors]);\n\n // Handle escape key\n useEffect(() => {\n if (!visible) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n clearHighlights();\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [visible, onClose]);\n\n // Handle click outside\n useEffect(() => {\n if (!visible) return;\n\n const handlePointerDown = (event: PointerEvent) => {\n if (\n dialogRef.current &&\n !dialogRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n };\n\n // Delay to prevent immediate close from the same click that opened it\n const timeoutId = setTimeout(() => {\n document.addEventListener(\"pointerdown\", handlePointerDown);\n }, 100);\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n };\n }, [visible]);\n\n // Close handler that also clears highlights\n const handleClose = useCallback(() => {\n clearHighlights();\n onClose();\n }, [onClose]);\n\n const handleOpenInIDE = useCallback(() => {\n if (sourceLocation) {\n openInIDE(sourceLocation, ideConfig);\n }\n }, [sourceLocation, ideConfig]);\n\n // Get trackDeletion from store\n const { trackDeletion } = useInspectStore();\n\n const handleRemoveElement = useCallback(() => {\n if (targetElement) {\n // Track the deletion - this hides the element with display:none\n // Element stays in DOM for easy recovery\n trackDeletion(targetElement);\n onClose();\n }\n }, [targetElement, onClose, trackDeletion]);\n\n const handleCopySelector = useCallback(() => {\n if (elementInfo) {\n navigator.clipboard.writeText(elementInfo.selector);\n }\n }, [elementInfo]);\n\n const handleCopyHTML = useCallback(() => {\n if (elementInfo) {\n navigator.clipboard.writeText(elementInfo.outerHTML);\n }\n }, [elementInfo]);\n\n const handleCopyStyles = useCallback(() => {\n if (elementInfo) {\n const cssText = formatStylesAsCSS(elementInfo.computedStyles);\n navigator.clipboard.writeText(cssText);\n }\n }, [elementInfo]);\n\n if (!visible || !elementInfo || !targetElement) {\n return null;\n }\n\n const {\n boxModel,\n computedStyles,\n accessibility,\n dataAttributes,\n attributes,\n } = elementInfo;\n\n // Count non-empty style categories\n const styleCategories = Object.entries(computedStyles).filter(\n ([_, styles]) => Object.keys(styles).length > 0,\n );\n\n // Calculate dialog position styles based on pinned position and drag state\n const getDialogPositionStyle = (): React.CSSProperties => {\n if (dragPosition && pinnedPosition === \"floating\") {\n return {\n top: dragPosition.y,\n left: dragPosition.x,\n transform: \"none\",\n };\n }\n\n switch (pinnedPosition) {\n case \"left\":\n return {\n top: 0,\n left: 0,\n bottom: 0,\n transform: \"none\",\n borderRadius: \"0 12px 12px 0\",\n maxHeight: \"100vh\",\n height: \"100vh\",\n };\n case \"right\":\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: \"auto\",\n transform: \"none\",\n borderRadius: \"12px 0 0 12px\",\n maxHeight: \"100vh\",\n height: \"100vh\",\n };\n case \"top\":\n return {\n top: 0,\n left: 0,\n right: 0,\n transform: \"none\",\n borderRadius: \"0 0 12px 12px\",\n width: \"100%\",\n maxWidth: \"100%\",\n maxHeight: \"50vh\",\n };\n case \"bottom\":\n return {\n bottom: 0,\n left: 0,\n right: 0,\n top: \"auto\",\n transform: \"none\",\n borderRadius: \"12px 12px 0 0\",\n width: \"100%\",\n maxWidth: \"100%\",\n maxHeight: \"50vh\",\n };\n case \"floating\":\n default:\n return {\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n };\n }\n };\n\n // Determine if we should use compact mode (when pinned to any edge)\n const isCompact = pinnedPosition !== \"floating\";\n\n return (\n <>\n {/* Box Model Overlay */}\n {showBoxModelOverlay && (\n <BoxModelOverlay boxModel={boxModel} visible={visible} />\n )}\n\n <TargetElementContext.Provider\n value={{ element: targetElement, refreshInfo: refreshElementInfo }}\n >\n <CompactModeContext.Provider\n value={{ isCompact, styles: computedCompactStyles }}\n >\n <div\n ref={dialogRef}\n className={className}\n style={{\n ...inspectStyles.dialog,\n ...(isCompact ? computedCompactStyles.dialog : {}),\n ...getDialogPositionStyle(),\n ...style,\n cursor: isDragging ? \"grabbing\" : undefined,\n }}\n role=\"dialog\"\n aria-label=\"Element Inspector\"\n >\n {/* Header */}\n <div\n style={{\n ...inspectStyles.header,\n ...(isCompact ? computedCompactStyles.header : {}),\n }}\n >\n {/* Drag handle */}\n {pinnedPosition === \"floating\" && (\n <div\n style={inspectStyles.dragHandle}\n onPointerDown={handleDragStart}\n title=\"Drag to move\"\n >\n <GripVertical size={16} />\n </div>\n )}\n <div\n style={{\n ...inspectStyles.headerTitle,\n ...(isCompact ? computedCompactStyles.headerTitle : {}),\n }}\n >\n <Code size={isCompact ? 14 : 16} />\n <span>Inspect Element</span>\n </div>\n <div style={inspectStyles.headerActions}>\n {/* Pin buttons */}\n <div\n style={{\n ...inspectStyles.pinButtons,\n ...(isCompact ? computedCompactStyles.pinButtons : {}),\n }}\n >\n <PinButton\n position=\"left\"\n currentPosition={pinnedPosition}\n onClick={handlePinChange}\n />\n <PinButton\n position=\"top\"\n currentPosition={pinnedPosition}\n onClick={handlePinChange}\n />\n <PinButton\n position=\"bottom\"\n currentPosition={pinnedPosition}\n onClick={handlePinChange}\n />\n <PinButton\n position=\"right\"\n currentPosition={pinnedPosition}\n onClick={handlePinChange}\n />\n <PinButton\n position=\"floating\"\n currentPosition={pinnedPosition}\n onClick={handlePinChange}\n />\n </div>\n {/* Modified elements indicator and actions */}\n {(Object.keys(modifiedElements).length > 0 ||\n Object.keys(deletedElements).length > 0) && (\n <div style={inspectStyles.modifiedIndicator}>\n <button\n type=\"button\"\n onClick={() =>\n setShowModifiedElements(!showModifiedElements)\n }\n style={{\n ...inspectStyles.modifiedButton,\n ...(showModifiedElements\n ? inspectStyles.modifiedButtonActive\n : {}),\n }}\n title={`${Object.keys(modifiedElements).length + Object.keys(deletedElements).length} changed element(s)`}\n >\n <History size={isCompact ? 12 : 14} />\n <span style={{ fontSize: isCompact ? \"9px\" : \"10px\" }}>\n {Object.keys(modifiedElements).length +\n Object.keys(deletedElements).length}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => {\n resetAllElements();\n refreshElementInfo();\n }}\n style={inspectStyles.resetAllButton}\n title=\"Reset all changes\"\n >\n <RotateCcw size={isCompact ? 12 : 14} />\n </button>\n </div>\n )}\n <button\n type=\"button\"\n onClick={handleClose}\n style={{\n ...inspectStyles.closeButton,\n ...(isCompact ? computedCompactStyles.closeButton : {}),\n }}\n aria-label=\"Close\"\n >\n <X size={isCompact ? 16 : 18} />\n </button>\n </div>\n </div>\n\n {/* Modified Elements Panel */}\n {showModifiedElements &&\n (Object.keys(modifiedElements).length > 0 ||\n Object.keys(deletedElements).length > 0) && (\n <ModifiedElementsPanel\n onSelectElement={(element) => {\n if (element && onSelectElement) {\n onSelectElement(element);\n }\n }}\n onClose={() => setShowModifiedElements(false)}\n highlightColors={highlightColors}\n currentElement={targetElement}\n />\n )}\n\n {/* Element Hierarchy Navigation */}\n <ElementHierarchyNav\n targetElement={targetElement}\n elementInfo={elementInfo}\n onSelectElement={onSelectElement}\n highlightColors={highlightColors}\n isCompact={isCompact}\n />\n\n {/* Scrollable Content - only show for non-blacklisted elements */}\n {!isBlacklisted(targetElement) && (\n <div style={inspectStyles.content}>\n {/* Quick Info */}\n <Section title=\"Layout\" icon={<Box size={14} />} defaultOpen>\n <PropertyRow\n label=\"Size\"\n value={`${boxModel.total.width} × ${boxModel.total.height}px`}\n />\n <PropertyRow\n label=\"Position\"\n value={`${boxModel.position.left}, ${boxModel.position.top}`}\n />\n <PropertyRow\n label=\"Padding\"\n value={`${boxModel.padding.top} ${boxModel.padding.right} ${boxModel.padding.bottom} ${boxModel.padding.left}`}\n />\n <PropertyRow\n label=\"Margin\"\n value={`${boxModel.margin.top} ${boxModel.margin.right} ${boxModel.margin.bottom} ${boxModel.margin.left}`}\n />\n </Section>\n\n {/* Accessibility */}\n <Section\n title=\"Accessibility\"\n icon={<Accessibility size={14} />}\n badge={accessibility.hidden ? \"Hidden\" : undefined}\n >\n {accessibility.role && (\n <PropertyRow label=\"Role\" value={accessibility.role} />\n )}\n {accessibility.accessibleName && (\n <PropertyRow\n label=\"Name\"\n value={accessibility.accessibleName}\n />\n )}\n <PropertyRow\n label=\"Focusable\"\n value={accessibility.keyboardFocusable ? \"Yes\" : \"No\"}\n />\n {accessibility.tabIndex !== null && (\n <PropertyRow\n label=\"Tab Index\"\n value={String(accessibility.tabIndex)}\n />\n )}\n {Object.entries(accessibility.ariaAttributes).length > 0 && (\n <div style={inspectStyles.subSection}>\n <div style={inspectStyles.subSectionHeader}>\n ARIA Attributes\n </div>\n {Object.entries(accessibility.ariaAttributes).map(\n ([attr, value]) => (\n <PropertyRow\n key={attr}\n label={attr}\n value={value}\n mono\n />\n ),\n )}\n </div>\n )}\n </Section>\n\n {/* Inline Styles (Editable) */}\n <EditableStylesSection\n targetElement={targetElement}\n refreshInfo={refreshElementInfo}\n />\n\n {/* Computed Styles with Origin Tracing */}\n <Section\n title=\"Computed Styles\"\n icon={<Palette size={14} />}\n badge={`${styleCategories.length} categories`}\n >\n {styleCategories.map(([category, styles]) => (\n <StylesSection\n key={category}\n category={category}\n styles={styles as Record<string, string>}\n showOrigin\n />\n ))}\n </Section>\n\n {/* Data Attributes (Editable) */}\n <EditableDataAttributesSection\n targetElement={targetElement}\n dataAttributes={dataAttributes}\n refreshInfo={refreshElementInfo}\n />\n\n {/* Attributes (Editable) */}\n <EditableAttributesSection\n targetElement={targetElement}\n attributes={attributes}\n refreshInfo={refreshElementInfo}\n />\n\n {/* Source Location */}\n {sourceLocation && (\n <Section title=\"Source\" icon={<Code size={14} />} defaultOpen>\n <PropertyRow\n label=\"File\"\n value={formatSourceLocation(sourceLocation)}\n mono\n copyable\n />\n </Section>\n )}\n </div>\n )}\n\n {/* Actions Footer */}\n <div\n style={{\n ...inspectStyles.footer,\n ...(isCompact ? computedCompactStyles.footer : {}),\n }}\n >\n <div style={inspectStyles.footerActions}>\n <button\n type=\"button\"\n onClick={handleCopySelector}\n style={{\n ...inspectStyles.actionButton,\n ...(isCompact ? computedCompactStyles.actionButton : {}),\n }}\n title=\"Copy CSS selector\"\n >\n <Copy size={isCompact ? 12 : 14} />\n <span>Selector</span>\n </button>\n <button\n type=\"button\"\n onClick={handleCopyHTML}\n style={{\n ...inspectStyles.actionButton,\n ...(isCompact ? computedCompactStyles.actionButton : {}),\n }}\n title=\"Copy outer HTML\"\n >\n <Copy size={isCompact ? 12 : 14} />\n <span>HTML</span>\n </button>\n <button\n type=\"button\"\n onClick={handleCopyStyles}\n style={{\n ...inspectStyles.actionButton,\n ...(isCompact ? computedCompactStyles.actionButton : {}),\n }}\n title=\"Copy computed styles as CSS\"\n >\n <Copy size={isCompact ? 12 : 14} />\n <span>Styles</span>\n </button>\n </div>\n <div style={inspectStyles.footerActions}>\n {sourceLocation && (\n <button\n type=\"button\"\n onClick={handleOpenInIDE}\n style={{\n ...inspectStyles.actionButtonPrimary,\n ...(isCompact\n ? computedCompactStyles.actionButtonPrimary\n : {}),\n }}\n title=\"Open in IDE\"\n >\n <ExternalLink size={isCompact ? 12 : 14} />\n <span>Open in IDE</span>\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleRemoveElement}\n style={{\n ...inspectStyles.actionButtonDanger,\n ...(isCompact\n ? computedCompactStyles.actionButtonDanger\n : {}),\n }}\n title=\"Hide element (can be restored)\"\n >\n <Trash2 size={isCompact ? 12 : 14} />\n </button>\n </div>\n </div>\n </div>\n </CompactModeContext.Provider>\n </TargetElementContext.Provider>\n </>\n );\n}\n\n/**\n * Styles for the InspectDialog\n */\nconst inspectStyles: Record<string, React.CSSProperties> = {\n dialog: {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"420px\",\n maxWidth: \"95vw\",\n maxHeight: \"85vh\",\n backgroundColor: \"#1e1e1e\",\n borderRadius: \"12px\",\n boxShadow:\n \"0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255, 255, 255, 0.1)\",\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: \"13px\",\n color: \"#e0e0e0\",\n zIndex: 10001,\n overflow: \"hidden\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"10px 12px\",\n borderBottom: \"1px solid #333\",\n backgroundColor: \"#252525\",\n gap: \"8px\",\n },\n dragHandle: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"24px\",\n height: \"24px\",\n color: \"#555\",\n cursor: \"grab\",\n borderRadius: \"4px\",\n transition: \"all 0.15s\",\n flexShrink: 0,\n },\n headerTitle: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontWeight: 600,\n color: \"#fff\",\n flex: 1,\n },\n headerActions: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n },\n pinButtons: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n padding: \"2px\",\n backgroundColor: \"#1a1a1a\",\n borderRadius: \"6px\",\n },\n pinButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"26px\",\n height: \"26px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s\",\n },\n modifiedIndicator: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n padding: \"2px\",\n backgroundColor: \"#1a1a1a\",\n borderRadius: \"6px\",\n },\n modifiedButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"4px 8px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#a855f7\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s\",\n },\n modifiedButtonActive: {\n backgroundColor: \"rgba(168, 85, 247, 0.2)\",\n },\n resetAllButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"24px\",\n height: \"24px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#ef4444\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s\",\n },\n closeButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n color: \"#888\",\n transition: \"all 0.15s\",\n },\n identity: {\n padding: \"12px 16px\",\n borderBottom: \"1px solid #333\",\n backgroundColor: \"#1a1a1a\",\n },\n tagLine: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n marginBottom: \"8px\",\n flexWrap: \"wrap\",\n },\n tag: {\n color: \"#569cd6\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n fontSize: \"14px\",\n },\n id: {\n color: \"#9cdcfe\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n fontSize: \"14px\",\n },\n classes: {\n color: \"#4ec9b0\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n fontSize: \"14px\",\n },\n selectorRow: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n selectorCode: {\n flex: 1,\n padding: \"6px 10px\",\n backgroundColor: \"#2d2d2d\",\n borderRadius: \"4px\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n fontSize: \"11px\",\n color: \"#ce9178\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n content: {\n flex: 1,\n overflowY: \"auto\",\n padding: \"8px 0\",\n },\n section: {\n borderBottom: \"1px solid #2a2a2a\",\n },\n sectionHeader: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n padding: \"10px 16px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n cursor: \"pointer\",\n color: \"#e0e0e0\",\n fontSize: \"12px\",\n fontWeight: 500,\n textAlign: \"left\",\n transition: \"background-color 0.15s\",\n },\n sectionHeaderLeft: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n sectionIcon: {\n display: \"flex\",\n alignItems: \"center\",\n color: \"#888\",\n },\n sectionTitle: {\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n },\n badge: {\n padding: \"2px 6px\",\n backgroundColor: \"#333\",\n borderRadius: \"4px\",\n fontSize: \"10px\",\n color: \"#888\",\n },\n sectionContent: {\n padding: \"0 16px 12px 32px\",\n },\n propertyRow: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"4px 0\",\n gap: \"12px\",\n },\n propertyLabel: {\n color: \"#888\",\n fontSize: \"12px\",\n flexShrink: 0,\n },\n propertyValue: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n color: \"#e0e0e0\",\n fontSize: \"12px\",\n textAlign: \"right\",\n },\n mono: {\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n fontSize: \"11px\",\n },\n subSection: {\n marginTop: \"8px\",\n paddingTop: \"8px\",\n borderTop: \"1px solid #2a2a2a\",\n },\n subSectionHeader: {\n fontSize: \"10px\",\n color: \"#666\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n marginBottom: \"6px\",\n },\n styleCategory: {\n marginBottom: \"12px\",\n },\n styleCategoryHeader: {\n fontSize: \"11px\",\n color: \"#569cd6\",\n textTransform: \"capitalize\",\n marginBottom: \"4px\",\n fontWeight: 500,\n },\n styleRow: {\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: \"2px 0\",\n fontSize: \"11px\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n },\n styleProp: {\n color: \"#9cdcfe\",\n },\n styleValue: {\n color: \"#ce9178\",\n maxWidth: \"200px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n footer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"12px 16px\",\n borderTop: \"1px solid #333\",\n backgroundColor: \"#252525\",\n gap: \"8px\",\n },\n footerActions: {\n display: \"flex\",\n gap: \"6px\",\n },\n actionButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"6px 10px\",\n border: \"1px solid #444\",\n backgroundColor: \"transparent\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n color: \"#aaa\",\n fontSize: \"11px\",\n transition: \"all 0.15s\",\n },\n actionButtonPrimary: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"6px 12px\",\n border: \"none\",\n backgroundColor: \"#0066cc\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n color: \"#fff\",\n fontSize: \"11px\",\n fontWeight: 500,\n transition: \"all 0.15s\",\n },\n actionButtonDanger: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"6px 8px\",\n border: \"1px solid #5c2828\",\n backgroundColor: \"transparent\",\n borderRadius: \"6px\",\n cursor: \"pointer\",\n color: \"#e57373\",\n fontSize: \"11px\",\n transition: \"all 0.15s\",\n },\n copyButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"4px 8px\",\n border: \"1px solid #444\",\n backgroundColor: \"transparent\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n color: \"#aaa\",\n fontSize: \"11px\",\n transition: \"all 0.15s\",\n },\n copyButtonSmall: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"22px\",\n height: \"22px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n color: \"#666\",\n transition: \"all 0.15s\",\n flexShrink: 0,\n },\n};\n\n/**\n * Deep merge helper for compact configs\n */\nfunction mergeCompactConfig(\n base: CompactModeConfig,\n overrides?: Partial<CompactModeConfig>,\n): CompactModeConfig {\n if (!overrides) return base;\n return {\n scale: overrides.scale ?? base.scale,\n fonts: { ...base.fonts, ...overrides.fonts },\n spacing: { ...base.spacing, ...overrides.spacing },\n gaps: { ...base.gaps, ...overrides.gaps },\n sizes: { ...base.sizes, ...overrides.sizes },\n letterSpacing: { ...base.letterSpacing, ...overrides.letterSpacing },\n };\n}\n\n// Generate default compact styles\nconst compactStyles = generateCompactStyles(DEFAULT_COMPACT_CONFIG);\n\n/**\n * Styles for editable components\n */\nconst editableStyles: Record<string, React.CSSProperties> = {\n value: {\n padding: \"2px 4px\",\n borderRadius: \"3px\",\n transition: \"background-color 0.15s\",\n },\n input: {\n padding: \"2px 6px\",\n border: \"1px solid #4a9eff\",\n borderRadius: \"3px\",\n backgroundColor: \"#2d2d2d\",\n color: \"#e0e0e0\",\n fontSize: \"inherit\",\n fontFamily: \"inherit\",\n outline: \"none\",\n minWidth: \"60px\",\n flex: 1,\n },\n inputCompact: {\n padding: \"1px 4px\",\n fontSize: \"10px\",\n },\n deleteButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"16px\",\n height: \"16px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#888\",\n cursor: \"pointer\",\n borderRadius: \"3px\",\n fontSize: \"14px\",\n lineHeight: 1,\n padding: 0,\n flexShrink: 0,\n },\n addButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"4px 8px\",\n border: \"1px dashed #444\",\n backgroundColor: \"transparent\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n color: \"#888\",\n fontSize: \"10px\",\n marginTop: \"4px\",\n transition: \"all 0.15s\",\n },\n confirmButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"20px\",\n height: \"20px\",\n border: \"none\",\n backgroundColor: \"#2d5a2d\",\n color: \"#4ade80\",\n cursor: \"pointer\",\n borderRadius: \"3px\",\n fontSize: \"12px\",\n padding: 0,\n flexShrink: 0,\n },\n cancelButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"20px\",\n height: \"20px\",\n border: \"none\",\n backgroundColor: \"#5c2828\",\n color: \"#f87171\",\n cursor: \"pointer\",\n borderRadius: \"3px\",\n fontSize: \"14px\",\n padding: 0,\n flexShrink: 0,\n },\n};\n\n/**\n * Styles for style origin components\n */\nconst styleOriginStyles: Record<string, React.CSSProperties> = {\n badge: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"2px\",\n border: \"none\",\n borderRadius: \"3px\",\n cursor: \"pointer\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n textTransform: \"uppercase\",\n letterSpacing: \"0.3px\",\n flexShrink: 0,\n transition: \"opacity 0.15s\",\n },\n tooltip: {\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n marginTop: \"4px\",\n minWidth: \"200px\",\n maxWidth: \"300px\",\n backgroundColor: \"#1a1a1a\",\n border: \"1px solid #333\",\n borderRadius: \"6px\",\n boxShadow: \"0 8px 24px rgba(0,0,0,0.4)\",\n zIndex: 1000,\n overflow: \"hidden\",\n },\n tooltipHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"8px 10px\",\n borderBottom: \"1px solid #333\",\n backgroundColor: \"#252525\",\n fontSize: \"10px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n },\n tooltipClose: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"16px\",\n height: \"16px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#888\",\n cursor: \"pointer\",\n fontSize: \"14px\",\n padding: 0,\n },\n tooltipContent: {\n padding: \"8px 10px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n },\n tooltipRow: {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"6px\",\n fontSize: \"10px\",\n },\n tooltipLabel: {\n color: \"#888\",\n flexShrink: 0,\n minWidth: \"55px\",\n },\n tooltipCode: {\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n color: \"#9cdcfe\",\n fontSize: \"9px\",\n wordBreak: \"break-all\",\n backgroundColor: \"#2d2d2d\",\n padding: \"2px 4px\",\n borderRadius: \"3px\",\n },\n};\n\n/**\n * Styles for modified elements panel\n */\nconst modifiedPanelStyles: Record<string, React.CSSProperties> = {\n container: {\n backgroundColor: \"#1e1e1e\",\n borderBottom: \"1px solid #333\",\n maxHeight: \"200px\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"6px 12px\",\n backgroundColor: \"#252525\",\n borderBottom: \"1px solid #333\",\n },\n headerTitle: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontSize: \"10px\",\n color: \"#a855f7\",\n fontWeight: 500,\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n },\n closeButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"18px\",\n height: \"18px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#888\",\n cursor: \"pointer\",\n borderRadius: \"3px\",\n },\n list: {\n flex: 1,\n overflow: \"auto\",\n padding: \"4px 0\",\n },\n empty: {\n padding: \"12px\",\n textAlign: \"center\",\n color: \"#666\",\n fontSize: \"11px\",\n },\n item: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"4px 12px\",\n gap: \"8px\",\n borderBottom: \"1px solid #2a2a2a\",\n cursor: \"pointer\",\n transition: \"background-color 0.15s ease\",\n },\n itemHovered: {\n backgroundColor: \"rgba(59, 130, 246, 0.15)\",\n },\n itemSelected: {\n backgroundColor: \"rgba(59, 130, 246, 0.25)\",\n borderLeft: \"2px solid #3b82f6\",\n paddingLeft: \"10px\",\n },\n itemMain: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n flex: 1,\n minWidth: 0,\n },\n itemSelector: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#e0e0e0\",\n cursor: \"pointer\",\n padding: \"2px 4px\",\n borderRadius: \"3px\",\n fontSize: \"10px\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n textAlign: \"left\",\n },\n itemMeta: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n badge: {\n padding: \"1px 4px\",\n backgroundColor: \"#333\",\n borderRadius: \"3px\",\n fontSize: \"8px\",\n color: \"#888\",\n },\n time: {\n fontSize: \"8px\",\n color: \"#666\",\n },\n resetButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"20px\",\n height: \"20px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#888\",\n cursor: \"pointer\",\n borderRadius: \"3px\",\n flexShrink: 0,\n },\n};\n\nexport default InspectDialog;\n","/**\n * IDE protocol handler integration for opening files directly in IDEs.\n * Supports VS Code, Cursor, WebStorm, and other IDEs that support URL protocols.\n */\n\n/**\n * Supported IDE protocol types\n */\nexport type IDEProtocol =\n | \"vscode\"\n | \"cursor\"\n | \"webstorm\"\n | \"intellij\"\n | \"phpstorm\"\n | \"sublime\"\n | \"atom\"\n | \"custom\";\n\n/**\n * Configuration for IDE integration\n */\nexport interface IDEConfig {\n /** The IDE protocol to use */\n protocol: IDEProtocol;\n /** Custom protocol string (only used when protocol is 'custom') */\n customProtocol?: string;\n /** Base path to prepend to file paths (for mapping web paths to file system) */\n basePath?: string;\n /** Path transformations to apply (regex find/replace) */\n pathTransforms?: Array<{\n find: string | RegExp;\n replace: string;\n }>;\n}\n\n/**\n * Source location information\n */\nexport interface SourceLocation {\n /** File path */\n file: string;\n /** Line number (1-indexed) */\n line: number;\n /** Column number (1-indexed, optional) */\n column?: number;\n}\n\n/**\n * Default IDE configuration\n */\nconst DEFAULT_IDE_CONFIG: IDEConfig = {\n protocol: \"cursor\",\n};\n\n/**\n * Protocol URL templates for different IDEs\n * {file} = file path, {line} = line number, {column} = column number\n */\nconst PROTOCOL_TEMPLATES: Record<IDEProtocol, string> = {\n vscode: \"vscode://file/{file}:{line}:{column}\",\n cursor: \"cursor://file/{file}:{line}:{column}\",\n webstorm: \"webstorm://open?file={file}&line={line}&column={column}\",\n intellij: \"idea://open?file={file}&line={line}&column={column}\",\n phpstorm: \"phpstorm://open?file={file}&line={line}&column={column}\",\n sublime: \"subl://open?url=file://{file}&line={line}&column={column}\",\n atom: \"atom://open?url=file://{file}&line={line}&column={column}\",\n custom: \"\", // Placeholder, will use customProtocol\n};\n\n/**\n * Build the URL for opening a file in an IDE\n */\nexport function buildIDEUrl(\n location: SourceLocation,\n config: Partial<IDEConfig> = {},\n): string {\n const mergedConfig: IDEConfig = { ...DEFAULT_IDE_CONFIG, ...config };\n let filePath = location.file;\n\n // Apply base path if provided\n if (mergedConfig.basePath) {\n // Remove leading slash from file path if base path doesn't end with one\n if (!mergedConfig.basePath.endsWith(\"/\") && filePath.startsWith(\"/\")) {\n filePath = filePath.slice(1);\n }\n filePath = `${mergedConfig.basePath}/${filePath}`.replace(/\\/+/g, \"/\");\n }\n\n // Apply path transformations\n if (mergedConfig.pathTransforms) {\n for (const transform of mergedConfig.pathTransforms) {\n filePath = filePath.replace(transform.find, transform.replace);\n }\n }\n\n // Get the template\n let template =\n mergedConfig.protocol === \"custom\"\n ? mergedConfig.customProtocol || \"\"\n : PROTOCOL_TEMPLATES[mergedConfig.protocol];\n\n // Replace placeholders\n const url = template\n .replace(\"{file}\", encodeURIComponent(filePath))\n .replace(\"{line}\", String(location.line))\n .replace(\"{column}\", String(location.column || 1));\n\n return url;\n}\n\n/**\n * Open a file in the IDE using the protocol handler\n */\nexport function openInIDE(\n location: SourceLocation,\n config: Partial<IDEConfig> = {},\n): boolean {\n if (typeof window === \"undefined\") {\n console.warn(\"openInIDE: Cannot open IDE in non-browser environment\");\n return false;\n }\n\n try {\n const url = buildIDEUrl(location, config);\n\n // Use window.open with a short timeout to avoid popup blockers\n // The protocol handler should intercept this\n window.location.href = url;\n\n return true;\n } catch (error) {\n console.error(\"Failed to open file in IDE:\", error);\n return false;\n }\n}\n\n/**\n * Check if the current environment likely supports IDE protocol handlers\n * Note: This is a heuristic and may not be 100% accurate\n */\nexport function isIDEProtocolSupported(): boolean {\n if (typeof window === \"undefined\") return false;\n\n // Protocol handlers are generally supported on desktop browsers\n // but not on mobile or in some restricted environments\n const userAgent = navigator.userAgent.toLowerCase();\n\n // Mobile browsers generally don't support custom protocol handlers well\n if (/mobile|android|iphone|ipad/i.test(userAgent)) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Detect the most likely IDE based on environment\n * This is a heuristic based on common development setups\n */\nexport function detectPreferredIDE(): IDEProtocol {\n if (typeof window === \"undefined\") return \"vscode\";\n\n // Check for Cursor-specific indicators\n // Cursor sets some specific user agent or environment hints\n const userAgent = navigator.userAgent;\n\n // For now, default to Cursor since this is the anyclick project\n // In production, this could be enhanced with better detection\n return \"cursor\";\n}\n\n/**\n * Try to extract source location from element data attributes\n */\nexport function getSourceLocationFromElement(\n element: Element,\n): SourceLocation | null {\n const htmlElement = element as HTMLElement;\n const dataset = htmlElement.dataset || {};\n\n // Try different data attribute conventions\n const file =\n dataset.sourceFile ||\n dataset[\"source-file\"] ||\n element.getAttribute(\"data-source-file\") ||\n dataset.file ||\n element.getAttribute(\"data-file\");\n\n const line =\n dataset.sourceLine ||\n dataset[\"source-line\"] ||\n element.getAttribute(\"data-source-line\") ||\n dataset.line ||\n element.getAttribute(\"data-line\");\n\n if (!file || !line) {\n return null;\n }\n\n const column =\n dataset.sourceColumn ||\n dataset[\"source-column\"] ||\n element.getAttribute(\"data-source-column\") ||\n dataset.column ||\n element.getAttribute(\"data-column\");\n\n return {\n file,\n line: parseInt(line, 10),\n column: column ? parseInt(column, 10) : undefined,\n };\n}\n\n/**\n * Walk up the DOM tree to find source location from any ancestor\n */\nexport function findSourceLocationInAncestors(\n element: Element,\n maxDepth: number = 10,\n): SourceLocation | null {\n let current: Element | null = element;\n let depth = 0;\n\n while (current && depth < maxDepth) {\n const location = getSourceLocationFromElement(current);\n if (location) {\n return location;\n }\n current = current.parentElement;\n depth++;\n }\n\n return null;\n}\n\n/**\n * Create a configured IDE opener function\n */\nexport function createIDEOpener(\n config: Partial<IDEConfig> = {},\n): (location: SourceLocation) => boolean {\n return (location: SourceLocation) => openInIDE(location, config);\n}\n\n/**\n * Format a source location as a readable string\n */\nexport function formatSourceLocation(location: SourceLocation): string {\n const { file, line, column } = location;\n if (column !== undefined) {\n return `${file}:${line}:${column}`;\n }\n return `${file}:${line}`;\n}\n","import type {\n AnyclickAdapter,\n AnyclickPayload,\n AnyclickTriggerEvent,\n AnyclickType,\n ScreenshotConfig,\n ScreenshotData,\n} from \"@ewjdev/anyclick-core\";\nimport type { ReactNode, CSSProperties } from \"react\";\nimport { CompactModeConfig } from \"./InspectDialog/InspectDialog\";\n\n/**\n * Theme configuration for AnyclickProvider\n * Supports nested theming with inheritance\n */\nexport interface AnyclickTheme {\n /** Custom styles for the context menu */\n menuStyle?: CSSProperties;\n /** Custom class name for the context menu */\n menuClassName?: string;\n /** Configuration for element highlighting */\n highlightConfig?: HighlightConfig;\n /** Configuration for screenshot capture */\n screenshotConfig?: ScreenshotConfig;\n /** Whether anyclick functionality is disabled in this theme */\n disabled?: boolean;\n /**\n * Enable fun mode (go-kart cursor) within this scoped provider.\n * When true/configured, a FunModeBridge can hand off the track to the pointer.\n */\n funMode?: boolean | FunModeThemeConfig;\n}\n\n/**\n * Optional fun mode configuration (forwarded to pointer fun mode)\n */\nexport interface FunModeThemeConfig {\n /** Whether fun mode is enabled (default: true) */\n enabled?: boolean;\n /** Optional max speed override for this provider */\n maxSpeed?: number;\n /** Optional acceleration override */\n acceleration?: number;\n}\n\n/**\n * Menu positioning modes\n * - static: Menu stays at exact click position (may go off-screen)\n * - inView: Menu adjusts position to stay fully visible in viewport\n * - dynamic: User can drag the menu to reposition it\n */\nexport type MenuPositionMode = \"static\" | \"inView\" | \"dynamic\";\n\n/**\n * Configuration for highlight colors\n */\nexport interface HighlightColors {\n /** Color for the target element highlight (default: #3b82f6 - blue) */\n targetColor?: string;\n /** Color for the container element highlight (default: #8b5cf6 - purple) */\n containerColor?: string;\n /** Opacity for the target shadow (default: 0.25) */\n targetShadowOpacity?: number;\n /** Opacity for the container shadow (default: 0.1) */\n containerShadowOpacity?: number;\n}\n\n/**\n * Configuration for highlight behavior\n */\nexport interface HighlightConfig {\n /** Whether to show highlights (default: true) */\n enabled?: boolean;\n /** Custom colors for highlights */\n colors?: HighlightColors;\n /** CSS selectors to identify container elements */\n containerSelectors?: string[];\n /** Minimum number of children for an element to be considered a container (default: 2) */\n minChildrenForContainer?: number;\n}\n\n/**\n * Menu item displayed in the Anyclick context menu\n */\nexport interface ContextMenuItem {\n /** Feedback type for this option (use unique identifier for parent items with children) */\n type: AnyclickType;\n /** Display label */\n label: string;\n /** Optional icon */\n icon?: ReactNode;\n /** Whether to show a comment input for this type */\n showComment?: boolean;\n /** Optional status to signal availability (e.g., coming soon) */\n status?: FeedbackMenuStatus;\n /** Optional badge to render next to the label */\n badge?: FeedbackMenuBadge;\n /** Optional role(s) required to see this menu item */\n requiredRoles?: string[];\n /** Child menu items (creates a submenu) */\n children?: ContextMenuItem[];\n /**\n * Optional click handler for custom behavior.\n * Return `false` (or a Promise resolving to false) to skip the default submission flow.\n */\n onClick?: (context: {\n targetElement: Element | null;\n containerElement: Element | null;\n closeMenu: () => void;\n }) => void | boolean | Promise<void | boolean>;\n}\n\n/**\n * Visual badge for menu items\n */\nexport interface FeedbackMenuBadge {\n /** Text shown inside the badge */\n label: string;\n /** Optional tone to drive styling */\n tone?: \"neutral\" | \"info\" | \"warning\" | \"success\";\n}\n\n/**\n * Status of a menu item used for presets (e.g., coming soon)\n */\nexport type FeedbackMenuStatus = \"available\" | \"comingSoon\";\n\n/**\n * User context for role-based menu filtering\n */\nexport interface AnyclickUserContext {\n /** User's role(s) */\n roles?: string[];\n /** User ID */\n id?: string;\n /** User email */\n email?: string;\n}\n\n/**\n * Filter menu items based on user context\n */\nexport function filterMenuItemsByRole(\n items: ContextMenuItem[],\n userContext?: AnyclickUserContext,\n): ContextMenuItem[] {\n if (!userContext) {\n // If no user context, only show items without required roles\n return items.filter(\n (item) => !item.requiredRoles || item.requiredRoles.length === 0,\n );\n }\n\n const userRoles = userContext.roles ?? [];\n\n return items.filter((item) => {\n // If no required roles, show to everyone\n if (!item.requiredRoles || item.requiredRoles.length === 0) {\n return true;\n }\n // Check if user has any of the required roles\n return item.requiredRoles.some((role) => userRoles.includes(role));\n });\n}\n\n/**\n * Props for the AnyclickProvider component\n */\nexport interface AnyclickProviderProps {\n /** Header content */\n header?: ReactNode | null;\n /** The adapter to use for submitting anyclick */\n adapter: AnyclickAdapter;\n /** Child components */\n children: ReactNode;\n /**\n * Filter function to determine if anyclick should be captured for a target element\n * Return true to allow anyclick, false to ignore\n * Accepts both MouseEvent (right-click) and TouchEvent (press-and-hold)\n */\n targetFilter?: (event: AnyclickTriggerEvent, target: Element) => boolean;\n /** Custom menu items (defaults to Issue, Feature, Like) */\n menuItems?: ContextMenuItem[];\n /** Maximum length for innerText capture */\n maxInnerTextLength?: number;\n /** Maximum length for outerHTML capture */\n maxOuterHTMLLength?: number;\n /** Maximum number of ancestors to capture */\n maxAncestors?: number;\n /** Cooldown in milliseconds between submissions (rate limiting) */\n cooldownMs?: number;\n /** Attributes to strip from outerHTML for privacy */\n stripAttributes?: string[];\n /** Additional metadata to include with every submission */\n metadata?: Record<string, unknown>;\n /** Callback after successful submission */\n onSubmitSuccess?: (payload: AnyclickPayload) => void;\n /** Callback after failed submission */\n onSubmitError?: (error: Error, payload: AnyclickPayload) => void;\n /** Custom styles for the context menu */\n menuStyle?: CSSProperties;\n /** Custom class name for the context menu */\n menuClassName?: string;\n /** Whether the provider is disabled */\n disabled?: boolean;\n /** Configuration for element highlighting */\n highlightConfig?: HighlightConfig;\n /** Configuration for screenshot capture */\n screenshotConfig?: ScreenshotConfig;\n /**\n * Whether to scope this provider to its children only.\n * When true, events will only be captured for elements within this provider's subtree.\n * When false (default), events are captured for the entire document.\n */\n scoped?: boolean;\n /**\n * Theme configuration for this provider.\n * Themes are inherited from parent providers and merged (child overrides parent).\n * Set to null or { disabled: true } to disable anyclick in this subtree.\n */\n theme?: AnyclickTheme | null;\n /** Duration in ms to hold touch before triggering context menu (default: 500) */\n touchHoldDurationMs?: number;\n /** Maximum movement in px before touch hold is cancelled (default: 10) */\n touchMoveThreshold?: number;\n /** Menu positioning mode (default: 'inView') */\n menuPositionMode?: MenuPositionMode;\n}\n\n/**\n * Context value exposed by AnyclickProvider\n */\nexport interface AnyclickContextValue {\n /** Whether anyclick is currently enabled */\n isEnabled: boolean;\n /** Whether a submission is in progress */\n isSubmitting: boolean;\n /** Submit anyclick for a specific element */\n submitAnyclick: (\n element: Element,\n type: AnyclickType,\n comment?: string,\n ) => Promise<void>;\n /** Open the anyclick menu programmatically */\n openMenu: (element: Element, position: { x: number; y: number }) => void;\n /** Close the anyclick menu */\n closeMenu: () => void;\n /** The current merged theme (inherited from ancestors) */\n theme: AnyclickTheme;\n /** Whether this provider is scoped */\n scoped: boolean;\n /** The provider's unique ID */\n providerId: string;\n}\n\n/**\n * Props for the context menu component\n */\nexport interface ContextMenuProps {\n /** Whether the menu is visible */\n visible: boolean;\n /** Position of the menu */\n position: { x: number; y: number };\n /** Target element for anyclick */\n targetElement: Element | null;\n /** Container element found by highlight logic */\n containerElement: Element | null;\n /** Menu items to display */\n items: ContextMenuItem[];\n /** Callback when an item is selected */\n onSelect: (\n type: AnyclickType,\n comment?: string,\n screenshots?: ScreenshotData,\n ) => void;\n /** Callback when menu is closed */\n onClose: () => void;\n /** Whether submission is in progress */\n isSubmitting: boolean;\n /** Custom styles */\n style?: CSSProperties;\n /** Custom class name */\n className?: string;\n /** Configuration for element highlighting */\n highlightConfig?: HighlightConfig;\n /** Configuration for screenshot capture */\n screenshotConfig?: ScreenshotConfig;\n /** Menu positioning mode (default: 'inView') */\n positionMode?: MenuPositionMode;\n /** Header content */\n header?: ReactNode;\n /** Footer content */\n footer?: ReactNode;\n}\n\n/**\n * Props for the screenshot preview component\n */\nexport interface ScreenshotPreviewProps {\n /** Captured screenshot data */\n screenshots: ScreenshotData | null;\n /** Whether screenshots are loading */\n isLoading: boolean;\n /** Callback when user confirms screenshots */\n onConfirm: (screenshots: ScreenshotData) => void;\n /** Callback when user cancels */\n onCancel: () => void;\n /** Callback when user wants to retake screenshots */\n onRetake: () => void;\n /** Whether submission is in progress */\n isSubmitting: boolean;\n}\n\n/**\n * Generate compact styles from configuration\n */\nexport function generateCompactStyles(\n config: CompactModeConfig,\n): Record<string, React.CSSProperties> {\n return {\n dialog: {\n fontSize: `${config.fonts.base}px`,\n width: `${config.sizes.dialogWidth}px`,\n },\n header: {\n padding: config.spacing.headerPadding,\n },\n headerTitle: {\n fontSize: `${config.fonts.title}px`,\n gap: config.gaps.headerTitle,\n },\n pinButtons: {\n padding: \"1px\",\n gap: config.gaps.pinButtons,\n },\n closeButton: {\n width: `${config.sizes.closeButton}px`,\n height: `${config.sizes.closeButton}px`,\n },\n identity: {\n padding: config.spacing.identityPadding,\n },\n tag: {\n fontSize: `${config.fonts.tag}px`,\n },\n id: {\n fontSize: `${config.fonts.tag}px`,\n },\n classes: {\n fontSize: `${config.fonts.tag}px`,\n },\n selectorCode: {\n padding: config.spacing.selectorCodePadding,\n fontSize: `${config.fonts.selector}px`,\n },\n sectionHeader: {\n padding: config.spacing.sectionHeaderPadding,\n fontSize: `${config.fonts.section}px`,\n },\n sectionTitle: {\n letterSpacing: config.letterSpacing.sectionTitle,\n },\n badge: {\n padding: config.spacing.badgePadding,\n fontSize: `${config.fonts.badge}px`,\n },\n sectionContent: {\n padding: config.spacing.sectionContentPadding,\n },\n propertyRow: {\n padding: config.spacing.propertyRowPadding,\n gap: config.gaps.propertyRow,\n },\n propertyLabel: {\n fontSize: `${config.fonts.property}px`,\n },\n propertyValue: {\n fontSize: `${config.fonts.property}px`,\n gap: config.gaps.propertyValue,\n },\n styleCategory: {\n marginBottom: `${config.sizes.categoryMarginBottom}px`,\n },\n styleCategoryHeader: {\n fontSize: `${config.fonts.property}px`,\n marginBottom: `${config.sizes.styleCategoryHeaderMarginBottom}px`,\n },\n styleRow: {\n padding: config.spacing.styleRowPadding,\n fontSize: `${config.fonts.styleRow}px`,\n },\n styleValue: {\n maxWidth: `${config.sizes.styleValueMaxWidth}px`,\n },\n footer: {\n padding: config.spacing.footerPadding,\n gap: config.gaps.footer,\n },\n actionButton: {\n padding: config.spacing.buttonPadding,\n fontSize: `${config.fonts.button}px`,\n gap: config.gaps.button,\n },\n actionButtonPrimary: {\n padding: config.spacing.buttonPrimaryPadding,\n fontSize: `${config.fonts.button}px`,\n gap: config.gaps.button,\n },\n actionButtonDanger: {\n padding: config.spacing.buttonDangerPadding,\n fontSize: `${config.fonts.button}px`,\n },\n copyButtonSmall: {\n width: `${config.sizes.copyButtonSmall}px`,\n height: `${config.sizes.copyButtonSmall}px`,\n },\n };\n}\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport {\n persist,\n createJSONStorage,\n type StorageValue,\n} from \"zustand/middleware\";\nimport type { PinnedPosition } from \"./InspectDialog\";\n\n/**\n * Current version of the persisted state schema.\n * Increment this when making breaking changes to the state structure.\n */\nconst STORE_VERSION = 1;\n\n/**\n * Represents a modification made to an element\n */\nexport interface ElementModification {\n /** Unique identifier for the element (generated selector or path) */\n elementId: string;\n /** CSS selector to find the element */\n selector: string;\n /** Human-readable description of the element */\n description: string;\n /** Timestamp of the last modification */\n lastModified: number;\n /** Original inline styles before modification */\n originalStyles: Record<string, string>;\n /** Current modified inline styles */\n modifiedStyles: Record<string, string>;\n /** Original attributes before modification */\n originalAttributes: Record<string, string>;\n /** Current modified attributes */\n modifiedAttributes: Record<string, string>;\n /** Whether the element was deleted */\n isDeleted?: boolean;\n}\n\n/**\n * Represents a deleted (hidden) element that can be restored\n * Elements are hidden with display:none rather than removed from DOM\n * for easier persistence and recovery\n */\nexport interface DeletedElement {\n /** Unique identifier for the element */\n elementId: string;\n /** CSS selector to find the element */\n selector: string;\n /** Human-readable description */\n description: string;\n /** Original display value before hiding */\n originalDisplay: string;\n /** Timestamp of deletion */\n deletedAt: number;\n}\n\n/**\n * Escape a string for use in CSS selectors\n * Uses CSS.escape if available, otherwise falls back to manual escaping\n */\nfunction escapeCSSSelector(str: string): string {\n if (typeof CSS !== \"undefined\" && CSS.escape) {\n return CSS.escape(str);\n }\n // Fallback: escape special CSS characters\n return str.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\n/**\n * Generate a unique ID for an element based on its position in the DOM\n * Uses only simple, reliable selectors to avoid issues with special characters\n */\nexport function generateElementId(element: Element): string {\n const path: string[] = [];\n let current: Element | null = element;\n\n while (current && current !== document.documentElement) {\n let selector = current.tagName.toLowerCase();\n\n if (current.id) {\n // IDs need to be escaped in case they contain special characters\n selector += `#${escapeCSSSelector(current.id)}`;\n path.unshift(selector);\n break; // ID is unique enough\n }\n\n // Only use simple class names that don't contain special characters\n // Skip Tailwind arbitrary value classes like bg-[#xxx], w-[100px], etc.\n if (current.className && typeof current.className === \"string\") {\n const simpleClasses = current.className\n .trim()\n .split(/\\s+/)\n .filter((cls) => !cls.includes(\"[\") && !cls.includes(\":\"))\n .slice(0, 2);\n\n if (simpleClasses.length > 0) {\n selector += `.${simpleClasses.map(escapeCSSSelector).join(\".\")}`;\n }\n }\n\n // Add nth-of-type for uniqueness\n const parent = current.parentElement;\n if (parent) {\n const siblings = Array.from(parent.children).filter(\n (child) => child.tagName === current!.tagName,\n );\n if (siblings.length > 1) {\n const index = siblings.indexOf(current) + 1;\n selector += `:nth-of-type(${index})`;\n }\n }\n\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(\" > \");\n}\n\n/**\n * Get a human-readable description of an element\n */\nexport function getElementDescription(element: Element): string {\n let desc = element.tagName.toLowerCase();\n if (element.id) {\n desc += `#${element.id}`;\n } else if (element.className && typeof element.className === \"string\") {\n const firstClass = element.className.split(\" \")[0];\n if (firstClass) {\n desc += `.${firstClass}`;\n }\n }\n return desc;\n}\n\n/**\n * Get current inline styles from an element\n */\nfunction getInlineStyles(element: Element): Record<string, string> {\n if (!(element instanceof HTMLElement)) return {};\n\n const styles: Record<string, string> = {};\n const styleAttr = element.getAttribute(\"style\");\n\n if (styleAttr) {\n const declarations = styleAttr.split(\";\").filter(Boolean);\n for (const decl of declarations) {\n const [prop, ...valueParts] = decl.split(\":\");\n if (prop && valueParts.length) {\n styles[prop.trim()] = valueParts.join(\":\").trim();\n }\n }\n }\n\n return styles;\n}\n\n/**\n * Get current attributes from an element (excluding style and class)\n */\nfunction getAttributes(element: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n\n for (const attr of Array.from(element.attributes)) {\n if (attr.name !== \"style\" && attr.name !== \"class\") {\n attrs[attr.name] = attr.value;\n }\n }\n\n return attrs;\n}\n\n/**\n * Persisted state shape (what gets saved to localStorage)\n */\ninterface PersistedState {\n pinnedPosition: PinnedPosition;\n modifiedElements: Record<string, ElementModification>;\n deletedElements: Record<string, DeletedElement>;\n}\n\ninterface InspectStore extends PersistedState {\n /** Persisted pinned position */\n setPinnedPosition: (position: PinnedPosition) => void;\n\n /** Whether the store has been hydrated from storage */\n _hasHydrated: boolean;\n setHasHydrated: (state: boolean) => void;\n\n /** Whether modifications were auto-applied on page load */\n hasAutoAppliedModifications: boolean;\n setHasAutoAppliedModifications: (value: boolean) => void;\n\n /** Track a modification to an element */\n trackModification: (\n element: Element,\n type: \"style\" | \"attribute\",\n key: string,\n oldValue: string | null,\n newValue: string | null,\n ) => void;\n\n /** Track an element deletion */\n trackDeletion: (element: Element) => void;\n\n /** Get modification record for an element */\n getModification: (element: Element) => ElementModification | null;\n\n /** Reset all modifications for a specific element */\n resetElement: (elementId: string) => void;\n\n /** Reset all modifications for all elements (including restoring deleted elements) */\n resetAllElements: () => void;\n\n /** Get all modified elements that still exist in the DOM */\n getModifiedElementsInDOM: () => Array<{\n modification: ElementModification;\n element: Element | null;\n }>;\n\n /** Get count of deleted elements */\n getDeletedCount: () => number;\n\n /** Apply persisted modifications to the DOM */\n applyPersistedModifications: () => number;\n\n /** Clear persisted state (for testing) */\n clearPersistedState: () => void;\n}\n\nexport const useInspectStore = create<InspectStore>()(\n persist(\n (set, get) => ({\n // Persisted state\n pinnedPosition: \"floating\",\n modifiedElements: {},\n deletedElements: {},\n\n // Non-persisted state\n _hasHydrated: false,\n hasAutoAppliedModifications: false,\n\n // Actions\n setPinnedPosition: (position) => set({ pinnedPosition: position }),\n\n setHasHydrated: (state) => set({ _hasHydrated: state }),\n\n setHasAutoAppliedModifications: (value) =>\n set({ hasAutoAppliedModifications: value }),\n\n trackDeletion: (element) => {\n if (!(element instanceof HTMLElement)) return;\n\n const elementId = generateElementId(element);\n\n // Store original display value before hiding\n const computedStyle = window.getComputedStyle(element);\n const originalDisplay =\n element.style.display || computedStyle.display || \"\";\n\n const deletedElement: DeletedElement = {\n elementId,\n selector: elementId,\n description: getElementDescription(element),\n originalDisplay,\n deletedAt: Date.now(),\n };\n\n // Hide the element instead of removing it\n element.style.setProperty(\"display\", \"none\", \"important\");\n\n // Also mark in modifiedElements if it exists there\n const currentMods = get().modifiedElements;\n if (currentMods[elementId]) {\n set({\n modifiedElements: {\n ...currentMods,\n [elementId]: {\n ...currentMods[elementId],\n isDeleted: true,\n },\n },\n });\n }\n\n set({\n deletedElements: {\n ...get().deletedElements,\n [elementId]: deletedElement,\n },\n });\n },\n\n trackModification: (element, type, key, oldValue, newValue) => {\n const elementId = generateElementId(element);\n const currentMods = get().modifiedElements;\n const existing = currentMods[elementId];\n\n // Initialize or update modification record\n const modification: ElementModification = existing\n ? { ...existing }\n : {\n elementId,\n selector: elementId,\n description: getElementDescription(element),\n lastModified: Date.now(),\n originalStyles: getInlineStyles(element),\n modifiedStyles: {},\n originalAttributes: getAttributes(element),\n modifiedAttributes: {},\n };\n\n // Update the appropriate modification tracking\n if (type === \"style\") {\n // Track original value if not already tracked\n if (\n oldValue !== null &&\n !(key in modification.originalStyles) &&\n !existing\n ) {\n modification.originalStyles[key] = oldValue;\n }\n\n // Track current modified value\n if (newValue !== null) {\n modification.modifiedStyles[key] = newValue;\n } else {\n // Style was removed\n delete modification.modifiedStyles[key];\n }\n } else {\n // Track original value if not already tracked\n if (\n oldValue !== null &&\n !(key in modification.originalAttributes) &&\n !existing\n ) {\n modification.originalAttributes[key] = oldValue;\n }\n\n // Track current modified value\n if (newValue !== null) {\n modification.modifiedAttributes[key] = newValue;\n } else {\n // Attribute was removed\n delete modification.modifiedAttributes[key];\n }\n }\n\n modification.lastModified = Date.now();\n\n set({\n modifiedElements: {\n ...currentMods,\n [elementId]: modification,\n },\n });\n },\n\n getModification: (element) => {\n const elementId = generateElementId(element);\n return get().modifiedElements[elementId] || null;\n },\n\n resetElement: (elementId) => {\n const mods = get().modifiedElements;\n const deletedEls = get().deletedElements;\n const modification = mods[elementId];\n const deletedElement = deletedEls[elementId];\n\n // Handle restoring a hidden (deleted) element\n if (deletedElement) {\n try {\n const element = document.querySelector(deletedElement.selector);\n if (element && element instanceof HTMLElement) {\n // Restore original display value\n if (deletedElement.originalDisplay) {\n element.style.display = deletedElement.originalDisplay;\n } else {\n element.style.removeProperty(\"display\");\n }\n }\n } catch {\n // Element may not exist anymore\n }\n\n // Remove from deleted elements\n const { [elementId]: _d, ...restDeleted } = deletedEls;\n set({ deletedElements: restDeleted });\n\n // Also remove isDeleted flag from modifications if present\n if (modification?.isDeleted) {\n const { [elementId]: _m, ...restMods } = mods;\n set({ modifiedElements: restMods });\n }\n return; // Exit early if this was a deleted element\n }\n\n // Handle resetting modifications (non-deleted elements)\n if (modification) {\n // Try to find the element in the DOM\n try {\n const element = document.querySelector(modification.selector);\n if (element && element instanceof HTMLElement) {\n // Reset styles\n for (const [key, value] of Object.entries(\n modification.originalStyles,\n )) {\n if (value) {\n element.style.setProperty(key, value);\n } else {\n element.style.removeProperty(key);\n }\n }\n\n // Remove any styles that were added (not in original)\n for (const key of Object.keys(modification.modifiedStyles)) {\n if (!(key in modification.originalStyles)) {\n element.style.removeProperty(key);\n }\n }\n\n // Reset attributes\n for (const [key, value] of Object.entries(\n modification.originalAttributes,\n )) {\n element.setAttribute(key, value);\n }\n\n // Remove any attributes that were added (not in original)\n for (const key of Object.keys(modification.modifiedAttributes)) {\n if (!(key in modification.originalAttributes)) {\n element.removeAttribute(key);\n }\n }\n }\n } catch {\n // Element may not exist anymore\n }\n\n // Remove from tracked modifications\n const { [elementId]: _m, ...restMods } = mods;\n set({ modifiedElements: restMods });\n }\n },\n\n resetAllElements: () => {\n const mods = get().modifiedElements;\n const deletedEls = get().deletedElements;\n\n // First restore deleted elements (in reverse order of deletion)\n const sortedDeleted = Object.values(deletedEls).sort(\n (a, b) => b.deletedAt - a.deletedAt,\n );\n for (const deleted of sortedDeleted) {\n get().resetElement(deleted.elementId);\n }\n\n // Then reset modified elements\n for (const elementId of Object.keys(mods)) {\n get().resetElement(elementId);\n }\n\n set({ modifiedElements: {}, deletedElements: {} });\n },\n\n getDeletedCount: () => {\n return Object.keys(get().deletedElements).length;\n },\n\n getModifiedElementsInDOM: () => {\n const mods = get().modifiedElements;\n const results: Array<{\n modification: ElementModification;\n element: Element | null;\n }> = [];\n\n for (const modification of Object.values(mods)) {\n let element: Element | null = null;\n\n // Find element using selector\n try {\n element = document.querySelector(modification.selector);\n } catch (e) {\n // Invalid selector - still add to results with null element\n console.warn(\n `[Anyclick] Invalid selector: ${modification.selector}`,\n e,\n );\n }\n\n // Always add to results (element may be null if not found or invalid selector)\n results.push({ modification, element });\n }\n\n // Sort by last modified (most recent first)\n return results.sort(\n (a, b) => b.modification.lastModified - a.modification.lastModified,\n );\n },\n\n applyPersistedModifications: () => {\n const mods = get().modifiedElements;\n const deletedEls = get().deletedElements;\n let appliedCount = 0;\n\n // Apply style/attribute modifications\n for (const modification of Object.values(mods)) {\n // Skip if marked as deleted (will be handled separately)\n if (modification.isDeleted) continue;\n\n try {\n const element = document.querySelector(modification.selector);\n if (element && element instanceof HTMLElement) {\n // Apply modified styles\n for (const [key, value] of Object.entries(\n modification.modifiedStyles,\n )) {\n element.style.setProperty(key, value);\n appliedCount++;\n }\n\n // Apply modified attributes\n for (const [key, value] of Object.entries(\n modification.modifiedAttributes,\n )) {\n element.setAttribute(key, value);\n appliedCount++;\n }\n }\n } catch {\n // Element may not exist or selector may be invalid\n }\n }\n\n // Apply deletions (hide elements with display: none)\n for (const deleted of Object.values(deletedEls)) {\n try {\n const element = document.querySelector(deleted.selector);\n if (element && element instanceof HTMLElement) {\n element.style.setProperty(\"display\", \"none\", \"important\");\n appliedCount++;\n }\n } catch {\n // Element may not exist or selector may be invalid\n }\n }\n\n if (appliedCount > 0) {\n set({ hasAutoAppliedModifications: true });\n }\n\n return appliedCount;\n },\n\n clearPersistedState: () => {\n set({\n pinnedPosition: \"floating\",\n modifiedElements: {},\n deletedElements: {},\n hasAutoAppliedModifications: false,\n _hasHydrated: true, // Keep hydrated state\n });\n // Also clear from storage\n useInspectStore.persist.clearStorage();\n },\n }),\n {\n name: \"anyclick-inspect-store\",\n version: STORE_VERSION,\n storage: createJSONStorage(() => localStorage),\n\n // Only persist these fields\n partialize: (state): PersistedState => ({\n pinnedPosition: state.pinnedPosition,\n modifiedElements: state.modifiedElements,\n deletedElements: state.deletedElements,\n }),\n\n // Handle hydration lifecycle\n onRehydrateStorage: () => {\n console.log(\"[Anyclick] Hydration starting...\");\n\n return (state, error) => {\n if (error) {\n console.error(\"[Anyclick] Hydration failed:\", error);\n } else {\n console.log(\"[Anyclick] Hydration finished\");\n }\n // Mark as hydrated regardless of success/failure\n state?.setHasHydrated(true);\n };\n },\n\n // Deep merge persisted state with current state\n // This ensures nested objects like modifiedElements are properly merged\n merge: (persistedState, currentState) => {\n const persisted = persistedState as PersistedState | undefined;\n return {\n ...currentState,\n pinnedPosition:\n persisted?.pinnedPosition ?? currentState.pinnedPosition,\n modifiedElements: {\n ...currentState.modifiedElements,\n ...(persisted?.modifiedElements ?? {}),\n },\n deletedElements: {\n ...currentState.deletedElements,\n ...(persisted?.deletedElements ?? {}),\n },\n };\n },\n\n // Handle migrations between versions\n migrate: (persistedState, version) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const state = persistedState as any;\n\n if (version === 0) {\n // Migration from version 0 to 1\n // Ensure deletedElements exists (added in v1)\n if (!state.deletedElements) {\n state.deletedElements = {};\n }\n }\n\n return state as PersistedState;\n },\n },\n ),\n);\n\n/**\n * Custom hook to check if the store has been hydrated\n * Use this to prevent hydration mismatches in SSR\n */\nexport function useHasHydrated() {\n return useInspectStore((state) => state._hasHydrated);\n}\n\n/**\n * Wait for hydration to complete before accessing persisted data\n * Useful for ensuring data is available before rendering\n */\nexport async function waitForHydration(): Promise<void> {\n return new Promise((resolve) => {\n if (useInspectStore.getState()._hasHydrated) {\n resolve();\n return;\n }\n\n const unsubscribe = useInspectStore.persist.onFinishHydration(() => {\n unsubscribe();\n resolve();\n });\n });\n}\n\nexport default useInspectStore;\n","import { useCallback, useState } from \"react\";\nimport { HighlightColors } from \"../types\";\nimport { clearHighlights, highlightTarget } from \"../highlight\";\nimport CopyButton from \"../CopyButton\";\n\n/**\n * Styles for ElementHierarchyNav\n */\nconst styles: Record<string, React.CSSProperties> = {\n container: {\n padding: \"8px 8px\",\n borderBottom: \"1px solid #333\",\n backgroundColor: \"#1a1a1a\",\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n },\n line: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"2px 4px\",\n margin: \"1px 0\",\n borderRadius: \"3px\",\n cursor: \"pointer\",\n transition: \"background-color 0.15s ease\",\n userSelect: \"none\" as const,\n fontSize: \"13px\",\n lineHeight: \"20px\",\n minHeight: \"24px\",\n maxHeight: \"24px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\" as const,\n },\n lineHover: {\n backgroundColor: \"rgba(255, 255, 255, 0.1)\",\n outline: \"1px solid rgba(86, 156, 214, 0.3)\",\n },\n lineCurrent: {\n backgroundColor: \"rgba(86, 156, 214, 0.15)\",\n borderLeft: \"2px solid #569cd6\",\n // paddingLeft: \"2px\",\n },\n lineDisabled: {\n opacity: 0.6,\n fontStyle: \"italic\",\n },\n tag: {\n color: \"#569cd6\",\n },\n id: {\n color: \"#9cdcfe\",\n },\n className: {\n color: \"#4ec9b0\",\n },\n selectorRow: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n marginTop: \"8px\",\n paddingTop: \"8px\",\n borderTop: \"1px solid #2a2a2a\",\n },\n selectorCode: {\n flex: 1,\n padding: \"5px 8px\",\n backgroundColor: \"#2d2d2d\",\n borderRadius: \"4px\",\n color: \"#ce9178\",\n fontSize: \"11px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n};\n\n// Elements that should not be selectable but can be shown in hierarchy\nconst BLACKLISTED_TAGS = new Set([\n \"br\",\n \"svg\",\n \"path\",\n \"circle\",\n \"rect\",\n \"line\",\n \"polygon\",\n \"polyline\",\n \"ellipse\",\n \"g\",\n \"defs\",\n \"use\",\n \"symbol\",\n \"text\",\n \"tspan\",\n \"script\",\n \"style\",\n \"noscript\",\n \"template\",\n \"slot\",\n \"next-route-announcer\",\n]);\n\n/**\n * Check if element is at the AnyclickProvider boundary\n */\nfunction isProviderBoundary(element: Element | null): boolean {\n if (!element) return true;\n if (element.hasAttribute(\"data-anyclick-provider\")) return true;\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n return false;\n}\n\n/**\n * Check if element is blacklisted (can show in hierarchy but details are hidden)\n * Exported so InspectDialog can use it to conditionally hide details\n */\nexport function isBlacklisted(element: Element): boolean {\n const tagName = element.tagName.toLowerCase();\n if (BLACKLISTED_TAGS.has(tagName)) return true;\n\n // Our own UI elements - only check the element itself, not ancestors\n if (element.classList.contains(\"uifeedback-highlight-target\")) return true;\n if (element.classList.contains(\"uifeedback-highlight-container\")) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if element should be completely hidden from hierarchy\n */\nfunction shouldHideElement(element: Element): boolean {\n // Hide zero-size elements\n const rect = element.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return true;\n\n return false;\n}\n\n/**\n * Get element info for display\n */\nfunction getElementInfo(element: Element) {\n const tagName = element.tagName.toLowerCase();\n const id = element.id || null;\n const classNames = Array.from(element.classList);\n\n return { tagName, id, classNames };\n}\n\n/**\n * Calculate indentation level by counting parents up to boundary\n * Returns both the actual level and a capped display level\n */\nfunction getIndentLevel(\n element: Element,\n targetElement: Element,\n): {\n actualLevel: number;\n displayLevel: number;\n} {\n let level = 0;\n let current: Element | null = targetElement;\n\n while (current && current !== element) {\n current = current.parentElement;\n if (current && !isProviderBoundary(current)) {\n level++;\n }\n }\n\n // Cap display level at 3 to prevent excessive indentation\n const MAX_DISPLAY_LEVEL = 3;\n return {\n actualLevel: level,\n displayLevel: Math.min(level, MAX_DISPLAY_LEVEL),\n };\n}\n\n/**\n * Render an ellipsis line to indicate skipped levels\n */\nfunction EllipsisLine({ displayLevel }: { displayLevel: number }) {\n const indentPx = displayLevel * 16;\n return (\n <div\n style={{\n ...styles.line,\n paddingLeft: `${8 + indentPx}px`,\n color: \"#666\",\n fontSize: \"12px\",\n cursor: \"default\",\n pointerEvents: \"none\",\n }}\n >\n ...\n </div>\n );\n}\n\n/**\n * Render a single hierarchy line\n */\nfunction HierarchyLine({\n element,\n isCurrent,\n displayLevel,\n selector,\n onSelect,\n onMouseEnter,\n onMouseLeave,\n isHovered,\n}: {\n element: Element;\n isCurrent: boolean;\n displayLevel: number;\n selector?: string;\n onSelect: () => void;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n isHovered: boolean;\n}) {\n const { tagName, id, classNames } = getElementInfo(element);\n const blacklisted = isBlacklisted(element);\n const indentPx = displayLevel * 16; // Standard code editor indent\n\n const lineStyle = {\n ...styles.line,\n paddingLeft: `${8 + indentPx}px`,\n ...(isCurrent ? styles.lineCurrent : {}),\n ...(isHovered && !isCurrent ? styles.lineHover : {}),\n ...(blacklisted ? styles.lineDisabled : {}),\n };\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onSelect();\n };\n\n // Generate inspect command for console\n const inspectCommand = selector\n ? `inspect(document.querySelector('${selector}'))`\n : \"\";\n\n return (\n <div\n style={{\n ...lineStyle,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"8px\",\n }}\n onClick={handleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n minWidth: 0,\n flex: 1,\n overflow: \"hidden\",\n }}\n >\n <span style={{ ...styles.tag, flexShrink: 0 }}>&lt;{tagName}</span>\n {id && (\n <span\n style={{\n ...styles.id,\n flexShrink: 0,\n maxWidth: \"150px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n #{id}\n </span>\n )}\n {classNames.length > 0 && (\n <span\n style={{\n ...styles.className,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n minWidth: 0,\n }}\n >\n .{classNames.join(\".\")}\n </span>\n )}\n <span style={{ ...styles.tag, flexShrink: 0 }}>&gt;</span>\n </div>\n {isCurrent && selector && (\n <div\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n flexShrink: 0,\n }}\n title=\"Copy inspect() command for console\"\n >\n <CopyButton text={inspectCommand} size=\"small\" />\n </div>\n )}\n </div>\n );\n}\n\n/**\n * ElementHierarchyNav - shows parent, current, and next element\n * in a simple HTML structure view with proper indentation\n */\nfunction ElementHierarchyNav({\n targetElement,\n elementInfo,\n onSelectElement,\n highlightColors,\n isCompact = false,\n}: {\n targetElement: Element;\n elementInfo: {\n tagName: string;\n id: string | null;\n classNames: string[];\n selector: string;\n };\n onSelectElement?: (element: Element) => void;\n highlightColors?: HighlightColors;\n isCompact?: boolean;\n}) {\n // Find previous sibling (line above)\n let prevElement: Element | null = targetElement.previousElementSibling;\n while (prevElement && shouldHideElement(prevElement)) {\n prevElement = prevElement.previousElementSibling;\n }\n\n // Find next element (line below) - prefer next sibling, then first child\n let nextElement: Element | null = targetElement.nextElementSibling;\n while (nextElement && shouldHideElement(nextElement)) {\n nextElement = nextElement.nextElementSibling;\n }\n\n // If no next sibling, try first child\n let nextIsChild = false;\n if (!nextElement) {\n nextElement = targetElement.firstElementChild;\n while (nextElement && shouldHideElement(nextElement)) {\n nextElement = nextElement.nextElementSibling;\n }\n if (nextElement) {\n nextIsChild = true;\n }\n }\n\n // Calculate actual depth of current element from document root\n let currentActualDepth = 0;\n let temp: Element | null = targetElement;\n while (temp && !isProviderBoundary(temp.parentElement)) {\n temp = temp.parentElement;\n if (temp) currentActualDepth++;\n }\n\n // Determine display levels - show as code editor lines\n const MAX_DISPLAY_LEVEL = 3;\n let needsEllipsis = currentActualDepth > MAX_DISPLAY_LEVEL;\n\n let prevDisplayLevel: number;\n let currentDisplayLevel: number;\n let nextDisplayLevel: number;\n\n if (needsEllipsis) {\n // Deeply nested: cap indentation, show ellipsis\n // But if next is a child, we need to keep it visually indented more\n if (nextIsChild) {\n // Show as: prev(2), current(2), child(3)\n prevDisplayLevel = MAX_DISPLAY_LEVEL - 1;\n currentDisplayLevel = MAX_DISPLAY_LEVEL - 1;\n nextDisplayLevel = MAX_DISPLAY_LEVEL;\n } else {\n // Show as: prev(3), current(3), sibling(3)\n prevDisplayLevel = MAX_DISPLAY_LEVEL;\n currentDisplayLevel = MAX_DISPLAY_LEVEL;\n nextDisplayLevel = MAX_DISPLAY_LEVEL;\n }\n } else {\n // Not deeply nested: show actual indentation\n prevDisplayLevel = currentActualDepth; // Sibling at same level\n currentDisplayLevel = currentActualDepth;\n nextDisplayLevel = nextIsChild\n ? currentActualDepth + 1\n : currentActualDepth;\n }\n\n // Hover state\n const [hoveredElement, setHoveredElement] = useState<Element | null>(null);\n\n const handleMouseEnter = useCallback(\n (element: Element) => {\n setHoveredElement(element);\n highlightTarget(element, highlightColors);\n },\n [highlightColors],\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoveredElement(null);\n clearHighlights();\n highlightTarget(targetElement, highlightColors);\n }, [targetElement, highlightColors]);\n\n const handleSelect = useCallback(\n (element: Element) => {\n clearHighlights();\n onSelectElement?.(element);\n },\n [onSelectElement],\n );\n\n return (\n <div style={styles.container}>\n {/* Ellipsis indicator when deeply nested */}\n {needsEllipsis && <EllipsisLine displayLevel={0} />}\n\n {/* Previous sibling line */}\n {prevElement && (\n <HierarchyLine\n element={prevElement}\n isCurrent={false}\n displayLevel={prevDisplayLevel}\n onSelect={() => handleSelect(prevElement)}\n onMouseEnter={() => handleMouseEnter(prevElement)}\n onMouseLeave={handleMouseLeave}\n isHovered={hoveredElement === prevElement}\n />\n )}\n\n {/* Current line (selected) */}\n <HierarchyLine\n element={targetElement}\n isCurrent={true}\n displayLevel={currentDisplayLevel}\n selector={elementInfo.selector}\n onSelect={() => {}}\n onMouseEnter={() => {}}\n onMouseLeave={() => {}}\n isHovered={false}\n />\n\n {/* Next line (sibling or child) */}\n {nextElement && (\n <HierarchyLine\n element={nextElement}\n isCurrent={false}\n displayLevel={nextDisplayLevel}\n onSelect={() => handleSelect(nextElement)}\n onMouseEnter={() => handleMouseEnter(nextElement)}\n onMouseLeave={handleMouseLeave}\n isHovered={hoveredElement === nextElement}\n />\n )}\n\n {/* Selector display */}\n <div style={styles.selectorRow}>\n <code style={styles.selectorCode}>{elementInfo.selector}</code>\n <CopyButton text={elementInfo.selector} size=\"small\" />\n </div>\n </div>\n );\n}\n\nexport default ElementHierarchyNav;\n","import { useState, CSSProperties } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\nimport useCompactMode from \"./useCompactMode\";\n\n// Local styles for CopyButton\nconst copyButtonStyles: Record<string, CSSProperties> = {\n copyButton: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"6px 12px\",\n border: \"none\",\n backgroundColor: \"#333\",\n color: \"#e0e0e0\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n fontSize: \"12px\",\n transition: \"all 0.15s\",\n },\n copyButtonSmall: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"24px\",\n height: \"24px\",\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#888\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n transition: \"all 0.15s\",\n flexShrink: 0,\n },\n};\n\n/**\n * Copy button component with feedback\n */\nfunction CopyButton({\n text,\n label,\n size = \"small\",\n}: {\n text: string;\n label?: string;\n size?: \"small\" | \"medium\";\n}) {\n const [copied, setCopied] = useState(false);\n const { isCompact, compactStyles } = useCompactMode();\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n };\n\n const buttonStyle =\n size === \"small\"\n ? copyButtonStyles.copyButtonSmall\n : copyButtonStyles.copyButton;\n const iconSize = isCompact\n ? size === \"small\"\n ? 10\n : 12\n : size === \"small\"\n ? 12\n : 14;\n\n return (\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...buttonStyle,\n ...(isCompact ? compactStyles.copyButtonSmall : {}),\n }}\n title={`Copy ${label || \"to clipboard\"}`}\n >\n {copied ? (\n <>\n <Check size={iconSize} />\n {label && size !== \"small\" && <span>Copied!</span>}\n </>\n ) : (\n <>\n <Copy size={iconSize} />\n {label && size !== \"small\" && <span>{label}</span>}\n </>\n )}\n </button>\n );\n}\n\nexport default CopyButton;\n","import { createContext, useContext } from \"react\";\n\n/**\n * Context for compact mode (when pinned to edges)\n */\ninterface CompactModeContextValue {\n isCompact: boolean;\n styles: Record<string, React.CSSProperties>;\n}\n\nconst CompactModeContext = createContext<CompactModeContextValue>({\n isCompact: false,\n styles: {}, // Empty default, will be provided by Provider\n});\n\nconst useCompactMode = () => {\n const { isCompact, styles } = useContext(CompactModeContext);\n return { isCompact, compactStyles: styles };\n};\n\nexport default useCompactMode;\n","import type { ScreenshotConfig } from \"@ewjdev/anyclick-core\";\nimport type { AnyclickTheme, ContextMenuItem, HighlightConfig } from \"./types\";\nimport { CSSProperties } from \"react\";\nimport { openInspectDialog } from \"./InspectDialog/InspectDialogManager\";\n\nexport type PresetRole = \"qa\" | \"pm\" | \"designer\" | \"developer\" | \"chrome\";\n\nexport interface PresetConfig {\n role: PresetRole;\n label: string;\n description: string;\n menuItems: ContextMenuItem[];\n screenshotConfig?: Partial<ScreenshotConfig>;\n metadata?: Record<string, unknown>;\n theme?: AnyclickTheme;\n highlightConfig?: HighlightConfig;\n}\n\nexport interface CreatePresetMenuOptions {\n /** Whether to include coming-soon items (defaults to true) */\n includeComingSoon?: boolean;\n /**\n * Optional overrides for menu items, screenshot config, metadata, or theme.\n * Useful when you want to tweak a preset without rebuilding it manually.\n */\n overrides?: Partial<Omit<PresetConfig, \"role\" | \"label\" | \"description\">>;\n}\n\nconst presetDefaults: Record<PresetRole, PresetConfig> = {\n qa: {\n role: \"qa\",\n label: \"QA\",\n description: \"Defect-first menu tuned for repros and logs.\",\n menuItems: [\n { type: \"bug\", label: \"Bug / defect\", showComment: true },\n { type: \"ux_papercut\", label: \"UX papercut\", showComment: true },\n {\n type: \"repro_steps\",\n label: \"Repro steps\",\n showComment: true,\n },\n {\n type: \"perf_trace\",\n label: \"Performance trace\",\n showComment: true,\n status: \"comingSoon\",\n badge: { label: \"Coming soon\", tone: \"info\" },\n },\n {\n type: \"video_capture\",\n label: \"Video capture\",\n showComment: false,\n status: \"comingSoon\",\n badge: { label: \"Coming soon\", tone: \"info\" },\n },\n ],\n screenshotConfig: {\n enabled: true,\n showPreview: true,\n padding: 24,\n quality: 0.7,\n },\n metadata: {\n capture: {\n console: \"errors\",\n network: \"errors\",\n domSnapshot: true,\n },\n },\n },\n pm: {\n role: \"pm\",\n label: \"PM\",\n description: \"Idea-first menu with quick impact sizing.\",\n menuItems: [\n { type: \"feature\", label: \"Feature idea\", showComment: true },\n { type: \"ux_papercut\", label: \"UX papercut\", showComment: true },\n { type: \"success_story\", label: \"Customer quote\", showComment: true },\n {\n type: \"impact_sizing\",\n label: \"Impact / priority\",\n showComment: true,\n status: \"comingSoon\",\n badge: { label: \"Coming soon\", tone: \"neutral\" },\n },\n ],\n screenshotConfig: {\n enabled: true,\n showPreview: true,\n quality: 0.65,\n padding: 16,\n },\n metadata: {\n capture: {\n sentiment: true,\n audience: \"pm\",\n },\n },\n },\n designer: {\n role: \"designer\",\n label: \"Designer\",\n description: \"Visual QA with contrast and motion cues.\",\n menuItems: [\n { type: \"visual_bug\", label: \"Visual bug\", showComment: true },\n { type: \"accessibility\", label: \"Accessibility\", showComment: true },\n { type: \"copy_tone\", label: \"Copy / tone\", showComment: true },\n {\n type: \"motion_glitch\",\n label: \"Motion glitch\",\n showComment: true,\n status: \"comingSoon\",\n badge: { label: \"Coming soon\", tone: \"info\" },\n },\n ],\n screenshotConfig: {\n enabled: true,\n showPreview: true,\n quality: 0.75,\n padding: 32,\n },\n metadata: {\n capture: {\n colorContrast: true,\n prefersReducedMotion: true,\n },\n },\n theme: {\n highlightConfig: {\n colors: {\n targetColor: \"#a855f7\",\n containerColor: \"#22d3ee\",\n },\n },\n },\n },\n developer: {\n role: \"developer\",\n label: \"Developer\",\n description: \"Debug-ready menu with diagnostics placeholders.\",\n menuItems: [\n { type: \"bug\", label: \"Bug\", showComment: true },\n { type: \"refactor\", label: \"Refactor request\", showComment: true },\n {\n type: \"diagnostics\",\n label: \"Diagnostics\",\n children: [\n {\n type: \"console_snapshot\",\n label: \"Console snapshot\",\n showComment: false,\n status: \"comingSoon\",\n badge: { label: \"Coming soon\", tone: \"info\" },\n },\n {\n type: \"network_trace\",\n label: \"Network trace\",\n showComment: false,\n status: \"comingSoon\",\n badge: { label: \"Coming soon\", tone: \"info\" },\n },\n {\n type: \"copy_selector\",\n label: \"Copy CSS selector\",\n showComment: false,\n },\n ],\n },\n ],\n screenshotConfig: {\n enabled: true,\n showPreview: true,\n padding: 20,\n quality: 0.7,\n },\n metadata: {\n capture: {\n console: \"errors\",\n network: \"errors\",\n reduxState: \"opt-in\",\n },\n },\n theme: {\n highlightConfig: {\n colors: {\n targetColor: \"#22c55e\",\n containerColor: \"#0ea5e9\",\n },\n },\n },\n },\n chrome: {\n role: \"chrome\",\n label: \"Chrome\",\n description:\n \"Chrome-like context menu with core browser actions and native styling.\",\n menuItems: [\n {\n type: \"reload_page\",\n label: \"Reload page\",\n showComment: false,\n onClick: ({ closeMenu }) => {\n closeMenu();\n if (typeof window !== \"undefined\") {\n window.location.reload();\n }\n return false;\n },\n },\n {\n type: \"print_page\",\n label: \"Print…\",\n showComment: false,\n onClick: ({ closeMenu }) => {\n closeMenu();\n if (typeof window !== \"undefined\") {\n window.print();\n }\n return false;\n },\n },\n {\n type: \"search_google\",\n label: 'Search \"Google\"',\n showComment: false,\n onClick: ({ closeMenu }) => {\n closeMenu();\n if (typeof window === \"undefined\") return false;\n const selection = window.getSelection()?.toString().trim();\n const query = selection && selection.length > 0 ? selection : \"\";\n const url = query\n ? `https://www.google.com/search?q=${encodeURIComponent(query)}`\n : \"https://www.google.com\";\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n return false;\n },\n },\n {\n type: \"share_page\",\n label: \"Share…\",\n showComment: false,\n onClick: async ({ closeMenu }) => {\n closeMenu();\n if (typeof window === \"undefined\") return false;\n const shareData = {\n title: document.title,\n text: document.title,\n url: window.location.href,\n };\n try {\n if (navigator.share) {\n await navigator.share(shareData);\n } else if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(window.location.href);\n }\n } catch {\n // Silently ignore share/clipboard errors to match native feel\n }\n return false;\n },\n },\n {\n type: \"inspect\",\n label: \"Inspect\",\n showComment: false,\n onClick: ({ closeMenu, targetElement }) => {\n closeMenu();\n if (targetElement) {\n openInspectDialog(targetElement);\n }\n return false;\n },\n },\n ],\n screenshotConfig: {\n enabled: false,\n },\n theme: {\n highlightConfig: {\n enabled: false,\n },\n menuStyle: {\n // Chrome-like palette, hover, and muted text to match the native menu\n \"--anyclick-menu-bg\": \"#202124\",\n \"--anyclick-menu-hover\": \"#2f3135\",\n \"--anyclick-menu-text\": \"#e8eaed\",\n \"--anyclick-menu-text-muted\": \"#9aa0a6\",\n \"--anyclick-menu-border\": \"#3c4043\",\n \"--anyclick-menu-accent\": \"#8ab4f8\",\n \"--anyclick-menu-accent-text\": \"#0b1117\",\n \"--anyclick-menu-input-bg\": \"#2f3135\",\n \"--anyclick-menu-input-border\": \"#3c4043\",\n \"--anyclick-menu-cancel-bg\": \"#2f3135\",\n \"--anyclick-menu-cancel-text\": \"#9aa0a6\",\n backgroundColor: \"#202124\",\n color: \"#e8eaed\",\n border: \"1px solid #3c4043\",\n borderRadius: 6,\n boxShadow: \"0 8px 18px rgba(0, 0, 0, 0.4)\",\n minWidth: 240,\n padding: 0,\n fontFamily:\n 'Roboto, \"Segoe UI\", -apple-system, BlinkMacSystemFont, sans-serif',\n fontSize: 14,\n letterSpacing: 0,\n } as CSSProperties,\n },\n },\n};\n\n/**\n * Create a preset menu for a given role. Coming-soon items remain visible but disabled.\n */\nexport function createPresetMenu(\n role: PresetRole,\n options: CreatePresetMenuOptions = {},\n): PresetConfig {\n const preset = presetDefaults[role];\n if (!preset) {\n throw new Error(`Unknown preset role: ${role}`);\n }\n\n const includeComingSoon = options.includeComingSoon ?? true;\n const menuItems = (options.overrides?.menuItems ?? preset.menuItems).filter(\n (item) => (includeComingSoon ? true : item.status !== \"comingSoon\"),\n );\n\n // Shallow-clone menu items so consumers can mutate safely\n const clonedMenuItems: ContextMenuItem[] = menuItems.map((item) => ({\n ...item,\n children: item.children\n ? item.children.map((child) => ({ ...child }))\n : undefined,\n }));\n\n return {\n role: preset.role,\n label: preset.label,\n description: preset.description,\n menuItems: clonedMenuItems,\n screenshotConfig: {\n ...preset.screenshotConfig,\n ...options.overrides?.screenshotConfig,\n },\n metadata: {\n ...preset.metadata,\n ...options.overrides?.metadata,\n },\n theme: {\n ...preset.theme,\n ...options.overrides?.theme,\n },\n };\n}\n\n/**\n * List all available presets with their defaults.\n */\nexport function listPresets(): PresetConfig[] {\n return Object.values(presetDefaults).map((preset) => ({\n ...preset,\n menuItems: preset.menuItems.map((item) => ({\n ...item,\n children: item.children\n ? item.children.map((child) => ({ ...child }))\n : undefined,\n })),\n }));\n}\n\nexport { presetDefaults };\n","\"use client\";\n\nimport React from \"react\";\n\nexport interface AnyclickLogoProps {\n /** Size of the logo in pixels. Defaults to 64 */\n size?: number;\n /** Border width in pixels. Defaults to 2 (same as default cursor stroke) */\n borderWidth?: number;\n /** Primary color for the circle border and cursor. Defaults to #3b82f6 (blue-500) */\n primaryColor?: string;\n /** Background color of the circle. Defaults to rgba(59, 130, 246, 0.1) */\n backgroundColor?: string;\n /** Custom class name */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Click handler */\n onClick?: () => void;\n}\n\n/**\n * Anyclick Logo - A circle with a cursor pointer in the center\n * The cursor is styled similarly to the default system cursor\n */\nexport function AnyclickLogo({\n size = 64,\n borderWidth = 2,\n primaryColor = \"#3b82f6\",\n backgroundColor = \"rgba(59, 130, 246, 0.1)\",\n className,\n style,\n onClick,\n}: AnyclickLogoProps) {\n // Cursor size is proportional to the circle size\n const cursorSize = size * 0.45;\n const cursorStroke = borderWidth;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={{ cursor: onClick ? \"pointer\" : undefined, ...style }}\n onClick={onClick}\n role={onClick ? \"button\" : \"img\"}\n aria-label=\"Anyclick Logo\"\n >\n {/* Circle background */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={size / 2 - borderWidth / 2}\n fill={backgroundColor}\n stroke={primaryColor}\n strokeWidth={borderWidth}\n />\n\n {/* Cursor pointer - centered in the circle */}\n <g\n transform={`translate(${(size - cursorSize) / 2}, ${(size - cursorSize) / 2})`}\n >\n {/* Cursor shape - classic pointer arrow */}\n <path\n d={`\n M ${cursorSize * 0.15} ${cursorSize * 0.08}\n L ${cursorSize * 0.15} ${cursorSize * 0.85}\n L ${cursorSize * 0.35} ${cursorSize * 0.65}\n L ${cursorSize * 0.55} ${cursorSize * 0.85}\n L ${cursorSize * 0.65} ${cursorSize * 0.75}\n L ${cursorSize * 0.45} ${cursorSize * 0.55}\n L ${cursorSize * 0.7} ${cursorSize * 0.55}\n Z\n `}\n fill=\"white\"\n stroke={primaryColor}\n strokeWidth={cursorStroke}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </g>\n </svg>\n );\n}\n\nexport default AnyclickLogo;\n","\"use client\";\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { useInspectStore, useHasHydrated } from \"./inspectStore\";\nimport { AnyclickLogo } from \"../AnyclickLogo\";\nimport { openInspectDialog } from \"./InspectDialogManager\";\nimport { X, RotateCcw } from \"lucide-react\";\n\nexport interface ModificationIndicatorProps {\n /** Position of the indicator. Defaults to \"bottom-right\" */\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n /** Size of the logo in pixels. Defaults to 48 */\n size?: number;\n /** Whether to auto-apply persisted modifications on mount. Defaults to true */\n autoApply?: boolean;\n /** Offset from edge in pixels. Defaults to 16 */\n offset?: number;\n /** Primary color for the logo */\n primaryColor?: string;\n /** Background color for the logo */\n backgroundColor?: string;\n}\n\n/**\n * ModificationIndicator - Shows the Anyclick logo when modifications are active\n *\n * This component:\n * 1. Waits for Zustand hydration before applying modifications\n * 2. Auto-applies persisted modifications on mount (if autoApply is true)\n * 3. Shows the Anyclick logo in the corner when modifications are active\n * 4. Clicking the logo opens a quick menu to view/reset modifications\n */\nexport function ModificationIndicator({\n position = \"bottom-right\",\n size = 48,\n autoApply = true,\n offset = 16,\n primaryColor = \"#3b82f6\",\n backgroundColor = \"rgba(59, 130, 246, 0.15)\",\n}: ModificationIndicatorProps) {\n const {\n modifiedElements,\n deletedElements,\n hasAutoAppliedModifications,\n applyPersistedModifications,\n resetAllElements,\n getModifiedElementsInDOM,\n setHasAutoAppliedModifications,\n } = useInspectStore();\n\n // Track hydration state to prevent SSR mismatches\n const hasHydrated = useHasHydrated();\n\n const [showMenu, setShowMenu] = useState(false);\n const [appliedCount, setAppliedCount] = useState(0);\n\n // Auto-apply modifications after hydration completes\n useEffect(() => {\n if (!hasHydrated || !autoApply || typeof window === \"undefined\") {\n return;\n }\n\n // Wait a tick for DOM to be ready after hydration\n const timer = setTimeout(() => {\n const count = applyPersistedModifications();\n setAppliedCount(count);\n }, 50);\n\n return () => clearTimeout(timer);\n }, [hasHydrated, autoApply, applyPersistedModifications]);\n\n const modCount = Object.keys(modifiedElements).length;\n const deletedCount = Object.keys(deletedElements).length;\n const totalCount = modCount + deletedCount;\n\n // Check if there are any elements that can be inspected\n // Modified elements that exist in DOM, or hidden (deleted) elements\n const hasInspectableElements = hasHydrated && totalCount > 0;\n\n // Don't render until hydrated to prevent SSR mismatches\n const isVisible = hasHydrated && totalCount > 0;\n\n const handleReset = useCallback(() => {\n resetAllElements();\n setShowMenu(false);\n setHasAutoAppliedModifications(false);\n }, [resetAllElements, setHasAutoAppliedModifications]);\n\n const handleInspectFirst = useCallback(() => {\n // First try hidden (deleted) elements - they're still in DOM\n for (const deleted of Object.values(deletedElements)) {\n try {\n const element = document.querySelector(deleted.selector);\n if (element) {\n openInspectDialog(element);\n setShowMenu(false);\n return;\n }\n } catch {\n // Invalid selector\n }\n }\n\n // Then try modified elements\n const elements = getModifiedElementsInDOM();\n const firstValidModified = elements.find(\n (e) => e.element !== null && !e.modification.isDeleted,\n );\n if (firstValidModified?.element) {\n openInspectDialog(firstValidModified.element);\n setShowMenu(false);\n return;\n }\n\n setShowMenu(false);\n }, [getModifiedElementsInDOM, deletedElements]);\n\n if (!isVisible) {\n return null;\n }\n\n const positionStyles: React.CSSProperties = {\n position: \"fixed\",\n zIndex: 9998,\n ...(position.includes(\"bottom\") ? { bottom: offset } : { top: offset }),\n ...(position.includes(\"right\") ? { right: offset } : { left: offset }),\n };\n\n return (\n <div style={positionStyles}>\n {/* Menu popup */}\n {showMenu && (\n <div\n style={{\n ...indicatorStyles.menu,\n ...(position.includes(\"bottom\")\n ? { bottom: size + 8 }\n : { top: size + 8 }),\n ...(position.includes(\"right\") ? { right: 0 } : { left: 0 }),\n }}\n >\n <div style={indicatorStyles.menuHeader}>\n <span style={indicatorStyles.menuTitle}>\n {totalCount} Change{totalCount !== 1 ? \"s\" : \"\"}\n </span>\n <button\n type=\"button\"\n onClick={() => setShowMenu(false)}\n style={indicatorStyles.closeButton}\n >\n <X size={14} />\n </button>\n </div>\n <div style={indicatorStyles.menuStats}>\n {modCount > 0 && (\n <span style={indicatorStyles.statBadge}>{modCount} modified</span>\n )}\n {deletedCount > 0 && (\n <span\n style={{\n ...indicatorStyles.statBadge,\n backgroundColor: \"rgba(239, 68, 68, 0.15)\",\n color: \"#ef4444\",\n }}\n >\n {deletedCount} hidden\n </span>\n )}\n </div>\n {hasAutoAppliedModifications && (\n <div style={indicatorStyles.autoAppliedBadge}>\n Auto-applied {appliedCount} change{appliedCount !== 1 ? \"s\" : \"\"}\n </div>\n )}\n <div style={indicatorStyles.menuActions}>\n {hasInspectableElements && (\n <button\n type=\"button\"\n onClick={handleInspectFirst}\n style={indicatorStyles.menuButton}\n >\n View in Inspector\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleReset}\n style={indicatorStyles.menuButtonDanger}\n >\n <RotateCcw size={12} />\n Reset All {deletedCount > 0 && \"(show hidden)\"}\n </button>\n </div>\n </div>\n )}\n\n {/* Logo button */}\n <div\n style={{\n ...indicatorStyles.logoContainer,\n width: size,\n height: size,\n }}\n >\n <AnyclickLogo\n size={size}\n primaryColor={primaryColor}\n backgroundColor={backgroundColor}\n onClick={() => setShowMenu(!showMenu)}\n style={{\n filter: \"drop-shadow(0 2px 8px rgba(0,0,0,0.3))\",\n transition: \"transform 0.15s ease\",\n }}\n />\n {/* Badge showing count */}\n <div\n style={{\n ...indicatorStyles.badge,\n backgroundColor: deletedCount > 0 ? \"#ef4444\" : primaryColor,\n }}\n >\n {totalCount}\n </div>\n </div>\n </div>\n );\n}\n\nconst indicatorStyles: Record<string, React.CSSProperties> = {\n logoContainer: {\n position: \"relative\",\n cursor: \"pointer\",\n },\n badge: {\n position: \"absolute\",\n top: -4,\n right: -4,\n minWidth: 18,\n height: 18,\n borderRadius: 9,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n fontWeight: 600,\n color: \"white\",\n padding: \"0 4px\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.3)\",\n },\n menu: {\n position: \"absolute\",\n width: 220,\n backgroundColor: \"#1e1e1e\",\n border: \"1px solid #333\",\n borderRadius: 8,\n boxShadow: \"0 8px 32px rgba(0,0,0,0.4)\",\n overflow: \"hidden\",\n },\n menuHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"10px 12px\",\n borderBottom: \"1px solid #333\",\n backgroundColor: \"#252525\",\n },\n menuTitle: {\n fontSize: 12,\n fontWeight: 600,\n color: \"#e0e0e0\",\n },\n closeButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 20,\n height: 20,\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"#888\",\n cursor: \"pointer\",\n borderRadius: 4,\n },\n autoAppliedBadge: {\n padding: \"6px 12px\",\n backgroundColor: \"rgba(59, 130, 246, 0.15)\",\n color: \"#3b82f6\",\n fontSize: 10,\n borderBottom: \"1px solid #333\",\n },\n menuStats: {\n display: \"flex\",\n gap: 6,\n padding: \"6px 10px\",\n borderBottom: \"1px solid #333\",\n },\n statBadge: {\n padding: \"2px 8px\",\n borderRadius: 4,\n fontSize: 10,\n fontWeight: 500,\n backgroundColor: \"rgba(59, 130, 246, 0.15)\",\n color: \"#3b82f6\",\n },\n menuActions: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n padding: 10,\n },\n menuButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor: \"#333\",\n color: \"#e0e0e0\",\n borderRadius: 6,\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 500,\n transition: \"background-color 0.15s\",\n },\n menuButtonDanger: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor: \"rgba(239, 68, 68, 0.15)\",\n color: \"#ef4444\",\n borderRadius: 6,\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 500,\n transition: \"background-color 0.15s\",\n },\n};\n\nexport default ModificationIndicator;\n"],"mappings":"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","names":["import_react","import_anyclick_core","import_react","import_anyclick_core","import_react","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","import_jsx_runtime","styles","import_jsx_runtime","mergedTheme","import_react","import_react","import_react","import_anyclick_core","import_zustand","styles","import_react","import_react","import_react","styles","import_jsx_runtime","compactStyles","import_jsx_runtime","import_jsx_runtime","getElementDescription","CompactModeContext","useCompactMode","styles","compactStyles","CopyButton","React","import_jsx_runtime","import_anyclick_core","import_jsx_runtime","import_react","import_jsx_runtime","import_anyclick_core"]}