@np-dev/ui-ai-anotation 0.1.0 → 0.1.1

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.
Files changed (36) hide show
  1. package/README.md +106 -21
  2. package/dist/cjs/index.cjs +247 -14
  3. package/dist/cjs/index.cjs.map +4 -4
  4. package/dist/cjs/index.native.cjs +11 -11
  5. package/dist/cjs/index.native.cjs.map +3 -3
  6. package/dist/cjs/index.web.cjs +5 -5
  7. package/dist/cjs/index.web.cjs.map +2 -2
  8. package/dist/esm/index.js +248 -14
  9. package/dist/esm/index.js.map +4 -4
  10. package/dist/esm/index.native.js +11 -11
  11. package/dist/esm/index.native.js.map +3 -3
  12. package/dist/esm/index.web.js +5 -5
  13. package/dist/esm/index.web.js.map +2 -2
  14. package/dist/types/components/ErrorBoundary.d.ts +159 -0
  15. package/dist/types/index.d.ts +5 -3
  16. package/dist/types/index.web.d.ts +2 -2
  17. package/dist/types/store.d.ts +2 -2
  18. package/package.json +1 -1
  19. package/src/components/AnnotationInput.tsx +2 -2
  20. package/src/components/AnnotationList.tsx +2 -2
  21. package/src/components/ErrorBoundary.tsx +426 -0
  22. package/src/components/Highlighter.tsx +2 -2
  23. package/src/components/Toolbar.tsx +4 -3
  24. package/src/components/native/AnnotationInput.tsx +2 -2
  25. package/src/components/native/AnnotationList.tsx +2 -2
  26. package/src/components/native/Highlighter.tsx +2 -2
  27. package/src/components/native/Toolbar.tsx +2 -2
  28. package/src/components/web/AnnotationInput.tsx +2 -2
  29. package/src/components/web/AnnotationList.tsx +2 -2
  30. package/src/components/web/Highlighter.tsx +2 -2
  31. package/src/components/web/Toolbar.tsx +2 -2
  32. package/src/extension.tsx +1 -1
  33. package/src/index.native.tsx +4 -4
  34. package/src/index.tsx +6 -4
  35. package/src/index.web.tsx +3 -3
  36. package/src/store.tsx +3 -3
@@ -30,7 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.native.tsx
31
31
  var index_native_exports = {};
32
32
  __export(index_native_exports, {
33
- AiAnnotationProvider: () => AiAnnotationProvider2,
33
+ AgentAnnotationProvider: () => AgentAnnotationProvider2,
34
34
  AnnotationInput: () => AnnotationInput,
35
35
  AnnotationList: () => AnnotationList,
36
36
  Draggable: () => Draggable,
@@ -45,7 +45,7 @@ __export(index_native_exports, {
45
45
  isNative: () => isNative,
46
46
  isTauriEnv: () => isTauriEnv,
47
47
  isWeb: () => isWeb,
48
- useAiAnnotation: () => useAiAnnotation
48
+ useAgentAnnotation: () => useAgentAnnotation
49
49
  });
50
50
  module.exports = __toCommonJS(index_native_exports);
51
51
  var import_react_native6 = require("react-native");
@@ -95,14 +95,14 @@ function reducer(state, action) {
95
95
  return state;
96
96
  }
97
97
  }
98
- function AiAnnotationProvider({ children }) {
98
+ function AgentAnnotationProvider({ children }) {
99
99
  const [state, dispatch] = (0, import_react.useReducer)(reducer, initialState);
100
100
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AnnotationContext.Provider, { value: { state, dispatch }, children });
101
101
  }
102
- function useAiAnnotation() {
102
+ function useAgentAnnotation() {
103
103
  const context = (0, import_react.useContext)(AnnotationContext);
104
104
  if (!context) {
105
- throw new Error("useAiAnnotation must be used within an AiAnnotationProvider");
105
+ throw new Error("useAgentAnnotation must be used within an AgentAnnotationProvider");
106
106
  }
107
107
  return context;
108
108
  }
@@ -170,7 +170,7 @@ var import_react3 = require("react");
170
170
  var import_react_native2 = require("react-native");
171
171
  var import_jsx_runtime3 = require("react/jsx-runtime");
172
172
  function AnnotationInput({ onClose, componentName }) {
173
- const { dispatch } = useAiAnnotation();
173
+ const { dispatch } = useAgentAnnotation();
174
174
  const [note, setNote] = (0, import_react3.useState)("");
175
175
  const [fadeAnim] = (0, import_react3.useState)(new import_react_native2.Animated.Value(0));
176
176
  const [scaleAnim] = (0, import_react3.useState)(new import_react_native2.Animated.Value(0.95));
@@ -374,7 +374,7 @@ var styles2 = import_react_native2.StyleSheet.create({
374
374
  // src/components/native/Highlighter.tsx
375
375
  var import_jsx_runtime4 = require("react/jsx-runtime");
376
376
  function Highlighter({ onInspect }) {
377
- const { state, dispatch } = useAiAnnotation();
377
+ const { state, dispatch } = useAgentAnnotation();
378
378
  const { mode } = state;
379
379
  const [highlightRect, setHighlightRect] = (0, import_react4.useState)(null);
380
380
  const [componentName, setComponentName] = (0, import_react4.useState)("");
@@ -560,7 +560,7 @@ var styles3 = import_react_native3.StyleSheet.create({
560
560
  var import_react_native4 = require("react-native");
561
561
  var import_jsx_runtime5 = require("react/jsx-runtime");
562
562
  function AnnotationList() {
563
- const { state, dispatch } = useAiAnnotation();
563
+ const { state, dispatch } = useAgentAnnotation();
564
564
  if (!state.showList) return null;
565
565
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
566
566
  import_react_native4.Modal,
@@ -716,7 +716,7 @@ var copyToClipboard = async (text) => {
716
716
  }
717
717
  };
718
718
  function Toolbar() {
719
- const { state, dispatch } = useAiAnnotation();
719
+ const { state, dispatch } = useAgentAnnotation();
720
720
  const [showCopied, setShowCopied] = (0, import_react5.useState)(false);
721
721
  const handleCopy = async () => {
722
722
  const data = state.annotations.map((a) => ({
@@ -995,8 +995,8 @@ function isTauriEnv() {
995
995
 
996
996
  // src/index.native.tsx
997
997
  var import_jsx_runtime7 = require("react/jsx-runtime");
998
- function AiAnnotationProvider2({ children }) {
999
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(AiAnnotationProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native6.View, { style: { flex: 1 }, children: [
998
+ function AgentAnnotationProvider2({ children }) {
999
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(AgentAnnotationProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native6.View, { style: { flex: 1 }, children: [
1000
1000
  children,
1001
1001
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Toolbar, {})
1002
1002
  ] }) });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.native.tsx", "../../src/store.tsx", "../../src/components/native/Toolbar.tsx", "../../src/components/native/Draggable.tsx", "../../src/components/native/Highlighter.tsx", "../../src/components/native/AnnotationInput.tsx", "../../src/components/native/AnnotationList.tsx", "../../src/utils/screenshot.native.ts", "../../src/utils/fiber.native.ts", "../../src/utils/platform.ts"],
4
- "sourcesContent": ["import React from 'react';\nimport { View } from 'react-native';\nimport { AiAnnotationProvider as Provider } from './store';\nimport { Toolbar } from './components/native/Toolbar';\n\nexport interface AiAnnotationProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * React Native AI Annotation Provider\n * Wraps your app to provide annotation functionality\n */\nexport function AiAnnotationProvider({ children }: AiAnnotationProviderProps) {\n return (\n <Provider>\n <View style={{ flex: 1 }}>\n {children}\n <Toolbar />\n </View>\n </Provider>\n );\n}\n\n// Re-export store\nexport * from './store';\n\n// Export native components\nexport { Toolbar } from './components/native/Toolbar';\nexport { Highlighter } from './components/native/Highlighter';\nexport { AnnotationInput } from './components/native/AnnotationInput';\nexport { AnnotationList } from './components/native/AnnotationList';\nexport { Draggable } from './components/native/Draggable';\n\n// Export native screenshot utility\nexport { captureScreenshot } from './utils/screenshot.native';\nexport type { ScreenshotOptions, ScreenshotResult } from './utils/screenshot.native';\n\n// Export native fiber utilities\nexport {\n getReactFiber,\n getComponentDisplayName,\n getElementFromFiber,\n inspectComponent,\n} from './utils/fiber.native';\nexport type { ComponentInfo } from './utils/fiber.native';\n\n// Export platform utilities\nexport { isWeb, isNative, getPlatform, isTauriEnv } from './utils/platform';\nexport type { PlatformType } from './utils/platform';\n", "import React, { createContext, useContext, useReducer, ReactNode } from 'react';\nimport type { ComponentDetails, ChildComponentInfo, ElementInfo } from './utils/fiber';\n\n// Re-export types for external use\nexport type { ComponentDetails, ChildComponentInfo, ElementInfo };\n\nexport type Annotation = {\n id: string;\n componentName: string;\n note: string;\n timestamp: number;\n /** Enhanced component details (optional for backward compatibility) */\n details?: ComponentDetails;\n};\n\nexport type Mode = 'disabled' | 'inspecting';\n\n/**\n * Platform-agnostic element type\n * - On web: HTMLElement\n * - On native: View ref or null\n */\nexport type HoveredElement = any;\n\n/**\n * Enhanced component info with full details\n */\nexport interface HoveredComponentInfo {\n name: string;\n /** Full component details including hierarchy, children, and element info */\n details?: ComponentDetails;\n}\n\ninterface State {\n mode: Mode;\n annotations: Annotation[];\n hoveredElement: HoveredElement;\n hoveredComponentInfo: HoveredComponentInfo | null;\n isMinimized: boolean;\n showList: boolean;\n}\n\ntype Action =\n | { type: 'SET_MODE'; payload: Mode }\n | { type: 'ADD_ANNOTATION'; payload: Annotation }\n | { type: 'REMOVE_ANNOTATION'; payload: string }\n | { type: 'CLEAR_ALL_ANNOTATIONS' }\n | { type: 'SET_HOVERED'; payload: { element: HoveredElement; name: string | null; details?: ComponentDetails } }\n | { type: 'TOGGLE_MINIMIZED' }\n | { type: 'TOGGLE_LIST' }\n | { type: 'RESET_HOVER' };\n\nconst initialState: State = {\n mode: 'disabled',\n annotations: [],\n hoveredElement: null,\n hoveredComponentInfo: null,\n isMinimized: false,\n showList: false,\n};\n\nconst AnnotationContext = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n} | undefined>(undefined);\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'SET_MODE':\n return { ...state, mode: action.payload };\n case 'ADD_ANNOTATION':\n return { ...state, annotations: [...state.annotations, action.payload] };\n case 'REMOVE_ANNOTATION':\n return {\n ...state,\n annotations: state.annotations.filter((a) => a.id !== action.payload),\n };\n case 'CLEAR_ALL_ANNOTATIONS':\n return {\n ...state,\n annotations: [],\n };\n case 'SET_HOVERED':\n // Avoid updates if same\n if (state.hoveredElement === action.payload.element) return state;\n return {\n ...state,\n hoveredElement: action.payload.element,\n hoveredComponentInfo: action.payload.name\n ? { name: action.payload.name, details: action.payload.details }\n : null\n };\n case 'RESET_HOVER':\n return { ...state, hoveredElement: null, hoveredComponentInfo: null };\n case 'TOGGLE_MINIMIZED':\n return { ...state, isMinimized: !state.isMinimized };\n case 'TOGGLE_LIST':\n return { ...state, showList: !state.showList };\n default:\n return state;\n }\n}\n\nexport function AiAnnotationProvider({ children }: { children: ReactNode }) {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n <AnnotationContext.Provider value={{ state, dispatch }}>\n {children}\n </AnnotationContext.Provider>\n );\n}\n\nexport function useAiAnnotation() {\n const context = useContext(AnnotationContext);\n if (!context) {\n throw new Error('useAiAnnotation must be used within an AiAnnotationProvider');\n }\n return context;\n}\n", "import React, { useState } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n Platform,\n} from 'react-native';\nimport { useAiAnnotation } from '../../store';\nimport { Draggable } from './Draggable';\nimport { Highlighter } from './Highlighter';\nimport { AnnotationList } from './AnnotationList';\n\n// Dynamic clipboard import to handle different React Native versions\nconst copyToClipboard = async (text: string) => {\n try {\n // Try expo-clipboard first\n const ExpoClipboard = await import('expo-clipboard');\n await ExpoClipboard.setStringAsync(text);\n } catch {\n try {\n // Fallback to @react-native-clipboard/clipboard\n const RNClipboard = await import('@react-native-clipboard/clipboard');\n RNClipboard.default.setString(text);\n } catch {\n console.warn('No clipboard module available');\n }\n }\n};\n\nexport function Toolbar() {\n const { state, dispatch } = useAiAnnotation();\n const [showCopied, setShowCopied] = useState(false);\n\n const handleCopy = async () => {\n const data = state.annotations.map((a) => ({\n component: a.componentName,\n instruction: a.note,\n }));\n const text = JSON.stringify(data, null, 2);\n\n await copyToClipboard(text);\n\n setShowCopied(true);\n setTimeout(() => setShowCopied(false), 2000);\n };\n\n const toggleMode = () => {\n dispatch({\n type: 'SET_MODE',\n payload: state.mode === 'disabled' ? 'inspecting' : 'disabled',\n });\n };\n\n const handleToggleMinimized = () => {\n dispatch({ type: 'TOGGLE_MINIMIZED' });\n };\n\n return (\n <>\n <Highlighter />\n <AnnotationList />\n <Draggable>\n <View style={styles.toolbar}>\n {/* Drag Handle */}\n <View style={styles.dragHandle}>\n <Text style={styles.dragHandleText}>\u22EE\u22EE</Text>\n </View>\n\n {!state.isMinimized && (\n <>\n <View style={styles.separator} />\n\n {/* Toggle inspection mode */}\n <TouchableOpacity\n style={[\n styles.button,\n state.mode === 'inspecting' && styles.buttonActive,\n ]}\n onPress={toggleMode}\n >\n <Text style={styles.buttonText}>\n {state.mode === 'inspecting' ? '\uD83D\uDC46' : '\uD83D\uDEAB'}\n </Text>\n </TouchableOpacity>\n\n {/* List annotations */}\n <TouchableOpacity\n style={styles.button}\n onPress={() => dispatch({ type: 'TOGGLE_LIST' })}\n >\n <Text style={styles.buttonText}>\uD83D\uDCCB</Text>\n {state.annotations.length > 0 && (\n <View style={styles.badge}>\n <Text style={styles.badgeText}>{state.annotations.length}</Text>\n </View>\n )}\n </TouchableOpacity>\n\n {/* Copy annotations */}\n <TouchableOpacity\n style={[styles.button, showCopied && styles.buttonSuccess]}\n onPress={handleCopy}\n >\n <Text style={styles.buttonText}>{showCopied ? '\u2713' : '\uD83D\uDCCB'}</Text>\n {showCopied && <Text style={styles.copiedText}>Copied!</Text>}\n </TouchableOpacity>\n </>\n )}\n\n <View style={styles.separator} />\n\n {/* Minimize/Expand */}\n <TouchableOpacity style={styles.button} onPress={handleToggleMinimized}>\n <Text style={styles.buttonText}>{state.isMinimized ? '\u2B1C' : '\u2796'}</Text>\n </TouchableOpacity>\n </View>\n </Draggable>\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n toolbar: {\n backgroundColor: '#1e1e1e',\n borderWidth: 1,\n borderColor: '#333',\n borderRadius: 8,\n padding: 8,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.3,\n shadowRadius: 12,\n elevation: 8,\n },\n dragHandle: {\n paddingHorizontal: 4,\n },\n dragHandleText: {\n color: '#666',\n fontSize: 16,\n },\n separator: {\n width: 1,\n height: 24,\n backgroundColor: '#333',\n },\n button: {\n width: 32,\n height: 32,\n borderRadius: 4,\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n },\n buttonActive: {\n backgroundColor: '#3b82f6',\n },\n buttonSuccess: {\n backgroundColor: '#22c55e',\n flexDirection: 'row',\n width: 'auto',\n paddingHorizontal: 8,\n gap: 4,\n },\n buttonText: {\n fontSize: 16,\n },\n copiedText: {\n color: 'white',\n fontSize: 12,\n },\n badge: {\n position: 'absolute',\n top: -4,\n right: -4,\n backgroundColor: '#ef4444',\n borderRadius: 7,\n width: 14,\n height: 14,\n justifyContent: 'center',\n alignItems: 'center',\n },\n badgeText: {\n color: 'white',\n fontSize: 9,\n fontWeight: 'bold',\n },\n});\n", "import React, { useRef, ReactNode } from 'react';\nimport {\n View,\n PanResponder,\n Animated,\n StyleSheet,\n ViewStyle,\n GestureResponderEvent,\n PanResponderGestureState,\n} from 'react-native';\n\ninterface DraggableProps {\n children: ReactNode;\n initialPos?: { x: number; y: number };\n style?: ViewStyle;\n}\n\nexport function Draggable({ children, initialPos = { x: 20, y: 20 }, style }: DraggableProps) {\n const pan = useRef(new Animated.ValueXY(initialPos)).current;\n const lastOffset = useRef(initialPos);\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: () => true,\n onPanResponderGrant: () => {\n pan.setOffset(lastOffset.current);\n pan.setValue({ x: 0, y: 0 });\n },\n onPanResponderMove: Animated.event(\n [null, { dx: pan.x, dy: pan.y }],\n { useNativeDriver: false }\n ),\n onPanResponderRelease: (_e: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n lastOffset.current = {\n x: lastOffset.current.x + gestureState.dx,\n y: lastOffset.current.y + gestureState.dy,\n };\n pan.flattenOffset();\n },\n })\n ).current;\n\n return (\n <Animated.View\n {...panResponder.panHandlers}\n style={[\n styles.container,\n style,\n {\n transform: [{ translateX: pan.x }, { translateY: pan.y }],\n },\n ]}\n >\n {children}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n zIndex: 9999,\n },\n});\n", "import React, { useState, useCallback, useRef } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n Dimensions,\n GestureResponderEvent,\n} from 'react-native';\nimport { useAiAnnotation } from '../../store';\nimport { AnnotationInput } from './AnnotationInput';\n\ninterface HighlightRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface HighlighterProps {\n /**\n * Called when a touch occurs in inspection mode.\n * Return component info { name, rect } to highlight, or null to ignore.\n */\n onInspect?: (event: GestureResponderEvent) => {\n name: string;\n rect: HighlightRect;\n } | null;\n}\n\nexport function Highlighter({ onInspect }: HighlighterProps) {\n const { state, dispatch } = useAiAnnotation();\n const { mode } = state;\n\n const [highlightRect, setHighlightRect] = useState<HighlightRect | null>(null);\n const [componentName, setComponentName] = useState<string>('');\n const [showInput, setShowInput] = useState(false);\n const [showTooltip, setShowTooltip] = useState(false);\n const [tooltipPos, setTooltipPos] = useState({ x: 0, y: 0 });\n\n const screenDimensions = Dimensions.get('window');\n\n const handleTouch = useCallback(\n (event: GestureResponderEvent) => {\n if (mode !== 'inspecting') return;\n\n const { pageX, pageY } = event.nativeEvent;\n\n if (onInspect) {\n const result = onInspect(event);\n if (result) {\n setHighlightRect(result.rect);\n setComponentName(result.name);\n setTooltipPos({ x: pageX, y: pageY });\n setShowTooltip(true);\n return;\n }\n }\n\n // Default behavior: show tooltip at touch location\n setTooltipPos({ x: pageX, y: pageY });\n setShowTooltip(true);\n setComponentName('TouchedComponent');\n setHighlightRect({\n x: pageX - 50,\n y: pageY - 50,\n width: 100,\n height: 100,\n });\n },\n [mode, onInspect]\n );\n\n const handleAddAnnotation = () => {\n setShowInput(true);\n setShowTooltip(false);\n };\n\n const handleCloseInput = () => {\n setShowInput(false);\n setHighlightRect(null);\n setComponentName('');\n };\n\n const handleDismiss = () => {\n setShowTooltip(false);\n setHighlightRect(null);\n setComponentName('');\n };\n\n if (mode !== 'inspecting') return null;\n\n // Calculate tooltip position to keep it on screen\n const tooltipWidth = 120;\n const tooltipHeight = 50;\n let adjustedX = tooltipPos.x + 16;\n let adjustedY = tooltipPos.y + 16;\n\n if (adjustedX + tooltipWidth > screenDimensions.width) {\n adjustedX = tooltipPos.x - tooltipWidth - 16;\n }\n if (adjustedY + tooltipHeight > screenDimensions.height) {\n adjustedY = tooltipPos.y - tooltipHeight - 16;\n }\n\n return (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\">\n {/* Touch capture overlay */}\n <TouchableOpacity\n style={styles.touchOverlay}\n activeOpacity={1}\n onPress={handleTouch}\n />\n\n {/* Highlight rectangle */}\n {highlightRect && (\n <>\n <View\n style={[\n styles.highlight,\n {\n left: highlightRect.x - 2,\n top: highlightRect.y - 2,\n width: highlightRect.width + 4,\n height: highlightRect.height + 4,\n },\n ]}\n pointerEvents=\"none\"\n />\n\n {/* Component name label */}\n {componentName && (\n <View\n style={[\n styles.nameLabel,\n {\n left: highlightRect.x,\n top: highlightRect.y - 24,\n },\n ]}\n pointerEvents=\"none\"\n >\n <Text style={styles.nameLabelText}>{componentName}</Text>\n </View>\n )}\n </>\n )}\n\n {/* Floating tooltip */}\n {showTooltip && (\n <View\n style={[\n styles.tooltip,\n {\n left: adjustedX,\n top: adjustedY,\n },\n ]}\n >\n <TouchableOpacity style={styles.tooltipButton} onPress={handleAddAnnotation}>\n <Text style={styles.tooltipButtonText}>+</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.dismissButton} onPress={handleDismiss}>\n <Text style={styles.dismissButtonText}>\u2715</Text>\n </TouchableOpacity>\n </View>\n )}\n\n {/* Annotation input modal */}\n {showInput && (\n <AnnotationInput onClose={handleCloseInput} componentName={componentName || 'Unknown'} />\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n touchOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'transparent',\n },\n highlight: {\n position: 'absolute',\n borderWidth: 2,\n borderColor: '#3b82f6',\n borderRadius: 4,\n backgroundColor: 'rgba(59, 130, 246, 0.1)',\n },\n nameLabel: {\n position: 'absolute',\n backgroundColor: '#3b82f6',\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 4,\n },\n nameLabelText: {\n color: 'white',\n fontSize: 12,\n fontFamily: 'monospace',\n },\n tooltip: {\n position: 'absolute',\n flexDirection: 'row',\n gap: 6,\n padding: 6,\n backgroundColor: 'rgba(0, 0, 0, 0.9)',\n borderRadius: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.3,\n shadowRadius: 12,\n elevation: 8,\n },\n tooltipButton: {\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: '#3b82f6',\n justifyContent: 'center',\n alignItems: 'center',\n },\n tooltipButtonText: {\n color: 'white',\n fontSize: 18,\n fontWeight: 'bold',\n },\n dismissButton: {\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: '#6b7280',\n justifyContent: 'center',\n alignItems: 'center',\n },\n dismissButtonText: {\n color: 'white',\n fontSize: 14,\n },\n});\n", "import React, { useState, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n TextInput,\n TouchableOpacity,\n StyleSheet,\n Animated,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { useAiAnnotation } from '../../store';\n\ninterface AnnotationInputProps {\n onClose: () => void;\n componentName: string;\n}\n\nexport function AnnotationInput({ onClose, componentName }: AnnotationInputProps) {\n const { dispatch } = useAiAnnotation();\n const [note, setNote] = useState('');\n const [fadeAnim] = useState(new Animated.Value(0));\n const [scaleAnim] = useState(new Animated.Value(0.95));\n\n useEffect(() => {\n Animated.parallel([\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 200,\n useNativeDriver: true,\n }),\n Animated.spring(scaleAnim, {\n toValue: 1,\n friction: 8,\n useNativeDriver: true,\n }),\n ]).start();\n }, []);\n\n const handleClose = () => {\n Animated.parallel([\n Animated.timing(fadeAnim, {\n toValue: 0,\n duration: 150,\n useNativeDriver: true,\n }),\n Animated.timing(scaleAnim, {\n toValue: 0.95,\n duration: 150,\n useNativeDriver: true,\n }),\n ]).start(() => {\n onClose();\n });\n };\n\n const handleSubmit = () => {\n if (!note.trim()) return;\n\n dispatch({\n type: 'ADD_ANNOTATION',\n payload: {\n id: Date.now().toString(),\n componentName,\n note: note.trim(),\n timestamp: Date.now(),\n },\n });\n handleClose();\n };\n\n return (\n <Modal\n visible\n transparent\n animationType=\"none\"\n onRequestClose={handleClose}\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n style={styles.keyboardView}\n >\n <Animated.View style={[styles.overlay, { opacity: fadeAnim }]}>\n <TouchableOpacity\n style={styles.backdropTouchable}\n activeOpacity={1}\n onPress={handleClose}\n >\n <Animated.View\n style={[\n styles.container,\n {\n opacity: fadeAnim,\n transform: [{ scale: scaleAnim }],\n },\n ]}\n >\n <TouchableOpacity activeOpacity={1}>\n <View style={styles.header}>\n <Text style={styles.title}>Add Annotation</Text>\n <TouchableOpacity onPress={handleClose} style={styles.closeButton}>\n <Text style={styles.closeButtonText}>\u2715</Text>\n </TouchableOpacity>\n </View>\n\n <Text style={styles.componentLabel}>\n Component: <Text style={styles.componentName}>{componentName}</Text>\n </Text>\n\n <TextInput\n style={styles.textInput}\n value={note}\n onChangeText={setNote}\n placeholder=\"Describe what this component does...\"\n placeholderTextColor=\"#6b7280\"\n multiline\n numberOfLines={4}\n textAlignVertical=\"top\"\n autoFocus\n />\n\n <View style={styles.buttonContainer}>\n <TouchableOpacity style={styles.cancelButton} onPress={handleClose}>\n <Text style={styles.cancelButtonText}>Cancel</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.submitButton} onPress={handleSubmit}>\n <Text style={styles.submitButtonText}>Save Annotation</Text>\n </TouchableOpacity>\n </View>\n </TouchableOpacity>\n </Animated.View>\n </TouchableOpacity>\n </Animated.View>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n keyboardView: {\n flex: 1,\n },\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n backdropTouchable: {\n flex: 1,\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n },\n container: {\n backgroundColor: '#1e1e1e',\n borderRadius: 8,\n padding: 20,\n width: '90%',\n maxWidth: 400,\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: 16,\n },\n title: {\n color: '#e5e7eb',\n fontSize: 18,\n fontWeight: 'bold',\n },\n closeButton: {\n padding: 4,\n },\n closeButtonText: {\n color: '#e5e7eb',\n fontSize: 20,\n },\n componentLabel: {\n color: '#9ca3af',\n fontSize: 14,\n marginBottom: 12,\n },\n componentName: {\n color: '#e5e7eb',\n fontWeight: 'bold',\n },\n textInput: {\n backgroundColor: '#2d2d2d',\n borderWidth: 1,\n borderColor: '#404040',\n borderRadius: 4,\n padding: 8,\n color: 'white',\n height: 100,\n marginBottom: 16,\n fontSize: 14,\n },\n buttonContainer: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: 8,\n },\n cancelButton: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 4,\n borderWidth: 1,\n borderColor: '#404040',\n },\n cancelButtonText: {\n color: 'white',\n fontSize: 14,\n },\n submitButton: {\n backgroundColor: '#3b82f6',\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 4,\n },\n submitButtonText: {\n color: 'white',\n fontSize: 14,\n },\n});\n", "import React from 'react';\nimport {\n View,\n Text,\n Modal,\n TouchableOpacity,\n ScrollView,\n StyleSheet,\n} from 'react-native';\nimport { useAiAnnotation } from '../../store';\n\nexport function AnnotationList() {\n const { state, dispatch } = useAiAnnotation();\n\n if (!state.showList) return null;\n\n return (\n <Modal\n visible={state.showList}\n transparent\n animationType=\"fade\"\n onRequestClose={() => dispatch({ type: 'TOGGLE_LIST' })}\n >\n <View style={styles.overlay}>\n <View style={styles.container}>\n <View style={styles.header}>\n <Text style={styles.title}>Annotations ({state.annotations.length})</Text>\n <View style={styles.headerActions}>\n {state.annotations.length > 0 && (\n <TouchableOpacity\n style={styles.clearButton}\n onPress={() => dispatch({ type: 'CLEAR_ALL_ANNOTATIONS' })}\n >\n <Text style={styles.clearButtonText}>Clear All</Text>\n </TouchableOpacity>\n )}\n <TouchableOpacity\n style={styles.closeButton}\n onPress={() => dispatch({ type: 'TOGGLE_LIST' })}\n >\n <Text style={styles.closeButtonText}>\u2715</Text>\n </TouchableOpacity>\n </View>\n </View>\n\n <ScrollView style={styles.listContainer}>\n {state.annotations.length === 0 ? (\n <Text style={styles.emptyText}>No annotations yet.</Text>\n ) : (\n state.annotations.map((ann) => (\n <View key={ann.id} style={styles.annotationItem}>\n <View style={styles.annotationContent}>\n <Text style={styles.componentName}>{ann.componentName}</Text>\n <Text style={styles.annotationNote}>{ann.note}</Text>\n </View>\n <TouchableOpacity\n style={styles.deleteButton}\n onPress={() => dispatch({ type: 'REMOVE_ANNOTATION', payload: ann.id })}\n >\n <Text style={styles.deleteButtonText}>\uD83D\uDDD1</Text>\n </TouchableOpacity>\n </View>\n ))\n )}\n </ScrollView>\n </View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n container: {\n backgroundColor: '#1e1e1e',\n borderRadius: 8,\n width: '90%',\n maxWidth: 500,\n maxHeight: '80%',\n padding: 20,\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: 16,\n },\n title: {\n color: '#e5e7eb',\n fontSize: 18,\n fontWeight: 'bold',\n },\n headerActions: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n clearButton: {\n backgroundColor: '#ef4444',\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 4,\n },\n clearButtonText: {\n color: 'white',\n fontSize: 12,\n },\n closeButton: {\n padding: 4,\n },\n closeButtonText: {\n color: '#e5e7eb',\n fontSize: 20,\n },\n listContainer: {\n flex: 1,\n },\n emptyText: {\n color: '#9ca3af',\n textAlign: 'center',\n padding: 20,\n },\n annotationItem: {\n backgroundColor: '#2d2d2d',\n padding: 12,\n borderRadius: 4,\n marginBottom: 8,\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n },\n annotationContent: {\n flex: 1,\n marginRight: 12,\n },\n componentName: {\n color: '#60a5fa',\n fontWeight: 'bold',\n fontSize: 14,\n marginBottom: 4,\n },\n annotationNote: {\n color: '#e5e7eb',\n fontSize: 14,\n },\n deleteButton: {\n padding: 4,\n },\n deleteButtonText: {\n fontSize: 16,\n },\n});\n", "import { RefObject } from 'react';\nimport { View, Platform } from 'react-native';\n\nexport interface ScreenshotOptions {\n /** Scale factor for higher resolution (default: 2) */\n scale?: number;\n /** Image format (default: 'png') */\n format?: 'png' | 'jpg';\n /** Quality for jpg format (0-1, default: 0.9) */\n quality?: number;\n /** Whether to copy to clipboard (default: true, requires expo-clipboard) */\n copyToClipboard?: boolean;\n /** Whether to save to camera roll (default: false, requires expo-media-library) */\n saveToCameraRoll?: boolean;\n}\n\nexport interface ScreenshotResult {\n success: boolean;\n uri?: string;\n base64?: string;\n error?: string;\n}\n\n/**\n * Captures a screenshot of a React Native View using react-native-view-shot\n * \n * Requirements:\n * - react-native-view-shot must be installed\n * - Optionally: expo-clipboard for clipboard support\n * - Optionally: expo-media-library for camera roll support\n * \n * @param viewRef - Reference to the View to capture\n * @param options - Screenshot options\n */\nexport async function captureScreenshot(\n viewRef: RefObject<View>,\n options: ScreenshotOptions = {}\n): Promise<ScreenshotResult> {\n const {\n scale = 2,\n format = 'png',\n quality = 0.9,\n copyToClipboard = false,\n saveToCameraRoll = false,\n } = options;\n\n try {\n // Dynamic import to avoid issues if not installed\n let captureRef: any;\n try {\n const viewShot = await import('react-native-view-shot');\n captureRef = viewShot.captureRef;\n } catch {\n return {\n success: false,\n error: 'react-native-view-shot is not installed. Run: npm install react-native-view-shot',\n };\n }\n\n if (!viewRef.current) {\n return {\n success: false,\n error: 'View reference is null',\n };\n }\n\n // Capture the view\n const uri = await captureRef(viewRef, {\n format,\n quality,\n result: 'tmpfile',\n snapshotContentContainer: false,\n });\n\n // Get base64 if needed\n let base64: string | undefined;\n if (copyToClipboard) {\n const base64Result = await captureRef(viewRef, {\n format,\n quality,\n result: 'base64',\n snapshotContentContainer: false,\n });\n base64 = base64Result;\n }\n\n // Copy to clipboard if requested\n if (copyToClipboard && base64) {\n try {\n const Clipboard = await import('expo-clipboard');\n // expo-clipboard doesn't support image directly, \n // we'll copy the base64 string\n await Clipboard.setStringAsync(base64);\n } catch {\n console.warn('expo-clipboard not available for clipboard support');\n }\n }\n\n // Save to camera roll if requested\n if (saveToCameraRoll) {\n try {\n const MediaLibrary = await import('expo-media-library');\n const { status } = await MediaLibrary.requestPermissionsAsync();\n if (status === 'granted') {\n await MediaLibrary.saveToLibraryAsync(uri);\n }\n } catch {\n console.warn('expo-media-library not available for saving to camera roll');\n }\n }\n\n return {\n success: true,\n uri,\n base64,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error('Screenshot capture failed:', message);\n return {\n success: false,\n error: message,\n };\n }\n}\n\n/**\n * Placeholder for web compatibility\n * The actual web implementation is in screenshot.ts\n */\nexport function captureScreenshotWeb(\n _element: any,\n _options: any\n): Promise<ScreenshotResult> {\n return Promise.resolve({\n success: false,\n error: 'Use the web-specific captureScreenshot function',\n });\n}\n", "/**\n * React Fiber utilities for React Native\n * \n * Note: React Native has different fiber access compared to web.\n * These utilities provide a similar interface but with native-specific logic.\n */\n\n/**\n * Attempts to get the React Fiber from a native view instance\n * This is less reliable in React Native than on web\n */\nexport function getReactFiber(instance: any): any {\n if (!instance) return null;\n \n // React Native stores fiber differently\n // Try to find the fiber via internal props\n const key = Object.keys(instance).find((k) =>\n k.startsWith('__reactFiber$') || \n k.startsWith('__reactInternalInstance$') ||\n k.startsWith('_reactInternals')\n );\n \n return key ? instance[key] : null;\n}\n\n/**\n * Gets the display name of a React component from its fiber\n */\nexport function getComponentDisplayName(fiber: any): string {\n if (!fiber) return 'Unknown';\n \n let curr = fiber;\n while (curr) {\n const type = curr.type;\n if (type) {\n // Check for displayName or name\n const name = type.displayName || type.name;\n if (name && typeof name === 'string') {\n // Skip internal React Native components\n if (!name.startsWith('RCT') && !name.startsWith('_')) {\n return name;\n }\n }\n }\n curr = curr.return;\n }\n return 'Unknown';\n}\n\n/**\n * For React Native, we can't easily get DOM elements from fibers\n * This is a no-op that returns null\n */\nexport function getElementFromFiber(_fiber: any): null {\n return null;\n}\n\n/**\n * Interface for component inspection result\n */\nexport interface ComponentInfo {\n name: string;\n props?: Record<string, any>;\n}\n\n/**\n * Inspects a React Native component instance to get info\n * This works with refs passed to components\n */\nexport function inspectComponent(ref: any): ComponentInfo | null {\n if (!ref) return null;\n \n // Try to get fiber from the ref\n const fiber = getReactFiber(ref);\n if (fiber) {\n return {\n name: getComponentDisplayName(fiber),\n props: fiber.memoizedProps,\n };\n }\n \n // Fallback: try to infer from the ref itself\n if (ref.constructor && ref.constructor.name) {\n return {\n name: ref.constructor.name,\n };\n }\n \n return null;\n}\n", "/**\n * Platform detection utilities for cross-platform support\n */\n\n// Check if we're running in a web environment\nexport const isWeb = typeof document !== 'undefined' && typeof window !== 'undefined';\n\n// Check if we're running in React Native\n// We check for the absence of DOM and presence of native-specific globals\nexport const isNative = !isWeb && typeof global !== 'undefined';\n\n// Get the current platform\nexport type PlatformType = 'web' | 'ios' | 'android' | 'native';\n\nexport function getPlatform(): PlatformType {\n if (isWeb) return 'web';\n \n // In React Native, we need to dynamically check Platform\n try {\n // This will only work in React Native environment\n const { Platform } = require('react-native');\n if (Platform.OS === 'ios') return 'ios';\n if (Platform.OS === 'android') return 'android';\n return 'native';\n } catch {\n return 'native';\n }\n}\n\n// Check if running in Tauri environment (web only)\nexport function isTauriEnv(): boolean {\n return isWeb && typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window;\n}\n"],
5
- "mappings": "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",
6
- "names": ["AiAnnotationProvider", "import_react_native", "import_react", "import_react_native", "import_react", "import_jsx_runtime", "import_react", "import_react_native", "import_react", "import_react_native", "import_jsx_runtime", "styles", "import_jsx_runtime", "styles", "import_react_native", "import_jsx_runtime", "styles", "import_jsx_runtime", "styles", "copyToClipboard", "Platform", "import_jsx_runtime", "AiAnnotationProvider"]
4
+ "sourcesContent": ["import React from 'react';\nimport { View } from 'react-native';\nimport { AgentAnnotationProvider as Provider } from './store';\nimport { Toolbar } from './components/native/Toolbar';\n\nexport interface AgentAnnotationProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * React Native Agent Annotation Provider\n * Wraps your app to provide annotation functionality\n */\nexport function AgentAnnotationProvider({ children }: AgentAnnotationProviderProps) {\n return (\n <Provider>\n <View style={{ flex: 1 }}>\n {children}\n <Toolbar />\n </View>\n </Provider>\n );\n}\n\n// Re-export store\nexport * from './store';\n\n// Export native components\nexport { Toolbar } from './components/native/Toolbar';\nexport { Highlighter } from './components/native/Highlighter';\nexport { AnnotationInput } from './components/native/AnnotationInput';\nexport { AnnotationList } from './components/native/AnnotationList';\nexport { Draggable } from './components/native/Draggable';\n\n// Export native screenshot utility\nexport { captureScreenshot } from './utils/screenshot.native';\nexport type { ScreenshotOptions, ScreenshotResult } from './utils/screenshot.native';\n\n// Export native fiber utilities\nexport {\n getReactFiber,\n getComponentDisplayName,\n getElementFromFiber,\n inspectComponent,\n} from './utils/fiber.native';\nexport type { ComponentInfo } from './utils/fiber.native';\n\n// Export platform utilities\nexport { isWeb, isNative, getPlatform, isTauriEnv } from './utils/platform';\nexport type { PlatformType } from './utils/platform';\n", "import React, { createContext, useContext, useReducer, ReactNode } from 'react';\nimport type { ComponentDetails, ChildComponentInfo, ElementInfo } from './utils/fiber';\n\n// Re-export types for external use\nexport type { ComponentDetails, ChildComponentInfo, ElementInfo };\n\nexport type Annotation = {\n id: string;\n componentName: string;\n note: string;\n timestamp: number;\n /** Enhanced component details (optional for backward compatibility) */\n details?: ComponentDetails;\n};\n\nexport type Mode = 'disabled' | 'inspecting';\n\n/**\n * Platform-agnostic element type\n * - On web: HTMLElement\n * - On native: View ref or null\n */\nexport type HoveredElement = any;\n\n/**\n * Enhanced component info with full details\n */\nexport interface HoveredComponentInfo {\n name: string;\n /** Full component details including hierarchy, children, and element info */\n details?: ComponentDetails;\n}\n\ninterface State {\n mode: Mode;\n annotations: Annotation[];\n hoveredElement: HoveredElement;\n hoveredComponentInfo: HoveredComponentInfo | null;\n isMinimized: boolean;\n showList: boolean;\n}\n\ntype Action =\n | { type: 'SET_MODE'; payload: Mode }\n | { type: 'ADD_ANNOTATION'; payload: Annotation }\n | { type: 'REMOVE_ANNOTATION'; payload: string }\n | { type: 'CLEAR_ALL_ANNOTATIONS' }\n | { type: 'SET_HOVERED'; payload: { element: HoveredElement; name: string | null; details?: ComponentDetails } }\n | { type: 'TOGGLE_MINIMIZED' }\n | { type: 'TOGGLE_LIST' }\n | { type: 'RESET_HOVER' };\n\nconst initialState: State = {\n mode: 'disabled',\n annotations: [],\n hoveredElement: null,\n hoveredComponentInfo: null,\n isMinimized: false,\n showList: false,\n};\n\nconst AnnotationContext = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n} | undefined>(undefined);\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'SET_MODE':\n return { ...state, mode: action.payload };\n case 'ADD_ANNOTATION':\n return { ...state, annotations: [...state.annotations, action.payload] };\n case 'REMOVE_ANNOTATION':\n return {\n ...state,\n annotations: state.annotations.filter((a) => a.id !== action.payload),\n };\n case 'CLEAR_ALL_ANNOTATIONS':\n return {\n ...state,\n annotations: [],\n };\n case 'SET_HOVERED':\n // Avoid updates if same\n if (state.hoveredElement === action.payload.element) return state;\n return {\n ...state,\n hoveredElement: action.payload.element,\n hoveredComponentInfo: action.payload.name\n ? { name: action.payload.name, details: action.payload.details }\n : null\n };\n case 'RESET_HOVER':\n return { ...state, hoveredElement: null, hoveredComponentInfo: null };\n case 'TOGGLE_MINIMIZED':\n return { ...state, isMinimized: !state.isMinimized };\n case 'TOGGLE_LIST':\n return { ...state, showList: !state.showList };\n default:\n return state;\n }\n}\n\nexport function AgentAnnotationProvider({ children }: { children: ReactNode }) {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n <AnnotationContext.Provider value={{ state, dispatch }}>\n {children}\n </AnnotationContext.Provider>\n );\n}\n\nexport function useAgentAnnotation() {\n const context = useContext(AnnotationContext);\n if (!context) {\n throw new Error('useAgentAnnotation must be used within an AgentAnnotationProvider');\n }\n return context;\n}\n", "import React, { useState } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n Platform,\n} from 'react-native';\nimport { useAgentAnnotation } from '../../store';\nimport { Draggable } from './Draggable';\nimport { Highlighter } from './Highlighter';\nimport { AnnotationList } from './AnnotationList';\n\n// Dynamic clipboard import to handle different React Native versions\nconst copyToClipboard = async (text: string) => {\n try {\n // Try expo-clipboard first\n const ExpoClipboard = await import('expo-clipboard');\n await ExpoClipboard.setStringAsync(text);\n } catch {\n try {\n // Fallback to @react-native-clipboard/clipboard\n const RNClipboard = await import('@react-native-clipboard/clipboard');\n RNClipboard.default.setString(text);\n } catch {\n console.warn('No clipboard module available');\n }\n }\n};\n\nexport function Toolbar() {\n const { state, dispatch } = useAgentAnnotation();\n const [showCopied, setShowCopied] = useState(false);\n\n const handleCopy = async () => {\n const data = state.annotations.map((a) => ({\n component: a.componentName,\n instruction: a.note,\n }));\n const text = JSON.stringify(data, null, 2);\n\n await copyToClipboard(text);\n\n setShowCopied(true);\n setTimeout(() => setShowCopied(false), 2000);\n };\n\n const toggleMode = () => {\n dispatch({\n type: 'SET_MODE',\n payload: state.mode === 'disabled' ? 'inspecting' : 'disabled',\n });\n };\n\n const handleToggleMinimized = () => {\n dispatch({ type: 'TOGGLE_MINIMIZED' });\n };\n\n return (\n <>\n <Highlighter />\n <AnnotationList />\n <Draggable>\n <View style={styles.toolbar}>\n {/* Drag Handle */}\n <View style={styles.dragHandle}>\n <Text style={styles.dragHandleText}>\u22EE\u22EE</Text>\n </View>\n\n {!state.isMinimized && (\n <>\n <View style={styles.separator} />\n\n {/* Toggle inspection mode */}\n <TouchableOpacity\n style={[\n styles.button,\n state.mode === 'inspecting' && styles.buttonActive,\n ]}\n onPress={toggleMode}\n >\n <Text style={styles.buttonText}>\n {state.mode === 'inspecting' ? '\uD83D\uDC46' : '\uD83D\uDEAB'}\n </Text>\n </TouchableOpacity>\n\n {/* List annotations */}\n <TouchableOpacity\n style={styles.button}\n onPress={() => dispatch({ type: 'TOGGLE_LIST' })}\n >\n <Text style={styles.buttonText}>\uD83D\uDCCB</Text>\n {state.annotations.length > 0 && (\n <View style={styles.badge}>\n <Text style={styles.badgeText}>{state.annotations.length}</Text>\n </View>\n )}\n </TouchableOpacity>\n\n {/* Copy annotations */}\n <TouchableOpacity\n style={[styles.button, showCopied && styles.buttonSuccess]}\n onPress={handleCopy}\n >\n <Text style={styles.buttonText}>{showCopied ? '\u2713' : '\uD83D\uDCCB'}</Text>\n {showCopied && <Text style={styles.copiedText}>Copied!</Text>}\n </TouchableOpacity>\n </>\n )}\n\n <View style={styles.separator} />\n\n {/* Minimize/Expand */}\n <TouchableOpacity style={styles.button} onPress={handleToggleMinimized}>\n <Text style={styles.buttonText}>{state.isMinimized ? '\u2B1C' : '\u2796'}</Text>\n </TouchableOpacity>\n </View>\n </Draggable>\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n toolbar: {\n backgroundColor: '#1e1e1e',\n borderWidth: 1,\n borderColor: '#333',\n borderRadius: 8,\n padding: 8,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.3,\n shadowRadius: 12,\n elevation: 8,\n },\n dragHandle: {\n paddingHorizontal: 4,\n },\n dragHandleText: {\n color: '#666',\n fontSize: 16,\n },\n separator: {\n width: 1,\n height: 24,\n backgroundColor: '#333',\n },\n button: {\n width: 32,\n height: 32,\n borderRadius: 4,\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n },\n buttonActive: {\n backgroundColor: '#3b82f6',\n },\n buttonSuccess: {\n backgroundColor: '#22c55e',\n flexDirection: 'row',\n width: 'auto',\n paddingHorizontal: 8,\n gap: 4,\n },\n buttonText: {\n fontSize: 16,\n },\n copiedText: {\n color: 'white',\n fontSize: 12,\n },\n badge: {\n position: 'absolute',\n top: -4,\n right: -4,\n backgroundColor: '#ef4444',\n borderRadius: 7,\n width: 14,\n height: 14,\n justifyContent: 'center',\n alignItems: 'center',\n },\n badgeText: {\n color: 'white',\n fontSize: 9,\n fontWeight: 'bold',\n },\n});\n", "import React, { useRef, ReactNode } from 'react';\nimport {\n View,\n PanResponder,\n Animated,\n StyleSheet,\n ViewStyle,\n GestureResponderEvent,\n PanResponderGestureState,\n} from 'react-native';\n\ninterface DraggableProps {\n children: ReactNode;\n initialPos?: { x: number; y: number };\n style?: ViewStyle;\n}\n\nexport function Draggable({ children, initialPos = { x: 20, y: 20 }, style }: DraggableProps) {\n const pan = useRef(new Animated.ValueXY(initialPos)).current;\n const lastOffset = useRef(initialPos);\n\n const panResponder = useRef(\n PanResponder.create({\n onStartShouldSetPanResponder: () => true,\n onMoveShouldSetPanResponder: () => true,\n onPanResponderGrant: () => {\n pan.setOffset(lastOffset.current);\n pan.setValue({ x: 0, y: 0 });\n },\n onPanResponderMove: Animated.event(\n [null, { dx: pan.x, dy: pan.y }],\n { useNativeDriver: false }\n ),\n onPanResponderRelease: (_e: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n lastOffset.current = {\n x: lastOffset.current.x + gestureState.dx,\n y: lastOffset.current.y + gestureState.dy,\n };\n pan.flattenOffset();\n },\n })\n ).current;\n\n return (\n <Animated.View\n {...panResponder.panHandlers}\n style={[\n styles.container,\n style,\n {\n transform: [{ translateX: pan.x }, { translateY: pan.y }],\n },\n ]}\n >\n {children}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n zIndex: 9999,\n },\n});\n", "import React, { useState, useCallback, useRef } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n StyleSheet,\n Dimensions,\n GestureResponderEvent,\n} from 'react-native';\nimport { useAgentAnnotation } from '../../store';\nimport { AnnotationInput } from './AnnotationInput';\n\ninterface HighlightRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface HighlighterProps {\n /**\n * Called when a touch occurs in inspection mode.\n * Return component info { name, rect } to highlight, or null to ignore.\n */\n onInspect?: (event: GestureResponderEvent) => {\n name: string;\n rect: HighlightRect;\n } | null;\n}\n\nexport function Highlighter({ onInspect }: HighlighterProps) {\n const { state, dispatch } = useAgentAnnotation();\n const { mode } = state;\n\n const [highlightRect, setHighlightRect] = useState<HighlightRect | null>(null);\n const [componentName, setComponentName] = useState<string>('');\n const [showInput, setShowInput] = useState(false);\n const [showTooltip, setShowTooltip] = useState(false);\n const [tooltipPos, setTooltipPos] = useState({ x: 0, y: 0 });\n\n const screenDimensions = Dimensions.get('window');\n\n const handleTouch = useCallback(\n (event: GestureResponderEvent) => {\n if (mode !== 'inspecting') return;\n\n const { pageX, pageY } = event.nativeEvent;\n\n if (onInspect) {\n const result = onInspect(event);\n if (result) {\n setHighlightRect(result.rect);\n setComponentName(result.name);\n setTooltipPos({ x: pageX, y: pageY });\n setShowTooltip(true);\n return;\n }\n }\n\n // Default behavior: show tooltip at touch location\n setTooltipPos({ x: pageX, y: pageY });\n setShowTooltip(true);\n setComponentName('TouchedComponent');\n setHighlightRect({\n x: pageX - 50,\n y: pageY - 50,\n width: 100,\n height: 100,\n });\n },\n [mode, onInspect]\n );\n\n const handleAddAnnotation = () => {\n setShowInput(true);\n setShowTooltip(false);\n };\n\n const handleCloseInput = () => {\n setShowInput(false);\n setHighlightRect(null);\n setComponentName('');\n };\n\n const handleDismiss = () => {\n setShowTooltip(false);\n setHighlightRect(null);\n setComponentName('');\n };\n\n if (mode !== 'inspecting') return null;\n\n // Calculate tooltip position to keep it on screen\n const tooltipWidth = 120;\n const tooltipHeight = 50;\n let adjustedX = tooltipPos.x + 16;\n let adjustedY = tooltipPos.y + 16;\n\n if (adjustedX + tooltipWidth > screenDimensions.width) {\n adjustedX = tooltipPos.x - tooltipWidth - 16;\n }\n if (adjustedY + tooltipHeight > screenDimensions.height) {\n adjustedY = tooltipPos.y - tooltipHeight - 16;\n }\n\n return (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\">\n {/* Touch capture overlay */}\n <TouchableOpacity\n style={styles.touchOverlay}\n activeOpacity={1}\n onPress={handleTouch}\n />\n\n {/* Highlight rectangle */}\n {highlightRect && (\n <>\n <View\n style={[\n styles.highlight,\n {\n left: highlightRect.x - 2,\n top: highlightRect.y - 2,\n width: highlightRect.width + 4,\n height: highlightRect.height + 4,\n },\n ]}\n pointerEvents=\"none\"\n />\n\n {/* Component name label */}\n {componentName && (\n <View\n style={[\n styles.nameLabel,\n {\n left: highlightRect.x,\n top: highlightRect.y - 24,\n },\n ]}\n pointerEvents=\"none\"\n >\n <Text style={styles.nameLabelText}>{componentName}</Text>\n </View>\n )}\n </>\n )}\n\n {/* Floating tooltip */}\n {showTooltip && (\n <View\n style={[\n styles.tooltip,\n {\n left: adjustedX,\n top: adjustedY,\n },\n ]}\n >\n <TouchableOpacity style={styles.tooltipButton} onPress={handleAddAnnotation}>\n <Text style={styles.tooltipButtonText}>+</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.dismissButton} onPress={handleDismiss}>\n <Text style={styles.dismissButtonText}>\u2715</Text>\n </TouchableOpacity>\n </View>\n )}\n\n {/* Annotation input modal */}\n {showInput && (\n <AnnotationInput onClose={handleCloseInput} componentName={componentName || 'Unknown'} />\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n touchOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'transparent',\n },\n highlight: {\n position: 'absolute',\n borderWidth: 2,\n borderColor: '#3b82f6',\n borderRadius: 4,\n backgroundColor: 'rgba(59, 130, 246, 0.1)',\n },\n nameLabel: {\n position: 'absolute',\n backgroundColor: '#3b82f6',\n paddingHorizontal: 8,\n paddingVertical: 2,\n borderRadius: 4,\n },\n nameLabelText: {\n color: 'white',\n fontSize: 12,\n fontFamily: 'monospace',\n },\n tooltip: {\n position: 'absolute',\n flexDirection: 'row',\n gap: 6,\n padding: 6,\n backgroundColor: 'rgba(0, 0, 0, 0.9)',\n borderRadius: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.3,\n shadowRadius: 12,\n elevation: 8,\n },\n tooltipButton: {\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: '#3b82f6',\n justifyContent: 'center',\n alignItems: 'center',\n },\n tooltipButtonText: {\n color: 'white',\n fontSize: 18,\n fontWeight: 'bold',\n },\n dismissButton: {\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: '#6b7280',\n justifyContent: 'center',\n alignItems: 'center',\n },\n dismissButtonText: {\n color: 'white',\n fontSize: 14,\n },\n});\n", "import React, { useState, useEffect } from 'react';\nimport {\n View,\n Text,\n Modal,\n TextInput,\n TouchableOpacity,\n StyleSheet,\n Animated,\n KeyboardAvoidingView,\n Platform,\n} from 'react-native';\nimport { useAgentAnnotation } from '../../store';\n\ninterface AnnotationInputProps {\n onClose: () => void;\n componentName: string;\n}\n\nexport function AnnotationInput({ onClose, componentName }: AnnotationInputProps) {\n const { dispatch } = useAgentAnnotation();\n const [note, setNote] = useState('');\n const [fadeAnim] = useState(new Animated.Value(0));\n const [scaleAnim] = useState(new Animated.Value(0.95));\n\n useEffect(() => {\n Animated.parallel([\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 200,\n useNativeDriver: true,\n }),\n Animated.spring(scaleAnim, {\n toValue: 1,\n friction: 8,\n useNativeDriver: true,\n }),\n ]).start();\n }, []);\n\n const handleClose = () => {\n Animated.parallel([\n Animated.timing(fadeAnim, {\n toValue: 0,\n duration: 150,\n useNativeDriver: true,\n }),\n Animated.timing(scaleAnim, {\n toValue: 0.95,\n duration: 150,\n useNativeDriver: true,\n }),\n ]).start(() => {\n onClose();\n });\n };\n\n const handleSubmit = () => {\n if (!note.trim()) return;\n\n dispatch({\n type: 'ADD_ANNOTATION',\n payload: {\n id: Date.now().toString(),\n componentName,\n note: note.trim(),\n timestamp: Date.now(),\n },\n });\n handleClose();\n };\n\n return (\n <Modal\n visible\n transparent\n animationType=\"none\"\n onRequestClose={handleClose}\n >\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n style={styles.keyboardView}\n >\n <Animated.View style={[styles.overlay, { opacity: fadeAnim }]}>\n <TouchableOpacity\n style={styles.backdropTouchable}\n activeOpacity={1}\n onPress={handleClose}\n >\n <Animated.View\n style={[\n styles.container,\n {\n opacity: fadeAnim,\n transform: [{ scale: scaleAnim }],\n },\n ]}\n >\n <TouchableOpacity activeOpacity={1}>\n <View style={styles.header}>\n <Text style={styles.title}>Add Annotation</Text>\n <TouchableOpacity onPress={handleClose} style={styles.closeButton}>\n <Text style={styles.closeButtonText}>\u2715</Text>\n </TouchableOpacity>\n </View>\n\n <Text style={styles.componentLabel}>\n Component: <Text style={styles.componentName}>{componentName}</Text>\n </Text>\n\n <TextInput\n style={styles.textInput}\n value={note}\n onChangeText={setNote}\n placeholder=\"Describe what this component does...\"\n placeholderTextColor=\"#6b7280\"\n multiline\n numberOfLines={4}\n textAlignVertical=\"top\"\n autoFocus\n />\n\n <View style={styles.buttonContainer}>\n <TouchableOpacity style={styles.cancelButton} onPress={handleClose}>\n <Text style={styles.cancelButtonText}>Cancel</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.submitButton} onPress={handleSubmit}>\n <Text style={styles.submitButtonText}>Save Annotation</Text>\n </TouchableOpacity>\n </View>\n </TouchableOpacity>\n </Animated.View>\n </TouchableOpacity>\n </Animated.View>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n keyboardView: {\n flex: 1,\n },\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n backdropTouchable: {\n flex: 1,\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n },\n container: {\n backgroundColor: '#1e1e1e',\n borderRadius: 8,\n padding: 20,\n width: '90%',\n maxWidth: 400,\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: 16,\n },\n title: {\n color: '#e5e7eb',\n fontSize: 18,\n fontWeight: 'bold',\n },\n closeButton: {\n padding: 4,\n },\n closeButtonText: {\n color: '#e5e7eb',\n fontSize: 20,\n },\n componentLabel: {\n color: '#9ca3af',\n fontSize: 14,\n marginBottom: 12,\n },\n componentName: {\n color: '#e5e7eb',\n fontWeight: 'bold',\n },\n textInput: {\n backgroundColor: '#2d2d2d',\n borderWidth: 1,\n borderColor: '#404040',\n borderRadius: 4,\n padding: 8,\n color: 'white',\n height: 100,\n marginBottom: 16,\n fontSize: 14,\n },\n buttonContainer: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: 8,\n },\n cancelButton: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 4,\n borderWidth: 1,\n borderColor: '#404040',\n },\n cancelButtonText: {\n color: 'white',\n fontSize: 14,\n },\n submitButton: {\n backgroundColor: '#3b82f6',\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 4,\n },\n submitButtonText: {\n color: 'white',\n fontSize: 14,\n },\n});\n", "import React from 'react';\nimport {\n View,\n Text,\n Modal,\n TouchableOpacity,\n ScrollView,\n StyleSheet,\n} from 'react-native';\nimport { useAgentAnnotation } from '../../store';\n\nexport function AnnotationList() {\n const { state, dispatch } = useAgentAnnotation();\n\n if (!state.showList) return null;\n\n return (\n <Modal\n visible={state.showList}\n transparent\n animationType=\"fade\"\n onRequestClose={() => dispatch({ type: 'TOGGLE_LIST' })}\n >\n <View style={styles.overlay}>\n <View style={styles.container}>\n <View style={styles.header}>\n <Text style={styles.title}>Annotations ({state.annotations.length})</Text>\n <View style={styles.headerActions}>\n {state.annotations.length > 0 && (\n <TouchableOpacity\n style={styles.clearButton}\n onPress={() => dispatch({ type: 'CLEAR_ALL_ANNOTATIONS' })}\n >\n <Text style={styles.clearButtonText}>Clear All</Text>\n </TouchableOpacity>\n )}\n <TouchableOpacity\n style={styles.closeButton}\n onPress={() => dispatch({ type: 'TOGGLE_LIST' })}\n >\n <Text style={styles.closeButtonText}>\u2715</Text>\n </TouchableOpacity>\n </View>\n </View>\n\n <ScrollView style={styles.listContainer}>\n {state.annotations.length === 0 ? (\n <Text style={styles.emptyText}>No annotations yet.</Text>\n ) : (\n state.annotations.map((ann) => (\n <View key={ann.id} style={styles.annotationItem}>\n <View style={styles.annotationContent}>\n <Text style={styles.componentName}>{ann.componentName}</Text>\n <Text style={styles.annotationNote}>{ann.note}</Text>\n </View>\n <TouchableOpacity\n style={styles.deleteButton}\n onPress={() => dispatch({ type: 'REMOVE_ANNOTATION', payload: ann.id })}\n >\n <Text style={styles.deleteButtonText}>\uD83D\uDDD1</Text>\n </TouchableOpacity>\n </View>\n ))\n )}\n </ScrollView>\n </View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n container: {\n backgroundColor: '#1e1e1e',\n borderRadius: 8,\n width: '90%',\n maxWidth: 500,\n maxHeight: '80%',\n padding: 20,\n },\n header: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: 16,\n },\n title: {\n color: '#e5e7eb',\n fontSize: 18,\n fontWeight: 'bold',\n },\n headerActions: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n clearButton: {\n backgroundColor: '#ef4444',\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 4,\n },\n clearButtonText: {\n color: 'white',\n fontSize: 12,\n },\n closeButton: {\n padding: 4,\n },\n closeButtonText: {\n color: '#e5e7eb',\n fontSize: 20,\n },\n listContainer: {\n flex: 1,\n },\n emptyText: {\n color: '#9ca3af',\n textAlign: 'center',\n padding: 20,\n },\n annotationItem: {\n backgroundColor: '#2d2d2d',\n padding: 12,\n borderRadius: 4,\n marginBottom: 8,\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n },\n annotationContent: {\n flex: 1,\n marginRight: 12,\n },\n componentName: {\n color: '#60a5fa',\n fontWeight: 'bold',\n fontSize: 14,\n marginBottom: 4,\n },\n annotationNote: {\n color: '#e5e7eb',\n fontSize: 14,\n },\n deleteButton: {\n padding: 4,\n },\n deleteButtonText: {\n fontSize: 16,\n },\n});\n", "import { RefObject } from 'react';\nimport { View, Platform } from 'react-native';\n\nexport interface ScreenshotOptions {\n /** Scale factor for higher resolution (default: 2) */\n scale?: number;\n /** Image format (default: 'png') */\n format?: 'png' | 'jpg';\n /** Quality for jpg format (0-1, default: 0.9) */\n quality?: number;\n /** Whether to copy to clipboard (default: true, requires expo-clipboard) */\n copyToClipboard?: boolean;\n /** Whether to save to camera roll (default: false, requires expo-media-library) */\n saveToCameraRoll?: boolean;\n}\n\nexport interface ScreenshotResult {\n success: boolean;\n uri?: string;\n base64?: string;\n error?: string;\n}\n\n/**\n * Captures a screenshot of a React Native View using react-native-view-shot\n * \n * Requirements:\n * - react-native-view-shot must be installed\n * - Optionally: expo-clipboard for clipboard support\n * - Optionally: expo-media-library for camera roll support\n * \n * @param viewRef - Reference to the View to capture\n * @param options - Screenshot options\n */\nexport async function captureScreenshot(\n viewRef: RefObject<View>,\n options: ScreenshotOptions = {}\n): Promise<ScreenshotResult> {\n const {\n scale = 2,\n format = 'png',\n quality = 0.9,\n copyToClipboard = false,\n saveToCameraRoll = false,\n } = options;\n\n try {\n // Dynamic import to avoid issues if not installed\n let captureRef: any;\n try {\n const viewShot = await import('react-native-view-shot');\n captureRef = viewShot.captureRef;\n } catch {\n return {\n success: false,\n error: 'react-native-view-shot is not installed. Run: npm install react-native-view-shot',\n };\n }\n\n if (!viewRef.current) {\n return {\n success: false,\n error: 'View reference is null',\n };\n }\n\n // Capture the view\n const uri = await captureRef(viewRef, {\n format,\n quality,\n result: 'tmpfile',\n snapshotContentContainer: false,\n });\n\n // Get base64 if needed\n let base64: string | undefined;\n if (copyToClipboard) {\n const base64Result = await captureRef(viewRef, {\n format,\n quality,\n result: 'base64',\n snapshotContentContainer: false,\n });\n base64 = base64Result;\n }\n\n // Copy to clipboard if requested\n if (copyToClipboard && base64) {\n try {\n const Clipboard = await import('expo-clipboard');\n // expo-clipboard doesn't support image directly, \n // we'll copy the base64 string\n await Clipboard.setStringAsync(base64);\n } catch {\n console.warn('expo-clipboard not available for clipboard support');\n }\n }\n\n // Save to camera roll if requested\n if (saveToCameraRoll) {\n try {\n const MediaLibrary = await import('expo-media-library');\n const { status } = await MediaLibrary.requestPermissionsAsync();\n if (status === 'granted') {\n await MediaLibrary.saveToLibraryAsync(uri);\n }\n } catch {\n console.warn('expo-media-library not available for saving to camera roll');\n }\n }\n\n return {\n success: true,\n uri,\n base64,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error('Screenshot capture failed:', message);\n return {\n success: false,\n error: message,\n };\n }\n}\n\n/**\n * Placeholder for web compatibility\n * The actual web implementation is in screenshot.ts\n */\nexport function captureScreenshotWeb(\n _element: any,\n _options: any\n): Promise<ScreenshotResult> {\n return Promise.resolve({\n success: false,\n error: 'Use the web-specific captureScreenshot function',\n });\n}\n", "/**\n * React Fiber utilities for React Native\n * \n * Note: React Native has different fiber access compared to web.\n * These utilities provide a similar interface but with native-specific logic.\n */\n\n/**\n * Attempts to get the React Fiber from a native view instance\n * This is less reliable in React Native than on web\n */\nexport function getReactFiber(instance: any): any {\n if (!instance) return null;\n \n // React Native stores fiber differently\n // Try to find the fiber via internal props\n const key = Object.keys(instance).find((k) =>\n k.startsWith('__reactFiber$') || \n k.startsWith('__reactInternalInstance$') ||\n k.startsWith('_reactInternals')\n );\n \n return key ? instance[key] : null;\n}\n\n/**\n * Gets the display name of a React component from its fiber\n */\nexport function getComponentDisplayName(fiber: any): string {\n if (!fiber) return 'Unknown';\n \n let curr = fiber;\n while (curr) {\n const type = curr.type;\n if (type) {\n // Check for displayName or name\n const name = type.displayName || type.name;\n if (name && typeof name === 'string') {\n // Skip internal React Native components\n if (!name.startsWith('RCT') && !name.startsWith('_')) {\n return name;\n }\n }\n }\n curr = curr.return;\n }\n return 'Unknown';\n}\n\n/**\n * For React Native, we can't easily get DOM elements from fibers\n * This is a no-op that returns null\n */\nexport function getElementFromFiber(_fiber: any): null {\n return null;\n}\n\n/**\n * Interface for component inspection result\n */\nexport interface ComponentInfo {\n name: string;\n props?: Record<string, any>;\n}\n\n/**\n * Inspects a React Native component instance to get info\n * This works with refs passed to components\n */\nexport function inspectComponent(ref: any): ComponentInfo | null {\n if (!ref) return null;\n \n // Try to get fiber from the ref\n const fiber = getReactFiber(ref);\n if (fiber) {\n return {\n name: getComponentDisplayName(fiber),\n props: fiber.memoizedProps,\n };\n }\n \n // Fallback: try to infer from the ref itself\n if (ref.constructor && ref.constructor.name) {\n return {\n name: ref.constructor.name,\n };\n }\n \n return null;\n}\n", "/**\n * Platform detection utilities for cross-platform support\n */\n\n// Check if we're running in a web environment\nexport const isWeb = typeof document !== 'undefined' && typeof window !== 'undefined';\n\n// Check if we're running in React Native\n// We check for the absence of DOM and presence of native-specific globals\nexport const isNative = !isWeb && typeof global !== 'undefined';\n\n// Get the current platform\nexport type PlatformType = 'web' | 'ios' | 'android' | 'native';\n\nexport function getPlatform(): PlatformType {\n if (isWeb) return 'web';\n \n // In React Native, we need to dynamically check Platform\n try {\n // This will only work in React Native environment\n const { Platform } = require('react-native');\n if (Platform.OS === 'ios') return 'ios';\n if (Platform.OS === 'android') return 'android';\n return 'native';\n } catch {\n return 'native';\n }\n}\n\n// Check if running in Tauri environment (web only)\nexport function isTauriEnv(): boolean {\n return isWeb && typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["AgentAnnotationProvider", "import_react_native", "import_react", "import_react_native", "import_react", "import_jsx_runtime", "import_react", "import_react_native", "import_react", "import_react_native", "import_jsx_runtime", "styles", "import_jsx_runtime", "styles", "import_react_native", "import_jsx_runtime", "styles", "import_jsx_runtime", "styles", "copyToClipboard", "Platform", "import_jsx_runtime", "AgentAnnotationProvider"]
7
7
  }
@@ -20,8 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.web.tsx
21
21
  var index_web_exports = {};
22
22
  __export(index_web_exports, {
23
- AiAnnotationProvider: () => AiAnnotationProvider,
24
- useAiAnnotation: () => useAiAnnotation
23
+ AgentAnnotationProvider: () => AgentAnnotationProvider,
24
+ useAgentAnnotation: () => useAgentAnnotation
25
25
  });
26
26
  module.exports = __toCommonJS(index_web_exports);
27
27
  var import_react = require("react");
@@ -69,14 +69,14 @@ function reducer(state, action) {
69
69
  return state;
70
70
  }
71
71
  }
72
- function AiAnnotationProvider({ children }) {
72
+ function AgentAnnotationProvider({ children }) {
73
73
  const [state, dispatch] = (0, import_react.useReducer)(reducer, initialState);
74
74
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AnnotationContext.Provider, { value: { state, dispatch }, children });
75
75
  }
76
- function useAiAnnotation() {
76
+ function useAgentAnnotation() {
77
77
  const context = (0, import_react.useContext)(AnnotationContext);
78
78
  if (!context) {
79
- throw new Error("useAiAnnotation must be used within an AiAnnotationProvider");
79
+ throw new Error("useAgentAnnotation must be used within an AgentAnnotationProvider");
80
80
  }
81
81
  return context;
82
82
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.web.tsx"],
4
- "sourcesContent": ["/**\n * Web-only entry point for Chrome Extension\n * This avoids any React Native imports\n */\n\nimport React, { createContext, useContext, useReducer, ReactNode } from 'react';\nimport type { ComponentDetails, ChildComponentInfo, ElementInfo } from './utils/fiber';\n\n// Re-export types for external use\nexport type { ComponentDetails, ChildComponentInfo, ElementInfo };\n\nexport type Annotation = {\n id: string;\n componentName: string;\n note: string;\n timestamp: number;\n /** Enhanced component details (optional for backward compatibility) */\n details?: ComponentDetails;\n};\n\nexport type Mode = 'disabled' | 'inspecting';\n\n/**\n * Platform-agnostic element type\n * - On web: HTMLElement\n */\nexport type HoveredElement = HTMLElement | null;\n\n/**\n * Enhanced component info with full details\n */\nexport interface HoveredComponentInfo {\n name: string;\n /** Full component details including hierarchy, children, and element info */\n details?: ComponentDetails;\n}\n\ninterface State {\n mode: Mode;\n annotations: Annotation[];\n hoveredElement: HoveredElement;\n hoveredComponentInfo: HoveredComponentInfo | null;\n isMinimized: boolean;\n showList: boolean;\n}\n\ntype Action =\n | { type: 'SET_MODE'; payload: Mode }\n | { type: 'ADD_ANNOTATION'; payload: Annotation }\n | { type: 'REMOVE_ANNOTATION'; payload: string }\n | { type: 'CLEAR_ALL_ANNOTATIONS' }\n | { type: 'SET_HOVERED'; payload: { element: HoveredElement; name: string | null; details?: ComponentDetails } }\n | { type: 'TOGGLE_MINIMIZED' }\n | { type: 'TOGGLE_LIST' }\n | { type: 'RESET_HOVER' };\n\nconst initialState: State = {\n mode: 'inspecting', // Start enabled for extension\n annotations: [],\n hoveredElement: null,\n hoveredComponentInfo: null,\n isMinimized: false,\n showList: false,\n};\n\nconst AnnotationContext = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n} | undefined>(undefined);\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'SET_MODE':\n return { ...state, mode: action.payload };\n case 'ADD_ANNOTATION':\n return { ...state, annotations: [...state.annotations, action.payload] };\n case 'REMOVE_ANNOTATION':\n return {\n ...state,\n annotations: state.annotations.filter((a) => a.id !== action.payload),\n };\n case 'CLEAR_ALL_ANNOTATIONS':\n return {\n ...state,\n annotations: [],\n };\n case 'SET_HOVERED':\n // Avoid updates if same\n if (state.hoveredElement === action.payload.element) return state;\n return {\n ...state,\n hoveredElement: action.payload.element,\n hoveredComponentInfo: action.payload.name\n ? { name: action.payload.name, details: action.payload.details }\n : null\n };\n case 'RESET_HOVER':\n return { ...state, hoveredElement: null, hoveredComponentInfo: null };\n case 'TOGGLE_MINIMIZED':\n return { ...state, isMinimized: !state.isMinimized };\n case 'TOGGLE_LIST':\n return { ...state, showList: !state.showList };\n default:\n return state;\n }\n}\n\nexport function AiAnnotationProvider({ children }: { children: ReactNode }) {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n <AnnotationContext.Provider value={{ state, dispatch }}>\n {children}\n </AnnotationContext.Provider>\n );\n}\n\nexport function useAiAnnotation() {\n const context = useContext(AnnotationContext);\n if (!context) {\n throw new Error('useAiAnnotation must be used within an AiAnnotationProvider');\n }\n return context;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,mBAAwE;AA0GpE;AAvDJ,IAAM,eAAsB;AAAA,EAC1B,MAAM;AAAA;AAAA,EACN,aAAa,CAAC;AAAA,EACd,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,aAAa;AAAA,EACb,UAAU;AACZ;AAEA,IAAM,wBAAoB,4BAGX,MAAS;AAExB,SAAS,QAAQ,OAAc,QAAuB;AACpD,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,MAAM,OAAO,QAAQ;AAAA,IAC1C,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,aAAa,CAAC,GAAG,MAAM,aAAa,OAAO,OAAO,EAAE;AAAA,IACzE,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,MAAM,YAAY,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,OAAO;AAAA,MACtE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,CAAC;AAAA,MAChB;AAAA,IACF,KAAK;AAED,UAAI,MAAM,mBAAmB,OAAO,QAAQ,QAAS,QAAO;AAC5D,aAAO;AAAA,QACH,GAAG;AAAA,QACH,gBAAgB,OAAO,QAAQ;AAAA,QAC/B,sBAAsB,OAAO,QAAQ,OACjC,EAAE,MAAM,OAAO,QAAQ,MAAM,SAAS,OAAO,QAAQ,QAAQ,IAC7D;AAAA,MACR;AAAA,IACJ,KAAK;AACD,aAAO,EAAE,GAAG,OAAO,gBAAgB,MAAM,sBAAsB,KAAK;AAAA,IACxE,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,aAAa,CAAC,MAAM,YAAY;AAAA,IACrD,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,UAAU,CAAC,MAAM,SAAS;AAAA,IAC/C;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,qBAAqB,EAAE,SAAS,GAA4B;AAC1E,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAW,SAAS,YAAY;AAE1D,SACE,4CAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,OAAO,SAAS,GAClD,UACH;AAEJ;AAEO,SAAS,kBAAkB;AAChC,QAAM,cAAU,yBAAW,iBAAiB;AAC5C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["/**\n * Web-only entry point for Chrome Extension\n * This avoids any React Native imports\n */\n\nimport React, { createContext, useContext, useReducer, ReactNode } from 'react';\nimport type { ComponentDetails, ChildComponentInfo, ElementInfo } from './utils/fiber';\n\n// Re-export types for external use\nexport type { ComponentDetails, ChildComponentInfo, ElementInfo };\n\nexport type Annotation = {\n id: string;\n componentName: string;\n note: string;\n timestamp: number;\n /** Enhanced component details (optional for backward compatibility) */\n details?: ComponentDetails;\n};\n\nexport type Mode = 'disabled' | 'inspecting';\n\n/**\n * Platform-agnostic element type\n * - On web: HTMLElement\n */\nexport type HoveredElement = HTMLElement | null;\n\n/**\n * Enhanced component info with full details\n */\nexport interface HoveredComponentInfo {\n name: string;\n /** Full component details including hierarchy, children, and element info */\n details?: ComponentDetails;\n}\n\ninterface State {\n mode: Mode;\n annotations: Annotation[];\n hoveredElement: HoveredElement;\n hoveredComponentInfo: HoveredComponentInfo | null;\n isMinimized: boolean;\n showList: boolean;\n}\n\ntype Action =\n | { type: 'SET_MODE'; payload: Mode }\n | { type: 'ADD_ANNOTATION'; payload: Annotation }\n | { type: 'REMOVE_ANNOTATION'; payload: string }\n | { type: 'CLEAR_ALL_ANNOTATIONS' }\n | { type: 'SET_HOVERED'; payload: { element: HoveredElement; name: string | null; details?: ComponentDetails } }\n | { type: 'TOGGLE_MINIMIZED' }\n | { type: 'TOGGLE_LIST' }\n | { type: 'RESET_HOVER' };\n\nconst initialState: State = {\n mode: 'inspecting', // Start enabled for extension\n annotations: [],\n hoveredElement: null,\n hoveredComponentInfo: null,\n isMinimized: false,\n showList: false,\n};\n\nconst AnnotationContext = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n} | undefined>(undefined);\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'SET_MODE':\n return { ...state, mode: action.payload };\n case 'ADD_ANNOTATION':\n return { ...state, annotations: [...state.annotations, action.payload] };\n case 'REMOVE_ANNOTATION':\n return {\n ...state,\n annotations: state.annotations.filter((a) => a.id !== action.payload),\n };\n case 'CLEAR_ALL_ANNOTATIONS':\n return {\n ...state,\n annotations: [],\n };\n case 'SET_HOVERED':\n // Avoid updates if same\n if (state.hoveredElement === action.payload.element) return state;\n return {\n ...state,\n hoveredElement: action.payload.element,\n hoveredComponentInfo: action.payload.name\n ? { name: action.payload.name, details: action.payload.details }\n : null\n };\n case 'RESET_HOVER':\n return { ...state, hoveredElement: null, hoveredComponentInfo: null };\n case 'TOGGLE_MINIMIZED':\n return { ...state, isMinimized: !state.isMinimized };\n case 'TOGGLE_LIST':\n return { ...state, showList: !state.showList };\n default:\n return state;\n }\n}\n\nexport function AgentAnnotationProvider({ children }: { children: ReactNode }) {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n <AnnotationContext.Provider value={{ state, dispatch }}>\n {children}\n </AnnotationContext.Provider>\n );\n}\n\nexport function useAgentAnnotation() {\n const context = useContext(AnnotationContext);\n if (!context) {\n throw new Error('useAgentAnnotation must be used within an AgentAnnotationProvider');\n }\n return context;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,mBAAwE;AA0GpE;AAvDJ,IAAM,eAAsB;AAAA,EAC1B,MAAM;AAAA;AAAA,EACN,aAAa,CAAC;AAAA,EACd,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,aAAa;AAAA,EACb,UAAU;AACZ;AAEA,IAAM,wBAAoB,4BAGX,MAAS;AAExB,SAAS,QAAQ,OAAc,QAAuB;AACpD,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,MAAM,OAAO,QAAQ;AAAA,IAC1C,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,aAAa,CAAC,GAAG,MAAM,aAAa,OAAO,OAAO,EAAE;AAAA,IACzE,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,MAAM,YAAY,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,OAAO;AAAA,MACtE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,CAAC;AAAA,MAChB;AAAA,IACF,KAAK;AAED,UAAI,MAAM,mBAAmB,OAAO,QAAQ,QAAS,QAAO;AAC5D,aAAO;AAAA,QACH,GAAG;AAAA,QACH,gBAAgB,OAAO,QAAQ;AAAA,QAC/B,sBAAsB,OAAO,QAAQ,OACjC,EAAE,MAAM,OAAO,QAAQ,MAAM,SAAS,OAAO,QAAQ,QAAQ,IAC7D;AAAA,MACR;AAAA,IACJ,KAAK;AACD,aAAO,EAAE,GAAG,OAAO,gBAAgB,MAAM,sBAAsB,KAAK;AAAA,IACxE,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,aAAa,CAAC,MAAM,YAAY;AAAA,IACrD,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,UAAU,CAAC,MAAM,SAAS;AAAA,IAC/C;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,wBAAwB,EAAE,SAAS,GAA4B;AAC7E,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAW,SAAS,YAAY;AAE1D,SACE,4CAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,OAAO,SAAS,GAClD,UACH;AAEJ;AAEO,SAAS,qBAAqB;AACnC,QAAM,cAAU,yBAAW,iBAAiB;AAC5C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }