@ewjdev/anyclick-react 0.1.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/README.md +161 -0
- package/dist/index.d.mts +239 -0
- package/dist/index.d.ts +239 -0
- package/dist/index.js +1491 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1462 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/FeedbackProvider.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/expand.ts","../../../node_modules/lucide-react/src/icons/flag.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/types.ts"],"sourcesContent":["// Components\n\"use client\";\n\nexport { FeedbackProvider } from \"./FeedbackProvider\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport { ScreenshotPreview } from \"./ScreenshotPreview\";\n\n// Context and hooks\nexport { FeedbackContext, useFeedback } from \"./context\";\n\n// Types\nexport type {\n FeedbackMenuItem,\n FeedbackProviderProps,\n FeedbackContextValue,\n ContextMenuProps,\n HighlightColors,\n HighlightConfig,\n FeedbackUserContext,\n ScreenshotPreviewProps,\n} 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 } 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 useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createFeedbackClient } from \"@ewjdev/anyclick-core\";\nimport type {\n FeedbackClient,\n FeedbackType,\n ScreenshotData,\n} from \"@ewjdev/anyclick-core\";\nimport { FeedbackContext } from \"./context\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { findContainerParent } from \"./highlight\";\nimport type {\n FeedbackContextValue,\n FeedbackMenuItem,\n FeedbackProviderProps,\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 * FeedbackProvider component - wraps your app to enable feedback capture\n */\nexport function FeedbackProvider({\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}: FeedbackProviderProps) {\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 const clientRef = useRef<FeedbackClient | null>(null);\n\n // Create/update the feedback client\n useEffect(() => {\n const client = createFeedbackClient({\n adapter,\n targetFilter,\n maxInnerTextLength,\n maxOuterHTMLLength,\n maxAncestors,\n cooldownMs,\n stripAttributes,\n });\n\n // Set up callbacks\n client.onSubmitSuccess = onSubmitSuccess;\n client.onSubmitError = onSubmitError;\n\n // Set up context menu handler\n client.onContextMenu = (event, element) => {\n setTargetElement(element);\n // Find container element for screenshot capture\n const container = findContainerParent(element, highlightConfig);\n setContainerElement(container);\n setMenuPosition({ x: event.clientX, y: event.clientY });\n setMenuVisible(true);\n };\n\n clientRef.current = client;\n\n // Attach event listeners if not disabled\n if (!disabled) {\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 disabled,\n highlightConfig,\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 container = findContainerParent(element, highlightConfig);\n setContainerElement(container);\n setMenuPosition(position);\n setMenuVisible(true);\n },\n [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 // Context value\n const contextValue: FeedbackContextValue = useMemo(\n () => ({\n isEnabled: !disabled,\n isSubmitting,\n submitFeedback,\n openMenu,\n closeMenu,\n }),\n [disabled, isSubmitting, submitFeedback, openMenu, closeMenu],\n );\n\n return (\n <FeedbackContext.Provider value={contextValue}>\n {children}\n <ContextMenu\n visible={menuVisible && !disabled}\n position={menuPosition}\n targetElement={targetElement}\n containerElement={containerElement}\n items={menuItems}\n onSelect={handleMenuSelect}\n onClose={closeMenu}\n isSubmitting={isSubmitting}\n style={menuStyle}\n className={menuClassName}\n highlightConfig={highlightConfig}\n screenshotConfig={screenshotConfig}\n />\n </FeedbackContext.Provider>\n );\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { FeedbackContextValue } from \"./types\";\n\n/**\n * React context for feedback functionality\n */\nexport const FeedbackContext = createContext<FeedbackContextValue | null>(null);\n\n/**\n * Hook to access feedback context\n * @throws Error if used outside of FeedbackProvider\n */\nexport function useFeedback(): FeedbackContextValue {\n const context = useContext(FeedbackContext);\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 { ContextMenuProps, FeedbackMenuItem } 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} from \"lucide-react\";\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\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\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n ...menuStyles.item,\n ...(isHovered ? menuStyles.itemHover : {}),\n ...(disabled ? { opacity: 0.5, cursor: \"not-allowed\" } : {}),\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\n */\nfunction BackButton({ onClick }: { onClick: () => void }) {\n const [isHovered, setIsHovered] = useState(false);\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n ...menuStyles.item,\n ...(isHovered ? menuStyles.itemHover : {}),\n borderBottom: \"1px solid #e5e5e5\",\n marginBottom: \"4px\",\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 * 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}: 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 // 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 }\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 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 // Adjust position to stay within viewport\n useEffect(() => {\n if (visible && menuRef.current) {\n const rect = menuRef.current.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n let adjustedX = position.x;\n let adjustedY = position.y;\n\n if (position.x + rect.width > viewportWidth) {\n adjustedX = viewportWidth - rect.width - 10;\n }\n if (position.y + rect.height > viewportHeight) {\n adjustedY = viewportHeight - rect.height - 10;\n }\n\n if (adjustedX !== position.x || adjustedY !== position.y) {\n menuRef.current.style.left = `${adjustedX}px`;\n menuRef.current.style.top = `${adjustedY}px`;\n }\n }\n }, [visible, position]);\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 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 return (\n <div\n ref={menuRef}\n className={className}\n style={{\n ...menuStyles.container,\n left: position.x,\n top: position.y,\n ...(containerWidth\n ? { width: containerWidth, minWidth: containerWidth }\n : {}),\n ...style,\n }}\n role=\"menu\"\n aria-label=\"Feedback options\"\n >\n <div style={menuStyles.header}>\n {currentView === \"screenshot-preview\"\n ? \"Review Screenshots\"\n : \"Send Feedback\"}\n </div>\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\nconst screenshotIndicatorStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 12px\",\n fontSize: \"11px\",\n color: \"#9ca3af\",\n borderTop: \"1px solid #f3f4f6\",\n marginTop: \"4px\",\n};\n","import type { CSSProperties } from \"react\";\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: \"#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 },\n header: {\n padding: \"12px 16px\",\n borderBottom: \"1px solid #e5e5e5\",\n color: \"#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: \"#333\",\n border: \"none\",\n background: \"none\",\n width: \"100%\",\n textAlign: \"left\" as const,\n fontSize: \"14px\",\n },\n itemHover: {\n backgroundColor: \"#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 #e5e5e5\",\n },\n commentInput: {\n width: \"100%\",\n minHeight: \"60px\",\n padding: \"8px 12px\",\n border: \"1px solid #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 },\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: \"#f0f0f0\",\n color: \"#666\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"2px\",\n },\n submitButton: {\n backgroundColor: \"#0066cc\",\n color: \"#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","/**\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 { targetColor, containerColor, targetShadowOpacity, containerShadowOpacity } = 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 solid ${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 = 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(element: Element, colors?: HighlightColors): 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(element: Element, colors?: HighlightColors): 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 } from \"@ewjdev/anyclick-core\";\nimport { formatBytes, estimateTotalSize } from \"@ewjdev/anyclick-core\";\nimport type { ScreenshotPreviewProps } from \"./types\";\nimport { menuStyles } from \"./styles\";\nimport {\n ImageIcon,\n RefreshCwIcon,\n CheckIcon,\n XIcon,\n Loader2Icon,\n ExpandIcon,\n ShrinkIcon,\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}>No screenshots captured</span>\n <button\n type=\"button\"\n onClick={onRetake}\n style={styles.retakeButton}\n disabled={isSubmitting}\n >\n <RefreshCwIcon className=\"w-4 h-4\" />\n Capture Screenshots\n </button>\n </div>\n </div>\n );\n }\n\n const allTabs: {\n key: TabType;\n label: string;\n data: typeof screenshots.element;\n }[] = [\n { key: \"element\" as const, label: \"Element\", data: screenshots.element },\n {\n key: \"container\" as const,\n label: \"Container\",\n data: screenshots.container,\n },\n { key: \"viewport\" as const, label: \"Viewport\", data: screenshots.viewport },\n ];\n const tabs = allTabs.filter((tab) => tab.data);\n\n const activeScreenshot =\n activeTab === \"element\"\n ? screenshots.element\n : activeTab === \"container\"\n ? screenshots.container\n : screenshots.viewport;\n\n const totalSize = estimateTotalSize(screenshots);\n\n return (\n <div\n style={{\n ...styles.container,\n ...(isExpanded ? styles.containerExpanded : {}),\n }}\n >\n <div style={styles.header}>\n <span style={styles.headerTitle}>Screenshot Preview</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 }}\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 ) : (\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\nconst styles: 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: \"#9ca3af\",\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 background: \"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: \"6px 10px\",\n fontSize: \"12px\",\n color: \"#6b7280\",\n background: \"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 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 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","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  - 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  - 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  - 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  - 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 ['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  - 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  - 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 ['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  - 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  - 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  - 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  - 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  - 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  - 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  - 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","import type {\n FeedbackAdapter,\n FeedbackPayload,\n FeedbackType,\n ScreenshotConfig,\n ScreenshotData,\n} from \"@ewjdev/anyclick-core\";\nimport type { ReactNode, CSSProperties } from \"react\";\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 FeedbackProvider component\n */\nexport interface FeedbackProviderProps {\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 */\n targetFilter?: (event: MouseEvent, 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\n/**\n * Context value exposed by FeedbackProvider\n */\nexport interface FeedbackContextValue {\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}\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}\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","import_jsx_runtime","import_jsx_runtime","import_anyclick_core"]}
|