@process.co/ui 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/ui.css +48 -0
- package/dist/components/dev/index.cjs +213 -7
- package/dist/components/dev/index.cjs.map +1 -1
- package/dist/components/dev/index.d.cts +64 -3
- package/dist/components/dev/index.d.ts +64 -3
- package/dist/components/dev/index.js +214 -9
- package/dist/components/dev/index.js.map +1 -1
- package/dist/components/fields/index.cjs.map +1 -1
- package/dist/components/fields/index.js.map +1 -1
- package/dist/components/slots/index.cjs +1088 -92
- package/dist/components/slots/index.cjs.map +1 -1
- package/dist/components/slots/index.d.cts +1 -1
- package/dist/components/slots/index.d.ts +1 -1
- package/dist/components/slots/index.js +1088 -90
- package/dist/components/slots/index.js.map +1 -1
- package/dist/{index-NpNmoYuX.d.cts → index-D4Fc9AJv.d.cts} +15 -2
- package/dist/{index-NpNmoYuX.d.ts → index-D4Fc9AJv.d.ts} +15 -2
- package/dist/index.cjs +1028 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1029 -32
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/dev/DevProvider.tsx","../../../src/components/dev/DevToolbar.tsx"],"names":["value","React","useState","useMemo"],"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 * Optional config for slot/case awareness in dev.\n * Each control type can have unique data shape; getSlots interprets the field value and returns slot options.\n */\nexport interface DevSlotConfig {\n /** Property key (field) whose value holds the slot data (e.g. 'switchValue' or 'cases'). When set, getSlots and activeIdPath are applied to data[field]. */\n field?: string;\n /** Path (relative to the field value when field is set) where we store the active slot id in dev. This is mocked in dev only; we do not use the element definition's slots.activeSlotId (e.g. $.results.pathId). */\n activeIdPath: string;\n /**\n * Given the field value (or full data when field is unset), return the list of slots for the Active path/case selector.\n * Enables any control-specific shape (e.g. value.cases.cases, value.branches, etc.).\n */\n getSlots: (fieldValueOrData: Record<string, any>) => { id: string; label: string }[];\n}\n\n/** Preset for slot/case awareness (legacy); prefer deriving from elementDefinition.slots. */\nexport type SlotPreset = 'switch' | 'cases' | 'branches';\n\n// ---------- Path evaluation (match layout.ts semantics for $.data.xxx paths) ----------\n// Definition paths: $.data.cases.cases[*] = collection of slots ([*] = ordinal index).\n// idPath \"$.data.cases.cases[*].id\" => slot i has id collection[i].id (e.g. cases.cases[0].id, cases.cases[1].id).\n// In dev, $.data === data[propertyKey] (e.g. devField); flat shape devField.cases is supported via fallback.\nfunction evaluateSimplePath(obj: any, path: string): any {\n if (!path || !obj) return undefined;\n const cleanPath = path.startsWith('$.') ? path.slice(2) : path.startsWith('$') ? path.slice(1) : path;\n const parts = cleanPath.split('.');\n let current = obj.data ?? obj;\n for (const part of parts) {\n if (current == null) return undefined;\n const cleanPart = part.replace(/\\[\\*\\]$/, '');\n if (cleanPart) current = current[cleanPart];\n }\n return current;\n}\n\nfunction evaluateCollectionPath(obj: any, path: string): any[] {\n if (!path || !obj) return [];\n let cleanPath = path.startsWith('$.') ? path.slice(2) : path.startsWith('$') ? path.slice(1) : path;\n cleanPath = cleanPath.replace(/\\[\\*\\]$/, '');\n const parts = cleanPath.split('.');\n let current = obj.data ?? obj;\n for (const part of parts) {\n if (current == null) return [];\n if (part) current = current[part];\n }\n if (Array.isArray(current)) return current;\n // Fallback: definition may say .cases.cases[*] but dev data has .cases as the array (flat shape).\n // Navigate from obj (root) so \"data.cases\" yields obj.data.cases, not obj.data[\"data\"].\n if (parts.length >= 2) {\n const parentPath = parts.slice(0, -1).join('.');\n let parent: any = obj;\n for (const part of parentPath.split('.')) {\n if (parent == null) return [];\n if (part) parent = parent[part];\n }\n if (Array.isArray(parent)) return parent;\n }\n return [];\n}\n\nfunction evaluateItemPath(item: any, fullPath: string, _index: number): any {\n if (!fullPath || item == null) return undefined;\n const wildcardIndex = fullPath.indexOf('[*]');\n if (wildcardIndex === -1) return evaluateSimplePath(item, fullPath);\n const afterWildcard = fullPath.slice(wildcardIndex + 3);\n if (!afterWildcard || afterWildcard === '') return item;\n const propertyPath = afterWildcard.startsWith('.') ? afterWildcard.slice(1) : afterWildcard;\n const parts = propertyPath.split('.');\n let current = item;\n for (const part of parts) {\n if (current == null) return undefined;\n current = current[part];\n }\n return current;\n}\n\n/** Extract property name from slot paths (e.g. $.data.cases.cases[*] -> \"cases\"). Matches the prop that has the UI (e.g. cases with ui.switch). */\nfunction deriveFieldFromSlotsDefinition(slotsConfig: any[]): string | undefined {\n for (const slot of slotsConfig) {\n const path = slot.path ?? slot.idPath ?? slot.labelPath;\n if (typeof path !== 'string') continue;\n const afterData = path.replace(/^\\$\\.data\\./, '').replace(/^\\$\\./, '');\n const firstSegment = afterData.split('.')[0];\n if (firstSegment) return firstSegment;\n }\n return undefined;\n}\n\n/** From definition props, get the key of the prop that has the given UI (e.g. \"ui.switch\") or that matches the slots field. */\nfunction deriveControlPropertyKey(\n def: ElementDefinition | null | undefined,\n slotsField: string | undefined\n): string | undefined {\n const props = def?.props;\n if (!props) return slotsField;\n const arr = Array.isArray(props) ? props : Object.keys(props).map((k) => ({ key: k, ...(props as any)[k] }));\n const withUi = arr.find((p: any) => p?.ui != null);\n const matchKey = slotsField ? arr.find((p: any) => p?.key === slotsField) : withUi;\n return (matchKey?.key ?? withUi?.key ?? slotsField) as string | undefined;\n}\n\n/**\n * Action/signal definition shape (defineAction): optional slots, initValue, props.\n * Used to derive slotConfig and optionally initialData.\n */\nexport interface ElementDefinition {\n slots?: { slots?: any[]; activeSlotId?: string; [k: string]: any };\n initValue?: Record<string, any>;\n props?: Record<string, any>;\n [k: string]: any;\n}\n\nfunction isDynamicSlot(slot: any): boolean {\n if (slot.type === 'dynamic') return true;\n const path = slot.path ?? slot.idPath ?? slot.labelPath ?? '';\n return typeof path === 'string' && path.includes('[*]');\n}\n\n/** Normalized slot definition (static or dynamic) in definition order. */\ninterface SlotDefinition {\n type: 'static' | 'dynamic';\n path?: string;\n idPath?: string;\n labelPath?: string;\n id?: string;\n label?: string;\n labelPlaceholderValue?: string;\n [k: string]: any;\n}\n\n/** Pass 1: Derive ordered slot definitions from the definition. Preserves order (e.g. static first, dynamic middle, static default). */\nfunction getSlotDefinitions(slotsConfig: any[]): SlotDefinition[] {\n return slotsConfig.map((slot) => ({\n ...slot,\n type: isDynamicSlot(slot) ? 'dynamic' : 'static',\n }));\n}\n\n/** Rewrite definition path when node.data = control value (e.g. devField). $.data.cases.xxx -> $.xxx so the evaluator (which starts at obj.data) only applies the rest, e.g. \"cases[*]\". */\nfunction rewritePathForControlBase(path: string, definitionPropertyKey: string | undefined): string {\n if (!path || !definitionPropertyKey) return path;\n const afterData = path.replace(/^\\$\\.data\\./, '');\n if (!afterData.startsWith(definitionPropertyKey + '.')) return path;\n const rest = afterData.slice(definitionPropertyKey.length + 1);\n return rest ? '$.' + rest : path;\n}\n\n/** Pass 2: Resolve slot definitions against current node data to build the toolbar list. */\nfunction resolveSlotDefinitions(\n slotDefinitions: SlotDefinition[],\n node: { data: any },\n nodeIdForStatic: string,\n definitionPropertyKey: string | undefined\n): { id: string; label: string }[] {\n const result: { id: string; label: string }[] = [];\n for (const slot of slotDefinitions) {\n if (slot.type === 'static') {\n const idPath = slot.idPath != null ? rewritePathForControlBase(slot.idPath, definitionPropertyKey) : undefined;\n const id =\n idPath != null\n ? evaluateSimplePath(node, idPath)\n : slot.id != null\n ? String(slot.id).replace(/\\{\\{ID_GUID\\}\\}/g, nodeIdForStatic)\n : undefined;\n const labelPath = slot.labelPath != null ? rewritePathForControlBase(slot.labelPath, definitionPropertyKey) : undefined;\n const label =\n labelPath != null\n ? evaluateSimplePath(node, labelPath)\n : slot.labelPlaceholderValue ?? slot.label ?? (id ?? '');\n result.push({ id: id ?? '', label: label ?? id ?? '' });\n } else {\n const path = slot.path ?? slot.idPath;\n if (!path) continue;\n const pathRewritten = rewritePathForControlBase(path, definitionPropertyKey);\n const collection = evaluateCollectionPath(node, pathRewritten);\n if (!Array.isArray(collection)) continue;\n const idPath = rewritePathForControlBase(slot.idPath ?? path, definitionPropertyKey);\n const labelPath = rewritePathForControlBase(slot.labelPath ?? path, definitionPropertyKey);\n collection.forEach((item: any, index: number) => {\n const id = evaluateItemPath(item, idPath, index) ?? item?.id ?? String(index);\n const label = evaluateItemPath(item, labelPath, index) ?? item?.label ?? id ?? String(index);\n result.push({ id: String(id), label: String(label) });\n });\n }\n }\n return result;\n}\n\n/** Build getSlots from element definition. devPropertyKey = where control value lives in dev (e.g. devField); definitionPropertyKey = property in definition paths (e.g. cases). So devField = $.data.cases. */\nfunction buildGetSlotsFromDefinition(\n slotDefinitions: SlotDefinition[],\n nodeIdForStatic: string,\n options: { devPropertyKey?: string; definitionPropertyKey?: string }\n): (fullData: Record<string, any>) => { id: string; label: string }[] {\n const { devPropertyKey, definitionPropertyKey } = options;\n return (fullData) => {\n const controlValue =\n devPropertyKey != null && fullData != null ? fullData[devPropertyKey] : fullData;\n const node = { data: controlValue ?? {} };\n return resolveSlotDefinitions(\n slotDefinitions,\n node,\n nodeIdForStatic,\n definitionPropertyKey\n );\n };\n}\n\nfunction deriveSlotConfigFromDefinition(\n def: ElementDefinition | null | undefined,\n nodeId: string,\n propertyKeyFromLoader: string | undefined\n): DevSlotConfig | undefined {\n const slotsRoot = def?.slots;\n const slotsConfig = Array.isArray(slotsRoot) ? slotsRoot : slotsRoot?.slots;\n if (!Array.isArray(slotsConfig) || slotsConfig.length === 0) return undefined;\n const field = deriveFieldFromSlotsDefinition(slotsConfig);\n const definitionPropertyKey = deriveControlPropertyKey(def, field);\n const devPropertyKey = propertyKeyFromLoader ?? definitionPropertyKey;\n const slotDefinitions = getSlotDefinitions(slotsConfig);\n const getSlots = buildGetSlotsFromDefinition(slotDefinitions, nodeId ?? 'dev-node', {\n devPropertyKey,\n definitionPropertyKey,\n });\n return {\n field: devPropertyKey ?? field ?? undefined,\n activeIdPath: 'activeSlotId',\n getSlots,\n };\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 /** Key in dev data that holds the control value (e.g. devField). In the definition, the control is the prop with the UI (e.g. cases with ui.switch); in dev that value lives at data[propertyKey], so devField = $.data.cases. Default: 'devField' */\n propertyKey?: string;\n /** When set, provider builds slotConfig internally; loader does not need to pass slotConfig. */\n slotPreset?: SlotPreset;\n /** Optional. Full slot config; overrides slotPreset and elementDefinition when provided. */\n slotConfig?: DevSlotConfig;\n /**\n * Action or signal definition (defineAction result). Provider derives slotConfig from slots + initValue\n * and uses initValue as initialData when initialData is not provided.\n */\n elementDefinition?: ElementDefinition | null;\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 /** Current active slot/case id (for elements with slots, e.g. Switch). Null when none selected. Provider state only; not stored in data. */\n activeSlotId: string | null;\n /** Set the active slot/case id. Stored in provider state only; not written to data. */\n setActiveSlotId: (id: string | null) => void;\n /** Slot config when provided to DevProvider (so toolbar can call getSlots(data)). */\n slotConfig: DevSlotConfig | undefined;\n /** Action/signal definition passed to DevProvider (for debugging). */\n elementDefinition: ElementDefinition | null | undefined;\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 propertyKey = 'devField',\n slotPreset,\n slotConfig: slotConfigProp,\n elementDefinition,\n}: PropsWithChildren<DevProviderConfig>) {\n const slotConfig = useMemo<DevSlotConfig | undefined>(\n () =>\n slotConfigProp ??\n deriveSlotConfigFromDefinition(elementDefinition, nodeId, propertyKey),\n [slotConfigProp, elementDefinition, nodeId, propertyKey]\n );\n const effectiveInitialData = useMemo(\n () => (Object.keys(initialData).length > 0 ? initialData : elementDefinition?.initValue ?? {}),\n [initialData, elementDefinition?.initValue]\n );\n\n // ========== Active slot/case (for Switch-like elements) ==========\n const [activeSlotId, setActiveSlotIdState] = useState<string | null>(null);\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 { ...effectiveInitialData, ...JSON.parse(stored) };\n }\n } catch (e) {\n console.warn('DevProvider: Failed to load from localStorage', e);\n }\n }\n return effectiveInitialData;\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 // Seed data from elementDefinition.initValue when definition appears and we have no stored data\n useEffect(() => {\n if (!elementDefinition?.initValue || typeof elementDefinition.initValue !== 'object') return;\n setData((prev) => (Object.keys(prev).length === 0 ? { ...elementDefinition!.initValue } : prev));\n }, [elementDefinition?.initValue]);\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 // setActiveSlotId: dev-only state in the provider; not written to data (so it never appears in Data view or export)\n const setActiveSlotId = useCallback((id: string | null) => {\n setActiveSlotIdState(id);\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 activeSlotId,\n setActiveSlotId,\n slotConfig,\n elementDefinition,\n clearAll,\n exportData,\n importData,\n }), [data, setProperty, getProperty, inferredTypes, setInferredType, getInferredType, clearInferredType, clearAllInferredTypes, nodeId, activeSlotId, setActiveSlotId, slotConfig, elementDefinition, 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, { useMemo, useState } from 'react';\nimport { useDevContext } from './DevProvider';\n// Note: CSS is provided by consumer via `import '@process.co/ui/styles'`\n\n/**\n * Helper: get slots from data when the shape is { cases: { cases: [...] } } or similar.\n * Use this inside slotConfig.getSlots for Switch-style data, or implement your own for other shapes.\n */\nexport function getSlotsFromCasesData(data: Record<string, any>): { id: string; label: string }[] {\n const list = data?.cases?.cases ?? data?.cases ?? data?.branches;\n if (!Array.isArray(list)) return [];\n return list.map((item: any) => ({\n id: item.id ?? String(item),\n label: item.label ?? item.id ?? String(item),\n }));\n}\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 and selecting active path/case when slotConfig.getSlots is provided\n */\nexport function DevToolbar({ className }: { className?: string }) {\n const devCtx = useDevContext();\n const [showData, setShowData] = useState(false);\n const [showDefinition, setShowDefinition] = useState(false);\n const [showTypeEditor, setShowTypeEditor] = useState(false);\n const [newTypeKey, setNewTypeKey] = useState('');\n const [newTypeValue, setNewTypeValue] = useState('');\n \n const slots = useMemo(() => {\n if (!devCtx?.slotConfig?.getSlots) return [];\n const data = devCtx.data ?? {};\n return devCtx.slotConfig.getSlots(data);\n }, [devCtx?.slotConfig, devCtx?.data]);\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={() => setShowDefinition(!showDefinition)}\n className=\"uii:text-xs uii:px-2 uii:py-1 uii:bg-amber-100 dark:uii:bg-amber-900 uii:rounded hover:uii:bg-amber-200\"\n >\n {showDefinition ? 'Hide' : 'Show'} Definition\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 {/* Active path/case selector when slotConfig.getSlots is provided */}\n {slots.length > 0 && (\n <div className=\"uii:mt-2 uii:p-2 uii:bg-slate-50 dark:uii:bg-slate-900 uii:rounded-lg uii:border uii:border-slate-200 dark:uii:border-slate-700\">\n <div className=\"uii:text-xs uii:font-medium uii:mb-1.5 uii:text-slate-600 dark:uii:text-slate-400\">\n Active path / case\n </div>\n <div className=\"uii:flex uii:flex-wrap uii:gap-1\">\n <button\n type=\"button\"\n onClick={() => devCtx.setActiveSlotId(null)}\n className={`uii:text-xs uii:px-2 uii:py-1 uii:rounded uii:border ${\n devCtx.activeSlotId === null\n ? 'uii:bg-slate-300 dark:uii:bg-slate-600 uii:border-slate-500'\n : 'uii:bg-slate-100 dark:uii:bg-slate-800 uii:border-slate-300 dark:uii:border-slate-600 hover:uii:bg-slate-200'\n }`}\n >\n (none)\n </button>\n {slots.map((slot) => (\n <button\n key={slot.id}\n type=\"button\"\n onClick={() => devCtx.setActiveSlotId(slot.id)}\n className={`uii:text-xs uii:px-2 uii:py-1 uii:rounded uii:border ${\n devCtx.activeSlotId === slot.id\n ? 'uii:bg-blue-200 dark:uii:bg-blue-800 uii:border-blue-500'\n : 'uii:bg-white dark:uii:bg-slate-800 uii:border-slate-300 dark:uii:border-slate-600 hover:uii:bg-slate-100 dark:uii:hover:bg-slate-700'\n }`}\n >\n {slot.label || slot.id}\n </button>\n ))}\n </div>\n </div>\n )}\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\n {showDefinition && (\n <div className=\"uii:mt-2\">\n <div className=\"uii:text-xs uii:mb-1 uii:font-medium\">Action / signal definition:</div>\n {devCtx.elementDefinition != null ? (\n <pre className=\"uii:text-xs uii:bg-amber-50 dark:uii:bg-amber-950/30 uii:p-2 uii:rounded uii:overflow-auto uii:max-h-64 uii:border uii:border-amber-200 dark:uii:border-amber-800\">\n {JSON.stringify(devCtx.elementDefinition, null, 2)}\n </pre>\n ) : (\n <p className=\"uii:text-xs uii:text-gray-500 uii:italic\">No definition passed to DevProvider.</p>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default DevToolbar;\n"]}
|