formanitor 0.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/validate.ts","../src/core/rules.ts","../src/core/persistence/index.ts","../src/core/prefill.ts","../src/core/store.ts","../src/react/FormProvider.tsx","../src/react/useForm.ts","../src/react/useField.ts","../src/core/utils.ts","../src/ui/shadcn/input.tsx","../src/ui/shadcn/label.tsx","../src/ui/shadcn/textarea.tsx","../src/ui/widgets/Text.tsx","../src/ui/shadcn/select.tsx","../src/core/asyncOptions.ts","../src/ui/widgets/Select.tsx","../src/ui/shadcn/checkbox.tsx","../src/ui/widgets/MultiSelect.tsx","../src/ui/shadcn/button.tsx","../src/ui/shadcn/table.tsx","../src/ui/widgets/Repeatable.tsx","../src/ui/shadcn/calendar.tsx","../src/ui/shadcn/popover.tsx","../src/ui/shadcn/date-picker.tsx","../src/ui/widgets/DateWidget.tsx","../src/ui/shadcn/datetime-picker.tsx","../src/ui/widgets/DateTimeWidget.tsx","../src/ui/widgets/ImageUpload.tsx","../src/ui/widgets/SignatureUpload.tsx","../src/ui/widgets/EditableTable.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/react/DynamicForm.tsx","../src/ui/widgets/ReadOnlyText.tsx","../src/ui/widgets/ReadOnlySelect.tsx","../src/ui/widgets/ReadOnlyMultiSelect.tsx","../src/ui/widgets/ReadOnlyRepeatable.tsx","../src/ui/widgets/ReadOnlyDate.tsx","../src/ui/widgets/ReadOnlyImageUpload.tsx","../src/ui/widgets/ReadOnlySignature.tsx","../src/ui/widgets/ReadOnlyDateTime.tsx","../src/react/ReadOnlyFieldRenderer.tsx","../src/react/ReadOnlyForm.tsx","../src/react/FormControls.tsx","../src/utils/createUploadHandler.ts"],"names":["useEffect","useState","React2","jsx","React3","React4","React6","jsxs","React8","Check","cva","React10","React","props","Icon","React14","CalendarIcon","React17","format","useRef","error","def","Trash2","isEmpty","Image"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { FieldDef } from './types';\n\nexport const EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport function validateField(value: any, field: FieldDef): string | null {\n if (field.hidden || field.disabled) return null;\n\n // Required check\n if (field.required) {\n if (value === null || value === undefined || value === '') {\n return 'This field is required';\n }\n if (Array.isArray(value) && value.length === 0) {\n return 'This field is required';\n }\n }\n\n // Skip other validations if empty and not required\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n const rules = field.validation;\n if (!rules) return null;\n\n // Number validation\n if (field.type === 'number') {\n const num = Number(value);\n if (isNaN(num)) return 'Must be a valid number';\n \n if (rules.min !== undefined && num < rules.min) {\n return `Must be at least ${rules.min}`;\n }\n if (rules.max !== undefined && num > rules.max) {\n return `Must be at most ${rules.max}`;\n }\n }\n\n // String validation\n if (typeof value === 'string') {\n if (rules.minLength !== undefined && value.length < rules.minLength) {\n return `Must be at least ${rules.minLength} characters`;\n }\n if (rules.maxLength !== undefined && value.length > rules.maxLength) {\n return `Must be at most ${rules.maxLength} characters`;\n }\n if (rules.pattern) {\n const regex = new RegExp(rules.pattern);\n if (!regex.test(value)) {\n return 'Invalid format';\n }\n }\n }\n\n // Custom validation\n if (rules.custom) {\n return rules.custom(value);\n }\n\n return null;\n}\n\nexport function validateForm(values: Record<string, any>, fields: Record<string, FieldDef>): Record<string, string | null> {\n const errors: Record<string, string | null> = {};\n \n for (const [key, field] of Object.entries(fields)) {\n const error = validateField(values[key], field);\n if (error) {\n errors[key] = error;\n }\n }\n \n return errors;\n}\n\n","import type { Rule, FormValues, FieldDef, Condition, RuleAction } from './types';\n\nfunction evaluateCondition(value: any, condition: Condition): boolean {\n switch (condition.op) {\n case '==': return value == condition.value; // Loose equality for flexibility\n case '!=': return value != condition.value;\n case '>': return Number(value) > Number(condition.value);\n case '<': return Number(value) < Number(condition.value);\n case '>=': return Number(value) >= Number(condition.value);\n case '<=': return Number(value) <= Number(condition.value);\n case 'in': return Array.isArray(condition.value) && condition.value.includes(value);\n case 'contains': return Array.isArray(value) && value.includes(condition.value);\n default: return false;\n }\n}\n\nexport interface RuleResult {\n visibility: Record<string, boolean>; // true = visible\n disabled: Record<string, boolean>; // true = disabled\n required: Record<string, boolean>;\n}\n\nexport function evaluateRules(\n values: FormValues,\n rules: Rule[],\n fields: Record<string, FieldDef>\n): RuleResult {\n // Start with default state from field definitions\n const result: RuleResult = {\n visibility: {},\n disabled: {},\n required: {}\n };\n\n // Initialize defaults\n Object.keys(fields).forEach(key => {\n result.visibility[key] = !fields[key].hidden;\n result.disabled[key] = !!fields[key].disabled;\n result.required[key] = !!fields[key].required;\n });\n\n if (!rules) return result;\n\n rules.forEach(rule => {\n const targetField = rule.if.field;\n if (!targetField) return;\n\n const sourceValue = values[targetField];\n const isMatch = evaluateCondition(sourceValue, rule.if);\n\n if (isMatch) {\n rule.then.forEach(action => {\n applyAction(result, action);\n });\n } else {\n // Optional: logic to revert actions if condition is false?\n // Simple rules engines usually just apply \"true\" conditions.\n // For \"else\", we'd need a specific structure. \n // For now, we assume defaults are set and rules strictly OVERRIDE them when true.\n // If a rule says \"hide\", and it's NOT true, we don't necessarily \"show\" unless the default was visible.\n // However, standard behavior is usually: if rule implies X, !rule implies !X if it's a toggle.\n // But for this MVP, we will stick to: Apply changes if condition is met.\n // To handle \"revert\", we'd need to re-evaluate all rules or define \"else\".\n // A common pattern is to reset to default before evaluating all rules, which we did above.\n // So this is correct: defaults -> apply matches.\n }\n });\n\n return result;\n}\n\nfunction applyAction(result: RuleResult, action: RuleAction) {\n switch (action.action) {\n case 'hide':\n result.visibility[action.target] = false;\n break;\n case 'show':\n result.visibility[action.target] = true;\n break;\n case 'disable':\n result.disabled[action.target] = true;\n break;\n case 'enable':\n result.disabled[action.target] = false;\n break;\n case 'setRequired':\n result.required[action.target] = true;\n break;\n }\n}\n\n","import type { FormValues } from '../types';\n\nexport interface SavedState {\n values: FormValues;\n meta: {\n updatedAt: number; // Timestamp\n workflowState: string;\n version: number;\n };\n}\n\nexport interface PersistenceProvider {\n save(formId: string, state: SavedState): Promise<void>;\n load(formId: string): Promise<SavedState | null>;\n clear(formId: string): Promise<void>;\n}\n\nexport const NO_OP_PROVIDER: PersistenceProvider = {\n save: async () => {},\n load: async () => null,\n clear: async () => {}\n};\n\n","import type { FormValues, FieldDef } from './types';\n\n/**\n * Merges prefill values into current values.\n * Strategy:\n * - If current value exists (and is not null/undefined/empty), preserve it (Draft/User input wins).\n * - Priority 1: Field inline prefill value\n * - Priority 2: Fallback prefilled_data keyed by field ID\n */\nexport function applyPrefill(\n currentValues: FormValues,\n fields: FieldDef[],\n prefilledData: Record<string, any> = {}\n): FormValues {\n const newValues = { ...currentValues };\n\n fields.forEach(field => {\n // Check recursively for repeatable fields if needed? \n // The prompt doesn't specify deep prefill for repeatable rows structure change, \n // but usually repeatable fields start empty or with default value.\n // If it's a simple field:\n \n const currentValue = newValues[field.id];\n \n // Only overwrite if current is \"empty\"\n if (!isEmpty(currentValue)) {\n return;\n }\n\n // Priority 1: Inline prefill value\n if (field.prefill?.value !== undefined) {\n newValues[field.id] = field.prefill.value;\n return;\n }\n\n // Priority 2: Fallback prefilled_data\n if (prefilledData[field.id] !== undefined) {\n newValues[field.id] = prefilledData[field.id];\n return;\n }\n });\n\n return newValues;\n}\n\nfunction isEmpty(val: any): boolean {\n return val === undefined || val === null || val === '';\n}\n","import type {\n FormDef,\n FormState,\n FormValues,\n FieldDef,\n} from './types';\nimport { validateForm } from './validate';\nimport { evaluateRules } from './rules';\nimport type { PersistenceProvider, SavedState } from './persistence';\nimport { NO_OP_PROVIDER } from './persistence';\nimport { applyPrefill } from './prefill';\n\ntype Listener = (state: FormState) => void;\ntype EventListener = (event: string, payload?: any) => void;\ntype UploadHandler = (file: File | Blob, filename: string) => Promise<string>;\n\nexport interface StoreConfig {\n persistence?: PersistenceProvider;\n prefillData?: Record<string, any>; // Data for prefill fallback\n role?: string; // Current user role\n onEvent?: EventListener;\n onUpload?: UploadHandler; // Handler for file uploads\n}\n\nexport class FormStore {\n private state: FormState;\n private schema: FormDef;\n private fieldMap: Record<string, FieldDef>;\n private listeners: Set<Listener> = new Set();\n private persistence: PersistenceProvider;\n private prefillData: Record<string, any> = {};\n private config: StoreConfig;\n\n // Cache for debounce\n private saveTimeout: any = null;\n\n constructor(schema: FormDef, config: StoreConfig = {}) {\n this.schema = schema;\n this.config = config;\n this.persistence = config.persistence || NO_OP_PROVIDER;\n this.prefillData = config.prefillData || {};\n\n // Create a map for O(1) access\n this.fieldMap = {};\n schema.fields.forEach(f => {\n this.fieldMap[f.id] = f;\n });\n\n // Use the first workflow state if provided, otherwise fall back to a sensible default\n const initialWorkflowState = schema.workflow?.states?.[0] || 'DRAFT';\n\n this.state = {\n values: {},\n errors: {},\n touched: {},\n visibility: {},\n disabled: {},\n workflowState: initialWorkflowState,\n isValid: true,\n isSubmitting: false,\n submitAttempted: false\n };\n\n // Initialize defaults based on schema\n this.initializeDefaults();\n this.evaluate();\n }\n\n private initializeDefaults() {\n const values: FormValues = {};\n this.schema.fields.forEach(field => {\n if (field.defaultValue !== undefined) {\n values[field.id] = field.defaultValue;\n } else {\n // Safe defaults\n if (field.type === 'repeatable') values[field.id] = [];\n else values[field.id] = null; // or ''\n }\n });\n this.state.values = values;\n }\n\n // --- State Access ---\n\n getState() {\n return this.state;\n }\n\n getFieldState(fieldId: string) {\n return {\n value: this.state.values[fieldId],\n error: this.state.errors[fieldId],\n touched: this.state.touched[fieldId],\n visible: this.state.visibility[fieldId] ?? true,\n disabled: this.state.disabled[fieldId] ?? false,\n };\n }\n\n getSchema() {\n return this.schema;\n }\n\n getFieldDef(fieldId: string): FieldDef | undefined {\n return this.fieldMap[fieldId];\n }\n\n hasPersistence(): boolean {\n return this.persistence !== NO_OP_PROVIDER;\n }\n\n // --- Actions ---\n\n setValue(fieldId: string, value: any) {\n if (this.state.values[fieldId] === value) return;\n\n this.state.values = { ...this.state.values, [fieldId]: value };\n this.state.touched = { ...this.state.touched, [fieldId]: true };\n \n // Check field events\n this.checkEvents(fieldId, 'onValueChange', value);\n\n // Re-evaluate everything\n this.evaluate();\n this.notify();\n this.scheduleSave();\n }\n\n setTouched(fieldId: string) {\n if (this.state.touched[fieldId]) return;\n this.state.touched = { ...this.state.touched, [fieldId]: true };\n \n this.checkEvents(fieldId, 'onBlur', this.state.values[fieldId]);\n \n this.evaluate();\n this.notify();\n }\n\n setRole(role: string) {\n this.config.role = role;\n this.evaluate(); // Re-eval permissions? (Permissions logic to be added if dynamic)\n this.notify();\n }\n\n // --- Lifecycle ---\n\n async load() {\n // 1. Load from persistence\n const saved = await this.persistence.load(this.schema.id);\n \n let mergedValues = { ...this.state.values };\n let workflowState = this.state.workflowState;\n\n if (saved) {\n console.log('Loaded draft:', saved);\n mergedValues = { ...mergedValues, ...saved.values };\n workflowState = saved.meta.workflowState || workflowState;\n }\n\n // 2. Apply Prefill (uses fields + prefillData)\n // Always try to apply prefill, it will only fill empty fields\n mergedValues = applyPrefill(mergedValues, this.schema.fields, this.prefillData);\n\n this.state.values = mergedValues;\n this.state.workflowState = workflowState;\n\n this.evaluate();\n this.notify();\n }\n\n private scheduleSave() {\n if (this.saveTimeout) clearTimeout(this.saveTimeout);\n this.saveTimeout = setTimeout(() => {\n this.save();\n }, 1000); // 1s debounce\n }\n\n async save() {\n const payload: SavedState = {\n values: this.state.values,\n meta: {\n updatedAt: Date.now(),\n workflowState: this.state.workflowState,\n version: this.schema.version\n }\n };\n await this.persistence.save(this.schema.id, payload);\n this.emit('DRAFT_SAVED', payload);\n }\n\n /**\n * Prepare values for outbound submission to the backend.\n * For media-related fields, wrap the raw S3 key in a typed object so the\n * backend can recognise which fields need presigned GET URLs.\n *\n * Example:\n * \"patient_signature\": \"forms/media-uploads/.../signature.svg\"\n * becomes:\n * \"patient_signature\": {\n * _type: \"s3_key\",\n * value: \"forms/media-uploads/.../signature.svg\"\n * }\n */\n getSerializedValuesForSubmission(): FormValues {\n return this.serializeValuesForSubmission(this.state.values);\n }\n\n private serializeValuesForSubmission(values: FormValues): FormValues {\n const result: FormValues = { ...values };\n\n this.schema.fields.forEach((field) => {\n if (\n field.type === 'image_upload' ||\n field.type === 'signature'\n ) {\n const raw = values[field.id];\n if (raw !== undefined && raw !== null && raw !== '') {\n result[field.id] = {\n _type: 's3_key',\n value: raw,\n };\n }\n }\n });\n\n return result;\n }\n\n // --- Core Logic ---\n\n private evaluate() {\n // 0. Computations (Before rules, so rules can act on computed values)\n if (this.schema.computations) {\n this.schema.computations.forEach(comp => {\n if (comp.type === 'sum') {\n const sum = comp.fields.reduce((acc, fieldId) => {\n const val = Number(this.state.values[fieldId]) || 0;\n return acc + val;\n }, 0);\n \n // Only update if changed to avoid loops? \n // Since this is synchronous and linear, simple assignment is fine.\n // But we should check if it actually changes to avoid potential side effects if we had them.\n if (this.state.values[comp.target] !== sum) {\n this.state.values[comp.target] = sum;\n }\n } else if (comp.type === 'score') {\n const val = Number(this.state.values[comp.source]);\n \n if (\n this.state.values[comp.source] !== undefined && \n this.state.values[comp.source] !== null && \n this.state.values[comp.source] !== ''\n ) {\n let score = 0; \n const matched = comp.ranges.find(r => {\n const min = r.min ?? -Infinity;\n const max = r.max ?? Infinity;\n return val >= min && val <= max;\n });\n if (matched) {\n score = matched.value;\n }\n \n if (this.state.values[comp.target] !== score) {\n this.state.values[comp.target] = score;\n }\n } else {\n // Reset if empty, but be careful not to overwrite prefill/default if untouched? \n // For computations, we generally want reactive behavior.\n if (this.state.values[comp.target] !== 0) {\n this.state.values[comp.target] = 0;\n }\n }\n }\n });\n }\n\n // 1. Rules\n // evaluateRules expects Record<string, FieldDef>\n const ruleResult = evaluateRules(this.state.values, this.schema.rules || [], this.fieldMap);\n this.state.visibility = ruleResult.visibility;\n this.state.disabled = ruleResult.disabled;\n\n // TODO: Merge permission logic into disabled/visibility?\n // Current simple logic:\n if (this.config.role) {\n this.schema.fields.forEach(field => {\n if (field.permissions && field.permissions[this.config.role!]) {\n const perm = field.permissions[this.config.role!];\n if (perm === 'hide') this.state.visibility[field.id] = false;\n if (perm === 'view') this.state.disabled[field.id] = true;\n }\n });\n }\n\n // 2. Validation\n // Only validate visible fields\n // We pass all fields, but validator checks visibility if we passed the full def\n // We need to merge dynamic required state from rules\n const effectiveFields: Record<string, FieldDef> = {};\n Object.keys(this.fieldMap).forEach(key => {\n effectiveFields[key] = {\n ...this.fieldMap[key],\n required: ruleResult.required[key] ?? this.fieldMap[key].required,\n hidden: !this.state.visibility[key], // Inject current visibility\n disabled: this.state.disabled[key]\n };\n });\n\n const errors = validateForm(this.state.values, effectiveFields);\n this.state.errors = errors;\n this.state.isValid = Object.keys(errors).length === 0;\n }\n\n // --- Workflow ---\n\n getAvailableTransitions() {\n const transitions = this.schema.workflow?.transitions || [];\n const role = this.config.role;\n return transitions.filter(t => \n t.from === this.state.workflowState &&\n (!role || t.allowedRoles.includes(role))\n );\n }\n\n transition(toState: string) {\n const t = this.getAvailableTransitions().find(tr => tr.to === toState);\n if (!t) throw new Error(`Transition from ${this.state.workflowState} to ${toState} not allowed`);\n\n // Update state\n this.state.workflowState = toState;\n \n // Check for webhooks/signals\n if (t.webhookKey) {\n this.emit('FINALISE_REQUESTED', { webhookKey: t.webhookKey, values: this.state.values });\n }\n\n this.save(); // Save new state\n this.notify();\n }\n\n // --- Events ---\n\n private checkEvents(fieldId: string, trigger: string, value: any) {\n const field = this.fieldMap[fieldId];\n if (!field?.events) return;\n\n field.events.forEach(evt => {\n if (evt.trigger === trigger) {\n let match = true;\n if (evt.condition) {\n // Simple condition check\n if (evt.condition.op === '>') match = Number(value) > Number(evt.condition.value);\n // ... expand other ops if needed, reusing evaluateCondition from rules logic ideally\n // For MVP assume simple check or duplicate logic slightly for speed\n }\n \n if (match) {\n this.emit(evt.emit, { fieldId, value });\n }\n }\n });\n }\n\n private emit(event: string, payload?: any) {\n let finalPayload = payload;\n\n // For outbound submission-style events, ensure media fields are wrapped\n // with a type so the backend can decide which fields need presigned URLs.\n if (event === 'FINALISE_REQUESTED' || event === 'DRAFT_SAVED') {\n if (payload && typeof payload === 'object' && 'values' in payload) {\n finalPayload = {\n ...payload,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: this.serializeValuesForSubmission(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (payload as any).values ?? {},\n ),\n };\n }\n }\n\n console.log('[Formanitor Event]', event, finalPayload);\n if (this.config.onEvent) {\n this.config.onEvent(event, finalPayload);\n }\n }\n\n getUploadHandler(): UploadHandler | undefined {\n return this.config.onUpload;\n }\n\n // Mark that a submit attempt has been made so UI can decide when to show errors\n markSubmitAttempted() {\n if (!this.state.submitAttempted) {\n this.state.submitAttempted = true;\n this.notify();\n }\n }\n\n // --- Subscriptions ---\n\n subscribe(listener: Listener) {\n console.log('[FormStore] subscribe: adding listener. Total before add:', this.listeners.size);\n this.listeners.add(listener);\n return () => {\n console.log('[FormStore] unsubscribe: removing listener. Total before remove:', this.listeners.size);\n this.listeners.delete(listener);\n console.log('[FormStore] unsubscribe: removed listener. Total after remove:', this.listeners.size);\n };\n }\n\n private notify() {\n console.log('[FormStore] notify: listener count', this.listeners.size, 'state snapshot', {\n workflowState: this.state.workflowState,\n isValid: this.state.isValid,\n });\n this.listeners.forEach(l => l(this.state));\n }\n}\n","import React, { createContext, useContext, useEffect, useRef } from 'react';\nimport { FormStore } from '../core/store';\nimport type { StoreConfig } from '../core/store';\nimport type { FormDef } from '../core/types';\n\nconst FormContext = createContext<FormStore | null>(null);\n\ninterface FormProviderProps {\n schema: FormDef;\n config?: StoreConfig;\n children: React.ReactNode;\n}\n\nexport const FormProvider: React.FC<FormProviderProps> = ({ schema, config, children }) => {\n const storeRef = useRef<FormStore | null>(null);\n\n if (!storeRef.current) {\n storeRef.current = new FormStore(schema, config);\n }\n\n // Reload store if schema changes? \n // For MVP assuming schema is static per instance or handled by key-remounting\n \n useEffect(() => {\n storeRef.current?.load();\n }, []);\n\n return (\n <FormContext.Provider value={storeRef.current}>\n {children}\n </FormContext.Provider>\n );\n};\n\nexport function useFormStore(): FormStore {\n const context = useContext(FormContext);\n if (!context) {\n throw new Error('useFormStore must be used within a FormProvider');\n }\n return context;\n}\n","import { useState, useEffect } from \"react\";\nimport { useFormStore } from \"./FormProvider\";\nimport type { FormState } from \"../core/types\";\n\nexport function useForm() {\n const store = useFormStore();\n\n const [state, setState] = useState<FormState>(store.getState());\n\n useEffect(() => {\n const unsubscribe = store.subscribe((newState) => {\n setState({ ...newState });\n });\n return unsubscribe;\n }, [store]);\n\n return {\n state,\n store,\n submit: store.save.bind(store), // Draft save for now\n transition: store.transition.bind(store),\n availableTransitions: store.getAvailableTransitions(),\n hasPersistence: store.hasPersistence(),\n getSerializedValues: store.getSerializedValuesForSubmission.bind(store),\n markSubmitAttempted: store.markSubmitAttempted.bind(store),\n };\n}\n","import { useState, useEffect } from 'react';\nimport { useFormStore } from './FormProvider';\nimport type { FieldState, FieldDef } from '../core/types';\n\nexport function useField(fieldId: string) {\n const store = useFormStore();\n const [fieldState, setFieldState] = useState<FieldState>(store.getFieldState(fieldId));\n\n useEffect(() => {\n const unsubscribe = store.subscribe(() => {\n const newState = store.getFieldState(fieldId);\n // Simple shallow check to avoid re-renders if nothing changed for THIS field\n setFieldState(prev => {\n if (\n prev.value === newState.value &&\n prev.error === newState.error &&\n prev.touched === newState.touched &&\n prev.visible === newState.visible &&\n prev.disabled === newState.disabled\n ) {\n return prev;\n }\n return newState;\n });\n });\n return unsubscribe;\n }, [store, fieldId]);\n\n const setValue = (val: any) => store.setValue(fieldId, val);\n const setTouched = () => store.setTouched(fieldId);\n\n // Get definition from schema\n const fieldDef: FieldDef | undefined = store.getFieldDef(fieldId);\n\n return {\n ...fieldState,\n fieldDef,\n setValue,\n setTouched\n };\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../core/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../core/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n\n","import * as React from \"react\";\n\nimport { cn } from \"../../core/utils\";\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\n\nexport const TextWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const Component = (fieldDef.type === 'textarea' || fieldDef.type === 'richtext') ? Textarea : Input;\n\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}</Label>\n <Component\n id={fieldId}\n value={value || ''}\n onChange={(e) => setValue(fieldDef.type === 'number' ? Number(e.target.value) : e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n type={fieldDef.type === 'number' ? 'number' : 'text'}\n className={showError ? 'border-red-500' : ''}\n />\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"../../core/utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","// Simple mock for async options for MVP\nexport const mockAsyncOptions: Record<string, { label: string; value: any }[]> = {\n STATIC_SYMPTOMS: [\n { label: 'Headache', value: 'headache' },\n { label: 'Fever', value: 'fever' },\n { label: 'Cough', value: 'cough' },\n { label: 'Nausea', value: 'nausea' },\n { label: 'Fatigue', value: 'fatigue' }\n ],\n PAIN_SCALE_0_10: [\n { label: '0 - No Pain', value: 0 },\n { label: '1', value: 1 },\n { label: '2', value: 2 },\n { label: '3', value: 3 },\n { label: '4', value: 4 },\n { label: '5', value: 5 },\n { label: '6', value: 6 },\n { label: '7', value: 7 },\n { label: '8', value: 8 },\n { label: '9', value: 9 },\n { label: '10 - Worst Pain', value: 10 }\n ],\n NURSE_PROGRESS_NOTES_TEMPLATE: [\n { label: 'Standard Assessment', value: 'standard' },\n { label: 'Post-Op Check', value: 'post_op' },\n { label: 'Routine Check', value: 'routine' }\n ]\n};\n\nexport async function fetchOptions(\n source: string, \n params?: any\n): Promise<{ label: string; value: any }[]> {\n // Simulate network delay\n await new Promise(resolve => setTimeout(resolve, 500));\n \n if (mockAsyncOptions[source]) {\n return mockAsyncOptions[source];\n }\n \n return [];\n}\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\nexport const SelectWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as SelectFieldDef; // Cast safe due to Renderer check\n\n if (def.options) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}</Label>\n \n <Select \n disabled={disabled || loading} \n value={value ? String(value) : undefined} \n onValueChange={(val) => {\n // Try to find original value type (number vs string)\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n }}\n >\n <SelectTrigger id={fieldId} className={showError ? 'border-red-500' : ''}>\n <SelectValue placeholder={loading ? \"Loading...\" : \"Select...\"} />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n \n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Checkbox } from '../shadcn/checkbox'; // Need to make sure this exists or use input type=checkbox\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\nexport const MultiSelectWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n // Default value to array\n const currentValues = Array.isArray(value) ? value : [];\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as SelectFieldDef; \n\n if (def.options) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const toggleValue = (val: any) => {\n const newValues = currentValues.includes(val)\n ? currentValues.filter((v: any) => v !== val)\n : [...currentValues, val];\n setValue(newValues);\n setTouched();\n };\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}</Label>\n \n <div className={`border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled ? 'opacity-50 pointer-events-none' : ''}`}>\n {loading && <div className=\"text-sm text-gray-500\">Loading options...</div>}\n \n {!loading && options.map(opt => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <Checkbox \n id={`${fieldId}-${opt.value}`}\n checked={currentValues.includes(opt.value)}\n onCheckedChange={() => toggleValue(opt.value)}\n />\n <label \n htmlFor={`${fieldId}-${opt.value}`} \n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {opt.label}\n </label>\n </div>\n ))}\n </div>\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../core/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n\n","import * as React from \"react\";\n\nimport { cn } from \"../../core/utils\";\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import React from \"react\";\nimport { useField } from \"../../react/useField\";\nimport { Label } from \"../shadcn/label\";\nimport { Button } from \"../shadcn/button\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport type { RepeatableFieldDef } from \"../../core/types\";\n\nexport const RepeatableWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n\n if (!fieldDef || fieldDef.type !== \"repeatable\") return null;\n\n const def = fieldDef as RepeatableFieldDef;\n const rows = Array.isArray(value) ? value : [];\n const [hasInteracted, setHasInteracted] = React.useState(false);\n\n const showError = !!error && (touched || hasInteracted);\n\n const addRow = () => {\n setValue([...rows, {}]);\n setHasInteracted(true);\n };\n\n const removeRow = (index: number) => {\n const newRows = [...rows];\n newRows.splice(index, 1);\n setValue(newRows);\n setHasInteracted(true);\n };\n\n const updateRow = (\n index: number,\n subFieldKey: string,\n val: string | number\n ) => {\n const newRows = [...rows];\n newRows[index] = { ...newRows[index], [subFieldKey]: val };\n setValue(newRows);\n setHasInteracted(true);\n };\n\n return (\n <div className=\"space-y-4 border p-4 rounded-md\">\n <div className=\"flex justify-between items-center\">\n <Label>{def.label}</Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={addRow}\n disabled={disabled}\n >\n + Add Row\n </Button>\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n <TableRow>\n {def.row.map((subDef) => (\n <TableHead key={subDef.id}>{subDef.label}</TableHead>\n ))}\n <TableHead className=\"w-[50px]\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map(\n (\n row: Record<string, string | number | undefined>,\n index: number\n ) => (\n <TableRow key={index}>\n {def.row.map((subDef) => (\n <TableCell key={subDef.id}>\n {/* Simple rendering based on type - duplicating logic slightly for MVP simplicity */}\n {subDef.type === \"number\" ? (\n <input\n type=\"number\"\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n value={row[subDef.id] || \"\"}\n onChange={(e) =>\n updateRow(index, subDef.id, Number(e.target.value))\n }\n disabled={disabled}\n />\n ) : (\n <input\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n value={row[subDef.id] || \"\"}\n onChange={(e) =>\n updateRow(index, subDef.id, e.target.value)\n }\n disabled={disabled}\n />\n )}\n </TableCell>\n ))}\n <TableCell>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => removeRow(index)}\n disabled={disabled}\n >\n X\n </Button>\n </TableCell>\n </TableRow>\n )\n )}\n {rows.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={def.row.length + 1}\n className=\"h-24 text-center\"\n >\n No items added.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../core/utils\"\nimport { buttonVariants } from \"./button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3 relative\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n\n // v9 keys with explicit positioning relative to the NEW container\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n \"absolute left-1 top-3\" \n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n \"absolute right-1 top-3\" \n ),\n month_grid: \"w-full border-collapse space-y-1\",\n weekdays: \"flex\",\n weekday: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n week: \"flex w-full mt-2\",\n day_button: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n range_end: \"day-range-end\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n hidden: \"invisible\",\n \n ...classNames,\n }}\n components={{\n IconLeft: ({ ...props }) => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: ({ ...props }) => <ChevronRight className=\"h-4 w-4\" />,\n // @ts-ignore\n Chevron: ({ orientation }) => {\n const Icon = orientation === 'left' ? ChevronLeft : ChevronRight\n return <Icon className=\"h-4 w-4\" />\n }\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }\n\n","import * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { Calendar as CalendarIcon } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\n\nexport interface DatePickerProps {\n date?: Date\n setDate?: (date: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nexport function DatePicker({ date, setDate, className, placeholder = \"Pick a date\" }: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !date && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {date ? format(date, \"PPP\") : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <Calendar\n mode=\"single\"\n selected={date}\n onSelect={setDate}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )\n}\n\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { DatePicker } from '../shadcn/date-picker';\nimport { Label } from '../shadcn/label';\n\nexport const DateWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}</Label>\n <div onBlur={() => setTouched()}>\n <DatePicker\n date={value ? new Date(value) : undefined}\n setDate={(date) => setValue(date ? date.toISOString() : undefined)}\n placeholder={fieldDef.placeholder}\n className={showError ? 'border-red-500 w-full' : 'w-full'}\n />\n </div>\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { Calendar as CalendarIcon, Clock } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\nimport { Input } from \"./input\"\n\nexport interface DateTimePickerProps {\n /**\n * The current value as a Date object.\n */\n dateTime?: Date\n /**\n * Setter for the value. Use undefined to clear.\n */\n setDateTime?: (value: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nfunction parseTimeString(value: string): { hours: number; minutes: number } | null {\n if (!value) return null\n const [h, m] = value.split(\":\").map((v) => Number(v))\n if (\n Number.isNaN(h) ||\n Number.isNaN(m) ||\n h < 0 ||\n h > 23 ||\n m < 0 ||\n m > 59\n ) {\n return null\n }\n return { hours: h, minutes: m }\n}\n\nexport function DateTimePicker({\n dateTime,\n setDateTime,\n className,\n placeholder = \"Pick date & time\",\n}: DateTimePickerProps) {\n const [internalDate, setInternalDate] = React.useState<Date | undefined>(dateTime)\n const [timeString, setTimeString] = React.useState<string>(() => {\n if (!dateTime) return \"\"\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n return `${hours}:${minutes}`\n })\n\n React.useEffect(() => {\n setInternalDate(dateTime)\n if (!dateTime) {\n setTimeString(\"\")\n } else {\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n setTimeString(`${hours}:${minutes}`)\n }\n }, [dateTime])\n\n const handleDateSelect = (date: Date | undefined) => {\n setInternalDate(date)\n if (!setDateTime) return\n if (!date) {\n setDateTime(undefined)\n return\n }\n\n const parsed = parseTimeString(timeString)\n const next = new Date(date)\n if (parsed) {\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n }\n setDateTime(next)\n }\n\n const handleTimeChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const value = e.target.value\n setTimeString(value)\n if (!setDateTime) return\n\n const parsed = parseTimeString(value)\n if (!parsed) {\n // Don't propagate invalid time, just keep local string\n return\n }\n\n const base = internalDate ?? new Date()\n const next = new Date(base)\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n setInternalDate(next)\n setDateTime(next)\n }\n\n const hasValue = !!dateTime\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !hasValue && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {hasValue ? (\n <span className=\"flex items-center gap-1\">\n {format(dateTime as Date, \"PPP\")}\n <span className=\"text-muted-foreground\">•</span>\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {format(dateTime as Date, \"HH:mm\")}\n </span>\n </span>\n ) : (\n <span>{placeholder}</span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <div className=\"flex flex-col md:flex-row\">\n <Calendar\n mode=\"single\"\n selected={internalDate}\n onSelect={handleDateSelect}\n initialFocus\n />\n <div className=\"border-t md:border-t-0 md:border-l p-3 flex flex-col gap-2 min-w-[220px]\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n Time (24h)\n </label>\n <Input\n type=\"time\"\n value={timeString}\n onChange={handleTimeChange}\n className=\"w-full\"\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { DateTimePicker } from '../shadcn/datetime-picker';\nimport { Label } from '../shadcn/label';\n\nexport const DateTimeWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const currentDate = value ? new Date(value) : undefined;\n\n const handleChange = (date: Date | undefined) => {\n if (!date) {\n setValue(undefined);\n return;\n }\n setValue(date.toISOString());\n };\n\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>\n {fieldDef.label}{' '}\n {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n <div\n onBlur={() => setTouched()}\n className={disabled ? 'opacity-60 pointer-events-none' : undefined}\n >\n <DateTimePicker\n dateTime={currentDate}\n setDateTime={handleChange}\n placeholder={fieldDef.placeholder}\n className={showError ? 'border-red-500 w-full' : 'w-full'}\n />\n </div>\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Upload, X, Image } from 'lucide-react';\n\nexport const ImageUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [isUploading, setIsUploading] = useState(false);\n const [preview, setPreview] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>\n {fieldDef.label} \n {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n <div className=\"border-2 border-red-300 rounded-lg p-4 bg-red-50\">\n <p className=\"text-sm text-red-600\">\n Upload handler not configured. Please provide an onUpload function in FormProvider config.\n </p>\n </div>\n </div>\n );\n }\n\n // Generate preview URL from uploaded file key or local file\n React.useEffect(() => {\n if (value && typeof value === 'string') {\n // If value is an S3 key, we'd need to construct the full URL\n // For now, assuming it's already a full URL or we have a way to construct it\n setPreview(value);\n } else {\n setPreview(null);\n }\n }, [value]);\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n // Validate file type\n if (!file.type.startsWith('image/')) {\n alert('Please select an image file');\n return;\n }\n\n // Validate file size (e.g., max 10MB)\n const maxSize = 10 * 1024 * 1024; // 10MB\n if (file.size > maxSize) {\n alert('File size must be less than 10MB');\n return;\n }\n\n setIsUploading(true);\n setTouched();\n\n try {\n // Create preview\n const previewUrl = URL.createObjectURL(file);\n setPreview(previewUrl);\n\n // Upload file using the provided handler\n const s3Key = await uploadHandler(file, file.name);\n \n // Store the S3 key as the field value\n setValue(s3Key);\n } catch (error) {\n console.error('Upload failed:', error);\n const errorMessage = error instanceof Error ? error.message : 'Upload failed. Please try again.';\n alert(errorMessage);\n setPreview(null);\n } finally {\n setIsUploading(false);\n }\n };\n\n const handleRemove = () => {\n setValue(null);\n setPreview(null);\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n setTouched();\n };\n\n const handleUploadClick = () => {\n fileInputRef.current?.click();\n };\n\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>\n {fieldDef.label} \n {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n \n <div className=\"border-2 border-dashed border-gray-300 rounded-lg p-4\">\n {preview ? (\n <div className=\"relative\">\n <img\n src={preview}\n alt=\"Uploaded image\"\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n />\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={handleRemove}\n disabled={disabled || isUploading}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n <div className=\"text-center py-8\">\n <Image className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\n <p className=\"text-sm text-gray-600 mb-4\">\n Click to upload an image or drag and drop\n </p>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleUploadClick}\n disabled={disabled || isUploading}\n >\n <Upload className=\"h-4 w-4 mr-2\" />\n {isUploading ? 'Uploading...' : 'Choose Image'}\n </Button>\n </div>\n )}\n </div>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={disabled || isUploading}\n />\n\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n \n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};","import React, { useState, useRef, useEffect } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Check, Trash2 } from 'lucide-react';\n\n/* ---------------- utils ---------------- */\n\nconst distance = (a: { x: number; y: number }, b: { x: number; y: number }) =>\n Math.hypot(a.x - b.x, a.y - b.y);\n\nconst smoothPoint = (\n prev: { x: number; y: number } | null,\n curr: { x: number; y: number },\n smoothing = 0.75\n) => {\n if (!prev) return curr;\n return {\n x: prev.x * smoothing + curr.x * (1 - smoothing),\n y: prev.y * smoothing + curr.y * (1 - smoothing),\n };\n};\n\n/* ---------------- component ---------------- */\n\nexport const SignatureUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const pathRef = useRef<string>('');\n const lastPointRef = useRef<{ x: number; y: number } | null>(null);\n const lastTimeRef = useRef<number | null>(null);\n const lastWidthRef = useRef<number>(2);\n\n const [isDrawing, setIsDrawing] = useState(false);\n const [hasSignature, setHasSignature] = useState(false);\n const [isUploading, setIsUploading] = useState(false);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) return null;\n\n /* ---------------- canvas setup ---------------- */\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const dpr = window.devicePixelRatio || 1;\n const width = 400;\n const height = 200;\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n ctx.scale(dpr, dpr);\n\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = '#000';\n\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, width, height);\n }, []);\n\n /* ---------------- helpers ---------------- */\n\n const getPoint = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current!;\n const rect = canvas.getBoundingClientRect();\n const e = 'touches' in event ? event.touches[0] : event;\n return {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n };\n\n /* ---------------- drawing ---------------- */\n\n const startDrawing = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (disabled) return;\n\n setIsDrawing(true);\n setTouched();\n\n const ctx = canvasRef.current?.getContext('2d');\n if (!ctx) return;\n\n const point = getPoint(event);\n\n ctx.beginPath();\n ctx.moveTo(point.x, point.y);\n\n pathRef.current += `M${point.x},${point.y}`;\n\n lastPointRef.current = point;\n lastTimeRef.current = performance.now();\n lastWidthRef.current = 2;\n };\n\n const draw = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing || disabled) return;\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (!canvas || !ctx) return;\n\n const rawPoint = getPoint(event);\n const lastPoint = lastPointRef.current;\n if (!lastPoint) return;\n\n const smoothed = smoothPoint(lastPoint, rawPoint, 0.75);\n\n // Ignore tiny jitter\n if (distance(lastPoint, smoothed) < 0.7) return;\n\n const now = performance.now();\n const dt = now - (lastTimeRef.current || now);\n const dist = distance(lastPoint, smoothed);\n const velocity = dist / Math.max(dt, 1);\n\n // Velocity → stroke width\n const minWidth = 1.2;\n const maxWidth = 3.5;\n const targetWidth = Math.max(\n minWidth,\n Math.min(maxWidth, maxWidth - velocity * 6)\n );\n\n const width =\n lastWidthRef.current * 0.7 + targetWidth * 0.3;\n\n ctx.lineWidth = width;\n\n // Smooth quadratic curve\n const midX = (lastPoint.x + smoothed.x) / 2;\n const midY = (lastPoint.y + smoothed.y) / 2;\n\n ctx.quadraticCurveTo(lastPoint.x, lastPoint.y, midX, midY);\n ctx.stroke();\n\n pathRef.current += ` Q${lastPoint.x},${lastPoint.y} ${midX},${midY}`;\n\n lastPointRef.current = smoothed;\n lastTimeRef.current = now;\n lastWidthRef.current = width;\n\n setHasSignature(true);\n };\n\n const stopDrawing = () => {\n setIsDrawing(false);\n lastPointRef.current = null;\n lastTimeRef.current = null;\n };\n\n /* ---------------- actions ---------------- */\n\n const clearCanvas = () => {\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (!canvas || !ctx) return;\n\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, 400, 200);\n\n pathRef.current = '';\n lastPointRef.current = null;\n setHasSignature(false);\n setValue(null);\n };\n\n const generateSVG = () => `\n<svg width=\"400\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\"/>\n <path d=\"${pathRef.current}\"\n stroke=\"black\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n fill=\"none\"/>\n</svg>`.trim();\n\n const confirmSignature = async () => {\n if (!hasSignature) return;\n\n setIsUploading(true);\n setTouched();\n\n try {\n const svg = generateSVG();\n const blob = new Blob([svg], { type: 'image/svg+xml' });\n const filename = `signature_${Date.now()}.svg`;\n const key = await uploadHandler(blob, filename);\n setValue(key);\n } finally {\n setIsUploading(false);\n }\n };\n\n /* ---------------- UI ---------------- */\n\n return (\n <div className=\"space-y-2\">\n <Label>\n {fieldDef.label}\n {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n\n <div className=\"relative\">\n <canvas\n ref={canvasRef}\n className=\"border border-gray-200 rounded cursor-crosshair touch-none\"\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n />\n\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute top-2 left-2 bg-white/80\"\n onClick={clearCanvas}\n disabled={!hasSignature}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <Button\n type=\"button\"\n onClick={confirmSignature}\n disabled={!hasSignature || isUploading}\n className=\"text-xs\"\n >\n <Check className=\"h-4 w-4 mr-1\" />\n {isUploading ? 'Saving…' : 'Confirm'}\n </Button>\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React, { useMemo, useState, useRef, useEffect } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n createColumnHelper,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { useField } from \"../../react/useField\";\nimport { Button } from \"../shadcn/button\";\nimport { Input } from \"../shadcn/input\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data\ninterface TableColumn {\n id: string;\n label: string;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Usage Example in FormSchema:\n * {\n * id: \"my_table\",\n * type: \"editable_table\",\n * label: \"Dynamic Data\",\n * columns: [\n * { id: \"col1\", label: \"Initial Column 1\" }\n * ]\n * }\n */\nexport const EditableTableWidget: React.FC<EditableTableWidgetProps> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n const def = fieldDef as EditableTableFieldDef;\n const canAddRow = def?.allowAddRow ?? true;\n const canAddColumn = def?.allowAddColumn ?? true;\n const canDeleteRow = def?.allowDeleteRow ?? true;\n const canDeleteColumn = def?.allowDeleteColumn ?? true;\n\n // Initialize data if null/undefined\n const tableData: TableData = useMemo(() => {\n if (value && typeof value === \"object\" && \"columns\" in value && \"rows\" in value) {\n return value as TableData;\n }\n const def = fieldDef as EditableTableFieldDef;\n return {\n columns: def?.columns || [],\n rows: [],\n };\n }, [value, fieldDef]);\n\n // Keep a ref to tableData so we can access the latest version in callbacks\n // without forcing re-creation of columns (which causes focus loss).\n const dataRef = useRef(tableData);\n useEffect(() => {\n dataRef.current = tableData;\n }, [tableData]);\n\n const [newColumnName, setNewColumnName] = useState(\"\");\n\n const updateData = (newData: TableData) => {\n setValue(newData);\n };\n\n const addRow = () => {\n const currentData = dataRef.current;\n const newRow: Record<string, string> = {};\n currentData.columns.forEach((col) => {\n newRow[col.id] = \"\";\n });\n updateData({\n ...currentData,\n rows: [...currentData.rows, newRow],\n });\n };\n\n const addColumn = () => {\n if (!newColumnName.trim()) return;\n const currentData = dataRef.current;\n const colId = newColumnName.toLowerCase().replace(/\\s+/g, \"_\") + \"_\" + Date.now();\n const newCol: TableColumn = { id: colId, label: newColumnName };\n \n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n // We use refs inside these callbacks to ensure they are stable and don't depend on changing data\n const removeRow = (index: number) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows.splice(index, 1);\n updateData({ ...currentData, rows: newRows });\n };\n\n const removeColumn = (colId: string) => {\n const currentData = dataRef.current;\n const newCols = currentData.columns.filter((c) => c.id !== colId);\n const newRows = currentData.rows.map((row) => {\n const newRow = { ...row };\n delete newRow[colId];\n return newRow;\n });\n updateData({ columns: newCols, rows: newRows });\n };\n\n const updateCell = (rowIndex: number, colId: string, val: string) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows[rowIndex] = { ...newRows[rowIndex], [colId]: val };\n updateData({ ...currentData, rows: newRows });\n };\n\n // Generate columns for tanstack table\n // CRITICAL: This useMemo MUST NOT depend on tableData.rows, or focus will be lost on every type.\n // It only depends on tableData.columns (structure) and disabled state.\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n const currentCols = tableData.columns; // We only care about columns structure here\n \n const dataCols = currentCols.map((col) => ({\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {!disabled && canDeleteColumn && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0 text-muted-foreground hover:text-destructive\"\n onClick={(e) => {\n e.stopPropagation();\n removeColumn(col.id);\n }}\n title=\"Remove Column\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ),\n cell: (info: any) => {\n // We use a local component or direct render, but the key is that 'columns' array doesn't change identity.\n // The cell will re-render because 'info.getValue()' changes, but the Input node stays mounted.\n return (\n <Input\n value={info.getValue() as string || \"\"}\n onChange={(e) => updateCell(info.row.index, col.id, e.target.value)}\n disabled={disabled}\n className=\"h-8 border bg-transparent\"\n />\n );\n },\n }));\n\n // Add delete row column\n if (!disabled && canDeleteRow) {\n dataCols.push({\n id: \"actions\",\n header: \"\",\n cell: (info: any) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-destructive hover:bg-destructive/10\"\n onClick={(e) => {\n e.stopPropagation();\n removeRow(info.row.index);\n }}\n title=\"Remove Row\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ),\n } as any);\n }\n\n return dataCols;\n }, [tableData.columns, disabled, canDeleteRow, canDeleteColumn]); // Only depend on columns structure!\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-4 border rounded-md p-4\">\n <div className=\"flex flex-col space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-1\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No data. Add rows or columns to start.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {!disabled && (\n <div className=\"flex flex-col sm:flex-row gap-4 justify-between pt-2\">\n {canAddRow ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={addRow}\n >\n <Plus className=\"mr-2 h-4 w-4\" /> Add Row\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center\">\n <Input\n placeholder=\"New Column Name\"\n value={newColumnName}\n onChange={(e) => setNewColumnName(e.target.value)}\n className=\"w-48\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addColumn();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!newColumnName.trim()}\n >\n Add Column\n </Button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from './useField';\nimport { TextWidget } from '../ui/widgets/Text';\nimport { SelectWidget } from '../ui/widgets/Select';\nimport { MultiSelectWidget } from '../ui/widgets/MultiSelect';\nimport { RepeatableWidget } from '../ui/widgets/Repeatable';\nimport { DateWidget } from '../ui/widgets/DateWidget';\nimport { DateTimeWidget } from '../ui/widgets/DateTimeWidget';\nimport { ImageUploadWidget } from '../ui/widgets/ImageUpload';\nimport { SignatureUploadWidget } from '../ui/widgets/SignatureUpload';\nimport { EditableTableWidget } from '../ui/widgets/EditableTable';\n\ninterface FieldRendererProps {\n fieldId: string;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({ fieldId }) => {\n const { fieldDef, visible } = useField(fieldId);\n\n if (!visible || !fieldDef) {\n return null;\n }\n\n // Registry lookup\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n return <TextWidget fieldId={fieldId} />;\n \n case 'textarea':\n case 'richtext':\n // Hack: force type to textarea for TextWidget if it's richtext\n // But TextWidget reads fieldDef.type. \n // We might need to handle this inside TextWidget or just cast/modify here?\n // Since FieldDef is immutable, we can't change it.\n // Let's rely on TextWidget handling 'textarea'.\n // If type is 'richtext', TextWidget sees 'richtext' and defaults to Input unless we change it.\n // So we need to update TextWidget or pass a prop.\n // Let's update TextWidget to handle 'richtext' as 'textarea'.\n return <TextWidget fieldId={fieldId} />;\n \n case 'date':\n return <DateWidget fieldId={fieldId} />;\n \n case 'datetime':\n return <DateTimeWidget fieldId={fieldId} />;\n \n case 'select':\n return <SelectWidget fieldId={fieldId} />;\n \n case 'multiselect':\n return <MultiSelectWidget fieldId={fieldId} />;\n \n case 'repeatable':\n return <RepeatableWidget fieldId={fieldId} />;\n \n case 'image_upload':\n return <ImageUploadWidget fieldId={fieldId} />;\n \n case 'signature':\n return <SignatureUploadWidget fieldId={fieldId} />;\n\n case 'editable_table':\n return <EditableTableWidget fieldId={fieldId} />;\n\n default:\n return <div className=\"text-red-500\">Unknown field type: {fieldDef.type}</div>;\n }\n};\n","import React from 'react';\n\ninterface SectionProps {\n title: string;\n children: React.ReactNode;\n}\n\nexport const Section: React.FC<SectionProps> = ({ title, children }) => {\n return (\n <div className=\"mb-6 border p-4 rounded-lg bg-white shadow-sm\">\n <h3 className=\"text-lg font-medium mb-4 pb-2 border-b\">{title}</h3>\n <div className=\"space-y-4\">\n {children}\n </div>\n </div>\n );\n};\n\n","import React from 'react';\nimport { useFormStore } from './FormProvider';\nimport { FieldRenderer } from './FieldRenderer';\nimport { Section } from '../ui/layouts/Section';\nimport { useForm } from './useForm';\n\nexport const DynamicForm: React.FC = () => {\n const store = useFormStore();\n const schema = store.getSchema();\n const { state } = useForm(); // re-render on state change (visibility etc)\n\n // Memoize layout rendering to avoid unnecessary checks?\n // Actually we need to react to visibility changes which might hide sections?\n // For MVP, just render.\n\n return (\n <div className=\"space-y-6\">\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n <div className=\"text-sm text-gray-500\">\n Version: {schema.version} | State: {state.workflowState}\n </div>\n </div>\n\n {schema.layout.map(node => {\n if (node.type === 'section') {\n // Check if all children are hidden? \n // Implementation detail: for now we just render section.\n // Ideally we check if it has visible fields.\n return (\n <Section key={node.id} title={node.title}>\n {node.children.map(fieldId => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </Section>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyTextProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyText: React.FC<ReadOnlyTextProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n const displayValue = value ?? '';\n const isRichText = fieldDef.type === 'richtext';\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {isRichText ? (\n <div \n className=\"prose prose-sm max-w-none text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50\"\n dangerouslySetInnerHTML={{ __html: displayValue }}\n />\n ) : (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || <span className=\"text-gray-400 italic\">No value</span>}\n </div>\n )}\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\ninterface ReadOnlySelectProps {\n fieldDef: SelectFieldDef;\n value: any;\n}\n\nexport const ReadOnlySelect: React.FC<ReadOnlySelectProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const selectedOption = options.find(opt => {\n // Handle both string and number comparisons\n return String(opt.value) === String(value) || opt.value === value;\n });\n\n const displayValue = selectedOption ? selectedOption.label : (value ?? '');\n const isEmpty = !value && value !== 0;\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n displayValue\n )}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\ninterface ReadOnlyMultiSelectProps {\n fieldDef: SelectFieldDef;\n value: any;\n}\n\nexport const ReadOnlyMultiSelect: React.FC<ReadOnlyMultiSelectProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const currentValues = Array.isArray(value) ? value : [];\n const selectedLabels = currentValues\n .map(val => {\n const option = options.find(opt => {\n return String(opt.value) === String(val) || opt.value === val;\n });\n return option ? option.label : String(val);\n })\n .filter(Boolean);\n\n const isEmpty = selectedLabels.length === 0;\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No values selected</span>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {selectedLabels.map((label, idx) => (\n <span\n key={idx}\n className=\"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800\"\n >\n {label}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../shadcn/table';\nimport type { RepeatableFieldDef } from '../../core/types';\n\ninterface ReadOnlyRepeatableProps {\n fieldDef: RepeatableFieldDef;\n value: any;\n}\n\nexport const ReadOnlyRepeatable: React.FC<ReadOnlyRepeatableProps> = ({ fieldDef, value }) => {\n if (!fieldDef || fieldDef.type !== 'repeatable') return null;\n\n const rows = Array.isArray(value) ? value : [];\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n \n {rows.length === 0 ? (\n <div className=\"text-gray-400 italic border border-gray-200 rounded-md p-4 bg-gray-50 text-center\">\n No items\n </div>\n ) : (\n <div className=\"rounded-md border border-gray-200 overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow>\n {fieldDef.row.map((subDef) => (\n <TableHead key={subDef.id} className=\"bg-gray-50\">{subDef.label}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map(\n (\n row: Record<string, string | number | undefined>,\n index: number\n ) => (\n <TableRow key={index}>\n {fieldDef.row.map((subDef) => (\n <TableCell key={subDef.id} className=\"text-gray-900\">\n {row[subDef.id] ?? <span className=\"text-gray-400 italic\">—</span>}\n </TableCell>\n ))}\n </TableRow>\n )\n )}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDate: React.FC<ReadOnlyDateProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleDateString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || <span className=\"text-gray-400 italic\">No date selected</span>}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { Image } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlyImageUploadProps {\n fieldDef: BaseFieldDef;\n // In read-only mode we may receive either a plain URL/string key or a typed object\n // from the backend that includes a presigned_url.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlyImageUpload: React.FC<ReadOnlyImageUploadProps> = ({\n fieldDef,\n value,\n}) => {\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-4\">\n <Image className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No image uploaded</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-white\">\n <img\n src={url}\n alt={`${fieldDef.label} upload`}\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n onError={(e) => {\n // Fallback if image fails to load\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const parent = target.parentElement;\n if (parent) {\n parent.innerHTML = `\n <div class=\"text-center py-4\">\n <div class=\"text-gray-400 mb-2\">📷</div>\n <p class=\"text-sm text-gray-500\">Image not available</p>\n <p class=\"text-xs text-gray-400\">${url ?? ''}</p>\n </div>\n `;\n }\n }}\n />\n </div>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n </div>\n );\n};","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { PenTool } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlySignatureProps {\n fieldDef: BaseFieldDef;\n // In read-only mode we may receive either a plain string or a typed object\n // with a presigned_url from the backend.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlySignature: React.FC<ReadOnlySignatureProps> = ({\n fieldDef,\n value,\n}) => {\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-8\">\n <PenTool className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No signature provided</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n <div className=\"flex items-center justify-start\">\n <img\n src={url}\n alt=\"Signature\"\n className=\"border border-gray-200 rounded bg-white object-contain max-w-full\"\n style={{ width: 400, height: 200 }}\n />\n </div>\n </div>\n );\n};","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateTimeProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDateTime: React.FC<ReadOnlyDateTimeProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">\n {fieldDef.label}\n </Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || (\n <span className=\"text-gray-400 italic\">No date &amp; time selected</span>\n )}\n </div>\n </div>\n );\n};\n\n","import React from 'react';\nimport { ReadOnlyText } from '../ui/widgets/ReadOnlyText';\nimport { ReadOnlySelect } from '../ui/widgets/ReadOnlySelect';\nimport { ReadOnlyMultiSelect } from '../ui/widgets/ReadOnlyMultiSelect';\nimport { ReadOnlyRepeatable } from '../ui/widgets/ReadOnlyRepeatable';\nimport { ReadOnlyDate } from '../ui/widgets/ReadOnlyDate';\nimport { ReadOnlyImageUpload } from '../ui/widgets/ReadOnlyImageUpload';\nimport { ReadOnlySignature } from '../ui/widgets/ReadOnlySignature';\nimport { ReadOnlyDateTime } from '../ui/widgets/ReadOnlyDateTime';\nimport type { FieldDef } from '../core/types';\n\ninterface ReadOnlyFieldRendererProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyFieldRenderer: React.FC<ReadOnlyFieldRendererProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n // Check visibility (for now, we'll show all fields in read-only mode)\n // You could add logic here to hide fields based on rules if needed\n\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n case 'textarea':\n case 'richtext':\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n \n case 'date':\n return <ReadOnlyDate fieldDef={fieldDef} value={value} />;\n \n case 'datetime':\n return <ReadOnlyDateTime fieldDef={fieldDef} value={value} />;\n \n case 'select':\n return <ReadOnlySelect fieldDef={fieldDef as any} value={value} />;\n \n case 'multiselect':\n return <ReadOnlyMultiSelect fieldDef={fieldDef as any} value={value} />;\n \n case 'repeatable':\n return <ReadOnlyRepeatable fieldDef={fieldDef as any} value={value} />;\n \n case 'image_upload':\n return <ReadOnlyImageUpload fieldDef={fieldDef} value={value} />;\n \n case 'signature':\n return <ReadOnlySignature fieldDef={fieldDef} value={value} />;\n\n default:\n // Fallback for unknown types - just display as text\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n }\n};\n","import React from 'react';\nimport { ReadOnlyFieldRenderer } from './ReadOnlyFieldRenderer';\nimport { Section } from '../ui/layouts/Section';\nimport type { FormDef } from '../core/types';\nimport type { SubmissionData } from '../core/submissionTypes';\n\ninterface ReadOnlyFormProps {\n schema: FormDef;\n submission: SubmissionData;\n}\n\nexport const ReadOnlyForm: React.FC<ReadOnlyFormProps> = ({ schema, submission }) => {\n const formData = submission.data || {};\n const fieldMap = new Map(schema.fields.map(f => [f.id, f]));\n\n return (\n <div className=\"space-y-6\">\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n <div className=\"text-sm text-gray-500 mt-1\">\n Version: {schema.version} | Status: {submission.status}\n {submission.context?.created_by_name && \n <span> | {submission.context.created_by_name}</span>\n }\n </div>\n {submission.created_at && (\n <div className=\"text-xs text-gray-400 mt-1\">\n Created: {new Date(submission.created_at).toLocaleString()} | \n Updated: {new Date(submission.updated_at).toLocaleString()}\n </div>\n )}\n </div>\n\n {schema.layout.map(node => {\n if (node.type === 'section') {\n // Filter to only show fields that exist in the schema\n const visibleFields = node.children\n .map(fieldId => {\n const fieldDef = fieldMap.get(fieldId);\n return fieldDef ? { fieldId, fieldDef } : null;\n })\n .filter((f): f is { fieldId: string; fieldDef: NonNullable<ReturnType<typeof fieldMap.get>> } => f !== null);\n\n if (visibleFields.length === 0) return null;\n\n return (\n <Section key={node.id} title={node.title}>\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n />\n ))}\n </Section>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from 'react';\nimport { useForm } from './useForm';\nimport { Button } from '../ui/shadcn/button';\n\nexport interface FormControlsProps {\n className?: string;\n onSaveDraft?: () => void;\n onSubmit?: (to: string) => void;\n}\n\nexport const FormControls: React.FC<FormControlsProps> = ({ \n className, \n onSaveDraft, \n onSubmit \n}) => {\n const { state, availableTransitions, submit, transition, hasPersistence, markSubmitAttempted } = useForm();\n\n // Determine if draft save is available\n // Available if: callback provided OR (persistence configured AND submit function exists)\n const draftAvailable = onSaveDraft || (hasPersistence && submit);\n \n // Determine if submit is available\n // Available if: callback provided OR (transitions exist AND transition function exists)\n const submitAvailable = onSubmit || (availableTransitions.length > 0 && transition);\n\n // Only render if at least one action is available\n if (!draftAvailable && !submitAvailable) {\n return null;\n }\n\n return (\n <div className={`flex gap-4 items-center justify-between p-4 border-t bg-white ${className || ''}`}>\n <div className=\"flex items-center gap-4\">\n <span className=\"font-bold text-sm text-gray-700\">State: {state.workflowState}</span>\n <span className={`text-sm ${state.isValid ? \"text-green-600\" : \"text-red-600\"}`}>\n {state.isValid ? \"Valid\" : \"Invalid\"}\n </span>\n </div>\n\n <div className=\"flex gap-2\">\n {draftAvailable && (\n <Button \n onClick={onSaveDraft || submit} \n variant=\"outline\" \n size=\"sm\"\n >\n Save Draft\n </Button>\n )}\n\n {submitAvailable && (\n <>\n {availableTransitions.length > 0 ? (\n availableTransitions.map((t) => (\n <Button\n key={t.to}\n onClick={() => {\n markSubmitAttempted();\n if (onSubmit) {\n onSubmit(t.to);\n } else {\n transition(t.to);\n }\n }}\n disabled={!state.isValid}\n size=\"sm\"\n >\n {availableTransitions.length > 1 ? `Submit to ${t.to}` : \"Submit\"}\n </Button>\n ))\n ) : onSubmit ? (\n <Button\n onClick={() => {\n markSubmitAttempted();\n onSubmit(state.workflowState || \"submit\");\n }}\n disabled={!state.isValid}\n size=\"sm\"\n >\n Submit\n </Button>\n ) : null}\n </>\n )}\n </div>\n </div>\n );\n};\n","export interface PresignedUploadResponse {\n presigned_url: string;\n s3_key: string;\n expires_in: number;\n content_type: string;\n upload_method: 'PUT' | 'POST';\n}\n\nexport interface CreateUploadHandlerOptions {\n apiBaseUrl: string;\n headers?: Record<string, string>; // For auth headers, etc.\n}\n\n/**\n * Creates an upload handler function that can be passed to FormProvider\n * This handles the complete upload flow: get presigned URL -> upload to S3 -> return S3 key\n */\nexport function createUploadHandler(options: CreateUploadHandlerOptions) {\n const { apiBaseUrl, headers = {} } = options;\n\n return async (file: File | Blob, filename: string): Promise<string> => {\n // Step 1: Get presigned URL from your API\n const response = await fetch(`${apiBaseUrl}/api/forms/media-upload/`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: JSON.stringify({ filename }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get presigned URL: ${response.statusText}`);\n }\n\n const presignedData: PresignedUploadResponse = await response.json();\n\n // Step 2: Upload file to S3 using presigned URL\n const uploadResponse = await fetch(presignedData.presigned_url, {\n method: presignedData.upload_method,\n headers: {\n 'Content-Type': presignedData.content_type,\n },\n body: file,\n });\n\n if (!uploadResponse.ok) {\n throw new Error(`Failed to upload file: ${uploadResponse.statusText}`);\n }\n\n // Step 3: Return the S3 key for storage in form data\n return presignedData.s3_key;\n };\n}\n\n/**\n * Example usage:\n * \n * const uploadHandler = createUploadHandler({\n * apiBaseUrl: 'https://your-api.com',\n * headers: {\n * 'Authorization': `Bearer ${token}`,\n * },\n * });\n * \n * <FormProvider\n * schema={schema}\n * config={{\n * onUpload: uploadHandler,\n * // ... other config\n * }}\n * >\n * <DynamicForm />\n * </FormProvider>\n */"]}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "formanitor",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "dev": "vite",
20
+ "build": "tsup",
21
+ "build:lib": "tsup",
22
+ "build:demo": "tsc -b && vite build",
23
+ "lint": "eslint .",
24
+ "preview": "vite preview",
25
+ "prepare": "npm run build"
26
+ },
27
+ "peerDependencies": {
28
+ "react": "^19.0.0",
29
+ "react-dom": "^19.0.0"
30
+ },
31
+ "dependencies": {
32
+ "@radix-ui/react-checkbox": "^1.3.3",
33
+ "@radix-ui/react-dialog": "^1.1.15",
34
+ "@radix-ui/react-label": "^2.1.8",
35
+ "@radix-ui/react-popover": "^1.1.15",
36
+ "@radix-ui/react-radio-group": "^1.3.8",
37
+ "@radix-ui/react-select": "^2.2.6",
38
+ "@radix-ui/react-separator": "^1.1.8",
39
+ "@radix-ui/react-slider": "^1.3.6",
40
+ "@radix-ui/react-slot": "^1.2.4",
41
+ "@radix-ui/react-tooltip": "^1.2.8",
42
+ "@tanstack/react-table": "^8.21.3",
43
+ "class-variance-authority": "^0.7.1",
44
+ "clsx": "^2.1.1",
45
+ "cmdk": "^1.1.1",
46
+ "date-fns": "^4.1.0",
47
+ "lucide-react": "^0.562.0",
48
+ "react-day-picker": "^9.13.0",
49
+ "react-json-view": "^1.21.3",
50
+ "tailwind-merge": "^3.4.0",
51
+ "tailwindcss-animate": "^1.0.7",
52
+ "vaul": "^1.1.2"
53
+ },
54
+ "devDependencies": {
55
+ "@eslint/js": "^9.39.1",
56
+ "@types/node": "^24.10.1",
57
+ "@types/react": "^19.2.5",
58
+ "@types/react-dom": "^19.2.3",
59
+ "@vitejs/plugin-react": "^5.1.1",
60
+ "autoprefixer": "^10.4.23",
61
+ "eslint": "^9.39.1",
62
+ "eslint-plugin-react-hooks": "^7.0.1",
63
+ "eslint-plugin-react-refresh": "^0.4.24",
64
+ "globals": "^16.5.0",
65
+ "postcss": "^8.5.6",
66
+ "react": "^19.2.0",
67
+ "react-dom": "^19.2.0",
68
+ "tailwindcss": "^3.4.19",
69
+ "tsup": "^8.5.1",
70
+ "typescript": "~5.9.3",
71
+ "typescript-eslint": "^8.46.4",
72
+ "vite": "^7.2.4",
73
+ "vite-plugin-dts": "^4.5.4"
74
+ }
75
+ }