@process.co/ui 0.0.14 → 0.0.16

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/proc-app/proc-app/out/process-co/ui/dist/components/dev/index.js","../../../src/components/dev/DevProvider.tsx","../../../src/components/dev/DevToolbar.tsx"],"names":["React2","createContext","useContext","useCallback","useState","useEffect","useMemo","DevContext","useDevContext","useNodeProperty","fieldName","devCtx","value","getProperty","setValue","newValue","setProperty","console","warn","localValue","setLocalValue","useInferredTypes","inferredTypes","setInferredType","getInferredType","DevProvider","children","storageKey","initialData","persist","nodeId","window","stored","localStorage","getItem","JSON","parse","e","data","setData","setInferredTypesState","setItem","stringify","key","prev","type","clearInferredType","_","rest","clearAllInferredTypes","clearAll","removeItem","exportData","importData","json","parsed","error","React","createElement","Provider","DevToolbar","className","showData","setShowData","showTypeEditor","setShowTypeEditor","newTypeKey","setNewTypeKey","newTypeValue","setNewTypeValue","handleAddType","trim","handleRemoveType","handleClearAllTypes","confirm","onClick","navigator","clipboard","writeText","alert","prompt","placeholder","onChange","target","onKeyDown","disabled","Object","keys","length","entries","map","title"],"mappings":"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","sourcesContent":["import React2, { createContext, useContext, useCallback, useState, useEffect, useMemo } from 'react';\n\n// src/components/dev/DevProvider.tsx\nvar DevContext = createContext(null);\nfunction useDevContext() {\n return useContext(DevContext);\n}\nfunction useNodeProperty(fieldName) {\n const devCtx = useDevContext();\n if (devCtx) {\n const value = devCtx.getProperty(fieldName);\n const setValue = useCallback((newValue) => {\n devCtx.setProperty(fieldName, newValue);\n }, [devCtx, fieldName]);\n return [value, setValue];\n }\n console.warn(`useNodeProperty('${fieldName}') called outside of DevProvider - returning undefined`);\n const [localValue, setLocalValue] = useState(void 0);\n return [localValue, setLocalValue];\n}\nfunction useInferredTypes() {\n const devCtx = useDevContext();\n if (devCtx) {\n return {\n inferredTypes: devCtx.inferredTypes,\n setInferredType: devCtx.setInferredType,\n getInferredType: devCtx.getInferredType\n };\n }\n return null;\n}\nfunction DevProvider({\n children,\n storageKey = \"process-dev\",\n initialData = {},\n persist = true,\n nodeId = \"dev-node-1\"\n}) {\n const [data, setData] = useState(() => {\n if (persist && typeof window !== \"undefined\") {\n try {\n const stored = localStorage.getItem(`${storageKey}:data`);\n if (stored) {\n return { ...initialData, ...JSON.parse(stored) };\n }\n } catch (e) {\n console.warn(\"DevProvider: Failed to load from localStorage\", e);\n }\n }\n return initialData;\n });\n const [inferredTypes, setInferredTypesState] = useState(() => {\n if (persist && typeof window !== \"undefined\") {\n try {\n const stored = localStorage.getItem(`${storageKey}:inferredTypes`);\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (e) {\n console.warn(\"DevProvider: Failed to load inferredTypes from localStorage\", e);\n }\n }\n return {};\n });\n useEffect(() => {\n if (persist && typeof window !== \"undefined\") {\n try {\n localStorage.setItem(`${storageKey}:data`, JSON.stringify(data));\n } catch (e) {\n console.warn(\"DevProvider: Failed to save data to localStorage\", e);\n }\n }\n }, [data, storageKey, persist]);\n useEffect(() => {\n if (persist && typeof window !== \"undefined\") {\n try {\n localStorage.setItem(`${storageKey}:inferredTypes`, JSON.stringify(inferredTypes));\n } catch (e) {\n console.warn(\"DevProvider: Failed to save inferredTypes to localStorage\", e);\n }\n }\n }, [inferredTypes, storageKey, persist]);\n const setProperty = useCallback((key, value2) => {\n setData((prev) => ({ ...prev, [key]: value2 }));\n }, []);\n const getProperty = useCallback((key) => {\n return data[key];\n }, [data]);\n const setInferredType = useCallback((fieldName, type) => {\n setInferredTypesState((prev) => ({ ...prev, [fieldName]: type }));\n }, []);\n const getInferredType = useCallback((fieldName) => {\n return inferredTypes[fieldName];\n }, [inferredTypes]);\n const clearInferredType = useCallback((fieldName) => {\n setInferredTypesState((prev) => {\n const { [fieldName]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n const clearAllInferredTypes = useCallback(() => {\n setInferredTypesState({});\n }, []);\n const clearAll = useCallback(() => {\n setData({});\n setInferredTypesState({});\n if (persist && typeof window !== \"undefined\") {\n localStorage.removeItem(`${storageKey}:data`);\n localStorage.removeItem(`${storageKey}:inferredTypes`);\n }\n }, [storageKey, persist]);\n const exportData = useCallback(() => {\n return JSON.stringify({ data, inferredTypes }, null, 2);\n }, [data, inferredTypes]);\n const importData = useCallback((json) => {\n try {\n const parsed = JSON.parse(json);\n if (parsed.data) setData(parsed.data);\n if (parsed.inferredTypes) setInferredTypesState(parsed.inferredTypes);\n } catch (e) {\n console.error(\"DevProvider: Failed to import data\", e);\n }\n }, []);\n const value = useMemo(() => ({\n data,\n setProperty,\n getProperty,\n inferredTypes,\n setInferredType,\n getInferredType,\n clearInferredType,\n clearAllInferredTypes,\n nodeId,\n clearAll,\n exportData,\n importData\n }), [data, setProperty, getProperty, inferredTypes, setInferredType, getInferredType, clearInferredType, clearAllInferredTypes, nodeId, clearAll, exportData, importData]);\n return /* @__PURE__ */ React2.createElement(DevContext.Provider, { value }, children);\n}\nfunction DevToolbar({ className }) {\n const devCtx = useDevContext();\n const [showData, setShowData] = useState(false);\n const [showTypeEditor, setShowTypeEditor] = useState(false);\n const [newTypeKey, setNewTypeKey] = useState(\"\");\n const [newTypeValue, setNewTypeValue] = useState(\"\");\n if (!devCtx) {\n return /* @__PURE__ */ React2.createElement(\"div\", { className }, \"DevToolbar: Not inside DevProvider\");\n }\n const handleAddType = () => {\n if (newTypeKey.trim() && newTypeValue.trim()) {\n devCtx.setInferredType(newTypeKey.trim(), newTypeValue.trim());\n setNewTypeKey(\"\");\n setNewTypeValue(\"\");\n }\n };\n const handleRemoveType = (key) => {\n devCtx.clearInferredType(key);\n };\n const handleClearAllTypes = () => {\n if (confirm(\"Clear all inferred types?\")) {\n devCtx.clearAllInferredTypes();\n }\n };\n return /* @__PURE__ */ React2.createElement(\"div\", { className: `${className || \"\"} uii:border uii:rounded-lg uii:p-4 uii:bg-gray-50 dark:uii:bg-gray-900` }, /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:flex uii:items-center uii:gap-4 uii:mb-2 uii:flex-wrap\" }, /* @__PURE__ */ React2.createElement(\"span\", { className: \"uii:font-semibold uii:text-sm\" }, \"\\u{1F6E0}\\uFE0F Dev Mode\"), /* @__PURE__ */ React2.createElement(\"span\", { className: \"uii:text-xs uii:text-gray-500\" }, \"Node: \", devCtx.nodeId), /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: () => setShowData(!showData),\n className: \"uii:text-xs uii:px-2 uii:py-1 uii:bg-blue-100 dark:uii:bg-blue-900 uii:rounded hover:uii:bg-blue-200\"\n },\n showData ? \"Hide\" : \"Show\",\n \" Data\"\n ), /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: () => setShowTypeEditor(!showTypeEditor),\n className: \"uii:text-xs uii:px-2 uii:py-1 uii:bg-purple-100 dark:uii:bg-purple-900 uii:rounded hover:uii:bg-purple-200\"\n },\n showTypeEditor ? \"Hide\" : \"Spoof\",\n \" Types\"\n ), /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: () => {\n const json = devCtx.exportData();\n navigator.clipboard.writeText(json);\n alert(\"Data copied to clipboard!\");\n },\n className: \"uii:text-xs uii:px-2 uii:py-1 uii:bg-green-100 dark:uii:bg-green-900 uii:rounded hover:uii:bg-green-200\"\n },\n \"Export\"\n ), /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: () => {\n const json = prompt(\"Paste JSON data:\");\n if (json) devCtx.importData(json);\n },\n className: \"uii:text-xs uii:px-2 uii:py-1 uii:bg-yellow-100 dark:uii:bg-yellow-900 uii:rounded hover:uii:bg-yellow-200\"\n },\n \"Import\"\n ), /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: () => {\n if (confirm(\"Clear all data?\")) devCtx.clearAll();\n },\n className: \"uii:text-xs uii:px-2 uii:py-1 uii:bg-red-100 dark:uii:bg-red-900 uii:rounded hover:uii:bg-red-200\"\n },\n \"Clear\"\n )), showTypeEditor && /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:mt-3 uii:p-3 uii:bg-purple-50 dark:uii:bg-purple-950 uii:rounded-lg uii:border uii:border-purple-200 dark:uii:border-purple-800\" }, /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:text-xs uii:font-medium uii:mb-2 uii:text-purple-700 dark:uii:text-purple-300\" }, \"Spoof Inferred Types (simulate external field types)\"), /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:flex uii:gap-2 uii:mb-2 uii:flex-wrap\" }, /* @__PURE__ */ React2.createElement(\n \"input\",\n {\n type: \"text\",\n placeholder: \"Field name (e.g., switchExpression)\",\n value: newTypeKey,\n onChange: (e) => setNewTypeKey(e.target.value),\n className: \"uii:text-xs uii:px-2 uii:py-1 uii:border uii:rounded uii:flex-1 uii:min-w-[150px] uii:bg-white dark:uii:bg-gray-800\"\n }\n ), /* @__PURE__ */ React2.createElement(\n \"input\",\n {\n type: \"text\",\n placeholder: \"Type (e.g., string | number)\",\n value: newTypeValue,\n onChange: (e) => setNewTypeValue(e.target.value),\n onKeyDown: (e) => e.key === \"Enter\" && handleAddType(),\n className: \"uii:text-xs uii:px-2 uii:py-1 uii:border uii:rounded uii:flex-1 uii:min-w-[200px] uii:bg-white dark:uii:bg-gray-800\"\n }\n ), /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: handleAddType,\n disabled: !newTypeKey.trim() || !newTypeValue.trim(),\n className: \"uii:text-xs uii:px-3 uii:py-1 uii:bg-purple-500 uii:text-white uii:rounded hover:uii:bg-purple-600 disabled:uii:opacity-50 disabled:uii:cursor-not-allowed\"\n },\n \"Add\"\n )), Object.keys(devCtx.inferredTypes).length > 0 && /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:mt-2\" }, /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:flex uii:items-center uii:justify-between uii:mb-1\" }, /* @__PURE__ */ React2.createElement(\"span\", { className: \"uii:text-xs uii:text-gray-500\" }, \"Current inferred types:\"), /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: handleClearAllTypes,\n className: \"uii:text-xs uii:px-2 uii:py-0.5 uii:bg-red-100 dark:uii:bg-red-900 uii:text-red-700 dark:uii:text-red-300 uii:rounded hover:uii:bg-red-200\"\n },\n \"Clear All\"\n )), /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:space-y-1\" }, Object.entries(devCtx.inferredTypes).map(([key, value]) => value && /* @__PURE__ */ React2.createElement(\n \"div\",\n {\n key,\n className: \"uii:flex uii:items-center uii:gap-2 uii:text-xs uii:bg-white dark:uii:bg-gray-800 uii:px-2 uii:py-1 uii:rounded\"\n },\n /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: () => {\n navigator.clipboard.writeText(key);\n },\n className: \"uii:text-gray-400 hover:uii:text-purple-600 uii:text-xs\",\n title: \"Copy field name\"\n },\n \"\\u{1F4CB}\"\n ),\n /* @__PURE__ */ React2.createElement(\n \"span\",\n {\n className: \"uii:font-mono uii:text-purple-600 dark:uii:text-purple-400 uii:cursor-pointer uii:truncate uii:max-w-[300px]\",\n onClick: () => {\n navigator.clipboard.writeText(key);\n },\n title: key\n },\n key\n ),\n /* @__PURE__ */ React2.createElement(\"span\", { className: \"uii:text-gray-400\" }, \"\\u2192\"),\n /* @__PURE__ */ React2.createElement(\"span\", { className: \"uii:font-mono uii:text-gray-600 dark:uii:text-gray-300 uii:flex-1 uii:truncate\" }, value),\n /* @__PURE__ */ React2.createElement(\n \"button\",\n {\n onClick: () => handleRemoveType(key),\n className: \"uii:text-red-500 hover:uii:text-red-700 uii:text-xs\",\n title: \"Remove\"\n },\n \"\\u2715\"\n )\n ))))), showData && /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:mt-2\" }, /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:text-xs uii:mb-1 uii:font-medium\" }, \"Data:\"), /* @__PURE__ */ React2.createElement(\"pre\", { className: \"uii:text-xs uii:bg-gray-100 dark:uii:bg-gray-800 uii:p-2 uii:rounded uii:overflow-auto uii:max-h-48\" }, JSON.stringify(devCtx.data, null, 2)), /* @__PURE__ */ React2.createElement(\"div\", { className: \"uii:text-xs uii:mb-1 uii:mt-2 uii:font-medium\" }, \"Inferred Types:\"), /* @__PURE__ */ React2.createElement(\"pre\", { className: \"uii:text-xs uii:bg-gray-100 dark:uii:bg-gray-800 uii:p-2 uii:rounded uii:overflow-auto uii:max-h-24\" }, JSON.stringify(devCtx.inferredTypes, null, 2))));\n}\n\nexport { DevContext, DevProvider, DevToolbar, useDevContext, useInferredTypes, useNodeProperty };\n//# sourceMappingURL=index.js.map\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useEffect, useMemo, type PropsWithChildren } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Configuration for the DevProvider\n */\nexport interface DevProviderConfig {\n /** Unique key for localStorage persistence (defaults to 'process-dev') */\n storageKey?: string;\n /** Initial data to populate the store */\n initialData?: Record<string, any>;\n /** Whether to persist to localStorage (default: true) */\n persist?: boolean;\n /** Mock node ID (default: 'dev-node-1') */\n nodeId?: string;\n}\n\n/**\n * Context value for development/testing\n */\nexport interface DevContextValue {\n // Node property store\n data: Record<string, any>;\n setProperty: (key: string, value: any) => void;\n getProperty: <T = any>(key: string) => T | undefined;\n \n // Inferred types\n inferredTypes: Record<string, string>;\n setInferredType: (fieldName: string, type: string) => void;\n getInferredType: (fieldName: string) => string | undefined;\n /** Remove an inferred type by field name */\n clearInferredType: (fieldName: string) => void;\n /** Remove all inferred types */\n clearAllInferredTypes: () => void;\n \n // Metadata\n nodeId: string;\n \n // Utilities\n clearAll: () => void;\n exportData: () => string;\n importData: (json: string) => void;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nexport const DevContext = createContext<DevContextValue | null>(null);\n\n/**\n * Hook to access the dev context for property management\n */\nexport function useDevContext(): DevContextValue | null {\n return useContext(DevContext);\n}\n\n/**\n * Hook that mimics useNodeProperty from the real system\n * Works in both dev mode (with DevProvider) and production (with NodePropertyProvider)\n */\nexport function useNodeProperty<T = any>(fieldName: string): [T | undefined, (value: T) => void] {\n const devCtx = useDevContext();\n \n if (devCtx) {\n // Dev mode - use local state with persistence\n const value = devCtx.getProperty<T>(fieldName);\n const setValue = useCallback((newValue: T) => {\n devCtx.setProperty(fieldName, newValue);\n }, [devCtx, fieldName]);\n \n return [value, setValue];\n }\n \n // Not in dev mode - this is a fallback, real implementation should be provided by host\n console.warn(`useNodeProperty('${fieldName}') called outside of DevProvider - returning undefined`);\n const [localValue, setLocalValue] = useState<T | undefined>(undefined);\n return [localValue, setLocalValue];\n}\n\n/**\n * Hook that mimics useInferredTypes from the real system\n */\nexport function useInferredTypes() {\n const devCtx = useDevContext();\n \n if (devCtx) {\n return {\n inferredTypes: devCtx.inferredTypes,\n setInferredType: devCtx.setInferredType,\n getInferredType: devCtx.getInferredType,\n };\n }\n \n // Not in dev mode - return null (components should handle this gracefully)\n return null;\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\n/**\n * DevProvider - Development environment for testing custom UI components\n * \n * Features:\n * - Persists data to localStorage\n * - Provides mock implementations of useNodeProperty and useInferredTypes\n * - Supports import/export of data for testing scenarios\n * \n * Usage:\n * ```tsx\n * import { DevProvider } from '@process.co/ui/dev';\n * \n * function App() {\n * return (\n * <DevProvider \n * storageKey=\"my-component-dev\"\n * initialData={{ switchValue: { cases: [] } }}\n * >\n * <MyCustomComponent fieldName=\"switchValue\" />\n * </DevProvider>\n * );\n * }\n * ```\n */\nexport function DevProvider({\n children, \n storageKey = 'process-dev',\n initialData = {},\n persist = true,\n nodeId = 'dev-node-1',\n}: PropsWithChildren<DevProviderConfig>) {\n \n // ========== Property Store ==========\n const [data, setData] = useState<Record<string, any>>(() => {\n // Try to load from localStorage first\n if (persist && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`${storageKey}:data`);\n if (stored) {\n return { ...initialData, ...JSON.parse(stored) };\n }\n } catch (e) {\n console.warn('DevProvider: Failed to load from localStorage', e);\n }\n }\n return initialData;\n });\n \n // ========== Inferred Types ==========\n const [inferredTypes, setInferredTypesState] = useState<Record<string, string>>(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`${storageKey}:inferredTypes`);\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (e) {\n console.warn('DevProvider: Failed to load inferredTypes from localStorage', e);\n }\n }\n return {};\n });\n \n // ========== Persist to localStorage ==========\n useEffect(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n localStorage.setItem(`${storageKey}:data`, JSON.stringify(data));\n } catch (e) {\n console.warn('DevProvider: Failed to save data to localStorage', e);\n }\n }\n }, [data, storageKey, persist]);\n \n useEffect(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n localStorage.setItem(`${storageKey}:inferredTypes`, JSON.stringify(inferredTypes));\n } catch (e) {\n console.warn('DevProvider: Failed to save inferredTypes to localStorage', e);\n }\n }\n }, [inferredTypes, storageKey, persist]);\n \n // ========== Property Methods ==========\n const setProperty = useCallback((key: string, value: any) => {\n setData(prev => ({ ...prev, [key]: value }));\n }, []);\n \n const getProperty = useCallback(<T = any>(key: string): T | undefined => {\n return data[key] as T | undefined;\n }, [data]);\n \n // ========== Inferred Types Methods ==========\n const setInferredType = useCallback((fieldName: string, type: string) => {\n setInferredTypesState(prev => ({ ...prev, [fieldName]: type }));\n }, []);\n \n const getInferredType = useCallback((fieldName: string): string | undefined => {\n return inferredTypes[fieldName];\n }, [inferredTypes]);\n \n const clearInferredType = useCallback((fieldName: string) => {\n setInferredTypesState(prev => {\n const { [fieldName]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n \n const clearAllInferredTypes = useCallback(() => {\n setInferredTypesState({});\n }, []);\n \n // ========== Utility Methods ==========\n const clearAll = useCallback(() => {\n setData({});\n setInferredTypesState({});\n if (persist && typeof window !== 'undefined') {\n localStorage.removeItem(`${storageKey}:data`);\n localStorage.removeItem(`${storageKey}:inferredTypes`);\n }\n }, [storageKey, persist]);\n \n const exportData = useCallback(() => {\n return JSON.stringify({ data, inferredTypes }, null, 2);\n }, [data, inferredTypes]);\n \n const importData = useCallback((json: string) => {\n try {\n const parsed = JSON.parse(json);\n if (parsed.data) setData(parsed.data);\n if (parsed.inferredTypes) setInferredTypesState(parsed.inferredTypes);\n } catch (e) {\n console.error('DevProvider: Failed to import data', e);\n }\n }, []);\n \n // ========== Context Value ==========\n const value = useMemo<DevContextValue>(() => ({\n data,\n setProperty,\n getProperty,\n inferredTypes,\n setInferredType,\n getInferredType,\n clearInferredType,\n clearAllInferredTypes,\n nodeId,\n clearAll,\n exportData,\n importData,\n }), [data, setProperty, getProperty, inferredTypes, setInferredType, getInferredType, clearInferredType, clearAllInferredTypes, nodeId, clearAll, exportData, importData]);\n \n return (\n <DevContext.Provider value={value}>\n {children}\n </DevContext.Provider>\n );\n}\n\nexport default DevProvider;\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useDevContext } from './DevProvider';\n// Note: CSS is provided by consumer via `import '@process.co/ui/styles'`\n\n/**\n * DevToolbar - Optional toolbar for development\n * Shows current data state and provides controls for import/export/clear\n * Also allows spoofing inferred types for testing components that depend on external field types\n */\nexport function DevToolbar({ className }: { className?: string }) {\n const devCtx = useDevContext();\n const [showData, setShowData] = useState(false);\n const [showTypeEditor, setShowTypeEditor] = useState(false);\n const [newTypeKey, setNewTypeKey] = useState('');\n const [newTypeValue, setNewTypeValue] = useState('');\n \n if (!devCtx) {\n return <div className={className}>DevToolbar: Not inside DevProvider</div>;\n }\n\n const handleAddType = () => {\n if (newTypeKey.trim() && newTypeValue.trim()) {\n devCtx.setInferredType(newTypeKey.trim(), newTypeValue.trim());\n setNewTypeKey('');\n setNewTypeValue('');\n }\n };\n\n const handleRemoveType = (key: string) => {\n devCtx.clearInferredType(key);\n };\n\n const handleClearAllTypes = () => {\n if (confirm('Clear all inferred types?')) {\n devCtx.clearAllInferredTypes();\n }\n };\n \n return (\n <div className={`${className || ''} uii:border uii:rounded-lg uii:p-4 uii:bg-gray-50 dark:uii:bg-gray-900`}>\n <div className=\"uii:flex uii:items-center uii:gap-4 uii:mb-2 uii:flex-wrap\">\n <span className=\"uii:font-semibold uii:text-sm\">🛠️ Dev Mode</span>\n <span className=\"uii:text-xs uii:text-gray-500\">Node: {devCtx.nodeId}</span>\n <button \n onClick={() => setShowData(!showData)}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-blue-100 dark:uii:bg-blue-900 uii:rounded hover:uii:bg-blue-200\"\n >\n {showData ? 'Hide' : 'Show'} Data\n </button>\n <button \n onClick={() => setShowTypeEditor(!showTypeEditor)}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-purple-100 dark:uii:bg-purple-900 uii:rounded hover:uii:bg-purple-200\"\n >\n {showTypeEditor ? 'Hide' : 'Spoof'} Types\n </button>\n <button \n onClick={() => {\n const json = devCtx.exportData();\n navigator.clipboard.writeText(json);\n alert('Data copied to clipboard!');\n }}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-green-100 dark:uii:bg-green-900 uii:rounded hover:uii:bg-green-200\"\n >\n Export\n </button>\n <button \n onClick={() => {\n const json = prompt('Paste JSON data:');\n if (json) devCtx.importData(json);\n }}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-yellow-100 dark:uii:bg-yellow-900 uii:rounded hover:uii:bg-yellow-200\"\n >\n Import\n </button>\n <button \n onClick={() => {\n if (confirm('Clear all data?')) devCtx.clearAll();\n }}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-red-100 dark:uii:bg-red-900 uii:rounded hover:uii:bg-red-200\"\n >\n Clear\n </button>\n </div>\n\n {/* Inferred Types Spoofing Section */}\n {showTypeEditor && (\n <div className=\"uii:mt-3 uii:p-3 uii:bg-purple-50 dark:uii:bg-purple-950 uii:rounded-lg uii:border uii:border-purple-200 dark:uii:border-purple-800\">\n <div className=\"uii:text-xs uii:font-medium uii:mb-2 uii:text-purple-700 dark:uii:text-purple-300\">\n Spoof Inferred Types (simulate external field types)\n </div>\n \n {/* Add new type */}\n <div className=\"uii:flex uii:gap-2 uii:mb-2 uii:flex-wrap\">\n <input\n type=\"text\"\n placeholder=\"Field name (e.g., switchExpression)\"\n value={newTypeKey}\n onChange={(e) => setNewTypeKey(e.target.value)}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:border uii:rounded uii:flex-1 uii:min-w-[150px] uii:bg-white dark:uii:bg-gray-800\"\n />\n <input\n type=\"text\"\n placeholder=\"Type (e.g., string | number)\"\n value={newTypeValue}\n onChange={(e) => setNewTypeValue(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleAddType()}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:border uii:rounded uii:flex-1 uii:min-w-[200px] uii:bg-white dark:uii:bg-gray-800\"\n />\n <button\n onClick={handleAddType}\n disabled={!newTypeKey.trim() || !newTypeValue.trim()}\n className=\"uii:text-xs uii:px-3 uii:py-1 uii:bg-purple-500 uii:text-white uii:rounded hover:uii:bg-purple-600 disabled:uii:opacity-50 disabled:uii:cursor-not-allowed\"\n >\n Add\n </button>\n </div>\n\n {/* Current inferred types */}\n {Object.keys(devCtx.inferredTypes).length > 0 && (\n <div className=\"uii:mt-2\">\n <div className=\"uii:flex uii:items-center uii:justify-between uii:mb-1\">\n <span className=\"uii:text-xs uii:text-gray-500\">Current inferred types:</span>\n <button\n onClick={handleClearAllTypes}\n className=\"uii:text-xs uii:px-2 uii:py-0.5 uii:bg-red-100 dark:uii:bg-red-900 uii:text-red-700 dark:uii:text-red-300 uii:rounded hover:uii:bg-red-200\"\n >\n Clear All\n </button>\n </div>\n <div className=\"uii:space-y-1\">\n {Object.entries(devCtx.inferredTypes).map(([key, value]) => (\n value && (\n <div \n key={key}\n className=\"uii:flex uii:items-center uii:gap-2 uii:text-xs uii:bg-white dark:uii:bg-gray-800 uii:px-2 uii:py-1 uii:rounded\"\n >\n <button\n onClick={() => {\n navigator.clipboard.writeText(key);\n }}\n className=\"uii:text-gray-400 hover:uii:text-purple-600 uii:text-xs\"\n title=\"Copy field name\"\n >\n 📋\n </button>\n <span \n className=\"uii:font-mono uii:text-purple-600 dark:uii:text-purple-400 uii:cursor-pointer uii:truncate uii:max-w-[300px]\"\n onClick={() => {\n navigator.clipboard.writeText(key);\n }}\n title={key}\n >\n {key}\n </span>\n <span className=\"uii:text-gray-400\">→</span>\n <span className=\"uii:font-mono uii:text-gray-600 dark:uii:text-gray-300 uii:flex-1 uii:truncate\">{value}</span>\n <button\n onClick={() => handleRemoveType(key)}\n className=\"uii:text-red-500 hover:uii:text-red-700 uii:text-xs\"\n title=\"Remove\"\n >\n ✕\n </button>\n </div>\n )\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n \n {showData && (\n <div className=\"uii:mt-2\">\n <div className=\"uii:text-xs uii:mb-1 uii:font-medium\">Data:</div>\n <pre className=\"uii:text-xs uii:bg-gray-100 dark:uii:bg-gray-800 uii:p-2 uii:rounded uii:overflow-auto uii:max-h-48\">\n {JSON.stringify(devCtx.data, null, 2)}\n </pre>\n <div className=\"uii:text-xs uii:mb-1 uii:mt-2 uii:font-medium\">Inferred Types:</div>\n <pre className=\"uii:text-xs uii:bg-gray-100 dark:uii:bg-gray-800 uii:p-2 uii:rounded uii:overflow-auto uii:max-h-24\">\n {JSON.stringify(devCtx.inferredTypes, null, 2)}\n </pre>\n </div>\n )}\n </div>\n );\n}\n\nexport default DevToolbar;\n"]}
1
+ {"version":3,"sources":["../../../src/components/dev/DevProvider.tsx","../../../src/components/dev/DevToolbar.tsx"],"names":["value","React","useState"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useEffect, useMemo, type PropsWithChildren } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Configuration for the DevProvider\n */\nexport interface DevProviderConfig {\n /** Unique key for localStorage persistence (defaults to 'process-dev') */\n storageKey?: string;\n /** Initial data to populate the store */\n initialData?: Record<string, any>;\n /** Whether to persist to localStorage (default: true) */\n persist?: boolean;\n /** Mock node ID (default: 'dev-node-1') */\n nodeId?: string;\n}\n\n/**\n * Context value for development/testing\n */\nexport interface DevContextValue {\n // Node property store\n data: Record<string, any>;\n setProperty: (key: string, value: any) => void;\n getProperty: <T = any>(key: string) => T | undefined;\n \n // Inferred types\n inferredTypes: Record<string, string>;\n setInferredType: (fieldName: string, type: string) => void;\n getInferredType: (fieldName: string) => string | undefined;\n /** Remove an inferred type by field name */\n clearInferredType: (fieldName: string) => void;\n /** Remove all inferred types */\n clearAllInferredTypes: () => void;\n \n // Metadata\n nodeId: string;\n \n // Utilities\n clearAll: () => void;\n exportData: () => string;\n importData: (json: string) => void;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nexport const DevContext = createContext<DevContextValue | null>(null);\n\n/**\n * Hook to access the dev context for property management\n */\nexport function useDevContext(): DevContextValue | null {\n return useContext(DevContext);\n}\n\n/**\n * Hook that mimics useNodeProperty from the real system\n * Works in both dev mode (with DevProvider) and production (with NodePropertyProvider)\n */\nexport function useNodeProperty<T = any>(fieldName: string): [T | undefined, (value: T) => void] {\n const devCtx = useDevContext();\n \n if (devCtx) {\n // Dev mode - use local state with persistence\n const value = devCtx.getProperty<T>(fieldName);\n const setValue = useCallback((newValue: T) => {\n devCtx.setProperty(fieldName, newValue);\n }, [devCtx, fieldName]);\n \n return [value, setValue];\n }\n \n // Not in dev mode - this is a fallback, real implementation should be provided by host\n console.warn(`useNodeProperty('${fieldName}') called outside of DevProvider - returning undefined`);\n const [localValue, setLocalValue] = useState<T | undefined>(undefined);\n return [localValue, setLocalValue];\n}\n\n/**\n * Hook that mimics useInferredTypes from the real system\n */\nexport function useInferredTypes() {\n const devCtx = useDevContext();\n \n if (devCtx) {\n return {\n inferredTypes: devCtx.inferredTypes,\n setInferredType: devCtx.setInferredType,\n getInferredType: devCtx.getInferredType,\n };\n }\n \n // Not in dev mode - return null (components should handle this gracefully)\n return null;\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\n/**\n * DevProvider - Development environment for testing custom UI components\n * \n * Features:\n * - Persists data to localStorage\n * - Provides mock implementations of useNodeProperty and useInferredTypes\n * - Supports import/export of data for testing scenarios\n * \n * Usage:\n * ```tsx\n * import { DevProvider } from '@process.co/ui/dev';\n * \n * function App() {\n * return (\n * <DevProvider \n * storageKey=\"my-component-dev\"\n * initialData={{ switchValue: { cases: [] } }}\n * >\n * <MyCustomComponent fieldName=\"switchValue\" />\n * </DevProvider>\n * );\n * }\n * ```\n */\nexport function DevProvider({\n children, \n storageKey = 'process-dev',\n initialData = {},\n persist = true,\n nodeId = 'dev-node-1',\n}: PropsWithChildren<DevProviderConfig>) {\n \n // ========== Property Store ==========\n const [data, setData] = useState<Record<string, any>>(() => {\n // Try to load from localStorage first\n if (persist && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`${storageKey}:data`);\n if (stored) {\n return { ...initialData, ...JSON.parse(stored) };\n }\n } catch (e) {\n console.warn('DevProvider: Failed to load from localStorage', e);\n }\n }\n return initialData;\n });\n \n // ========== Inferred Types ==========\n const [inferredTypes, setInferredTypesState] = useState<Record<string, string>>(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`${storageKey}:inferredTypes`);\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (e) {\n console.warn('DevProvider: Failed to load inferredTypes from localStorage', e);\n }\n }\n return {};\n });\n \n // ========== Persist to localStorage ==========\n useEffect(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n localStorage.setItem(`${storageKey}:data`, JSON.stringify(data));\n } catch (e) {\n console.warn('DevProvider: Failed to save data to localStorage', e);\n }\n }\n }, [data, storageKey, persist]);\n \n useEffect(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n localStorage.setItem(`${storageKey}:inferredTypes`, JSON.stringify(inferredTypes));\n } catch (e) {\n console.warn('DevProvider: Failed to save inferredTypes to localStorage', e);\n }\n }\n }, [inferredTypes, storageKey, persist]);\n \n // ========== Property Methods ==========\n const setProperty = useCallback((key: string, value: any) => {\n setData(prev => ({ ...prev, [key]: value }));\n }, []);\n \n const getProperty = useCallback(<T = any>(key: string): T | undefined => {\n return data[key] as T | undefined;\n }, [data]);\n \n // ========== Inferred Types Methods ==========\n const setInferredType = useCallback((fieldName: string, type: string) => {\n setInferredTypesState(prev => ({ ...prev, [fieldName]: type }));\n }, []);\n \n const getInferredType = useCallback((fieldName: string): string | undefined => {\n return inferredTypes[fieldName];\n }, [inferredTypes]);\n \n const clearInferredType = useCallback((fieldName: string) => {\n setInferredTypesState(prev => {\n const { [fieldName]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n \n const clearAllInferredTypes = useCallback(() => {\n setInferredTypesState({});\n }, []);\n \n // ========== Utility Methods ==========\n const clearAll = useCallback(() => {\n setData({});\n setInferredTypesState({});\n if (persist && typeof window !== 'undefined') {\n localStorage.removeItem(`${storageKey}:data`);\n localStorage.removeItem(`${storageKey}:inferredTypes`);\n }\n }, [storageKey, persist]);\n \n const exportData = useCallback(() => {\n return JSON.stringify({ data, inferredTypes }, null, 2);\n }, [data, inferredTypes]);\n \n const importData = useCallback((json: string) => {\n try {\n const parsed = JSON.parse(json);\n if (parsed.data) setData(parsed.data);\n if (parsed.inferredTypes) setInferredTypesState(parsed.inferredTypes);\n } catch (e) {\n console.error('DevProvider: Failed to import data', e);\n }\n }, []);\n \n // ========== Context Value ==========\n const value = useMemo<DevContextValue>(() => ({\n data,\n setProperty,\n getProperty,\n inferredTypes,\n setInferredType,\n getInferredType,\n clearInferredType,\n clearAllInferredTypes,\n nodeId,\n clearAll,\n exportData,\n importData,\n }), [data, setProperty, getProperty, inferredTypes, setInferredType, getInferredType, clearInferredType, clearAllInferredTypes, nodeId, clearAll, exportData, importData]);\n \n return (\n <DevContext.Provider value={value}>\n {children}\n </DevContext.Provider>\n );\n}\n\nexport default DevProvider;\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useDevContext } from './DevProvider';\n// Note: CSS is provided by consumer via `import '@process.co/ui/styles'`\n\n/**\n * DevToolbar - Optional toolbar for development\n * Shows current data state and provides controls for import/export/clear\n * Also allows spoofing inferred types for testing components that depend on external field types\n */\nexport function DevToolbar({ className }: { className?: string }) {\n const devCtx = useDevContext();\n const [showData, setShowData] = useState(false);\n const [showTypeEditor, setShowTypeEditor] = useState(false);\n const [newTypeKey, setNewTypeKey] = useState('');\n const [newTypeValue, setNewTypeValue] = useState('');\n \n if (!devCtx) {\n return <div className={className}>DevToolbar: Not inside DevProvider</div>;\n }\n\n const handleAddType = () => {\n if (newTypeKey.trim() && newTypeValue.trim()) {\n devCtx.setInferredType(newTypeKey.trim(), newTypeValue.trim());\n setNewTypeKey('');\n setNewTypeValue('');\n }\n };\n\n const handleRemoveType = (key: string) => {\n devCtx.clearInferredType(key);\n };\n\n const handleClearAllTypes = () => {\n if (confirm('Clear all inferred types?')) {\n devCtx.clearAllInferredTypes();\n }\n };\n \n return (\n <div className={`${className || ''} uii:border uii:rounded-lg uii:p-4 uii:bg-gray-50 dark:uii:bg-gray-900`}>\n <div className=\"uii:flex uii:items-center uii:gap-4 uii:mb-2 uii:flex-wrap\">\n <span className=\"uii:font-semibold uii:text-sm\">🛠️ Dev Mode</span>\n <span className=\"uii:text-xs uii:text-gray-500\">Node: {devCtx.nodeId}</span>\n <button \n onClick={() => setShowData(!showData)}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-blue-100 dark:uii:bg-blue-900 uii:rounded hover:uii:bg-blue-200\"\n >\n {showData ? 'Hide' : 'Show'} Data\n </button>\n <button \n onClick={() => setShowTypeEditor(!showTypeEditor)}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-purple-100 dark:uii:bg-purple-900 uii:rounded hover:uii:bg-purple-200\"\n >\n {showTypeEditor ? 'Hide' : 'Spoof'} Types\n </button>\n <button \n onClick={() => {\n const json = devCtx.exportData();\n navigator.clipboard.writeText(json);\n alert('Data copied to clipboard!');\n }}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-green-100 dark:uii:bg-green-900 uii:rounded hover:uii:bg-green-200\"\n >\n Export\n </button>\n <button \n onClick={() => {\n const json = prompt('Paste JSON data:');\n if (json) devCtx.importData(json);\n }}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-yellow-100 dark:uii:bg-yellow-900 uii:rounded hover:uii:bg-yellow-200\"\n >\n Import\n </button>\n <button \n onClick={() => {\n if (confirm('Clear all data?')) devCtx.clearAll();\n }}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-red-100 dark:uii:bg-red-900 uii:rounded hover:uii:bg-red-200\"\n >\n Clear\n </button>\n </div>\n\n {/* Inferred Types Spoofing Section */}\n {showTypeEditor && (\n <div className=\"uii:mt-3 uii:p-3 uii:bg-purple-50 dark:uii:bg-purple-950 uii:rounded-lg uii:border uii:border-purple-200 dark:uii:border-purple-800\">\n <div className=\"uii:text-xs uii:font-medium uii:mb-2 uii:text-purple-700 dark:uii:text-purple-300\">\n Spoof Inferred Types (simulate external field types)\n </div>\n \n {/* Add new type */}\n <div className=\"uii:flex uii:gap-2 uii:mb-2 uii:flex-wrap\">\n <input\n type=\"text\"\n placeholder=\"Field name (e.g., switchExpression)\"\n value={newTypeKey}\n onChange={(e) => setNewTypeKey(e.target.value)}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:border uii:rounded uii:flex-1 uii:min-w-[150px] uii:bg-white dark:uii:bg-gray-800\"\n />\n <input\n type=\"text\"\n placeholder=\"Type (e.g., string | number)\"\n value={newTypeValue}\n onChange={(e) => setNewTypeValue(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleAddType()}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:border uii:rounded uii:flex-1 uii:min-w-[200px] uii:bg-white dark:uii:bg-gray-800\"\n />\n <button\n onClick={handleAddType}\n disabled={!newTypeKey.trim() || !newTypeValue.trim()}\n className=\"uii:text-xs uii:px-3 uii:py-1 uii:bg-purple-500 uii:text-white uii:rounded hover:uii:bg-purple-600 disabled:uii:opacity-50 disabled:uii:cursor-not-allowed\"\n >\n Add\n </button>\n </div>\n\n {/* Current inferred types */}\n {Object.keys(devCtx.inferredTypes).length > 0 && (\n <div className=\"uii:mt-2\">\n <div className=\"uii:flex uii:items-center uii:justify-between uii:mb-1\">\n <span className=\"uii:text-xs uii:text-gray-500\">Current inferred types:</span>\n <button\n onClick={handleClearAllTypes}\n className=\"uii:text-xs uii:px-2 uii:py-0.5 uii:bg-red-100 dark:uii:bg-red-900 uii:text-red-700 dark:uii:text-red-300 uii:rounded hover:uii:bg-red-200\"\n >\n Clear All\n </button>\n </div>\n <div className=\"uii:space-y-1\">\n {Object.entries(devCtx.inferredTypes).map(([key, value]) => (\n value && (\n <div \n key={key}\n className=\"uii:flex uii:items-center uii:gap-2 uii:text-xs uii:bg-white dark:uii:bg-gray-800 uii:px-2 uii:py-1 uii:rounded\"\n >\n <button\n onClick={() => {\n navigator.clipboard.writeText(key);\n }}\n className=\"uii:text-gray-400 hover:uii:text-purple-600 uii:text-xs\"\n title=\"Copy field name\"\n >\n 📋\n </button>\n <span \n className=\"uii:font-mono uii:text-purple-600 dark:uii:text-purple-400 uii:cursor-pointer uii:truncate uii:max-w-[300px]\"\n onClick={() => {\n navigator.clipboard.writeText(key);\n }}\n title={key}\n >\n {key}\n </span>\n <span className=\"uii:text-gray-400\">→</span>\n <span className=\"uii:font-mono uii:text-gray-600 dark:uii:text-gray-300 uii:flex-1 uii:truncate\">{value}</span>\n <button\n onClick={() => handleRemoveType(key)}\n className=\"uii:text-red-500 hover:uii:text-red-700 uii:text-xs\"\n title=\"Remove\"\n >\n ✕\n </button>\n </div>\n )\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n \n {showData && (\n <div className=\"uii:mt-2\">\n <div className=\"uii:text-xs uii:mb-1 uii:font-medium\">Data:</div>\n <pre className=\"uii:text-xs uii:bg-gray-100 dark:uii:bg-gray-800 uii:p-2 uii:rounded uii:overflow-auto uii:max-h-48\">\n {JSON.stringify(devCtx.data, null, 2)}\n </pre>\n <div className=\"uii:text-xs uii:mb-1 uii:mt-2 uii:font-medium\">Inferred Types:</div>\n <pre className=\"uii:text-xs uii:bg-gray-100 dark:uii:bg-gray-800 uii:p-2 uii:rounded uii:overflow-auto uii:max-h-24\">\n {JSON.stringify(devCtx.inferredTypes, null, 2)}\n </pre>\n </div>\n )}\n </div>\n );\n}\n\nexport default DevToolbar;\n"]}