formanitor 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +26 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.mjs +26 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +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/ui/shadcn/radio-group.tsx","../src/ui/widgets/Radio.tsx","../src/ui/widgets/Checkbox.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.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/ReadOnlyTable.tsx","../src/ui/widgets/ReadOnlyDateTime.tsx","../src/ui/widgets/ReadOnlyRadio.tsx","../src/ui/widgets/ReadOnlyCheckbox.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","useMemo","def","Trash2","Fragment","React22","ChevronDown","ChevronRight","Image","useReactTable","getCoreRowModel","flexRender","isOptionSelected"],"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 if (field.type === 'static_text') continue;\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 * Prefill is applied for every field that has a value in prefill (no empty check).\n * Strategy:\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 // 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","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 pendingUploads: 0\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.type === 'static_text') return; // No value; display-only\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 if (field.type === 'checkbox') 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 (field.type === 'static_text') {\n delete result[field.id];\n return;\n }\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 // Extract the plain S3 key whether raw is a string or an\n // already-wrapped object (from a backend round-trip via prefill).\n const key = typeof raw === 'string'\n ? raw\n : (raw.s3_key || raw.value || null);\n\n if (key && typeof key === 'string') {\n result[field.id] = {\n _type: 's3_key',\n value: key,\n };\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 raw = this.state.values[fieldId];\n const fieldDef = this.fieldMap[fieldId];\n const options = fieldDef?.type === 'select' || fieldDef?.type === 'multiselect' || fieldDef?.type === 'radio' || fieldDef?.type === 'checkbox'\n ? (fieldDef as { options?: { value: any; score?: number }[] }).options\n : undefined;\n const hasScoreOptions = options?.some((o: { score?: number }) => o.score !== undefined);\n let val: number;\n if (hasScoreOptions && options) {\n const selected = fieldDef?.type === 'multiselect' || fieldDef?.type === 'checkbox'\n ? (Array.isArray(raw) ? raw : [raw]).filter(Boolean)\n : [raw];\n val = selected.reduce((s, v) => {\n const opt = options.find((o: { value: any }) => o.value === v || String(o.value) === String(v));\n return s + (opt && 'score' in opt && typeof opt.score === 'number' ? opt.score : 0);\n }, 0);\n } else {\n val = Number(raw) || 0;\n }\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 /**\n * Update mutable config properties (callbacks, role) without recreating\n * the store. This allows the host app to pass fresh closures (e.g. an\n * upload handler whose auth token was initially undefined) after the\n * initial render.\n */\n updateConfig(next: Partial<StoreConfig>) {\n let needsReeval = false;\n\n if (next.onUpload !== undefined) this.config.onUpload = next.onUpload;\n if (next.onEvent !== undefined) this.config.onEvent = next.onEvent;\n\n if (next.role !== undefined && next.role !== this.config.role) {\n this.config.role = next.role;\n needsReeval = true;\n }\n\n if (needsReeval) {\n this.evaluate();\n this.notify();\n }\n }\n\n getUploadHandler(): UploadHandler | undefined {\n return this.config.onUpload;\n }\n\n private preSubmitHandlers: Map<string, () => Promise<void>> = new Map();\n\n registerPreSubmitHandler(fieldId: string, fn: () => Promise<void>) {\n this.preSubmitHandlers.set(fieldId, fn);\n }\n\n unregisterPreSubmitHandler(fieldId: string) {\n this.preSubmitHandlers.delete(fieldId);\n }\n\n /**\n * Runs all registered pre-submit handlers in parallel.\n * Call this before getSerializedValuesForSubmission() to ensure any\n * unconfirmed signatures (or similar) are uploaded first.\n */\n async flushPendingUploads(): Promise<void> {\n const handlers = Array.from(this.preSubmitHandlers.values());\n await Promise.all(handlers.map(fn => fn()));\n }\n\n incrementPendingUploads() {\n this.state.pendingUploads = (this.state.pendingUploads ?? 0) + 1;\n this.notify();\n }\n\n decrementPendingUploads() {\n this.state.pendingUploads = Math.max(0, (this.state.pendingUploads ?? 0) - 1);\n this.notify();\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 // Keep mutable config (callbacks, role) in sync across re-renders so the\n // store always uses the latest upload handler / event listener / role.\n useEffect(() => {\n if (storeRef.current && config) {\n storeRef.current.updateConfig(config);\n }\n });\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 flushPendingUploads: store.flushPendingUploads.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 /** Height in pixels. If not provided, uses default min height (80px). */\n height?: number;\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, height, style, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex 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 height == null && \"min-h-[80px]\",\n className\n )}\n ref={ref}\n style={height != null ? { ...style, height: `${height}px` } : style}\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 const isTextarea = fieldDef.type === 'textarea' || fieldDef.type === 'richtext';\n const height = isTextarea && 'height' in fieldDef ? fieldDef.height : undefined;\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 {...(isTextarea && { height })}\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 store.incrementPendingUploads();\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 store.decrementPendingUploads();\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, useMemo } 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/**\n * Extract a browser-displayable URL from the field value.\n *\n * The value stored in the form can be:\n * - null/undefined → no signature\n * - plain string (S3 key) → NOT displayable by a browser\n * - object { presigned_url, … } → displayable via presigned_url\n *\n * We only return a URL when the backend has resolved a presigned_url.\n * This avoids ever trying to render an S3 key as an <img src>.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractDisplayUrl(value: any): string | null {\n if (!value || typeof value !== 'object') return null;\n if (typeof value.presigned_url === 'string' && value.presigned_url) {\n return value.presigned_url;\n }\n return null;\n}\n\n/* ---------------- component ---------------- */\n\nexport const SignatureUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, setValue, setTouched, error, disabled, touched, value } = 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 [hasDrawing, setHasDrawing] = useState(false); // canvas has strokes\n const [isUploading, setIsUploading] = useState(false);\n const [isConfirmed, setIsConfirmed] = useState(false); // signature was uploaded\n const [uploadError, setUploadError] = useState<string | null>(null);\n\n // Stable ref so the pre-submit handler always calls the latest closure\n // without needing to re-register on every render.\n const confirmSignatureRef = useRef<(() => Promise<void>) | null>(null);\n\n // Register/deregister with the store whenever pending-confirm state changes.\n useEffect(() => {\n if (hasDrawing && !isConfirmed) {\n store.registerPreSubmitHandler(fieldId, async () => {\n if (confirmSignatureRef.current) {\n await confirmSignatureRef.current();\n }\n });\n } else {\n store.unregisterPreSubmitHandler(fieldId);\n }\n return () => {\n store.unregisterPreSubmitHandler(fieldId);\n };\n }, [hasDrawing, isConfirmed, fieldId, store]);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n // ── Derived state ──────────────────────────────────────────────\n // Only objects with presigned_url (from backend/prefill) are displayable.\n // Plain S3 keys stored after upload are NOT displayable, so this returns\n // null and the component stays in canvas mode naturally.\n const displayUrl = useMemo(() => extractDisplayUrl(value), [value]);\n const showPreview = displayUrl !== null;\n\n // ── Canvas setup ───────────────────────────────────────────────\n // Runs whenever the canvas enters the DOM (when switching from preview → canvas).\n useEffect(() => {\n if (showPreview) return; // canvas not in DOM\n\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 ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = '#000';\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, width, height);\n }, [showPreview]);\n\n // ── Early exits (after all hooks) ─────────────────────────────\n const uploadHandler = store.getUploadHandler();\n if (!fieldDef || !uploadHandler) return null;\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 setIsConfirmed(false); // reset if user starts re-drawing\n setUploadError(null);\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 setHasDrawing(true);\n };\n\n const stopDrawing = () => {\n setIsDrawing(false);\n lastPointRef.current = null;\n lastTimeRef.current = null;\n };\n\n /* ---------------- actions ---------------- */\n\n const clearSignature = () => {\n if (showPreview) {\n // Delete existing backend signature → value becomes null →\n // displayUrl becomes null → showPreview flips to false →\n // canvas mounts automatically via the conditional render.\n setValue(null);\n setTouched();\n return;\n }\n\n // Clear the drawing canvas\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (canvas && ctx) {\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, 400, 200);\n }\n\n pathRef.current = '';\n lastPointRef.current = null;\n setHasDrawing(false);\n setIsConfirmed(false);\n setValue(null);\n setTouched();\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 (!hasDrawing) return;\n\n setIsUploading(true);\n setUploadError(null);\n setTouched();\n store.incrementPendingUploads();\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\n // Store the S3 key. This is NOT a displayable URL, so\n // extractDisplayUrl returns null → showPreview stays false →\n // canvas remains visible with the user's drawing intact.\n setValue(key);\n setIsConfirmed(true);\n setHasDrawing(false); // disable confirm button\n } catch (err) {\n console.error('[SignatureUpload] Upload failed:', err);\n setUploadError(\n err instanceof Error ? err.message : 'Signature upload failed. Please try again.'\n );\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n confirmSignatureRef.current = confirmSignature;\n\n // Whether the trash button should be enabled\n const canClear = showPreview ? !disabled : (hasDrawing || isConfirmed);\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 {showPreview ? (\n /* ── Preview mode: existing signature from backend ── */\n <div className=\"relative\">\n <div className=\"border border-gray-200 rounded bg-white flex items-center justify-start p-2\">\n <img\n src={displayUrl}\n alt=\"Signature\"\n className=\"object-contain max-w-full\"\n style={{ width: 400, height: 200 }}\n />\n </div>\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute top-2 left-2 bg-white/80 hover:bg-red-50\"\n onClick={clearSignature}\n disabled={!canClear}\n title=\"Delete signature and draw a new one\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n /* ── Canvas mode: drawing / confirmed ── */\n <>\n <div className=\"relative\">\n <canvas\n ref={canvasRef}\n className={`border rounded touch-none ${\n isConfirmed\n ? 'border-green-300 cursor-default'\n : 'border-gray-200 cursor-crosshair'\n }`}\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={clearSignature}\n disabled={!canClear}\n title={isConfirmed ? 'Clear saved signature' : 'Clear canvas'}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {isConfirmed ? (\n <div className=\"flex items-center gap-2 text-sm text-green-600\">\n <Check className=\"h-4 w-4\" />\n <span>Signature saved</span>\n </div>\n ) : (\n <>\n <Button\n type=\"button\"\n onClick={confirmSignature}\n disabled={!hasDrawing || isUploading}\n className=\"text-xs\"\n >\n <Check className=\"h-4 w-4 mr-1\" />\n {isUploading ? 'Saving…' : 'Confirm'}\n </Button>\n {uploadError && (\n <p className=\"text-xs text-red-500 mt-1\">{uploadError}</p>\n )}\n </>\n )}\n </>\n )}\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 type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\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 { DateTimePicker } from \"../shadcn/datetime-picker\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data (matches EditableTableColumnDef + runtime)\ninterface TableColumn {\n id: string;\n label: string;\n allowDelete?: boolean;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Editable Table widget. Schema (editable_table field):\n *\n * {\n * id: string,\n * type: \"editable_table\",\n * label: string,\n * allowAddRow?: boolean, // default true\n * allowAddColumn?: boolean, // default true\n * allowDeleteRow?: boolean, // default true\n * allowDeleteColumn?: boolean, // default true\n * addRowLabel?: string, // default \"Add Row\"\n * addColumnLabel?: string, // default \"Add Column\"\n * newColumnNameHint?: string, // placeholder for new column input; default \"New Column Name\"\n * newColumnNameInputType?: \"text\" | \"datetime\", // default \"text\"; \"datetime\" uses a date-time picker for column name\n * minRows?: number, // minimum rows to keep; row delete hidden when rows.length <= minRows; default 0\n * columns?: Array<{\n * id: string,\n * label: string,\n * allowDelete?: boolean // if false, delete button for this column is hidden; default true\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 const minRows = def?.minRows ?? 0;\n const addRowLabel = def?.addRowLabel ?? \"Add Row\";\n const addColumnLabel = def?.addColumnLabel ?? \"Add Column\";\n const newColumnNameHint = def?.newColumnNameHint ?? \"New Column Name\";\n const newColumnNameInputType = def?.newColumnNameInputType ?? \"text\";\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 const cols = (def?.columns || []).map((c) => ({\n id: c.id,\n label: c.label,\n allowDelete: c.allowDelete !== false,\n }));\n return {\n columns: cols,\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 const [newColumnDate, setNewColumnDate] = useState<Date | undefined>(undefined);\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 addColumnFromText = () => {\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.trim(), allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n const addColumnFromDate = (date: Date | undefined) => {\n if (!date) return;\n const currentData = dataRef.current;\n const label = format(date, \"PPP HH:mm\");\n const colId = \"col_\" + date.getTime();\n const newCol: TableColumn = { id: colId, label, allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnDate(undefined);\n };\n\n const hasValidNewColumn =\n newColumnNameInputType === \"datetime\"\n ? !!newColumnDate\n : !!newColumnName.trim();\n const addColumn = () => {\n if (newColumnNameInputType === \"datetime\") {\n addColumnFromDate(newColumnDate);\n } else {\n addColumnFromText();\n }\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 const showColumnDelete =\n !disabled &&\n canDeleteColumn &&\n (col.allowDelete !== false);\n return {\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {showColumnDelete && (\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\n const showRowDelete = !disabled && canDeleteRow && tableData.rows.length > minRows;\n // Add delete row column\n if (showRowDelete) {\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, tableData.rows.length, disabled, canDeleteRow, canDeleteColumn, minRows]); // columns structure + row count for delete visibility\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\" /> {addRowLabel}\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center flex-wrap\">\n {newColumnNameInputType === \"datetime\" ? (\n <>\n <DateTimePicker\n dateTime={newColumnDate}\n setDateTime={setNewColumnDate}\n placeholder={newColumnNameHint}\n className=\"w-[280px]\"\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n ) : (\n <>\n <Input\n placeholder={newColumnNameHint}\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={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus: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 {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { RadioGroup, RadioGroupItem } from '../shadcn/radio-group';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\n\nexport const RadioWidget: 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 RadioFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const handleChange = (val: string) => {\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n };\n\n return (\n <div className=\"space-y-2\">\n <Label className={showError ? 'text-red-600' : ''}>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n\n <RadioGroup\n value={value != null ? String(value) : undefined}\n onValueChange={handleChange}\n disabled={disabled || loading}\n className=\"flex flex-col gap-2\"\n >\n {options.map(opt => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <RadioGroupItem\n id={`${fieldId}-${String(opt.value)}`}\n value={String(opt.value)}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </RadioGroup>\n\n {loading && (\n <p className=\"text-xs text-muted-foreground\">Loading options...</p>\n )}\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\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 { Checkbox as CheckboxPrimitive } from '../shadcn/checkbox';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { CheckboxFieldDef } from '../../core/types';\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const CheckboxWidget: 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 const selectedValues = Array.isArray(value) ? value : [];\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as CheckboxFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const toggleOption = (optValue: any) => {\n const isSelected = isOptionSelected(selectedValues, optValue);\n const newValues = isSelected\n ? selectedValues.filter((v) => v !== optValue && String(v) !== String(optValue))\n : [...selectedValues, optValue];\n setValue(newValues);\n setTouched();\n };\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <Label className={showError ? 'text-red-600' : ''}>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n\n <div\n className={`border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled || loading ? 'opacity-50 pointer-events-none' : ''}`}\n >\n {loading && (\n <div className=\"text-sm text-muted-foreground\">Loading options...</div>\n )}\n {!loading &&\n options.map((opt) => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <CheckboxPrimitive\n id={`${fieldId}-${String(opt.value)}`}\n checked={isOptionSelected(selectedValues, opt.value)}\n onCheckedChange={() => toggleOption(opt.value)}\n disabled={disabled}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </div>\n\n {fieldDef.description && (\n <p className=\"text-xs text-muted-foreground\">{fieldDef.description}</p>\n )}\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport type { StaticTextFieldDef } from '../core/types';\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';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\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 'radio':\n return <RadioWidget fieldId={fieldId} />;\n \n case 'checkbox':\n return <CheckboxWidget 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 case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div className={`${labelClass} text-muted-foreground`}>\n {def.label}\n {def.description && (\n <p className={`mt-1 ${descClass} opacity-90`}>{def.description}</p>\n )}\n </div>\n );\n }\n\n default:\n return <div className=\"text-red-500\">Unknown field type: {fieldDef.type}</div>;\n }\n};\n","import React, { useState } from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\ninterface SectionProps {\n title: string;\n children: React.ReactNode;\n}\n\nexport const Section: React.FC<SectionProps> = ({ title, children }) => {\n const [expanded, setExpanded] = useState(true);\n\n const handleToggle = () => setExpanded((prev) => !prev);\n\n const contentClassName = cn(\n 'overflow-hidden transition-[height] duration-200 ease-in-out',\n !expanded && 'hidden'\n );\n\n return (\n <div className=\"mb-6 border rounded-lg bg-white shadow-sm overflow-hidden\">\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"w-full flex items-center justify-between gap-2 p-4 text-left border-b hover:bg-gray-50/80 transition-colors\"\n >\n <h3 className=\"text-lg font-medium\">{title}</h3>\n <span className=\"flex-shrink-0 text-muted-foreground\" aria-hidden>\n {expanded ? (\n <ChevronDown className=\"h-5 w-5\" />\n ) : (\n <ChevronRight className=\"h-5 w-5\" />\n )}\n </span>\n </button>\n <div className={contentClassName}>\n <div className=\"p-4 pt-4 space-y-4 border-t-0\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\ninterface ColumnLayoutProps {\n /** Number of columns. Children take equal width. */\n columns: number;\n /** Optional label shown above the row of fields. */\n label?: string;\n children: React.ReactNode;\n}\n\nexport const ColumnLayout: React.FC<ColumnLayoutProps> = ({\n columns,\n label,\n children,\n}) => {\n const gridCols = Math.max(1, Math.min(columns, 12));\n const gridClass = `grid gap-4 w-full`;\n const style = {\n gridTemplateColumns: `repeat(${gridCols}, minmax(0, 1fr))`,\n };\n\n return (\n <div className=\"mb-6\">\n {label != null && label !== '' && (\n <div className=\"mb-2 text-sm font-medium text-gray-700\">{label}</div>\n )}\n <div className={gridClass} style={style}>\n {children}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { useFormStore } from './FormProvider';\nimport { FieldRenderer } from './FieldRenderer';\nimport { Section } from '../ui/layouts/Section';\nimport { ColumnLayout } from '../ui/layouts/ColumnLayout';\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 return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) =>\n typeof child === 'string' ? (\n <FieldRenderer key={child} fieldId={child} />\n ) : child.type === 'column_layout' ? (\n <ColumnLayout\n key={child.id}\n columns={child.columns}\n label={child.label}\n >\n {child.children.map(fieldId => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n ) : (\n <React.Fragment key={child.id ?? index} />\n )\n )}\n </Section>\n );\n }\n if (node.type === 'column_layout') {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map(fieldId => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\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] whitespace-pre-wrap\">\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, { useMemo } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport type { BaseFieldDef } from \"../../core/types\";\n\ninterface TableColumn {\n id: string;\n label: string;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface ReadOnlyTableProps {\n fieldDef: BaseFieldDef;\n // Value may be the stored table data { columns, rows } or undefined\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlyTable: React.FC<ReadOnlyTableProps> = ({\n fieldDef,\n value,\n}) => {\n const tableData: TableData = useMemo(() => {\n if (\n value &&\n typeof value === \"object\" &&\n \"columns\" in value &&\n \"rows\" in value &&\n Array.isArray(value.columns) &&\n Array.isArray(value.rows)\n ) {\n return value as TableData;\n }\n return { columns: [], rows: [] };\n }, [value]);\n\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n return tableData.columns.map((col) => ({\n accessorKey: col.id,\n header: col.label,\n cell: (info: { getValue: () => unknown }) =>\n (info.getValue() as string) ?? \"\",\n }));\n }, [tableData.columns]);\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\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 key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-2\">\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-16 text-center text-muted-foreground\"\n >\n No data\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n );\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 & time selected</span>\n )}\n </div>\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\n\ninterface ReadOnlyRadioProps {\n fieldDef: RadioFieldDef;\n value: any;\n}\n\nexport const ReadOnlyRadio: React.FC<ReadOnlyRadioProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedOption = options.find(opt =>\n String(opt.value) === String(value) || opt.value === value\n );\n const displayValue = selectedOption ? selectedOption.label : (value ?? '');\n const isEmpty = value == null || value === '';\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 { CheckboxFieldDef } from '../../core/types';\n\ninterface ReadOnlyCheckboxProps {\n fieldDef: CheckboxFieldDef;\n value: any;\n}\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n if (!Array.isArray(selected)) return false;\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const ReadOnlyCheckbox: React.FC<ReadOnlyCheckboxProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedValues = Array.isArray(value) ? value : [];\n const selectedLabels = options\n .filter((opt) => isOptionSelected(selectedValues, opt.value))\n .map((opt) => opt.label);\n const displayText = selectedLabels.length\n ? selectedLabels.join(', ')\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 {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : (\n displayText\n )}\n </div>\n </div>\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 { ReadOnlyTable } from '../ui/widgets/ReadOnlyTable';\nimport { ReadOnlyDateTime } from '../ui/widgets/ReadOnlyDateTime';\nimport { ReadOnlyRadio } from '../ui/widgets/ReadOnlyRadio';\nimport { ReadOnlyCheckbox } from '../ui/widgets/ReadOnlyCheckbox';\nimport type { FieldDef, StaticTextFieldDef } 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 'radio':\n return <ReadOnlyRadio fieldDef={fieldDef as any} value={value} />;\n \n case 'checkbox':\n return <ReadOnlyCheckbox 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 case 'editable_table':\n return <ReadOnlyTable fieldDef={fieldDef} value={value} />;\n\n case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div className={`${labelClass} text-muted-foreground`}>\n {def.label}\n {def.description && (\n <p className={`mt-1 ${descClass} opacity-90`}>{def.description}</p>\n )}\n </div>\n );\n }\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 { ColumnLayout } from '../ui/layouts/ColumnLayout';\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 const renderSectionChild = (child: string | { type: string; id: string; columns?: number; label?: string; children: string[] }, index: number): React.ReactNode => {\n if (typeof child === 'string') {\n const fieldDef = fieldMap.get(child);\n return fieldDef ? (\n <ReadOnlyFieldRenderer\n key={child}\n fieldDef={fieldDef}\n value={formData[child]}\n />\n ) : null;\n }\n if (child.type === 'column_layout' && child.children) {\n const visibleFields = child.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 return (\n <ColumnLayout\n key={child.id}\n columns={child.columns ?? 1}\n label={child.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n />\n ))}\n </ColumnLayout>\n );\n }\n return <React.Fragment key={child.id ?? index} />;\n };\n\n const hasContent = node.children.some(child =>\n typeof child === 'string' ? fieldMap.has(child) : (child.type === 'column_layout' && child.children?.some(id => fieldMap.has(id)))\n );\n if (!hasContent) return null;\n\n return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) => renderSectionChild(child, index))}\n </Section>\n );\n }\n if (node.type === 'column_layout') {\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 <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n />\n ))}\n </ColumnLayout>\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 const hasUploadsInFlight = (state.pendingUploads ?? 0) > 0;\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 disabled={hasUploadsInFlight}\n >\n {hasUploadsInFlight ? 'Upload in progress…' : '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 || hasUploadsInFlight}\n size=\"sm\"\n >\n {hasUploadsInFlight ? 'Upload in progress…' : 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 || hasUploadsInFlight}\n size=\"sm\"\n >\n {hasUploadsInFlight ? 'Upload in progress…' : '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 */"]}
|
|
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/ui/shadcn/radio-group.tsx","../src/ui/widgets/Radio.tsx","../src/ui/widgets/Checkbox.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.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/ReadOnlyTable.tsx","../src/ui/widgets/ReadOnlyDateTime.tsx","../src/ui/widgets/ReadOnlyRadio.tsx","../src/ui/widgets/ReadOnlyCheckbox.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","useMemo","def","Trash2","Fragment","React22","ChevronDown","ChevronRight","Image","useReactTable","getCoreRowModel","flexRender","isOptionSelected"],"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 if (field.type === 'static_text') continue;\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 * Prefill is applied for every field that has a value in prefill (no empty check).\n * Strategy:\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 // 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","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>;\ntype DraftChangeHandler = (payload: SavedState) => void | Promise<void>;\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 onDraftChange?: DraftChangeHandler; // Consumer-provided draft submission handler\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 private draftCallbackTimeout: 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 pendingUploads: 0\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.type === 'static_text') return; // No value; display-only\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 if (field.type === 'checkbox') 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.scheduleDraftCallback();\n\n // If a consumer draft handler is provided, prefer that over internal persistence.\n if (!this.config.onDraftChange) {\n this.scheduleSave();\n }\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 private scheduleDraftCallback() {\n if (!this.config.onDraftChange) return;\n\n if (this.draftCallbackTimeout) {\n clearTimeout(this.draftCallbackTimeout);\n }\n\n this.draftCallbackTimeout = setTimeout(() => {\n const payload: SavedState = {\n // For consumer callbacks, send values in the same\n // serialized shape used for outbound submissions so\n // media/signature fields are wrapped consistently.\n values: this.serializeValuesForSubmission(this.state.values),\n meta: {\n updatedAt: Date.now(),\n workflowState: this.state.workflowState,\n version: this.schema.version,\n },\n };\n\n this.config.onDraftChange?.(payload);\n }, 2500);\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 (field.type === 'static_text') {\n delete result[field.id];\n return;\n }\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 // Extract the plain S3 key whether raw is a string or an\n // already-wrapped object (from a backend round-trip via prefill).\n const key = typeof raw === 'string'\n ? raw\n : (raw.s3_key || raw.value || null);\n\n if (key && typeof key === 'string') {\n result[field.id] = {\n _type: 's3_key',\n value: key,\n };\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 raw = this.state.values[fieldId];\n const fieldDef = this.fieldMap[fieldId];\n const options = fieldDef?.type === 'select' || fieldDef?.type === 'multiselect' || fieldDef?.type === 'radio' || fieldDef?.type === 'checkbox'\n ? (fieldDef as { options?: { value: any; score?: number }[] }).options\n : undefined;\n const hasScoreOptions = options?.some((o: { score?: number }) => o.score !== undefined);\n let val: number;\n if (hasScoreOptions && options) {\n const selected = fieldDef?.type === 'multiselect' || fieldDef?.type === 'checkbox'\n ? (Array.isArray(raw) ? raw : [raw]).filter(Boolean)\n : [raw];\n val = selected.reduce((s, v) => {\n const opt = options.find((o: { value: any }) => o.value === v || String(o.value) === String(v));\n return s + (opt && 'score' in opt && typeof opt.score === 'number' ? opt.score : 0);\n }, 0);\n } else {\n val = Number(raw) || 0;\n }\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 /**\n * Update mutable config properties (callbacks, role) without recreating\n * the store. This allows the host app to pass fresh closures (e.g. an\n * upload handler whose auth token was initially undefined) after the\n * initial render.\n */\n updateConfig(next: Partial<StoreConfig>) {\n let needsReeval = false;\n\n if (next.onUpload !== undefined) this.config.onUpload = next.onUpload;\n if (next.onEvent !== undefined) this.config.onEvent = next.onEvent;\n if (next.onDraftChange !== undefined) this.config.onDraftChange = next.onDraftChange;\n\n if (next.role !== undefined && next.role !== this.config.role) {\n this.config.role = next.role;\n needsReeval = true;\n }\n\n if (needsReeval) {\n this.evaluate();\n this.notify();\n }\n }\n\n getUploadHandler(): UploadHandler | undefined {\n return this.config.onUpload;\n }\n\n private preSubmitHandlers: Map<string, () => Promise<void>> = new Map();\n\n registerPreSubmitHandler(fieldId: string, fn: () => Promise<void>) {\n this.preSubmitHandlers.set(fieldId, fn);\n }\n\n unregisterPreSubmitHandler(fieldId: string) {\n this.preSubmitHandlers.delete(fieldId);\n }\n\n /**\n * Runs all registered pre-submit handlers in parallel.\n * Call this before getSerializedValuesForSubmission() to ensure any\n * unconfirmed signatures (or similar) are uploaded first.\n */\n async flushPendingUploads(): Promise<void> {\n const handlers = Array.from(this.preSubmitHandlers.values());\n await Promise.all(handlers.map(fn => fn()));\n }\n\n incrementPendingUploads() {\n this.state.pendingUploads = (this.state.pendingUploads ?? 0) + 1;\n this.notify();\n }\n\n decrementPendingUploads() {\n this.state.pendingUploads = Math.max(0, (this.state.pendingUploads ?? 0) - 1);\n this.notify();\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 // Keep mutable config (callbacks, role) in sync across re-renders so the\n // store always uses the latest upload handler / event listener / role.\n useEffect(() => {\n if (storeRef.current && config) {\n storeRef.current.updateConfig(config);\n }\n });\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 flushPendingUploads: store.flushPendingUploads.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 /** Height in pixels. If not provided, uses default min height (80px). */\n height?: number;\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, height, style, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex 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 height == null && \"min-h-[80px]\",\n className\n )}\n ref={ref}\n style={height != null ? { ...style, height: `${height}px` } : style}\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 const isTextarea = fieldDef.type === 'textarea' || fieldDef.type === 'richtext';\n const height = isTextarea && 'height' in fieldDef ? fieldDef.height : undefined;\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 {...(isTextarea && { height })}\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 store.incrementPendingUploads();\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 store.decrementPendingUploads();\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, useMemo } 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/**\n * Extract a browser-displayable URL from the field value.\n *\n * The value stored in the form can be:\n * - null/undefined → no signature\n * - plain string (S3 key) → NOT displayable by a browser\n * - object { presigned_url, … } → displayable via presigned_url\n *\n * We only return a URL when the backend has resolved a presigned_url.\n * This avoids ever trying to render an S3 key as an <img src>.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractDisplayUrl(value: any): string | null {\n if (!value || typeof value !== 'object') return null;\n if (typeof value.presigned_url === 'string' && value.presigned_url) {\n return value.presigned_url;\n }\n return null;\n}\n\n/* ---------------- component ---------------- */\n\nexport const SignatureUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, setValue, setTouched, error, disabled, touched, value } = 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 [hasDrawing, setHasDrawing] = useState(false); // canvas has strokes\n const [isUploading, setIsUploading] = useState(false);\n const [isConfirmed, setIsConfirmed] = useState(false); // signature was uploaded\n const [uploadError, setUploadError] = useState<string | null>(null);\n\n // Stable ref so the pre-submit handler always calls the latest closure\n // without needing to re-register on every render.\n const confirmSignatureRef = useRef<(() => Promise<void>) | null>(null);\n\n // Register/deregister with the store whenever pending-confirm state changes.\n useEffect(() => {\n if (hasDrawing && !isConfirmed) {\n store.registerPreSubmitHandler(fieldId, async () => {\n if (confirmSignatureRef.current) {\n await confirmSignatureRef.current();\n }\n });\n } else {\n store.unregisterPreSubmitHandler(fieldId);\n }\n return () => {\n store.unregisterPreSubmitHandler(fieldId);\n };\n }, [hasDrawing, isConfirmed, fieldId, store]);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n // ── Derived state ──────────────────────────────────────────────\n // Only objects with presigned_url (from backend/prefill) are displayable.\n // Plain S3 keys stored after upload are NOT displayable, so this returns\n // null and the component stays in canvas mode naturally.\n const displayUrl = useMemo(() => extractDisplayUrl(value), [value]);\n const showPreview = displayUrl !== null;\n\n // ── Canvas setup ───────────────────────────────────────────────\n // Runs whenever the canvas enters the DOM (when switching from preview → canvas).\n useEffect(() => {\n if (showPreview) return; // canvas not in DOM\n\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 ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = '#000';\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, width, height);\n }, [showPreview]);\n\n // ── Early exits (after all hooks) ─────────────────────────────\n const uploadHandler = store.getUploadHandler();\n if (!fieldDef || !uploadHandler) return null;\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 setIsConfirmed(false); // reset if user starts re-drawing\n setUploadError(null);\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 setHasDrawing(true);\n };\n\n const stopDrawing = () => {\n setIsDrawing(false);\n lastPointRef.current = null;\n lastTimeRef.current = null;\n };\n\n /* ---------------- actions ---------------- */\n\n const clearSignature = () => {\n if (showPreview) {\n // Delete existing backend signature → value becomes null →\n // displayUrl becomes null → showPreview flips to false →\n // canvas mounts automatically via the conditional render.\n setValue(null);\n setTouched();\n return;\n }\n\n // Clear the drawing canvas\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (canvas && ctx) {\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, 400, 200);\n }\n\n pathRef.current = '';\n lastPointRef.current = null;\n setHasDrawing(false);\n setIsConfirmed(false);\n setValue(null);\n setTouched();\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 (!hasDrawing) return;\n\n setIsUploading(true);\n setUploadError(null);\n setTouched();\n store.incrementPendingUploads();\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\n // Store the S3 key. This is NOT a displayable URL, so\n // extractDisplayUrl returns null → showPreview stays false →\n // canvas remains visible with the user's drawing intact.\n setValue(key);\n setIsConfirmed(true);\n setHasDrawing(false); // disable confirm button\n } catch (err) {\n console.error('[SignatureUpload] Upload failed:', err);\n setUploadError(\n err instanceof Error ? err.message : 'Signature upload failed. Please try again.'\n );\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n confirmSignatureRef.current = confirmSignature;\n\n // Whether the trash button should be enabled\n const canClear = showPreview ? !disabled : (hasDrawing || isConfirmed);\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 {showPreview ? (\n /* ── Preview mode: existing signature from backend ── */\n <div className=\"relative\">\n <div className=\"border border-gray-200 rounded bg-white flex items-center justify-start p-2\">\n <img\n src={displayUrl}\n alt=\"Signature\"\n className=\"object-contain max-w-full\"\n style={{ width: 400, height: 200 }}\n />\n </div>\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute top-2 left-2 bg-white/80 hover:bg-red-50\"\n onClick={clearSignature}\n disabled={!canClear}\n title=\"Delete signature and draw a new one\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n /* ── Canvas mode: drawing / confirmed ── */\n <>\n <div className=\"relative\">\n <canvas\n ref={canvasRef}\n className={`border rounded touch-none ${\n isConfirmed\n ? 'border-green-300 cursor-default'\n : 'border-gray-200 cursor-crosshair'\n }`}\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={clearSignature}\n disabled={!canClear}\n title={isConfirmed ? 'Clear saved signature' : 'Clear canvas'}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {isConfirmed ? (\n <div className=\"flex items-center gap-2 text-sm text-green-600\">\n <Check className=\"h-4 w-4\" />\n <span>Signature saved</span>\n </div>\n ) : (\n <>\n <Button\n type=\"button\"\n onClick={confirmSignature}\n disabled={!hasDrawing || isUploading}\n className=\"text-xs\"\n >\n <Check className=\"h-4 w-4 mr-1\" />\n {isUploading ? 'Saving…' : 'Confirm'}\n </Button>\n {uploadError && (\n <p className=\"text-xs text-red-500 mt-1\">{uploadError}</p>\n )}\n </>\n )}\n </>\n )}\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 type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\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 { DateTimePicker } from \"../shadcn/datetime-picker\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data (matches EditableTableColumnDef + runtime)\ninterface TableColumn {\n id: string;\n label: string;\n allowDelete?: boolean;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Editable Table widget. Schema (editable_table field):\n *\n * {\n * id: string,\n * type: \"editable_table\",\n * label: string,\n * allowAddRow?: boolean, // default true\n * allowAddColumn?: boolean, // default true\n * allowDeleteRow?: boolean, // default true\n * allowDeleteColumn?: boolean, // default true\n * addRowLabel?: string, // default \"Add Row\"\n * addColumnLabel?: string, // default \"Add Column\"\n * newColumnNameHint?: string, // placeholder for new column input; default \"New Column Name\"\n * newColumnNameInputType?: \"text\" | \"datetime\", // default \"text\"; \"datetime\" uses a date-time picker for column name\n * minRows?: number, // minimum rows to keep; row delete hidden when rows.length <= minRows; default 0\n * columns?: Array<{\n * id: string,\n * label: string,\n * allowDelete?: boolean // if false, delete button for this column is hidden; default true\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 const minRows = def?.minRows ?? 0;\n const addRowLabel = def?.addRowLabel ?? \"Add Row\";\n const addColumnLabel = def?.addColumnLabel ?? \"Add Column\";\n const newColumnNameHint = def?.newColumnNameHint ?? \"New Column Name\";\n const newColumnNameInputType = def?.newColumnNameInputType ?? \"text\";\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 const cols = (def?.columns || []).map((c) => ({\n id: c.id,\n label: c.label,\n allowDelete: c.allowDelete !== false,\n }));\n return {\n columns: cols,\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 const [newColumnDate, setNewColumnDate] = useState<Date | undefined>(undefined);\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 addColumnFromText = () => {\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.trim(), allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n const addColumnFromDate = (date: Date | undefined) => {\n if (!date) return;\n const currentData = dataRef.current;\n const label = format(date, \"PPP HH:mm\");\n const colId = \"col_\" + date.getTime();\n const newCol: TableColumn = { id: colId, label, allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnDate(undefined);\n };\n\n const hasValidNewColumn =\n newColumnNameInputType === \"datetime\"\n ? !!newColumnDate\n : !!newColumnName.trim();\n const addColumn = () => {\n if (newColumnNameInputType === \"datetime\") {\n addColumnFromDate(newColumnDate);\n } else {\n addColumnFromText();\n }\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 const showColumnDelete =\n !disabled &&\n canDeleteColumn &&\n (col.allowDelete !== false);\n return {\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {showColumnDelete && (\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\n const showRowDelete = !disabled && canDeleteRow && tableData.rows.length > minRows;\n // Add delete row column\n if (showRowDelete) {\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, tableData.rows.length, disabled, canDeleteRow, canDeleteColumn, minRows]); // columns structure + row count for delete visibility\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\" /> {addRowLabel}\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center flex-wrap\">\n {newColumnNameInputType === \"datetime\" ? (\n <>\n <DateTimePicker\n dateTime={newColumnDate}\n setDateTime={setNewColumnDate}\n placeholder={newColumnNameHint}\n className=\"w-[280px]\"\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n ) : (\n <>\n <Input\n placeholder={newColumnNameHint}\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={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus: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 {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { RadioGroup, RadioGroupItem } from '../shadcn/radio-group';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\n\nexport const RadioWidget: 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 RadioFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const handleChange = (val: string) => {\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n };\n\n return (\n <div className=\"space-y-2\">\n <Label className={showError ? 'text-red-600' : ''}>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n\n <RadioGroup\n value={value != null ? String(value) : undefined}\n onValueChange={handleChange}\n disabled={disabled || loading}\n className=\"flex flex-col gap-2\"\n >\n {options.map(opt => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <RadioGroupItem\n id={`${fieldId}-${String(opt.value)}`}\n value={String(opt.value)}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </RadioGroup>\n\n {loading && (\n <p className=\"text-xs text-muted-foreground\">Loading options...</p>\n )}\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\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 { Checkbox as CheckboxPrimitive } from '../shadcn/checkbox';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { CheckboxFieldDef } from '../../core/types';\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const CheckboxWidget: 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 const selectedValues = Array.isArray(value) ? value : [];\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as CheckboxFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const toggleOption = (optValue: any) => {\n const isSelected = isOptionSelected(selectedValues, optValue);\n const newValues = isSelected\n ? selectedValues.filter((v) => v !== optValue && String(v) !== String(optValue))\n : [...selectedValues, optValue];\n setValue(newValues);\n setTouched();\n };\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <Label className={showError ? 'text-red-600' : ''}>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n\n <div\n className={`border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled || loading ? 'opacity-50 pointer-events-none' : ''}`}\n >\n {loading && (\n <div className=\"text-sm text-muted-foreground\">Loading options...</div>\n )}\n {!loading &&\n options.map((opt) => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <CheckboxPrimitive\n id={`${fieldId}-${String(opt.value)}`}\n checked={isOptionSelected(selectedValues, opt.value)}\n onCheckedChange={() => toggleOption(opt.value)}\n disabled={disabled}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </div>\n\n {fieldDef.description && (\n <p className=\"text-xs text-muted-foreground\">{fieldDef.description}</p>\n )}\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport type { StaticTextFieldDef } from '../core/types';\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';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\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 'radio':\n return <RadioWidget fieldId={fieldId} />;\n \n case 'checkbox':\n return <CheckboxWidget 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 case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div className={`${labelClass} text-muted-foreground`}>\n {def.label}\n {def.description && (\n <p className={`mt-1 ${descClass} opacity-90`}>{def.description}</p>\n )}\n </div>\n );\n }\n\n default:\n return <div className=\"text-red-500\">Unknown field type: {fieldDef.type}</div>;\n }\n};\n","import React, { useState } from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\ninterface SectionProps {\n title: string;\n children: React.ReactNode;\n}\n\nexport const Section: React.FC<SectionProps> = ({ title, children }) => {\n const [expanded, setExpanded] = useState(true);\n\n const handleToggle = () => setExpanded((prev) => !prev);\n\n const contentClassName = cn(\n 'overflow-hidden transition-[height] duration-200 ease-in-out',\n !expanded && 'hidden'\n );\n\n return (\n <div className=\"mb-6 border rounded-lg bg-white shadow-sm overflow-hidden\">\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"w-full flex items-center justify-between gap-2 p-4 text-left border-b hover:bg-gray-50/80 transition-colors\"\n >\n <h3 className=\"text-lg font-medium\">{title}</h3>\n <span className=\"flex-shrink-0 text-muted-foreground\" aria-hidden>\n {expanded ? (\n <ChevronDown className=\"h-5 w-5\" />\n ) : (\n <ChevronRight className=\"h-5 w-5\" />\n )}\n </span>\n </button>\n <div className={contentClassName}>\n <div className=\"p-4 pt-4 space-y-4 border-t-0\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\ninterface ColumnLayoutProps {\n /** Number of columns. Children take equal width. */\n columns: number;\n /** Optional label shown above the row of fields. */\n label?: string;\n children: React.ReactNode;\n}\n\nexport const ColumnLayout: React.FC<ColumnLayoutProps> = ({\n columns,\n label,\n children,\n}) => {\n const gridCols = Math.max(1, Math.min(columns, 12));\n const gridClass = `grid gap-4 w-full`;\n const style = {\n gridTemplateColumns: `repeat(${gridCols}, minmax(0, 1fr))`,\n };\n\n return (\n <div className=\"mb-6\">\n {label != null && label !== '' && (\n <div className=\"mb-2 text-sm font-medium text-gray-700\">{label}</div>\n )}\n <div className={gridClass} style={style}>\n {children}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { useFormStore } from './FormProvider';\nimport { FieldRenderer } from './FieldRenderer';\nimport { Section } from '../ui/layouts/Section';\nimport { ColumnLayout } from '../ui/layouts/ColumnLayout';\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 return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) =>\n typeof child === 'string' ? (\n <FieldRenderer key={child} fieldId={child} />\n ) : child.type === 'column_layout' ? (\n <ColumnLayout\n key={child.id}\n columns={child.columns}\n label={child.label}\n >\n {child.children.map(fieldId => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n ) : (\n <React.Fragment key={child.id ?? index} />\n )\n )}\n </Section>\n );\n }\n if (node.type === 'column_layout') {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map(fieldId => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\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] whitespace-pre-wrap\">\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, { useMemo } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport type { BaseFieldDef } from \"../../core/types\";\n\ninterface TableColumn {\n id: string;\n label: string;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface ReadOnlyTableProps {\n fieldDef: BaseFieldDef;\n // Value may be the stored table data { columns, rows } or undefined\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlyTable: React.FC<ReadOnlyTableProps> = ({\n fieldDef,\n value,\n}) => {\n const tableData: TableData = useMemo(() => {\n if (\n value &&\n typeof value === \"object\" &&\n \"columns\" in value &&\n \"rows\" in value &&\n Array.isArray(value.columns) &&\n Array.isArray(value.rows)\n ) {\n return value as TableData;\n }\n return { columns: [], rows: [] };\n }, [value]);\n\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n return tableData.columns.map((col) => ({\n accessorKey: col.id,\n header: col.label,\n cell: (info: { getValue: () => unknown }) =>\n (info.getValue() as string) ?? \"\",\n }));\n }, [tableData.columns]);\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\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 key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-2\">\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-16 text-center text-muted-foreground\"\n >\n No data\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n );\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 & time selected</span>\n )}\n </div>\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\n\ninterface ReadOnlyRadioProps {\n fieldDef: RadioFieldDef;\n value: any;\n}\n\nexport const ReadOnlyRadio: React.FC<ReadOnlyRadioProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedOption = options.find(opt =>\n String(opt.value) === String(value) || opt.value === value\n );\n const displayValue = selectedOption ? selectedOption.label : (value ?? '');\n const isEmpty = value == null || value === '';\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 { CheckboxFieldDef } from '../../core/types';\n\ninterface ReadOnlyCheckboxProps {\n fieldDef: CheckboxFieldDef;\n value: any;\n}\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n if (!Array.isArray(selected)) return false;\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const ReadOnlyCheckbox: React.FC<ReadOnlyCheckboxProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedValues = Array.isArray(value) ? value : [];\n const selectedLabels = options\n .filter((opt) => isOptionSelected(selectedValues, opt.value))\n .map((opt) => opt.label);\n const displayText = selectedLabels.length\n ? selectedLabels.join(', ')\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 {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : (\n displayText\n )}\n </div>\n </div>\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 { ReadOnlyTable } from '../ui/widgets/ReadOnlyTable';\nimport { ReadOnlyDateTime } from '../ui/widgets/ReadOnlyDateTime';\nimport { ReadOnlyRadio } from '../ui/widgets/ReadOnlyRadio';\nimport { ReadOnlyCheckbox } from '../ui/widgets/ReadOnlyCheckbox';\nimport type { FieldDef, StaticTextFieldDef } 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 'radio':\n return <ReadOnlyRadio fieldDef={fieldDef as any} value={value} />;\n \n case 'checkbox':\n return <ReadOnlyCheckbox 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 case 'editable_table':\n return <ReadOnlyTable fieldDef={fieldDef} value={value} />;\n\n case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div className={`${labelClass} text-muted-foreground`}>\n {def.label}\n {def.description && (\n <p className={`mt-1 ${descClass} opacity-90`}>{def.description}</p>\n )}\n </div>\n );\n }\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 { ColumnLayout } from '../ui/layouts/ColumnLayout';\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 const renderSectionChild = (child: string | { type: string; id: string; columns?: number; label?: string; children: string[] }, index: number): React.ReactNode => {\n if (typeof child === 'string') {\n const fieldDef = fieldMap.get(child);\n return fieldDef ? (\n <ReadOnlyFieldRenderer\n key={child}\n fieldDef={fieldDef}\n value={formData[child]}\n />\n ) : null;\n }\n if (child.type === 'column_layout' && child.children) {\n const visibleFields = child.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 return (\n <ColumnLayout\n key={child.id}\n columns={child.columns ?? 1}\n label={child.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n />\n ))}\n </ColumnLayout>\n );\n }\n return <React.Fragment key={child.id ?? index} />;\n };\n\n const hasContent = node.children.some(child =>\n typeof child === 'string' ? fieldMap.has(child) : (child.type === 'column_layout' && child.children?.some(id => fieldMap.has(id)))\n );\n if (!hasContent) return null;\n\n return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) => renderSectionChild(child, index))}\n </Section>\n );\n }\n if (node.type === 'column_layout') {\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 <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n />\n ))}\n </ColumnLayout>\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 const hasUploadsInFlight = (state.pendingUploads ?? 0) > 0;\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 disabled={hasUploadsInFlight}\n >\n {hasUploadsInFlight ? 'Upload in progress…' : '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 || hasUploadsInFlight}\n size=\"sm\"\n >\n {hasUploadsInFlight ? 'Upload in progress…' : 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 || hasUploadsInFlight}\n size=\"sm\"\n >\n {hasUploadsInFlight ? 'Upload in progress…' : '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 */"]}
|