formanitor 0.0.36 → 0.0.38
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 +1305 -156
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +130 -2
- package/dist/index.d.ts +130 -2
- package/dist/index.mjs +1305 -156
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -3
- package/src/styles/index.css +116 -0
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/marMedicationOrdersMeta.ts","../src/core/validate.ts","../src/core/rules.ts","../src/core/persistence/index.ts","../src/core/prefill.ts","../src/core/store.ts","../src/react/VoiceContext.tsx","../src/react/FormProvider.tsx","../src/react/useForm.ts","../src/react/useField.ts","../src/react/VoiceMicButton.tsx","../src/core/utils.ts","../src/ui/shadcn/input.tsx","../src/ui/shadcn/label.tsx","../src/ui/shadcn/textarea.tsx","../src/ui/themes/textareaThemes.ts","../src/ui/themes/index.ts","../src/ui/widgets/Text.tsx","../src/ui/shadcn/button.tsx","../src/ui/shadcn/separator.tsx","../src/ui/widgets/RichTextWidget.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/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/MediaUpload.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/AISuggestionsContext.tsx","../src/ui/shadcn/dialog.tsx","../src/ui/widgets/AddEntityDialog.tsx","../src/ui/widgets/AddMedicationField.tsx","../src/ui/widgets/AddMedicationWidget.tsx","../src/ui/widgets/AddInvestigationField.tsx","../src/ui/widgets/AddInvestigationWidget.tsx","../src/ui/widgets/AddProcedureField.tsx","../src/ui/widgets/AddProcedureWidget.tsx","../src/ui/widgets/DifferentialDiagnosis.tsx","../src/ui/widgets/DifferentialDiagnosisWidget.tsx","../src/ui/shadcn/spinner.tsx","../src/ui/widgets/Vitals.tsx","../src/ui/widgets/VitalsWidget.tsx","../src/ui/widgets/HiddenVitalsWidget.tsx","../src/ui/widgets/ReferralWidget.tsx","../src/ui/shadcn/card.tsx","../src/ui/widgets/FollowupWidget.tsx","../src/react/useSmartKeywords.ts","../src/ui/widgets/SmartTextarea.tsx","../src/ui/widgets/DiagnosisTextareaWidget.tsx","../src/ui/shadcn/switch.tsx","../src/ui/widgets/ObstetricHistoryWidget.tsx","../src/ui/widgets/OphthalmologyWidget.tsx","../src/ui/widgets/OphthalDiagnosisWidget.tsx","../src/ui/shadcn/slider.tsx","../src/ui/widgets/OrthopedicExamWidget.tsx","../src/ui/widgets/MarMedicationOrdersWidget.tsx","../src/ui/widgets/DischargeMedicationOrdersWidget.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.tsx","../src/react/DynamicForm.tsx","../src/react/SmartForm.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/ReadOnlyMediaUpload.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/ui/widgets/ReadOnlyReferral.tsx","../src/ui/widgets/ReadOnlyDischargeMedicationOrders.tsx","../src/react/ReadOnlyFieldRenderer.tsx","../src/react/ReadOnlyForm.tsx","../src/react/FormControls.tsx","../src/utils/createUploadHandler.ts"],"names":["createContext","useContext","jsx","useState","useEffect","useCallback","React4","React5","React6","jsxs","Fragment","cva","React8","React9","UnderlineIcon","React11","React13","Check","React","Icon","React18","CalendarIcon","React21","format","useRef","error","X","Image","Upload","useMemo","def","Trash2","React27","React30","ChevronUp","ChevronDown","ChevronRight","Plus","ADD_FEEDBACK_MS","Spinner","React40","React45","days","Loader2","React49","ensureValue","React53","urlLooksLikePdf","useReactTable","getCoreRowModel","flexRender","isOptionSelected","normalizeValue","formatDuration"],"mappings":"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","file":"index.mjs","sourcesContent":["export const MAR_MEDICATION_ORDERS_META_KEY = 'mar_medication_orders' as const;\n\ntype MarMedicationOrdersMeta = {\n [MAR_MEDICATION_ORDERS_META_KEY]?: boolean;\n};\n\nexport function fieldMetaRequestsMarMedicationOrdersButton(\n meta: Record<string, unknown> | undefined\n): boolean {\n if (!meta || typeof meta !== 'object') return false;\n return (meta as MarMedicationOrdersMeta)[MAR_MEDICATION_ORDERS_META_KEY] === true;\n}\n","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 if (field.type === 'smart_textarea' && typeof value === 'object' && !Array.isArray(value)) {\n if (!value.text || value.text.trim() === '') {\n return 'This field is required';\n }\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 FormulaExpr,\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 * Voice dictation support. When provided, fields marked with `voice: true`\n * in the schema will display a microphone button.\n * The host app owns all recording logic and supplies two callbacks:\n * - `startRecording` — begin capturing audio\n * - `stopRecording` — stop capturing, transcribe, and return the transcript\n */\n voice?: {\n startRecording: (fieldId?: string) => Promise<void>;\n stopRecording: () => Promise<string>;\n };\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 if (field.type === 'smart_textarea') values[field.id] = { text: '', extractedKeywords: [] };\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 getVoice(): StoreConfig['voice'] {\n return this.config.voice;\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 /**\n * Set multiple values at once (e.g. from AI analysis). Only updates keys that\n * exist in the schema. Runs evaluate/notify/save once.\n * @param partial Map of fieldId -> value\n * @param options.touch If false, do not mark fields as touched (e.g. for AI-suggested values)\n */\n setValues(partial: Record<string, any>, options?: { touch?: boolean }) {\n const touch = options?.touch !== false;\n let changed = false;\n const newValues = { ...this.state.values };\n const newTouched = { ...this.state.touched };\n\n for (const [fieldId, value] of Object.entries(partial)) {\n if (!this.fieldMap[fieldId]) continue; // Only apply known fields\n // Intentionally no debug logs here; widgets defensively coerce to arrays.\n if (newValues[fieldId] === value) continue;\n newValues[fieldId] = value;\n if (touch) newTouched[fieldId] = true;\n changed = true;\n }\n\n if (!changed) return;\n\n this.state.values = newValues;\n this.state.touched = newTouched;\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 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 }, 5000);\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 /**\n * Raw form values as stored internally, without any serialization or\n * transformation. Useful when consumers need access to richer structures\n * (e.g. smart_textarea keyword metadata) alongside the flattened values\n * returned by getSerializedValuesForSubmission.\n */\n getRawValues(): FormValues {\n return { ...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 (field.type === 'smart_textarea') {\n const raw = values[field.id];\n result[field.id] = raw?.text ?? null;\n return;\n }\n if (field.type === 'diagnosis_textarea') {\n const raw = values[field.id];\n // Preserve legacy string storage; otherwise submit only the text portion.\n result[field.id] =\n typeof raw === 'string'\n ? raw\n : (raw && typeof raw === 'object' ? ((raw as any).text ?? null) : null);\n return;\n }\n if (field.type === 'ophthal_diagnosis') {\n const raw = values[field.id];\n\n const formatEye = (eyeData: unknown, eyeLabel: string): string => {\n if (!eyeData || typeof eyeData !== 'object') return '';\n const entries = Object.entries(eyeData as Record<string, unknown>)\n .filter(([, value]) => typeof value === 'string' && value.trim())\n .map(([key, value]) => `${key}: ${(value as string).trim()}`);\n if (entries.length === 0) return '';\n return [eyeLabel, ...entries].join('\\n');\n };\n\n const rightEyeText = formatEye(\n raw?.right_eye ?? (raw as any)?.rightEye,\n 'Right Eye',\n );\n const leftEyeText = formatEye(\n raw?.left_eye ?? (raw as any)?.leftEye,\n 'Left Eye',\n );\n\n const parts = [rightEyeText, leftEyeText].filter(Boolean);\n result[field.id] = parts.length > 0 ? parts.join('\\n\\n') : null;\n return;\n }\n if (\n field.type === 'image_upload' ||\n field.type === 'media_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 } else if (comp.type === 'formula') {\n const evalExpr = (expr: FormulaExpr): number => {\n if (expr.type === 'field') {\n return Number(this.state.values[expr.field]) || 0;\n }\n if (expr.type === 'number') {\n return expr.value;\n }\n const left = evalExpr(expr.left);\n const right = evalExpr(expr.right);\n switch (expr.op) {\n case '+': return left + right;\n case '-': return left - right;\n case '*': return left * right;\n case '/': return right === 0 ? 0 : left / right;\n case '**': return Math.pow(left, right);\n default: return 0;\n }\n };\n const result = evalExpr(comp.expression);\n const value = Number.isFinite(result) ? Math.round(result * 10) / 10 : '';\n if (this.state.values[comp.target] !== value) {\n this.state.values[comp.target] = value;\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 if (next.voice !== undefined) this.config.voice = next.voice;\n\n if (next.role !== undefined && next.role !== this.config.role) {\n this.config.role = next.role;\n needsReeval = true;\n }\n\n if (next.prefillData !== undefined && next.prefillData !== this.prefillData) {\n this.prefillData = next.prefillData;\n this.state.values = applyPrefill(this.state.values, this.schema.fields, this.prefillData);\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, useState, useCallback } from 'react';\n\ninterface VoiceContextType {\n activeFieldId: string | null;\n setActiveFieldId: (id: string | null) => void;\n}\n\nconst VoiceContext = createContext<VoiceContextType>({\n activeFieldId: null,\n setActiveFieldId: () => {},\n});\n\nexport function useVoiceContext(): VoiceContextType {\n return useContext(VoiceContext);\n}\n\ninterface VoiceContextProviderProps {\n children: React.ReactNode;\n}\n\nexport function VoiceContextProvider({ children }: VoiceContextProviderProps) {\n const [activeFieldId, setActiveFieldIdState] = useState<string | null>(null);\n\n const setActiveFieldId = useCallback((id: string | null) => {\n setActiveFieldIdState(id);\n }, []);\n\n return (\n <VoiceContext.Provider value={{ activeFieldId, setActiveFieldId }}>\n {children}\n </VoiceContext.Provider>\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, DoctorFrequentItems, DiagnosticPackage } from '../core/types';\nimport { VoiceContextProvider } from './VoiceContext';\n\nconst FormContext = createContext<FormStore | null>(null);\n\nconst emptyFrequentItems: DoctorFrequentItems = {\n medications: [],\n investigations: [],\n procedures: [],\n};\n\nconst FrequentItemsContext = createContext<DoctorFrequentItems>(emptyFrequentItems);\nconst PackagesContext = createContext<DiagnosticPackage[]>([]);\n\nexport type FieldHandler = {\n onSearch: (query: string) => Promise<any[]>;\n recentlyUsed?: any[];\n /**\n * Called by widgets that display externally-fetched data (e.g. vitals).\n * Invoked once on mount and again when the user hits the refresh button.\n * The resolved value is written directly into the field's form state.\n */\n onFetch?: () => Promise<any>;\n /**\n * Called by the referral widget to load dropdown options. May return\n * { specializations: string[] } or { label: string; value: any }[].\n */\n onFetchOptions?: () => Promise<{ specializations?: string[] } | { label: string; value: any }[]>;\n /**\n * Called by diagnosis_textarea widgets to fetch condition-wise grades\n * from diagnosis text input.\n */\n onFetchDiagnosisGrades?: (query: string) => Promise<any>;\n /**\n * Host opens MAR / medication-orders UI (e.g. IPD discharge). On success the host\n * should update this field's value in form state.\n */\n onOpenMedicationOrders?: () => void | Promise<void>;\n /**\n * Host opens CMDash discharge medication orders slide-over. On save, return the\n * prescription payload so the widget can normalize and store it in form state.\n */\n onOpenDischargeMedicationOrders?: () => Promise<any | null> | any | null;\n};\n\nexport type FieldHandlersMap = Record<string, FieldHandler>;\n\nconst FieldHandlersContext = createContext<FieldHandlersMap>({});\n\nexport function useFieldHandlers(fieldId: string): FieldHandler {\n const map = useContext(FieldHandlersContext);\n return map[fieldId] ?? { onSearch: async () => [], recentlyUsed: [] };\n}\n\nexport function useFrequentItems(): DoctorFrequentItems {\n return useContext(FrequentItemsContext);\n}\n\nexport function usePackages(): DiagnosticPackage[] {\n return useContext(PackagesContext);\n}\n\ninterface FormProviderProps {\n schema: FormDef;\n config?: StoreConfig;\n fieldHandlers?: FieldHandlersMap;\n /**\n * Doctor-scoped frequently used items (e.g. from GET /api/doctor-state/frequent-items/).\n * Consumer fetches and passes this; Forminator flows it to medications, investigations, and procedures widgets.\n */\n frequentItems?: DoctorFrequentItems;\n packages?: DiagnosticPackage[];\n children: React.ReactNode;\n}\n\nexport const FormProvider: React.FC<FormProviderProps> = ({\n schema,\n config,\n fieldHandlers,\n frequentItems,\n packages,\n children,\n}) => {\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 const frequentItemsValue = frequentItems ?? emptyFrequentItems;\n\n return (\n <FormContext.Provider value={storeRef.current}>\n <FieldHandlersContext.Provider value={fieldHandlers ?? {}}>\n <FrequentItemsContext.Provider value={frequentItemsValue}>\n <PackagesContext.Provider value={packages ?? []}>\n <VoiceContextProvider>\n {children}\n </VoiceContextProvider>\n </PackagesContext.Provider>\n </FrequentItemsContext.Provider>\n </FieldHandlersContext.Provider>\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 getRawValues: store.getRawValues.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 React, { useCallback, useState } from 'react';\nimport { Mic, Loader2 } from 'lucide-react';\nimport { useFormStore } from './FormProvider';\nimport { useVoiceContext } from './VoiceContext';\n\ntype RecordingStatus = 'idle' | 'recording' | 'transcribing';\n\nfunction RecordingWave() {\n const bars = [\n { dur: '0.6s', values: '3;10;3', yValues: '4.5;0;4.5', delay: '0s' },\n { dur: '0.6s', values: '8;3;8', yValues: '2;4.5;2', delay: '0.1s' },\n { dur: '0.6s', values: '5;11;5', yValues: '3.5;0.5;3.5', delay: '0.05s' },\n { dur: '0.6s', values: '10;4;10', yValues: '1;4;1', delay: '0.15s' },\n ];\n return (\n <svg width=\"16\" height=\"12\" viewBox=\"0 0 18 12\" aria-hidden>\n {bars.map((b, i) => (\n <rect key={i} x={i * 4 + 1} width=\"2.5\" rx=\"1.25\" fill=\"currentColor\" y=\"0\" height=\"12\">\n <animate attributeName=\"height\" values={b.values} dur={b.dur} begin={b.delay} repeatCount=\"indefinite\" />\n <animate attributeName=\"y\" values={b.yValues} dur={b.dur} begin={b.delay} repeatCount=\"indefinite\" />\n </rect>\n ))}\n </svg>\n );\n}\n\ninterface VoiceMicButtonProps {\n fieldId: string;\n onTranscriptReady: (transcript: string) => void;\n}\n\nexport function VoiceMicButton({ fieldId, onTranscriptReady }: VoiceMicButtonProps) {\n const store = useFormStore();\n const { activeFieldId, setActiveFieldId } = useVoiceContext();\n const [status, setStatus] = useState<RecordingStatus>('idle');\n\n const voice = store.getVoice();\n\n const isActive = activeFieldId === fieldId;\n const isRecording = status === 'recording' && isActive;\n const isTranscribing = status === 'transcribing' && isActive;\n const isBlocked = activeFieldId !== null && !isActive;\n\n const handleClick = useCallback(async () => {\n if (!voice || isBlocked || isTranscribing) return;\n\n if (isRecording) {\n setStatus('transcribing');\n try {\n const transcript = await voice.stopRecording();\n if (transcript) onTranscriptReady(transcript);\n } catch {\n // silently reset on error\n } finally {\n setStatus('idle');\n setActiveFieldId(null);\n }\n } else {\n setActiveFieldId(fieldId);\n setStatus('recording');\n try {\n await voice.startRecording(fieldId);\n } catch {\n setStatus('idle');\n setActiveFieldId(null);\n }\n }\n }, [voice, isBlocked, isTranscribing, isRecording, fieldId, onTranscriptReady, setActiveFieldId]);\n\n const title = isTranscribing\n ? 'Processing…'\n : isRecording\n ? 'Stop recording'\n : 'Dictate this field';\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isBlocked || isTranscribing}\n title={title}\n className={[\n 'flex items-center gap-1 rounded px-1 py-0.5',\n 'text-[11px] font-medium transition-opacity',\n isBlocked ? 'pointer-events-none opacity-30' : '',\n isTranscribing ? 'cursor-wait opacity-50' : '',\n !isBlocked && !isTranscribing ? 'hover:opacity-70' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {isTranscribing ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-slate-400\" />\n ) : isRecording ? (\n <>\n <span className=\"text-rose-400\">\n <RecordingWave />\n </span>\n <span className=\"text-rose-400\">Stop</span>\n </>\n ) : (\n <Mic className=\"h-4 w-4 text-slate-400\" />\n )}\n </button>\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 spellCheck={false}\n className={cn(\n \"flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none 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 type { ComponentThemeConfig } from './types';\n\n/**\n * Textarea theme: label in a colored block overlapping the textarea.\n * Label has light pink background (#FEE8EC), rounded top corners only, border;\n * label overlaps the textarea so the textarea's top border radius is hidden.\n * Textarea has white background, rounded bottom corners only, border.\n */\nexport const textareaThemes: Record<string, ComponentThemeConfig> = {\n 'highlight-label': {\n wrapperClassName: 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]',\n labelClassName:\n 'rounded-t-md bg-[#FEE8EC] px-3 py-1 text-sm shrink-0 z-[1] text-slate-600',\n inputClassName:\n 'rounded-t-none rounded-b-md border-0 border-t border-[#D0D0D0] text-xs resize-none -mt-1 min-w-0 bg-white text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50',\n },\n};\n","import type { ComponentThemeConfig, FieldTypeForTheme } from './types';\nimport { textareaThemes } from './textareaThemes';\n\nconst themeRegistries: Partial<Record<FieldTypeForTheme, Record<string, ComponentThemeConfig>>> = {\n textarea: textareaThemes,\n text: textareaThemes, // same themes can apply to single-line text if desired\n};\n\n/**\n * Returns theme config for a field type and theme name.\n * Returns undefined if theme is not set or not found (no theme applied).\n */\nexport function getThemeConfig(\n fieldType: FieldTypeForTheme,\n themeName: string | undefined\n): ComponentThemeConfig | undefined {\n if (!themeName) return undefined;\n const registry = themeRegistries[fieldType];\n if (!registry) return undefined;\n return registry[themeName];\n}\n\nexport { textareaThemes } from './textareaThemes';\nexport type { ComponentThemeConfig, FieldTypeForTheme } from './types';\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\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 const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const Component = fieldDef.type === 'textarea' ? Textarea : Input;\n const isTextarea = fieldDef.type === 'textarea';\n const height = isTextarea && 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig(\n isTextarea ? 'textarea' : 'text',\n fieldDef.theme\n );\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n const labelEl = theme ? (\n <Label htmlFor={fieldId} className={labelClass}>{labelContent}</Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n );\n\n return (\n <div className={wrapperClass}>\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : labelEl}\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={inputClass}\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 { 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\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n\n","import React, { useEffect, useMemo, useReducer } from 'react';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Underline from '@tiptap/extension-underline';\nimport {\n Bold,\n Italic,\n Underline as UnderlineIcon,\n Strikethrough,\n List,\n ListOrdered,\n Undo,\n Redo,\n} from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Separator } from '../shadcn/separator';\nimport { cn } from '../../core/utils';\nimport type { Editor } from '@tiptap/core';\nimport type { RichTextFieldDef } from '../../core/types';\n\nfunction isEmptyHtml(html: string): boolean {\n const t = html.trim();\n return (\n t === '' ||\n t === '<p></p>' ||\n t === '<p><br></p>' ||\n t === '<p><br class=\"ProseMirror-trailingBreak\"></p>'\n );\n}\n\nfunction RichTextToolbar({\n editor,\n disabled,\n}: {\n editor: Editor | null;\n disabled: boolean;\n}) {\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n\n useEffect(() => {\n if (!editor) return;\n const handler = () => rerender();\n editor.on('selectionUpdate', handler);\n editor.on('transaction', handler);\n return () => {\n editor.off('selectionUpdate', handler);\n editor.off('transaction', handler);\n };\n }, [editor]);\n\n if (!editor) {\n return (\n <div className=\"flex flex-wrap gap-1 border-b border-input bg-muted/30 px-2 py-1.5 min-h-[42px]\" />\n );\n }\n\n const fmtBtn = (active: boolean, onClick: () => void, icon: React.ReactNode, title: string) => (\n <Button\n type=\"button\"\n variant={active ? 'secondary' : 'outline'}\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled}\n title={title}\n onClick={() => {\n if (!disabled) onClick();\n }}\n >\n {icon}\n </Button>\n );\n\n return (\n <div\n className=\"flex flex-wrap items-center gap-1 border-b border-input bg-muted/30 px-2 py-1.5\"\n role=\"toolbar\"\n aria-label=\"Rich text formatting\"\n >\n {fmtBtn(\n editor.isActive('bold'),\n () => editor.chain().focus().toggleBold().run(),\n <Bold className=\"h-4 w-4\" />,\n 'Bold',\n )}\n {fmtBtn(\n editor.isActive('italic'),\n () => editor.chain().focus().toggleItalic().run(),\n <Italic className=\"h-4 w-4\" />,\n 'Italic',\n )}\n {fmtBtn(\n editor.isActive('underline'),\n () => editor.chain().focus().toggleUnderline().run(),\n <UnderlineIcon className=\"h-4 w-4\" />,\n 'Underline',\n )}\n {fmtBtn(\n editor.isActive('strike'),\n () => editor.chain().focus().toggleStrike().run(),\n <Strikethrough className=\"h-4 w-4\" />,\n 'Strikethrough',\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n {fmtBtn(\n editor.isActive('bulletList'),\n () => editor.chain().focus().toggleBulletList().run(),\n <List className=\"h-4 w-4\" />,\n 'Bullet list',\n )}\n {fmtBtn(\n editor.isActive('orderedList'),\n () => editor.chain().focus().toggleOrderedList().run(),\n <ListOrdered className=\"h-4 w-4\" />,\n 'Numbered list',\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().undo()}\n title=\"Undo\"\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().redo()}\n title=\"Redo\"\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport const RichTextWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n const showError = !!error && (touched || state.submitAttempted);\n\n const def = fieldDef as RichTextFieldDef | undefined;\n const placeholder = def?.placeholder ?? 'Start typing…';\n const minHeight = def?.minHeight ?? 160;\n\n const extensions = useMemo(\n () => [\n StarterKit.configure({\n // Disable headings entirely so the UI/content can't introduce H2/H3.\n heading: false,\n bulletList: {\n HTMLAttributes: {\n class: 'list-disc pl-6 my-2',\n },\n },\n orderedList: {\n HTMLAttributes: {\n class: 'list-decimal pl-6 my-2',\n },\n },\n listItem: {\n HTMLAttributes: {\n class: 'my-1',\n },\n },\n }),\n Underline,\n Placeholder.configure({\n placeholder,\n }),\n ],\n [placeholder],\n );\n\n const stringValue = typeof value === 'string' ? value : '';\n\n const editor = useEditor(\n {\n extensions,\n content: stringValue || '',\n editable: !disabled,\n immediatelyRender: false,\n onUpdate: ({ editor: ed }) => {\n const html = ed.getHTML();\n setValue(isEmptyHtml(html) ? '' : html);\n },\n onBlur: () => setTouched(),\n editorProps: {\n attributes: {\n id: fieldId,\n class: 'focus:outline-none',\n style: `min-height: ${minHeight}px`,\n },\n },\n },\n [extensions, fieldId],\n );\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n editor.setEditable(!disabled);\n }, [editor, disabled]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n el.style.minHeight = `${minHeight}px`;\n }, [editor, minHeight]);\n\n // Listen for a custom 'insertTranscript' event dispatched by external hooks\n // (e.g. voice recording) so the widget controls its own insertion logic.\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n const handler = (e: Event) => {\n const { text } = (e as CustomEvent<{ text: string }>).detail;\n if (!text) return;\n const currentText = editor.getText();\n const prefix = currentText.length > 0 && !/\\s$/.test(currentText) ? ' ' : '';\n editor.chain().focus().insertContent(prefix + text).run();\n };\n el.addEventListener('insertTranscript', handler);\n return () => el.removeEventListener('insertTranscript', handler);\n }, [editor]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const fromForm = stringValue;\n const fromEditor = editor.getHTML();\n if (isEmptyHtml(fromForm) && isEmptyHtml(fromEditor)) return;\n if (fromForm && fromForm !== fromEditor) {\n editor.commands.setContent(fromForm, { emitUpdate: false });\n }\n if (!fromForm && !isEmptyHtml(fromEditor)) {\n editor.commands.setContent('', { emitUpdate: false });\n }\n }, [stringValue, editor]);\n\n if (!fieldDef) return null;\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n const labelEl = <Label htmlFor={fieldId}>{labelContent}</Label>;\n\n return (\n <div className=\"space-y-2\">\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : labelEl}\n <div\n className={cn(\n 'rounded-md border border-input bg-background text-sm ring-offset-background overflow-hidden',\n showError && 'border-red-500',\n disabled && 'opacity-60',\n )}\n >\n <RichTextToolbar editor={editor} disabled={disabled} />\n <div\n className={cn(\n 'px-3 py-2',\n '[&_.ProseMirror]:outline-none',\n '[&_.ProseMirror_ul]:list-disc [&_.ProseMirror_ul]:pl-6 [&_.ProseMirror_ul]:my-2',\n '[&_.ProseMirror_ol]:list-decimal [&_.ProseMirror_ol]:pl-6 [&_.ProseMirror_ol]:my-2',\n '[&_.ProseMirror_li]:list-item',\n '[&_.ProseMirror_blockquote]:border-l-4 [&_.ProseMirror_blockquote]:border-muted-foreground/40 [&_.ProseMirror_blockquote]:pl-3 [&_.ProseMirror_blockquote]:italic [&_.ProseMirror_blockquote]:my-2',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:text-muted-foreground',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:float-left',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:pointer-events-none',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:h-0',\n )}\n >\n <EditorContent editor={editor} />\n </div>\n </div>\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\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-52 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\";\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\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\ntype RdpDropdownOption = {\n value: string | number\n label: string\n disabled?: boolean\n}\n\ntype RdpDropdownProps = {\n options?: RdpDropdownOption[]\n value?: string | number\n onChange?: React.ChangeEventHandler<HTMLSelectElement>\n \"aria-label\"?: string\n}\n\nfunction CalendarDropdown(props: RdpDropdownProps) {\n const { options, value, onChange } = props\n\n const handleValueChange = (newValue: string) => {\n if (!onChange) return\n const syntheticEvent = {\n target: { value: newValue },\n } as unknown as React.ChangeEvent<HTMLSelectElement>\n onChange(syntheticEvent)\n }\n\n return (\n <Select value={value?.toString()} onValueChange={handleValueChange}>\n <SelectTrigger className=\"h-7 px-2 text-sm\" aria-label={props[\"aria-label\"]}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((option) => (\n <SelectItem\n key={option.value.toString()}\n value={option.value.toString()}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n const captionLayout = props.captionLayout ?? \"dropdown\"\n const isDropdownCaption =\n captionLayout === \"dropdown\" ||\n captionLayout === \"dropdown-months\" ||\n captionLayout === \"dropdown-years\"\n\n // Provide a broad default year range for dropdown captions.\n // Callers can override by passing `startMonth` / `endMonth`.\n const startMonth =\n props.startMonth ?? (isDropdownCaption ? new Date(1900, 0) : undefined)\n const endMonth =\n props.endMonth ?? (isDropdownCaption ? new Date(2100, 11) : undefined)\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n captionLayout={captionLayout}\n hideNavigation={props.hideNavigation ?? isDropdownCaption}\n navLayout={props.navLayout ?? (isDropdownCaption ? \"around\" : undefined)}\n startMonth={startMonth}\n endMonth={endMonth}\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: cn(\n \"text-sm font-medium\",\n isDropdownCaption && \"sr-only\"\n ),\n dropdowns: \"flex items-center gap-2\",\n months_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n years_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\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: isDropdownCaption ? \"\" : \"absolute left-1\",\n nav_button_next: isDropdownCaption ? \"\" : \"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 isDropdownCaption ? \"\" : \"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 isDropdownCaption ? \"\" : \"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: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n // @ts-expect-error react-day-picker v9 component typing differences\n Dropdown: CalendarDropdown,\n // @ts-expect-error react-day-picker v9 component typing differences\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 } 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\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nfunction isAcceptedMediaFile(file: File): boolean {\n if (file.type.startsWith('image/')) return true;\n if (file.type === 'application/pdf') return true;\n if (file.name.toLowerCase().endsWith('.pdf')) return true;\n return false;\n}\n\nexport const MediaUploadWidget: 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 [previewIsPdf, setPreviewIsPdf] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n /** When the stored value is an opaque key (no extension), keep image vs PDF from the last upload. */\n const pendingPreviewKindRef = useRef<'image' | 'pdf' | null>(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 setPreview(value);\n if (pendingPreviewKindRef.current) {\n setPreviewIsPdf(pendingPreviewKindRef.current === 'pdf');\n pendingPreviewKindRef.current = null;\n } else {\n setPreviewIsPdf(urlLooksLikePdf(value));\n }\n } else {\n setPreview(null);\n setPreviewIsPdf(false);\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 if (!isAcceptedMediaFile(file)) {\n alert('Please select an image or PDF 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 const isPdf =\n file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf');\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 setPreviewIsPdf(isPdf);\n\n // Upload file using the provided handler\n const s3Key = await uploadHandler(file, file.name);\n\n pendingPreviewKindRef.current = isPdf ? 'pdf' : 'image';\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 setPreviewIsPdf(false);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n pendingPreviewKindRef.current = null;\n setValue(null);\n setPreview(null);\n setPreviewIsPdf(false);\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 {previewIsPdf ? (\n <iframe\n src={preview}\n title=\"Uploaded PDF\"\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={preview}\n alt=\"Uploaded image\"\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n />\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 PDF, 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/*,application/pdf\"\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};\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 { createContext, useContext } from 'react';\n\n/** Shape of a medication as returned by AI analysis */\nexport type AIMedication = {\n id: string | number;\n brand_name: string;\n generic_name: string;\n form?: string;\n strength?: string;\n reason?: string;\n};\n\nexport type AISuggestions = {\n medications?: AIMedication[];\n};\n\nconst AISuggestionsContext = createContext<AISuggestions>({});\n\nexport function useAISuggestions(): AISuggestions {\n return useContext(AISuggestionsContext);\n}\n\nexport const AISuggestionsProvider = AISuggestionsContext.Provider;\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n\n","import React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from '../shadcn/dialog';\n\ntype ChipSection = {\n label: string;\n content: React.ReactNode;\n};\n\ntype AddEntityDialogProps = {\n open: boolean;\n onClose: () => void;\n title: string;\n /** Multiple chip sections (e.g. Frequently Used, Packages). Replaces recentlyUsedSlot. */\n chipSections?: ChipSection[];\n /** @deprecated Use chipSections instead */\n recentlyUsedSlot?: React.ReactNode;\n /** @deprecated Use chipSections instead */\n chipSectionLabel?: string;\n children: React.ReactNode;\n actionSlot?: React.ReactNode;\n};\n\nexport const AddEntityDialog: React.FC<AddEntityDialogProps> = ({\n open,\n onClose,\n title,\n chipSections,\n recentlyUsedSlot,\n chipSectionLabel = 'Recently Used',\n children,\n actionSlot,\n}) => {\n const sections: ChipSection[] = chipSections ??\n (recentlyUsedSlot ? [{ label: chipSectionLabel, content: recentlyUsedSlot }] : []);\n\n return (\n <Dialog open={open} onOpenChange={(o) => !o && onClose()}>\n <DialogContent className=\"max-w-4xl w-full p-0 gap-0 flex flex-col max-h-[90vh] overflow-hidden\">\n {/* Fixed header */}\n <DialogHeader className=\"px-6 pt-6 pb-4 shrink-0\">\n <DialogTitle className=\"text-lg font-semibold\">{title}</DialogTitle>\n </DialogHeader>\n\n {/* Scrollable body */}\n <div className=\"px-6 flex flex-col gap-4 overflow-y-auto flex-1 min-h-0 pb-4\">\n {sections.map((section) => (\n <div key={section.label}>\n <p className=\"text-xs text-muted-foreground mb-2\">{section.label}</p>\n <div className=\"flex flex-wrap gap-2\">{section.content}</div>\n </div>\n ))}\n\n {children}\n </div>\n\n {/* Fixed footer */}\n {actionSlot != null && (\n <div className=\"px-6 py-4 flex justify-end shrink-0 border-t border-border bg-background\">\n {actionSlot}\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Trash2, ChevronUp, ChevronDown, ChevronRight, Plus, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { AIMedication } from '../../react/AISuggestionsContext';\nimport type { MedicationFrequentItem } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nconst BEFORE_AFTER_OPTIONS = [\n { label: 'Blank', value: '' },\n { label: 'AFTER FOOD', value: 'AFTER FOOD' },\n { label: 'BEFORE FOOD', value: 'BEFORE FOOD' },\n { label: 'WITH FOOD', value: 'WITH FOOD' },\n { label: 'SINGLE DOSE', value: 'SINGLE DOSE' },\n { label: 'BED TIME', value: 'BED TIME' },\n { label: 'EMPTY STOMACH', value: 'EMPTY STOMACH' },\n { label: 'LOCAL APPLICATION', value: 'LOCAL APPLICATION' },\n { label: 'STAT', value: 'STAT' },\n { label: 'INHALATION', value: 'INHALATION' },\n] as const;\n\ntype BeforeAfterOption = (typeof BEFORE_AFTER_OPTIONS)[number]['value'];\n\nconst BEFORE_AFTER_NORMALIZATION_MAP: Record<string, BeforeAfterOption> = {\n AF: 'AFTER FOOD',\n BF: 'BEFORE FOOD',\n};\n\nexport type MedicationSearchResult = {\n id: string;\n name: string;\n generic_name?: string;\n manufacturer?: string;\n score?: number;\n};\n\nexport type Medication = {\n id: string;\n brand_name: string;\n generic_name: string;\n frequency: string;\n is_custom: boolean;\n duration_value: string;\n duration_unit: 'days' | 'weeks' | 'months';\n before_after: BeforeAfterOption;\n morning: string;\n afternoon: string;\n night: string;\n notes: string;\n};\n\nexport type AddMedicationFieldProps = {\n label?: string;\n value: Medication[];\n onChange: (items: Medication[]) => void;\n onSearch: (query: string) => Promise<MedicationSearchResult[]>;\n recentlyUsed?: MedicationSearchResult[];\n /** Doctor-scoped frequently used medications (from FormProvider frequentItems) */\n frequentItems?: MedicationFrequentItem[];\n /** AI-suggested medications shown as badges; clicking adds to value */\n suggestedMedications?: AIMedication[];\n};\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToMedication(result: MedicationSearchResult): Medication {\n return {\n id: result.id,\n brand_name: result.name,\n generic_name: result.generic_name ?? '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n morning: '0',\n afternoon: '0',\n night: '0',\n notes: '',\n };\n}\n\nfunction mapAIMedicationToMedication(ai: AIMedication): Medication {\n const id = ai.id != null ? String(ai.id) : '';\n return {\n id,\n brand_name: ai.brand_name ?? '',\n generic_name: ai.generic_name ?? '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n morning: '1',\n afternoon: '0',\n night: '1',\n notes: ai.reason ?? '',\n };\n}\n\nfunction createCustomMedication(name: string, customId: number): Medication {\n return {\n id: String(customId),\n brand_name: name.trim(),\n generic_name: '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n morning: '0',\n afternoon: '0',\n night: '0',\n notes: '',\n };\n}\n\n/** Parse duration string like \"5 days\" or \"2 weeks\" into value + unit */\nfunction parseDuration(duration?: string): { value: string; unit: 'days' | 'weeks' | 'months' } {\n if (!duration || !duration.trim()) return { value: '3', unit: 'days' };\n const lower = duration.trim().toLowerCase();\n const match = lower.match(/^(\\d+)\\s*(day|days|week|weeks|month|months)?$/);\n if (!match) return { value: '3', unit: 'days' };\n const value = match[1] ?? '3';\n const unitWord = match[2] ?? 'days';\n const unit: 'days' | 'weeks' | 'months' =\n unitWord.startsWith('month') ? 'months' : unitWord.startsWith('week') ? 'weeks' : 'days';\n return { value, unit };\n}\n\nfunction mapFrequentItemToMedication(item: MedicationFrequentItem): Medication {\n const parsed = parseDuration(item.duration);\n const duration_value = item.duration_value ?? parsed.value;\n const duration_unit =\n (item.duration_unit as Medication['duration_unit'] | undefined) ?? parsed.unit;\n\n const before_after: Medication['before_after'] = normalizeBeforeAfter(item.before_after);\n\n const routeNote = item.route ? `Route: ${item.route}` : '';\n const baseNotes = item.notes?.trim() || '';\n const combinedNotes =\n [baseNotes, routeNote.trim()].filter((part) => part.length > 0).join(' — ');\n\n return {\n id: item.id,\n brand_name: item.brand_name ?? item.name,\n generic_name: item.short_name ?? '',\n frequency: item.frequency ?? 'custom',\n is_custom: false,\n duration_value,\n duration_unit,\n before_after,\n morning: item.morning ?? '0',\n afternoon: item.afternoon ?? '0',\n night: item.night ?? '0',\n notes: combinedNotes,\n };\n}\n\nfunction normalizeBeforeAfter(value?: string): BeforeAfterOption {\n if (value == null) return 'AFTER FOOD';\n const mapped = BEFORE_AFTER_NORMALIZATION_MAP[value];\n if (mapped) return mapped;\n const validValues = BEFORE_AFTER_OPTIONS.map((option) => option.value);\n return validValues.includes(value as BeforeAfterOption) ? (value as BeforeAfterOption) : 'AFTER FOOD';\n}\n\nfunction Spinner({\n value,\n onChange,\n}: {\n value: string;\n onChange: (v: string) => void;\n}) {\n const num = parseInt(value, 10) || 0;\n return (\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground cursor-pointer\"\n onClick={() => onChange(String(num + 1))}\n >\n <ChevronUp className=\"h-3 w-3\" />\n </button>\n <span className=\"text-sm w-4 text-center leading-none\">{num}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground cursor-pointer\"\n onClick={() => onChange(String(Math.max(0, num - 1)))}\n >\n <ChevronDown className=\"h-3 w-3\" />\n </button>\n </div>\n );\n}\n\n// ─── Medication card (added item) ─────────────────────────────────────────────\n\nfunction MedicationCard({\n med,\n onUpdate,\n onRemove,\n}: {\n med: Medication;\n onUpdate: (updated: Medication) => void;\n onRemove: () => void;\n}) {\n const [notesOpen, setNotesOpen] = useState(false);\n\n function set<K extends keyof Medication>(key: K, val: Medication[K]) {\n onUpdate({ ...med, [key]: val });\n }\n\n return (\n <div className=\"bg-gray-50 rounded-lg p-3 space-y-2\">\n {/* Row 1: drug name, frequency dropdown, morning/afternoon/night labels, delete */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"font-semibold text-sm flex-1 min-w-0 truncate\">{med.brand_name}</span>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={med.frequency}\n onChange={(e) => set('frequency', e.target.value)}\n >\n <option value=\"custom\">select frequency</option>\n <option value=\"qid\">4 times a day (QID)</option>\n <option value=\"alternate_day\">Alternate day</option>\n <option value=\"once_weekly\">Once weekly</option>\n <option value=\"once_monthly\">Once monthly</option>\n <option value=\"as_needed\">As needed</option>\n <option value=\"fort_night\">Fort night</option>\n <option value=\"at_bed_time\">At Bed time</option>\n <option value=\"sos\">SOS only</option>\n </select>\n <div className=\"flex gap-4 items-center shrink-0\">\n {(['morning', 'afternoon', 'night'] as const).map((slot) => (\n <span\n key={slot}\n className=\"text-[10px] font-semibold uppercase text-muted-foreground tracking-wide\"\n >\n {slot === 'afternoon' ? 'AFTERNOON' : slot === 'morning' ? 'MORNING' : 'NIGHT'}\n </span>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"text-red-400 hover:text-red-600 shrink-0 p-1 cursor-pointer\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Row 2: duration (value + unit) on left; 3 dose spinners in middle; AF/BF on right */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <div className=\"flex items-center gap-1 shrink-0\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n className=\"w-11 text-sm border border-border rounded px-2 py-1 bg-white\"\n value={med.duration_value}\n onChange={(e) => {\n const v = e.target.value.replace(/\\D/g, '');\n set('duration_value', v === '' ? '' : v);\n }}\n />\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white\"\n value={med.duration_unit}\n onChange={(e) => set('duration_unit', e.target.value as Medication['duration_unit'])}\n >\n <option value=\"days\">days</option>\n <option value=\"weeks\">weeks</option>\n <option value=\"months\">months</option>\n </select>\n </div>\n <div className=\"flex gap-2 items-center flex-1 min-w-0 justify-end\">\n {(['morning', 'afternoon', 'night'] as const).map((slot) => (\n <div key={slot} className=\"flex flex-col items-center gap-0.5\">\n <Spinner value={med[slot]} onChange={(v) => set(slot, v)} />\n </div>\n ))}\n </div>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={normalizeBeforeAfter(med.before_after)}\n onChange={(e) => set('before_after', e.target.value as Medication['before_after'])}\n >\n {BEFORE_AFTER_OPTIONS.map((option) => (\n <option key={option.label} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n\n {/* Row 3: medicine notes — full-width div as hit area (chevron + text), cursor-pointer */}\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setNotesOpen((o) => !o)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setNotesOpen((o) => !o);\n }\n }}\n className={cn(\n 'flex items-center gap-2 w-full text-left text-xs text-muted-foreground hover:text-foreground',\n 'cursor-pointer py-2 px-2 rounded border border-transparent hover:bg-gray-100/80 transition-colors'\n )}\n >\n <ChevronRight\n className={cn('h-3 w-3 shrink-0 transition-transform', notesOpen && 'rotate-90')}\n />\n <span>Medicine Notes</span>\n </div>\n {notesOpen && (\n <div className=\"relative z-10 mt-0.5\">\n <textarea\n className=\"block w-full text-xs border border-border rounded px-2 py-1 resize-none bg-white min-h-0\"\n rows={2}\n placeholder=\"Add notes...\"\n value={med.notes}\n onChange={(e) => set('notes', e.target.value)}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ─── Search result card ────────────────────────────────────────────────────────\n\nconst ADD_FEEDBACK_MS = 320;\n\nfunction SearchResultCard({\n result,\n isAdding,\n onSelect,\n}: {\n result: MedicationSearchResult;\n isAdding: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'w-full text-left border rounded-lg px-3 py-2 transition-all duration-300 ease-out cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'border-green-400 bg-green-50 scale-[0.98]'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n <div className=\"min-w-0 flex-1 text-left\">\n <p className=\"text-sm font-semibold leading-tight truncate\">{result.name}</p>\n {result.generic_name && (\n <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">\n Generic: {result.generic_name}\n </p>\n )}\n </div>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddMedicationField: React.FC<AddMedicationFieldProps> = ({\n label = 'Medications',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n suggestedMedications = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<MedicationSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingResultId, setAddingResultId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const customIdRef = useRef(-1);\n const valueRef = useRef<Medication[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const safeValue = Array.isArray(value) ? value : [];\n valueRef.current = safeValue;\n const addedIds = new Set(safeValue.map((m) => String(m.id)));\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingResultId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function handleRecentlyUsedToggle(result: MedicationSearchResult) {\n if (addedIds.has(String(result.id))) {\n onChange(safeValue.filter((m) => String(m.id) !== String(result.id)));\n } else {\n onChange([...safeValue, mapToMedication(result)]);\n }\n }\n\n function handleFrequentItemToggle(item: MedicationFrequentItem) {\n if (addedIds.has(String(item.id))) {\n onChange(safeValue.filter((m) => String(m.id) !== String(item.id)));\n } else {\n onChange([...safeValue, mapFrequentItemToMedication(item)]);\n }\n }\n\n function handleResultClick(result: MedicationSearchResult) {\n if (addedIds.has(String(result.id))) return;\n setAddingResultId(result.id);\n setTimeout(() => {\n onChange([...valueRef.current, mapToMedication(result)]);\n setAddingResultId(null);\n setQuery('');\n setResults([]);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function handleSave() {\n const trimmed = query.trim();\n if (!trimmed) return;\n const customId = customIdRef.current--;\n onChange([...safeValue, createCustomMedication(trimmed, customId)]);\n setQuery('');\n setResults([]);\n }\n\n function handleAddSuggestion(ai: AIMedication) {\n if (addedIds.has(String(ai.id))) return;\n onChange([...safeValue, mapAIMedicationToMedication(ai)]);\n }\n\n function updateMed(index: number, updated: Medication) {\n const next = [...safeValue];\n next[index] = updated;\n onChange(next);\n }\n\n function removeMed(index: number) {\n onChange(safeValue.filter((_, i) => i !== index));\n }\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(String(r.id));\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors cursor-pointer',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const isAdded = addedIds.has(String(item.id));\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-[11px] px-2 py-0.5 transition-colors cursor-pointer',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {item.brand_name ?? item.name}\n </button>\n );\n })\n : [];\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col border bg-white border-[#D0D0D0] space-y-3 p-3 h-fit\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added medications */}\n <div className=\"space-y-2\">\n {safeValue.map((med, i) => (\n <MedicationCard\n key={med.id}\n med={med}\n onUpdate={(u) => updateMed(i, u)}\n onRemove={() => removeMed(i)}\n />\n ))}\n </div>\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Medication\"\n recentlyUsedSlot={\n frequentItemChips.length > 0\n ? frequentItemChips\n : recentlyUsedChips.length > 0\n ? recentlyUsedChips\n : undefined\n }\n chipSectionLabel={frequentItemChips.length > 0 ? 'Frequently used' : undefined}\n actionSlot={\n <button\n type=\"button\"\n disabled={!query.trim()}\n onClick={handleSave}\n className={cn(\n 'rounded-md px-5 py-2 text-sm font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-opacity cursor-pointer',\n !query.trim() && 'opacity-40 cursor-not-allowed'\n )}\n >\n Save Medicine\n </button>\n }\n >\n <div className=\"space-y-3\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search medicines...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {/* AI-suggested medications as clickable badges (inside dialog) */}\n {suggestedMedications.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 items-center\">\n <span className=\"text-xs text-muted-foreground mr-1\">Suggestions:</span>\n {suggestedMedications\n .filter((s) => !addedIds.has(String(s.id)))\n .slice(0, 25)\n .map((s) => (\n <button\n key={String(s.id)}\n type=\"button\"\n onClick={() => handleAddSuggestion(s)}\n className=\"inline-flex items-center gap-1 rounded-full border border-dashed border-purple-300 bg-purple-50/80 text-purple-800 text-[11px] px-2 py-0.5 hover:bg-purple-100 transition-colors cursor-pointer\"\n >\n <Plus className=\"h-3 w-3\" />\n {s.brand_name || s.generic_name || String(s.id)}\n </button>\n ))}\n </div>\n )}\n\n {/* Results grid */}\n {loading && (\n <p className=\"text-xs text-muted-foreground text-center py-2\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"grid grid-cols-2 gap-2 max-h-64 overflow-y-auto\">\n {results.map((r) => (\n <SearchResultCard\n key={r.id}\n result={r}\n isAdding={addingResultId === r.id}\n onSelect={() => handleResultClick(r)}\n />\n ))}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems } from '../../react/FormProvider';\nimport { useAISuggestions } from '../../react/AISuggestionsContext';\nimport { AddMedicationField } from './AddMedicationField';\nimport type { Medication, MedicationSearchResult } from './AddMedicationField';\n\nexport const AddMedicationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { medications: suggestedMedications } = useAISuggestions();\n const { medications: frequentMedications } = useFrequentItems();\n\n const safeValue: Medication[] = Array.isArray(value) ? (value as Medication[]) : [];\n\n return (\n <AddMedicationField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<MedicationSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as MedicationSearchResult[] | undefined}\n frequentItems={frequentMedications}\n suggestedMedications={suggestedMedications}\n />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { InvestigationFrequentItem, DiagnosticPackage } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type InvestigationSearchResult = {\n id: string;\n name: string;\n code?: string;\n description?: string;\n categories?: string[];\n synonyms?: string[];\n sample_type?: string;\n method?: string;\n reference_range?: string;\n sample_unit?: string;\n sample_qty?: number;\n turnaround_time?: number;\n preparation?: string;\n service_type?: string;\n department?: string;\n is_vip_enabled?: boolean;\n is_pacs_enabled?: boolean;\n score?: number;\n};\n\nexport type Investigation = InvestigationSearchResult & {\n label: string;\n is_custom: boolean;\n fromAI: boolean;\n};\n\nexport type AddInvestigationFieldProps = {\n label?: string;\n value: Investigation[];\n onChange: (items: Investigation[]) => void;\n onSearch: (query: string) => Promise<InvestigationSearchResult[]>;\n recentlyUsed?: InvestigationSearchResult[];\n frequentItems?: InvestigationFrequentItem[];\n packages?: DiagnosticPackage[];\n};\n\nconst ADD_FEEDBACK_MS = 320;\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToInvestigation(result: InvestigationSearchResult): Investigation {\n return {\n ...result,\n label: result.name,\n is_custom: false,\n fromAI: false,\n };\n}\n\n// function mapFrequentItemToInvestigation(item: InvestigationFrequentItem): Investigation {\n// return {\n// id: String(item.id),\n// name: item.name,\n// code: item.code ?? undefined,\n// label: item.name,\n// is_custom: false,\n// fromAI: false,\n// };\n// }\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddInvestigationField: React.FC<AddInvestigationFieldProps> = ({\n label = 'Investigations',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n packages = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<InvestigationSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingId, setAddingId] = useState<string | null>(null);\n const [addingFrequentId, setAddingFrequentId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const valueRef = useRef<Investigation[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n // tracks which test IDs were added by each package: packageId → testId[]\n const addedByPackage = useRef<Map<string, string[]>>(new Map());\n // drives re-renders for package chip selected state\n const [selectedPackageIds, setSelectedPackageIds] = useState<Set<string>>(new Set());\n\n const safeValue: Investigation[] = Array.isArray(value) ? value : [];\n\n valueRef.current = safeValue;\n const addedIds = new Set(safeValue.map((inv) => inv.id));\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingId(null);\n setAddingFrequentId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function addInvestigation(result: InvestigationSearchResult) {\n if (!addedIds.has(result.id)) {\n onChange([...valueRef.current, mapToInvestigation(result)]);\n }\n setQuery('');\n setResults([]);\n }\n\n function handleResultClick(result: InvestigationSearchResult) {\n if (addedIds.has(result.id)) return;\n setAddingId(result.id);\n setTimeout(() => {\n addInvestigation(result);\n setAddingId(null);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function removeInvestigation(id: string) {\n onChange(safeValue.filter((inv) => inv.id !== id));\n }\n\n function handleRecentlyUsedToggle(result: InvestigationSearchResult) {\n if (addedIds.has(result.id)) {\n removeInvestigation(result.id);\n } else {\n addInvestigation(result);\n }\n }\n\n async function handleFrequentItemToggle(item: InvestigationFrequentItem) {\n const id = String(item.id);\n const addedById = addedIds.has(id);\n const addedByName = safeValue.some((inv) => inv.name === item.name);\n if (addedById || addedByName) {\n if (addedById) removeInvestigation(id);\n else onChange(safeValue.filter((inv) => inv.name !== item.name));\n return;\n }\n setAddingFrequentId(id);\n try {\n const searchResults = await onSearch(item.name);\n const first = searchResults?.[0];\n if (first && !valueRef.current.some((inv) => inv.id === first.id)) {\n onChange([...valueRef.current, mapToInvestigation(first)]);\n }\n } finally {\n setAddingFrequentId(null);\n }\n }\n\n function handlePackageToggle(pkg: DiagnosticPackage) {\n const alreadyAdded = addedByPackage.current.has(pkg.id);\n if (alreadyAdded) {\n const idsToRemove = new Set(addedByPackage.current.get(pkg.id) ?? []);\n onChange(valueRef.current.filter((inv) => !idsToRemove.has(inv.id)));\n addedByPackage.current.delete(pkg.id);\n setSelectedPackageIds((prev) => {\n const next = new Set(prev);\n next.delete(pkg.id);\n return next;\n });\n } else {\n const currentIds = new Set(valueRef.current.map((inv) => inv.id));\n const newTests = pkg.tests\n .filter((t) => !currentIds.has(t.id))\n .map((t) => mapToInvestigation(t));\n if (newTests.length > 0) {\n onChange([...valueRef.current, ...newTests]);\n }\n addedByPackage.current.set(pkg.id, newTests.map((t) => t.id));\n setSelectedPackageIds((prev) => new Set(prev).add(pkg.id));\n }\n }\n\n // ─── Chip builders ────────────────────────────────────────────────────────\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(r.id);\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const id = String(item.id);\n const isAdded = safeValue.some((inv) => inv.id === id) || safeValue.some((inv) => inv.name === item.name);\n const isAdding = addingFrequentId === id;\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={isAdding}\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50',\n isAdding && 'opacity-70 pointer-events-none'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {isAdding ? '…' : item.name}\n </button>\n );\n })\n : [];\n\n const packageChips = packages.map((pkg) => {\n const isAdded = selectedPackageIds.has(pkg.id);\n return (\n <button\n key={pkg.id}\n type=\"button\"\n onClick={() => handlePackageToggle(pkg)}\n className={cn(\n 'rounded-full border text-xs px-4 py-1.5 transition-colors flex items-center gap-2',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span>✓</span>}\n <span className=\"font-semibold\">{pkg.name}</span>\n <span className={cn(\n 'rounded-full px-1.5 py-0.5 text-[10px] font-medium',\n isAdded ? 'bg-green-100 text-green-600' : 'bg-purple-100 text-purple-600'\n )}>\n {pkg.tests.length}\n </span>\n </button>\n );\n });\n\n // ─── Build chip sections ──────────────────────────────────────────────────\n\n const chipSections = [];\n if (frequentItemChips.length > 0) {\n chipSections.push({ label: 'Frequently used', content: <>{frequentItemChips}</> });\n } else if (recentlyUsedChips.length > 0) {\n chipSections.push({ label: 'Recently Used', content: <>{recentlyUsedChips}</> });\n }\n if (packageChips.length > 0) {\n chipSections.push({ label: 'Packages', content: <>{packageChips}</> });\n }\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col bg-white border border-[#D0D0D0] space-y-3 p-3 h-fit\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added investigations — one row each */}\n {safeValue.length > 0 && (\n <div className=\"divide-y divide-border rounded-lg border border-border overflow-hidden\">\n {safeValue.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between px-3 py-2 bg-white hover:bg-gray-50\"\n >\n <span className=\"text-sm\">{inv.name}</span>\n <button\n type=\"button\"\n onClick={() => removeInvestigation(inv.id)}\n className=\"text-muted-foreground hover:text-red-500 transition-colors cursor-pointer\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Investigation\"\n chipSections={chipSections.length > 0 ? chipSections : undefined}\n >\n <div className=\"space-y-2\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search for an investigation...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {loading && (\n <p className=\"text-xs text-muted-foreground py-1\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"border border-border rounded-md overflow-hidden\">\n {results.map((r) => {\n const isAdding = addingId === r.id;\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleResultClick(r)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm transition-all duration-300 ease-out border-b border-border last:border-b-0 cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'bg-green-50 border-green-200'\n : 'hover:bg-gray-50'\n )}\n >\n <span className=\"truncate\">{r.name}</span>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems, usePackages } from '../../react/FormProvider';\nimport { AddInvestigationField } from './AddInvestigationField';\nimport type { Investigation, InvestigationSearchResult } from './AddInvestigationField';\n\nexport const AddInvestigationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { investigations: frequentInvestigations } = useFrequentItems();\n const packages = usePackages();\n\n const safeValue: Investigation[] = Array.isArray(value) ? (value as Investigation[]) : [];\n\n return (\n <AddInvestigationField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<InvestigationSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as InvestigationSearchResult[] | undefined}\n frequentItems={frequentInvestigations}\n packages={packages}\n />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { ProcedureFrequentItem } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n// Matches search API response.results[] shape\n\nexport type ProcedureSearchResult = {\n id: string;\n name: string;\n code?: string;\n description?: string;\n specialization?: string;\n score?: number;\n};\n\n/** Master row from search / frequent resolution — full metadata. */\nexport type MasterProcedure = ProcedureSearchResult & {\n label: string;\n is_custom: false;\n fromAI: boolean;\n};\n\n/** Custom free-text row — only `name` and `is_custom` (no extra keys). */\nexport type CustomProcedure = {\n name: string;\n is_custom: true;\n};\n\nexport type Procedure = MasterProcedure | CustomProcedure;\n\nexport type AddProcedureFieldProps = {\n label?: string;\n value: Procedure[];\n onChange: (items: Procedure[]) => void;\n onSearch: (query: string) => Promise<ProcedureSearchResult[]>;\n recentlyUsed?: ProcedureSearchResult[];\n /** Doctor-scoped frequently used procedures (from FormProvider frequentItems) */\n frequentItems?: ProcedureFrequentItem[];\n};\n\nconst ADD_FEEDBACK_MS = 320;\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToProcedure(result: ProcedureSearchResult): MasterProcedure {\n return {\n ...result,\n label: result.name,\n is_custom: false,\n fromAI: false,\n };\n}\n\nfunction createCustomProcedure(trimmedName: string): CustomProcedure {\n return { name: trimmedName.trim(), is_custom: true };\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddProcedureField: React.FC<AddProcedureFieldProps> = ({\n label = 'Procedures',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<ProcedureSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingId, setAddingId] = useState<string | null>(null);\n const [addingFrequentId, setAddingFrequentId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const valueRef = useRef<Procedure[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const safeValue: Procedure[] = Array.isArray(value) ? value : [];\n\n valueRef.current = safeValue;\n const addedIds = new Set(\n safeValue.filter((proc): proc is MasterProcedure => !proc.is_custom).map((proc) => proc.id),\n );\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingId(null);\n setAddingFrequentId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function addProcedure(result: ProcedureSearchResult) {\n if (!addedIds.has(result.id)) {\n onChange([...valueRef.current, mapToProcedure(result)]);\n }\n setQuery('');\n setResults([]);\n }\n\n function handleResultClick(result: ProcedureSearchResult) {\n if (addedIds.has(result.id)) return;\n setAddingId(result.id);\n setTimeout(() => {\n addProcedure(result);\n setAddingId(null);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function removeAt(index: number) {\n onChange(safeValue.filter((_, i) => i !== index));\n }\n\n function removeBySearchId(id: string) {\n onChange(safeValue.filter((proc) => proc.is_custom || proc.id !== id));\n }\n\n function handleAddCustom() {\n const trimmed = query.trim();\n if (!trimmed) return;\n if (valueRef.current.some((p) => p.is_custom && p.name === trimmed)) return;\n onChange([...valueRef.current, createCustomProcedure(trimmed)]);\n setQuery('');\n setResults([]);\n }\n\n function handleRecentlyUsedToggle(result: ProcedureSearchResult) {\n if (addedIds.has(result.id)) {\n removeBySearchId(result.id);\n } else {\n addProcedure(result);\n }\n }\n\n async function handleFrequentItemToggle(item: ProcedureFrequentItem) {\n const id = String(item.id);\n const addedById = addedIds.has(id);\n const addedByName = safeValue.some((proc) => proc.name === item.name);\n if (addedById || addedByName) {\n if (addedById) removeBySearchId(id);\n else onChange(safeValue.filter((proc) => proc.name !== item.name));\n return;\n }\n setAddingFrequentId(id);\n try {\n const searchResults = await onSearch(item.name);\n const first = searchResults?.[0];\n if (first && !valueRef.current.some((proc) => !proc.is_custom && proc.id === first.id)) {\n onChange([...valueRef.current, mapToProcedure(first)]);\n }\n } finally {\n setAddingFrequentId(null);\n }\n }\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(r.id);\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const id = String(item.id);\n const isAdded =\n safeValue.some((proc) => !proc.is_custom && proc.id === id) ||\n safeValue.some((proc) => proc.name === item.name);\n const isAdding = addingFrequentId === id;\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={isAdding}\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50',\n isAdding && 'opacity-70 pointer-events-none'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {isAdding ? '…' : item.name}\n </button>\n );\n })\n : [];\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col bg-white border border-[#D0D0D0] space-y-3 p-3 h-fit\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added procedures — one row each */}\n {safeValue.length > 0 && (\n <div className=\"divide-y divide-border rounded-lg border border-border overflow-hidden\">\n {safeValue.map((proc, index) => (\n <div\n key={proc.is_custom ? `custom-${index}` : proc.id}\n className=\"flex items-center justify-between px-3 py-2 bg-white hover:bg-gray-50\"\n >\n <span className=\"text-sm\">{proc.name}</span>\n <button\n type=\"button\"\n onClick={() => removeAt(index)}\n className=\"text-muted-foreground hover:text-red-500 transition-colors cursor-pointer\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Procedure\"\n recentlyUsedSlot={\n frequentItemChips.length > 0\n ? frequentItemChips\n : recentlyUsedChips.length > 0\n ? recentlyUsedChips\n : undefined\n }\n chipSectionLabel={frequentItemChips.length > 0 ? 'Frequently used' : undefined}\n actionSlot={\n <button\n type=\"button\"\n disabled={\n !query.trim() ||\n valueRef.current.some((p) => p.is_custom && p.name === query.trim())\n }\n onClick={handleAddCustom}\n className={cn(\n 'rounded-md px-5 py-2 text-sm font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-opacity cursor-pointer',\n (!query.trim() ||\n valueRef.current.some((p) => p.is_custom && p.name === query.trim())) &&\n 'opacity-40 cursor-not-allowed'\n )}\n >\n Save Procedure\n </button>\n }\n >\n <div className=\"space-y-2\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search for a procedure...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {/* Inline results — no absolute positioning to avoid overflow-clip */}\n {loading && (\n <p className=\"text-xs text-muted-foreground py-1\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"border border-border rounded-md overflow-hidden\">\n {results.map((r) => {\n const isAdding = addingId === r.id;\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleResultClick(r)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm transition-all duration-300 ease-out border-b border-border last:border-b-0 cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'bg-green-50 border-green-200'\n : 'hover:bg-gray-50'\n )}\n >\n <span className=\"truncate\">{r.name}</span>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems } from '../../react/FormProvider';\nimport { AddProcedureField } from './AddProcedureField';\nimport type { Procedure, ProcedureSearchResult } from './AddProcedureField';\n\nexport const AddProcedureWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { procedures: frequentProcedures } = useFrequentItems();\n\n const safeValue: Procedure[] = Array.isArray(value) ? (value as Procedure[]) : [];\n\n return (\n <AddProcedureField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<ProcedureSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as ProcedureSearchResult[] | undefined}\n frequentItems={frequentProcedures}\n />\n );\n};\n","import React, { useState } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type DifferentialDiagnosisItem = {\n category: string;\n condition: string;\n likelihood: string;\n severity: string;\n treatability: string;\n keyFeatures?: string[];\n nextSteps?: string[];\n};\n\nexport type DifferentialDiagnosisProps = {\n differentialDiagnosis: DifferentialDiagnosisItem[];\n className?: string;\n height?: string;\n};\n\n// ─── Helpers ────────────────────────────────────────────────────────────────────\n\nfunction getStatusBasedClass(status: string): string {\n switch ((status || '').toLowerCase()) {\n case 'high':\n return 'bg-red-100 text-red-500';\n case 'medium':\n return 'bg-yellow-100 text-yellow-600';\n case 'low':\n return 'bg-green-100 text-green-600';\n default:\n return 'bg-gray-200 text-gray-600';\n }\n}\n\n// ─── Diagnosis card (accordion) ─────────────────────────────────────────────────\n\nfunction DiagnosisCard({ item, defaultOpen = false }: { item: DifferentialDiagnosisItem; defaultOpen?: boolean }) {\n const [open, setOpen] = useState(defaultOpen);\n\n return (\n <div className=\"border border-gray-200 rounded-lg bg-[#F2F2F2] mb-2 last:mb-0 overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n className={cn(\n 'w-full text-left flex items-center gap-2 py-2 px-3 rounded-lg',\n 'cursor-pointer hover:bg-gray-200/60 transition-colors'\n )}\n >\n <ChevronRight\n className={cn('h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform', open && 'rotate-90')}\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs text-gray-500 font-medium\">\n {item.category.charAt(0).toUpperCase() + item.category.slice(1)}\n </div>\n <div className=\"text-sm text-black font-semibold mt-0.5 leading-tight\">{item.condition}</div>\n </div>\n </button>\n\n {open && (\n <div className=\"flex flex-col gap-2 px-3 pb-3 pt-0 pl-9\">\n <div className=\"flex justify-between text-xs font-semibold text-gray-500\">\n <span>LIKELIHOOD</span>\n <span>SEVERITY</span>\n <span>TREATABILITY</span>\n </div>\n <div className=\"flex justify-between gap-2\">\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.likelihood))}>\n {item.likelihood}\n </span>\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.severity))}>\n {item.severity}\n </span>\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.treatability))}>\n {item.treatability}\n </span>\n </div>\n\n {item.keyFeatures && item.keyFeatures.length > 0 && (\n <div className=\"pt-1\">\n <div className=\"text-xs font-semibold text-gray-500 mb-0.5 uppercase tracking-wider\">Key Features</div>\n <ul className=\"list-disc pl-4 text-xs text-gray-700 space-y-0.5\">\n {item.keyFeatures.map((feature, i) => (\n <li key={i}>{feature}</li>\n ))}\n </ul>\n </div>\n )}\n\n {item.nextSteps && item.nextSteps.length > 0 && (\n <div className=\"pt-1\">\n <div className=\"text-xs font-semibold text-gray-500 mb-0.5 uppercase tracking-wider\">Next Steps</div>\n <ul className=\"list-disc pl-4 text-xs text-gray-700 space-y-0.5\">\n {item.nextSteps.map((step, i) => (\n <li key={i}>{step}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\n/**\n * - Outer: rounded border [#D0D0D0], highlight label strip (#FEE8EC)\n * - Body: scrollable list of diagnosis cards with accordion expand/collapse\n */\nexport const DifferentialDiagnosis: React.FC<DifferentialDiagnosisProps> = ({\n differentialDiagnosis,\n className = '',\n height = '300px',\n}) => {\n const hasItems = Array.isArray(differentialDiagnosis) && differentialDiagnosis.length > 0;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]',\n className\n )}\n >\n {/* Header: highlight-label style */}\n <div className=\"rounded-t-md bg-[#FEE8EC] px-3 py-1.5 text-xs shrink-0 z-[1] text-slate-600 flex items-center font-semibold\">\n <span>Differential Diagnosis</span>\n </div>\n\n {/* Body: scrollable list */}\n <div\n className={cn(\n 'relative bg-white rounded-b-md border-t border-[#D0D0D0] overflow-y-auto p-3',\n 'focus-visible:outline-none'\n )}\n style={{ minHeight: height, maxHeight: height }}\n >\n {hasItems ? (\n differentialDiagnosis.map((item, idx) => (\n <DiagnosisCard key={idx} item={item} defaultOpen={idx === 0} />\n ))\n ) : (\n <p className=\"text-xs text-muted-foreground\">No differential diagnosis yet.</p>\n )}\n\n {/* Progressive blur-style overlay at bottom (30% height) */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-[30%] bg-gradient-to-t from-white via-white/80 to-transparent\" />\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { DifferentialDiagnosis } from './DifferentialDiagnosis';\nimport type { DifferentialDiagnosisItem } from './DifferentialDiagnosis';\n\nexport const DifferentialDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value } = useField(fieldId);\n\n const items: DifferentialDiagnosisItem[] = Array.isArray(value)\n ? (value as DifferentialDiagnosisItem[])\n : [];\n\n return <DifferentialDiagnosis differentialDiagnosis={items} />;\n};\n\n","import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = \"md\", ...props }, ref) => {\n const sizeClasses = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-3\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"animate-spin rounded-full border-primary border-t-transparent\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n);\nSpinner.displayName = \"Spinner\";\n\nexport { Spinner };\n","import React from 'react';\nimport { RefreshCw } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Spinner } from '../shadcn/spinner';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type VitalsData = {\n temperature?: number | null;\n height?: number | null;\n weight?: number | null;\n bmi?: number | null;\n blood_sugar?: number | null;\n notes?: string | null;\n circumference_of_head_in_cms?: number | null;\n circumference_of_waist_in_cms?: number | null;\n blood_pressure_systolic?: number | null;\n blood_pressure_diastolic?: number | null;\n heart_rate?: number | null;\n respiratory_rate?: number | null;\n oxygen_saturation?: number | null;\n recorded_at?: string | null;\n};\n\nexport type VitalsProps = {\n label?: string;\n data: VitalsData | null;\n loading?: boolean;\n error?: string | null;\n onRefresh?: () => void;\n className?: string;\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\ntype VitalItem = { label: string; value: string };\n\nfunction buildItems(data: VitalsData): VitalItem[] {\n const items: VitalItem[] = [];\n\n const hasBP =\n data.blood_pressure_systolic != null || data.blood_pressure_diastolic != null;\n if (hasBP) {\n const sys = data.blood_pressure_systolic ?? '–';\n const dia = data.blood_pressure_diastolic ?? '–';\n items.push({ label: 'BP', value: `${sys}/${dia}` });\n }\n\n if (data.heart_rate != null)\n items.push({ label: 'Heart Rate', value: `${data.heart_rate} bpm` });\n\n if (data.respiratory_rate != null)\n items.push({ label: 'Resp. Rate', value: `${data.respiratory_rate}/min` });\n\n if (data.oxygen_saturation != null)\n items.push({ label: 'SpO\\u2082', value: `${data.oxygen_saturation}%` });\n\n if (data.temperature != null)\n items.push({ label: 'Temp', value: `${data.temperature} \\u00b0F` });\n\n if (data.height != null)\n items.push({ label: 'Height', value: `${data.height} cm` });\n\n if (data.weight != null)\n items.push({ label: 'Weight', value: `${data.weight} kg` });\n\n if (data.bmi != null)\n items.push({ label: 'BMI', value: `${data.bmi}` });\n\n if (data.blood_sugar != null)\n items.push({ label: 'Blood Sugar', value: `${data.blood_sugar} mg/dL` });\n\n if (data.circumference_of_head_in_cms != null)\n items.push({ label: 'Head Circ.', value: `${data.circumference_of_head_in_cms} cm` });\n\n if (data.circumference_of_waist_in_cms != null)\n items.push({ label: 'Waist Circ.', value: `${data.circumference_of_waist_in_cms} cm` });\n\n return items;\n}\n\nfunction formatRecordedAt(iso: string | null | undefined): string {\n if (!iso) return '';\n try {\n return new Date(iso).toLocaleString(undefined, {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n } catch {\n return iso;\n }\n}\n\n// ─── Vital chip ───────────────────────────────────────────────────────────────\n\nfunction VitalChip({ label, value }: VitalItem) {\n return (\n <div className=\"flex flex-col gap-0 rounded-md min-w-fit px-1.5\">\n <span className=\"text-[10px] font-sm text-gray-500 uppercase tracking-wide leading-none\">\n {label}\n </span>\n <span className=\"text-xs text-gray-900 leading-tight\">{value}</span>\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const Vitals: React.FC<VitalsProps> = ({\n data,\n loading = false,\n error = null,\n onRefresh,\n className,\n}) => {\n const items = data ? buildItems(data) : [];\n const hasItems = items.length > 0;\n const recordedAt = data?.recorded_at ? formatRecordedAt(data.recorded_at) : null;\n const notes = data?.notes?.trim() || null;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden border border-[#D0D0D0] bg-white px-2 py-2',\n className\n )}\n >\n {loading && !hasItems ? (\n <div className=\"flex items-center gap-1.5 py-1\">\n <Spinner size=\"sm\" />\n <span className=\"text-xs text-muted-foreground\">Loading vitals…</span>\n </div>\n ) : error ? (\n <p className=\"text-xs text-red-500 py-1\">{error}</p>\n ) : hasItems ? (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-1\">\n <div className=\"flex flex-wrap gap-x-2 gap-y-0.5\">\n {items.map(item => (\n <VitalChip key={item.label} {...item} />\n ))}\n </div>\n <div className=\"flex flex-col items-end gap-0.5 shrink-0\">\n {recordedAt && (\n <span className=\"text-[10px] text-slate-500\">{recordedAt}</span>\n )}\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 cursor-pointer'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n </div>\n {notes && (\n <p className=\"text-xs text-gray-600 pt-1.5 mt-0.5\">\n {notes}\n </p>\n )}\n </div>\n ) : (\n <div className=\"flex items-center justify-between gap-2 py-1\">\n <p className=\"text-xs text-muted-foreground\">No vitals recorded.</p>\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 shrink-0'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Vitals, type VitalsData } from './Vitals';\n\nexport const VitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue, fieldDef } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n console.log('[VitalsWidget] fieldId:', fieldId, '| onFetch present:', !!handlers.onFetch, '| value:', value);\n\n const fetchVitals = useCallback(async () => {\n if (!handlers.onFetch) return;\n setLoading(true);\n setError(null);\n try {\n const data = await handlers.onFetch();\n console.log('[VitalsWidget] fetched data:', data);\n setValue(data);\n } catch {\n setError('Failed to load vitals. Please try again.');\n } finally {\n setLoading(false);\n }\n }, [handlers, setValue]);\n\n // Fetch once on mount if a handler is provided\n useEffect(() => {\n fetchVitals();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Vitals\n label={fieldDef?.label ?? 'Vitals'}\n data={(value as VitalsData | null) ?? null}\n loading={loading}\n error={error}\n onRefresh={handlers.onFetch ? fetchVitals : undefined}\n />\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\n\n/**\n * Hidden Vitals: same as a textarea (styling, behavior, form state) but visually\n * hidden in the UI. State is still saved in the background.\n */\nexport const HiddenVitalsWidget: 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 height = 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n\n const wrapperClass = cn(theme?.wrapperClassName ?? 'space-y-2', 'sr-only');\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n return (\n <div className={wrapperClass} aria-hidden=\"true\">\n {theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n )}\n <Textarea\n id={fieldId}\n value={value ?? ''}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={inputClass}\n {...(height != null && { height })}\n />\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\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 { ReferralFieldDef, ReferralItem } from '../../core/types';\n\nfunction normalizeOptions(\n response: { specializations?: string[] } | { label: string; value: any }[]\n): { label: string; value: string }[] {\n if (Array.isArray(response)) {\n return response.map((o) => ({ label: String(o.label), value: String(o.value) }));\n }\n if (response?.specializations?.length) {\n return response.specializations.map((s) => ({ label: s, value: s }));\n }\n return [];\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n const s = (item as ReferralItem).specialization;\n const u = (item as ReferralItem).is_urgent;\n return { specialization: String(s), is_urgent: Boolean(u) };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReferralWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [options, setOptions] = useState<{ label: string; value: string }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const selectedItems = normalizeValue(value);\n const availableOptions = options.filter(\n (opt) => !selectedItems.some((item) => item.specialization === opt.value)\n );\n\n const loadOptions = useCallback(async () => {\n if (handlers.onFetchOptions) {\n setLoading(true);\n try {\n const res = await handlers.onFetchOptions();\n setOptions(normalizeOptions(res));\n } finally {\n setLoading(false);\n }\n return;\n }\n const def = fieldDef as ReferralFieldDef | undefined;\n if (def?.options?.length) {\n setOptions(def.options.map((o) => ({ label: String(o.label), value: String(o.value) })));\n } else if (def?.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts.map((o) => ({ label: String(o.label), value: String(o.value) }))))\n .finally(() => setLoading(false));\n } else {\n setOptions([]);\n }\n }, [fieldDef, handlers]);\n\n useEffect(() => {\n if (!fieldDef) return;\n loadOptions();\n }, [fieldDef, loadOptions]);\n\n const handleAdd = useCallback(\n (specialization: string) => {\n const next = [...selectedItems, { specialization, is_urgent: false }];\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleRemove = useCallback(\n (specialization: string) => {\n const next = selectedItems.filter((item) => item.specialization !== specialization);\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleToggleUrgent = useCallback(\n (specialization: string) => {\n const next = selectedItems.map((item) =>\n item.specialization === specialization\n ? { ...item, is_urgent: !item.is_urgent }\n : item\n );\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>\n Referral to {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n\n {loading && <p className=\"text-xs text-muted-foreground\">Loading...</p>}\n\n {!loading && (\n <>\n <Select\n key={`referral-${selectedItems.map((i) => i.specialization).join(',')}`}\n disabled={disabled}\n value=\"\"\n onValueChange={(val) => {\n if (val) {\n handleAdd(val);\n }\n }}\n >\n <SelectTrigger id={fieldId} className={showError ? 'border-red-500' : ''}>\n <SelectValue placeholder=\"Select specializations...\" />\n </SelectTrigger>\n <SelectContent>\n {availableOptions.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n {availableOptions.length === 0 && (\n <div className=\"py-2 px-2 text-sm text-muted-foreground\">\n All specializations selected\n </div>\n )}\n </SelectContent>\n </Select>\n\n {selectedItems.length > 0 && (\n <div className=\"mt-1.5 flex h-12 flex-wrap content-start gap-1.5 overflow-y-auto pr-1\">\n {selectedItems.map((item) => {\n const isUrgent = item.is_urgent;\n const chipClass = isUrgent\n ? 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs max-w-full cursor-pointer hover:bg-red-200 transition-colors'\n : 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs max-w-full cursor-pointer hover:bg-blue-200 transition-colors';\n return (\n <div\n key={item.specialization}\n className={chipClass}\n onClick={(e) => {\n if (e.target instanceof HTMLElement && e.target.closest('button')) return;\n handleToggleUrgent(item.specialization);\n }}\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded mr-1\">\n U\n </span>\n )}\n <span className=\"truncate max-w-[120px]\">{item.specialization}</span>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(item.specialization);\n }}\n className=\"ml-0.5 text-blue-600 hover:text-blue-800 focus:outline-none flex-shrink-0 text-sm leading-none\"\n aria-label={`Remove ${item.specialization}`}\n >\n ×\n </button>\n </div>\n );\n })}\n </div>\n )}\n\n {selectedItems.length === 0 && (\n <p className=\"text-xs text-muted-foreground mt-1\">No specializations selected</p>\n )}\n\n {selectedItems.length > 0 && (\n <p className=\"text-xs text-muted-foreground mt-1.5\">\n Click a chip to mark as urgent\n </p>\n )}\n </>\n )}\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import * as React from \"react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n\n","import React, { useCallback, useState } from 'react';\nimport { format, parseISO, differenceInCalendarDays, addDays, addWeeks, addMonths } from 'date-fns';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { Card, CardContent } from '../shadcn/card';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { Calendar } from '../shadcn/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcn/popover';\nimport { Button } from '../shadcn/button';\nimport { cn } from '../../core/utils';\nimport type { FollowupValue } from '../../core/types';\n\nconst FOLLOWUP_TYPE_OPTIONS = [\n { value: 'no followup', label: 'No Follow-up' },\n { value: 'one time', label: 'One Time' },\n] as const;\n\nconst UNIT_OPTIONS = [\n { value: 'days', label: 'Days' },\n { value: 'weeks', label: 'Weeks' },\n { value: 'months', label: 'Months' },\n] as const;\n\n/** Convert duration (value + unit) to number of days from today. */\nfunction durationToDays(valueNum: number, unit: 'days' | 'weeks' | 'months'): number {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n let target: Date;\n if (unit === 'days') target = addDays(today, valueNum);\n else if (unit === 'weeks') target = addWeeks(today, valueNum);\n else target = addMonths(today, valueNum);\n return Math.max(0, differenceInCalendarDays(target, today));\n}\n\n/** Convert a future date to number of days from today. */\nfunction dateToDays(date: Date): number {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return Math.max(0, differenceInCalendarDays(d, today));\n}\n\n/** Days → date for display (today + days). */\nfunction daysToDate(days: number): Date {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return addDays(today, days);\n}\n\nfunction normalizeFollowup(value: unknown): false | FollowupValue {\n if (value === false || value === null || value === undefined) return false;\n if (typeof value !== 'object') return false;\n const o = value as Record<string, unknown>;\n if (o.followupType !== 'one time') return false;\n // New shape: { followupType, value, unit: 'days' }\n if (typeof o.value === 'string' && o.unit === 'days') {\n return { followupType: 'one time', value: o.value, unit: 'days' };\n }\n // Legacy: mode + date or mode + value/unit → convert to days\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n if (o.mode === 'date' && typeof o.date === 'string') {\n const d = parseLocalDate(o.date);\n if (d) {\n const days = dateToDays(d);\n return { followupType: 'one time', value: String(days), unit: 'days' };\n }\n }\n const val = o.value != null ? Number(String(o.value)) : 7;\n const u = (o.unit === 'weeks' || o.unit === 'months' ? o.unit : 'days') as 'days' | 'weeks' | 'months';\n const days = durationToDays(Number.isNaN(val) ? 7 : val, u);\n return { followupType: 'one time', value: String(days), unit: 'days' };\n}\n\nfunction getDefaultDate(): Date {\n const d = new Date();\n d.setDate(d.getDate() + 7);\n return d;\n}\n\nfunction parseLocalDate(dateString: string | null | undefined): Date | null {\n if (!dateString) return null;\n try {\n return parseISO(dateString);\n } catch {\n const parts = dateString.split('-');\n if (parts.length === 3) {\n const y = parseInt(parts[0], 10);\n const m = parseInt(parts[1], 10) - 1;\n const d = parseInt(parts[2], 10);\n if (!Number.isNaN(y) && !Number.isNaN(m) && !Number.isNaN(d)) {\n return new Date(y, m, d);\n }\n }\n return null;\n }\n}\n\nexport const FollowupWidget: React.FC<{ fieldId: string; showIcon?: boolean }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, visible } = useField(fieldId);\n const followup = normalizeFollowup(value);\n const [calendarOpen, setCalendarOpen] = useState(false);\n\n const currentFollowupType = followup ? followup.followupType : 'no followup';\n const hasFollowup = followup !== false;\n const [displayMode, setDisplayMode] = useState<'duration' | 'date'>('duration');\n const [displayUnit, setDisplayUnit] = useState<'days' | 'weeks' | 'months'>('days');\n const daysNum = hasFollowup ? parseInt(followup.value, 10) || 7 : 7;\n const currentDate = hasFollowup ? daysToDate(daysNum) : null;\n const followupMode = displayMode;\n const currentValue =\n hasFollowup && displayUnit === 'days'\n ? followup.value\n : hasFollowup\n ? String(\n displayUnit === 'weeks'\n ? Math.round(daysNum / 7) || 1\n : Math.round(daysNum / 30) || 1\n )\n : '7';\n const currentUnit = displayUnit;\n\n const handleFollowupTypeChange = useCallback(\n (newType: 'no followup' | 'one time') => {\n setTouched();\n if (newType === 'no followup') {\n setValue(false);\n setCalendarOpen(false);\n return;\n }\n setValue({\n followupType: 'one time',\n value: hasFollowup ? followup.value : '7',\n unit: 'days',\n });\n },\n [followup, hasFollowup, setValue, setTouched]\n );\n\n const handleModeChange = useCallback((newMode: 'duration' | 'date') => {\n setDisplayMode(newMode);\n if (newMode === 'date') setCalendarOpen(false);\n }, []);\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n setTouched();\n const num = parseInt(newValue, 10);\n const min = displayUnit === 'days' ? 0 : 1;\n const valid = (Number.isNaN(num) ? min : num) >= min || newValue === '';\n if (!valid && newValue !== '') {\n setValue({ followupType: 'one time', value: String(displayUnit === 'days' ? 0 : durationToDays(1, displayUnit)), unit: 'days' });\n return;\n }\n const days = durationToDays(Number.isNaN(num) ? (displayUnit === 'days' ? 0 : 1) : num, displayUnit);\n setValue({ followupType: 'one time', value: String(days), unit: 'days' });\n },\n [displayUnit, setValue, setTouched]\n );\n\n const handleUnitChange = useCallback((newUnit: 'days' | 'weeks' | 'months') => {\n setDisplayUnit(newUnit);\n }, []);\n\n const handleDateSelect = useCallback(\n (selected: Date | undefined) => {\n setTouched();\n setCalendarOpen(false);\n if (!selected) return;\n const days = dateToDays(selected);\n setValue({ followupType: 'one time', value: String(days), unit: 'days' });\n },\n [setValue, setTouched]\n );\n\n if (!visible || !fieldDef) return null;\n\n const minDate = new Date();\n minDate.setHours(0, 0, 0, 0);\n const selectedDate = currentDate || getDefaultDate();\n\n return (\n <Card className={cn(error && 'border-destructive')}>\n {/* <CardHeader className=\"flex flex-row items-center space-y-0\">\n {showIcon && (\n <img\n alt=\"Follow-up\"\n className=\"h-5 w-5\"\n src=\"/icons/star_png.png\"\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n />\n )}\n <Label className=\"text-base font-semibold\">{fieldDef.label}</Label>\n </CardHeader> */}\n <CardContent className=\"space-y-1 p-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center flex-shrink-0 gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground\">Follow-up</Label>\n <Select\n value={currentFollowupType}\n onValueChange={(v) => handleFollowupTypeChange(v as 'no followup' | 'one time')}\n disabled={disabled}\n >\n <SelectTrigger className=\"w-[140px] border-none bg-muted/50 text-xs py-1 focus:outline-none focus:ring-0 focus:ring-offset-0\">\n <SelectValue/>\n </SelectTrigger>\n <SelectContent>\n {FOLLOWUP_TYPE_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} className=\"text-xs\">\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {currentFollowupType !== 'no followup' && (\n <>\n <div className=\"flex items-center gap-4\">\n <Label className=\"text-xs font-medium text-muted-foreground\">Schedule by:</Label>\n <div className=\"flex items-center gap-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={`followup-mode-${fieldId}`}\n value=\"duration\"\n checked={followupMode === 'duration'}\n onChange={() => handleModeChange('duration')}\n className=\"h-4 w-4 text-primary focus:ring-primary\"\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">Duration</span>\n </label>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={`followup-mode-${fieldId}`}\n value=\"date\"\n checked={followupMode === 'date'}\n onChange={() => handleModeChange('date')}\n className=\"h-4 w-4 text-primary focus:ring-primary\"\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">Date</span>\n </label>\n </div>\n </div>\n\n {followupMode === 'duration' && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold text-muted-foreground\">In</span>\n <input\n type=\"number\"\n min={currentUnit === 'days' ? 0 : 1}\n value={currentValue}\n onChange={(e) => handleValueChange(e.target.value)}\n disabled={disabled}\n className=\"w-16 py-1.5 px-2 border border-input rounded-md text-center text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n placeholder=\"7\"\n />\n <Select\n value={currentUnit}\n onValueChange={(v) => handleUnitChange(v as 'days' | 'weeks' | 'months')}\n disabled={disabled}\n >\n <SelectTrigger className=\"w-[100px] h-8 text-xs\">\n <SelectValue className='text-xs'/>\n </SelectTrigger>\n <SelectContent>\n {UNIT_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} className=\"text-xs\">\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {followupMode === 'date' && (\n <Popover open={calendarOpen} onOpenChange={setCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"w-full justify-start text-left font-normal h-9\"\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">\n {hasFollowup && currentDate\n ? format(currentDate, 'MMM d, yyyy')\n : 'Select date'}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleDateSelect}\n disabled={(date) => date < minDate}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )}\n\n <p className=\"text-xs text-muted-foreground\">\n One-time appointment{' '}\n {followupMode === 'duration'\n ? `in ${currentValue} ${currentUnit}`\n : hasFollowup && currentDate\n ? `on ${format(currentDate, 'MMM d, yyyy')}`\n : 'date to be selected'}\n </p>\n </>\n )}\n\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </CardContent>\n </Card>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport nlp from 'compromise';\nimport type { ExtractedKeywordMatch, MatchedCondition } from '../core/types';\n\nexport interface SmartKeywordsResult {\n extractedNouns: string[];\n matchedConditions: ExtractedKeywordMatch[];\n isProcessing: boolean;\n error: string | null;\n}\n\n/**\n * Extracts noun phrases from `text` using compromise, deduplicates, then\n * searches each noun against a backend master table via `onSearch`. Returns\n * the flattened list of keyword-to-master-record matches.\n *\n * All NLP runs client-side; the backend only receives simple query strings.\n */\nexport function useSmartKeywords(\n text: string,\n onSearch: (query: string) => Promise<any[]>,\n debounceDelay = 1000,\n): SmartKeywordsResult {\n // High-level debug of hook usage on each render\n console.log('[useSmartKeywords] render', {\n textLength: text?.length ?? 0,\n hasOnSearch: typeof onSearch === 'function',\n debounceDelay,\n });\n\n const [extractedNouns, setExtractedNouns] = useState<string[]>([]);\n const [matchedConditions, setMatchedConditions] = useState<ExtractedKeywordMatch[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const abortRef = useRef(0);\n\n const processText = useCallback(\n async (input: string, runId: number) => {\n if (!input || input.trim().length === 0) {\n console.log('[useSmartKeywords] skip empty input', {\n runId,\n inputLength: input?.length ?? 0,\n });\n setExtractedNouns([]);\n setMatchedConditions([]);\n setIsProcessing(false);\n return;\n }\n\n console.log('[useSmartKeywords] processText start', {\n runId,\n inputLength: input.length,\n });\n\n setIsProcessing(true);\n setError(null);\n\n try {\n const nouns = extractNouns(input);\n const uniqueNouns = Array.from(new Set(nouns));\n\n console.log('[useSmartKeywords] extracted nouns', {\n runId,\n nouns,\n uniqueNouns,\n });\n\n if (runId !== abortRef.current) return;\n setExtractedNouns(uniqueNouns);\n\n if (uniqueNouns.length === 0) {\n console.log('[useSmartKeywords] no nouns, skipping search', { runId });\n setMatchedConditions([]);\n setIsProcessing(false);\n return;\n }\n\n const searchResults = await Promise.all(\n uniqueNouns.map(async (noun) => {\n // Normalise the keyword before hitting the backend:\n // - remove newlines\n // - strip leading bullet characters like \"- \"\n // - collapse internal whitespace to single spaces\n const normalised = noun\n .replace(/\\s+/g, ' ')\n .replace(/^[\\s-]+/, '')\n .trim();\n\n try {\n console.log('[useSmartKeywords] onSearch call', { runId, noun, normalised });\n const results: MatchedCondition[] = await onSearch(normalised);\n console.log('[useSmartKeywords] onSearch result', {\n runId,\n noun,\n normalised,\n count: Array.isArray(results) ? results.length : 0,\n });\n // Only keep the first result per noun\n const first = Array.isArray(results) && results.length > 0 ? [results[0]] : [];\n return { keyword: normalised, matches: first };\n } catch (err) {\n console.error('[useSmartKeywords] onSearch error', { runId, noun, err });\n return { keyword: normalised || noun, matches: [] as MatchedCondition[] };\n }\n }),\n );\n\n if (runId !== abortRef.current) return;\n\n const allMatches: ExtractedKeywordMatch[] = searchResults.flatMap(\n ({ keyword, matches }) =>\n matches.map((record) => ({\n extractedKeyword: keyword,\n matchedCondition: {\n id: record.id,\n name: record.name,\n created_at: record.created_at,\n updated_at: record.updated_at,\n },\n })),\n );\n\n console.log('[useSmartKeywords] allMatches computed', {\n runId,\n matchesCount: allMatches.length,\n });\n\n setMatchedConditions(allMatches);\n } catch (err) {\n if (runId !== abortRef.current) return;\n console.error('[useSmartKeywords] processText error', { runId, err });\n setError(err instanceof Error ? err.message : 'Keyword extraction failed');\n } finally {\n if (runId === abortRef.current) {\n console.log('[useSmartKeywords] processText end', { runId });\n setIsProcessing(false);\n }\n }\n },\n [onSearch],\n );\n\n useEffect(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n\n const runId = ++abortRef.current;\n console.log('[useSmartKeywords] schedule debounce', {\n runId,\n debounceDelay,\n textLength: text?.length ?? 0,\n });\n\n timerRef.current = setTimeout(() => {\n console.log('[useSmartKeywords] debounce fired', { runId });\n processText(text, runId);\n }, debounceDelay);\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [text, debounceDelay, processText]);\n\n return { extractedNouns, matchedConditions, isProcessing, error };\n}\n\nfunction extractNouns(text: string): string[] {\n const doc = nlp(text);\n const rawNouns: string[] = doc.nouns().out('array');\n\n const cleaned = rawNouns\n .map((n) => n.replace(/[^\\w\\s-]/g, '').trim().toLowerCase())\n .filter((n) => n.length > 2);\n\n console.log('[useSmartKeywords] extractNouns', {\n inputLength: text?.length ?? 0,\n rawNouns,\n cleaned,\n });\n\n return cleaned;\n}\n","import React, { useCallback, useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { useSmartKeywords } from '../../react/useSmartKeywords';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { SmartTextareaFieldDef, SmartTextareaValue, ExtractedKeywordMatch } from '../../core/types';\nimport { Loader2 } from 'lucide-react';\n\nexport const SmartTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n\n const def = fieldDef as SmartTextareaFieldDef | undefined;\n const structured = value as SmartTextareaValue | null | undefined;\n const textValue = structured?.text ?? '';\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onSearch = useCallback(\n (query: string) => handler.onSearch(query),\n [handler],\n );\n\n const { matchedConditions, isProcessing } = useSmartKeywords(\n textValue,\n onSearch,\n def?.debounceDelay ?? 1000,\n );\n\n const currentKeywords = structured?.extractedKeywords ?? [];\n\n const nextKeywords = useMemo(() => {\n if (matchedConditions.length === 0 && currentKeywords.length === 0) return currentKeywords;\n if (\n matchedConditions.length === currentKeywords.length &&\n matchedConditions.every(\n (m, i) =>\n m.matchedCondition.id === currentKeywords[i]?.matchedCondition.id &&\n m.extractedKeyword === currentKeywords[i]?.extractedKeyword,\n )\n ) {\n return currentKeywords;\n }\n return matchedConditions;\n }, [matchedConditions, currentKeywords]);\n\n const writeValue = useCallback(\n (text: string, keywords: ExtractedKeywordMatch[]) => {\n const next: SmartTextareaValue = { text, extractedKeywords: keywords };\n setValue(next);\n },\n [setValue],\n );\n\n React.useEffect(() => {\n if (nextKeywords !== currentKeywords) {\n writeValue(textValue, nextKeywords);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nextKeywords]);\n\n const handleTextChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n writeValue(e.target.value, currentKeywords);\n },\n [writeValue, currentKeywords],\n );\n\n if (!def) return null;\n\n const height = def.height;\n const theme = getThemeConfig('textarea', def.theme);\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {def.label} {def.required && <span className=\"text-red-500\">*</span>}\n {isProcessing && (\n <Loader2 className=\"inline-block ml-1.5 h-3 w-3 animate-spin text-muted-foreground\" />\n )}\n </>\n );\n\n return (\n <div className={wrapperClass}>\n {theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n )}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={handleTextChange}\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={inputClass}\n {...(height != null ? { height } : {})}\n />\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { DiagnosisTextareaFieldDef } from '../../core/types';\n\ntype DiagnosisGradeGroup = {\n condition: string;\n grades: string[];\n};\n\ntype DiagnosisGradeSelection = {\n condition: string;\n grade: string;\n};\n\ntype DiagnosisTextareaValue =\n | string\n | {\n text?: unknown;\n selectedGrade?: unknown; // legacy single-selection\n selectedGradesByCondition?: unknown; // new multi-condition single-select\n }\n | null\n | undefined;\n\ntype DiagnosisGradesArrayResponse = {\n diagnosisGrades?: Array<{\n condition?: unknown;\n grades?: unknown;\n }>;\n};\n\ntype DiagnosisMapResponse = {\n field?: unknown;\n value?: unknown;\n};\n\nfunction normalizeDiagnosisGrades(payload: unknown): DiagnosisGradeGroup[] {\n const result: DiagnosisGradeGroup[] = [];\n\n const pushGroup = (conditionRaw: unknown, gradesRaw: unknown) => {\n const condition = typeof conditionRaw === 'string' ? conditionRaw.trim() : '';\n if (!condition) return;\n if (!Array.isArray(gradesRaw)) return;\n\n const grades = Array.from(\n new Set(\n gradesRaw\n .map((grade) => (typeof grade === 'string' ? grade.trim() : ''))\n .filter(Boolean),\n ),\n );\n\n if (grades.length === 0) return;\n result.push({ condition, grades });\n };\n\n const asArrayResponse = payload as DiagnosisGradesArrayResponse;\n if (Array.isArray(asArrayResponse?.diagnosisGrades)) {\n asArrayResponse.diagnosisGrades.forEach((item) => {\n pushGroup(item?.condition, item?.grades);\n });\n return result;\n }\n\n const asMapResponse = payload as DiagnosisMapResponse;\n const mapLike =\n asMapResponse?.field === 'diagnosisgrade' && asMapResponse?.value && typeof asMapResponse.value === 'object'\n ? (asMapResponse.value as Record<string, unknown>)\n : null;\n\n if (mapLike) {\n Object.entries(mapLike).forEach(([condition, grades]) => {\n pushGroup(condition, grades);\n });\n }\n\n return result;\n}\n\nexport const DiagnosisTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n const def = fieldDef as DiagnosisTextareaFieldDef | undefined;\n\n const [gradeGroups, setGradeGroups] = React.useState<DiagnosisGradeGroup[]>([]);\n const [isLoadingGrades, setIsLoadingGrades] = React.useState(false);\n\n const normalized = React.useMemo(() => {\n const raw = value as DiagnosisTextareaValue;\n if (typeof raw === 'string') {\n return { text: raw, selectedGradesByCondition: {} as Record<string, string> };\n }\n if (!raw || typeof raw !== 'object') {\n return { text: '', selectedGradesByCondition: {} as Record<string, string> };\n }\n\n const text = typeof (raw as any).text === 'string' ? ((raw as any).text as string) : '';\n\n // Prefer new map shape.\n const mapRaw = (raw as any).selectedGradesByCondition;\n let selectedGradesByCondition: Record<string, string> = {};\n if (mapRaw && typeof mapRaw === 'object' && !Array.isArray(mapRaw)) {\n const entries = Object.entries(mapRaw as Record<string, unknown>);\n for (const [condition, gradeRaw] of entries) {\n if (typeof condition !== 'string') continue;\n if (typeof gradeRaw === 'string' && gradeRaw.trim()) {\n selectedGradesByCondition[condition] = gradeRaw;\n }\n }\n }\n\n // Backward-compat: if legacy single selection exists and no map entry yet, seed it.\n const sg = (raw as any).selectedGrade;\n if (\n sg &&\n typeof sg === 'object' &&\n typeof (sg as any).condition === 'string' &&\n typeof (sg as any).grade === 'string'\n ) {\n const condition = (sg as any).condition.trim();\n const grade = (sg as any).grade.trim();\n if (condition && grade && !selectedGradesByCondition[condition]) {\n selectedGradesByCondition = { ...selectedGradesByCondition, [condition]: grade };\n }\n }\n\n return { text, selectedGradesByCondition };\n }, [value]);\n\n const textValue = normalized.text;\n const showError = !!error && (touched || state.submitAttempted);\n\n React.useEffect(() => {\n const query = textValue.trim();\n const fetchGrades = handler.onFetchDiagnosisGrades;\n const debounceMs = def?.debounceDelay ?? 1000;\n\n if (!query || !fetchGrades) {\n setGradeGroups([]);\n setIsLoadingGrades(false);\n return;\n }\n\n let isActive = true;\n const timer = window.setTimeout(async () => {\n setIsLoadingGrades(true);\n try {\n const response = await fetchGrades(query);\n if (!isActive) return;\n setGradeGroups(normalizeDiagnosisGrades(response));\n } catch {\n if (!isActive) return;\n setGradeGroups([]);\n } finally {\n if (isActive) setIsLoadingGrades(false);\n }\n }, debounceMs);\n\n return () => {\n isActive = false;\n window.clearTimeout(timer);\n };\n }, [textValue, handler.onFetchDiagnosisGrades, def?.debounceDelay]);\n\n if (!def) return null;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const toggleSelectedGrade = (condition: string, grade: string) => {\n if (disabled) return;\n const current = normalized.selectedGradesByCondition[condition];\n const nextForCondition = current === grade ? '' : grade;\n const nextMap: Record<string, string> = { ...normalized.selectedGradesByCondition };\n if (!nextForCondition) {\n delete nextMap[condition];\n } else {\n nextMap[condition] = nextForCondition;\n }\n setValue({ text: normalized.text, selectedGradesByCondition: nextMap });\n setTouched();\n };\n\n const labelContent = (\n <>\n {def.label} {def.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n return (\n <div className={wrapperClass}>\n {theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n )}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) =>\n setValue({ text: e.target.value, selectedGradesByCondition: normalized.selectedGradesByCondition })\n }\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={inputClass}\n {...(def.height != null ? { height: def.height } : {})}\n />\n\n {isLoadingGrades && (\n <p className=\"mt-2 text-xs text-muted-foreground\">Checking diagnosis grades...</p>\n )}\n\n {!isLoadingGrades && gradeGroups.length > 0 && (\n <div\n className=\"mt-2 space-y-3 rounded-lg border border-border bg-muted/30 p-3\"\n role=\"group\"\n aria-label=\"Diagnosis grade options\"\n >\n {gradeGroups.map((group) => (\n <div key={group.condition} className=\"flex flex-col gap-1.5\">\n <span className=\"text-xs font-medium leading-none text-muted-foreground\">\n {group.condition}:\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.grades.map((grade) => (\n <button\n key={`${group.condition}-${grade}`}\n type=\"button\"\n onClick={() => toggleSelectedGrade(group.condition, grade)}\n disabled={disabled}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n normalized.selectedGradesByCondition[group.condition] === grade\n ? 'border-primary bg-primary/15 text-primary shadow-sm'\n : 'border-border/80 bg-background text-foreground hover:bg-muted/80',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n {grade}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SwitchProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ className, checked, onCheckedChange, disabled, ...props }, ref) => {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n disabled={disabled}\n ref={ref}\n onClick={() => {\n if (!disabled && onCheckedChange) {\n onCheckedChange(!checked);\n }\n }}\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n >\n <span\n data-state={checked ? \"checked\" : \"unchecked\"}\n className=\"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform\"\n style={{ transform: checked ? 'translateX(1rem)' : 'translateX(0)' }}\n />\n </button>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { Card, CardContent, CardHeader, CardTitle } from '../shadcn/card';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype BasedOn = 'lmp' | 'usg';\ntype OutcomeType = '' | 'delivery' | 'cesarean' | 'abortion' | 'miscarriage' | 'stillbirth';\n\ntype GestationalAge = {\n weeks: number;\n days: number;\n totalDays: number;\n basedOn: BasedOn;\n};\n\ntype Outcome = {\n type: OutcomeType;\n date: string; // yyyy-mm-dd (or '' while incomplete)\n notes: string;\n is_final: boolean;\n};\n\ntype StoredObgHistory = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string | null; // yyyy-mm-dd\n is_pregnant: boolean;\n edd: { lmp: string | null; usg: string | null; primary: BasedOn } | null;\n gestationalAge: GestationalAge | null;\n trimester: 1 | 2 | 3 | null;\n complications: string | null;\n outcome: Outcome | null;\n};\n\ntype Draft = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string; // '' or yyyy-mm-dd\n is_pregnant: boolean;\n eddUSG: string; // '' or yyyy-mm-dd\n primaryEDD: BasedOn;\n complications: string;\n outcome: Outcome | null;\n};\n\nconst DEFAULT_DRAFT: Draft = {\n gpal: { G: 0, P: 0, A: 0, L: 0 },\n lmp: '',\n is_pregnant: false,\n eddUSG: '',\n primaryEDD: 'lmp',\n complications: '',\n outcome: null,\n};\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction formatDdMmYyyy(iso: string): string {\n // expects yyyy-mm-dd\n const [y, m, d] = iso.split('-');\n if (!y || !m || !d) return iso;\n return `${pad2(Number(d))}/${pad2(Number(m))}/${y}`;\n}\n\nfunction todayIso(): string {\n const d = new Date();\n const y = d.getFullYear();\n const m = pad2(d.getMonth() + 1);\n const day = pad2(d.getDate());\n return `${y}-${m}-${day}`;\n}\n\nfunction isValidIsoDate(val: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(val)) return false;\n const dt = new Date(`${val}T00:00:00.000Z`);\n return !Number.isNaN(dt.getTime());\n}\n\nfunction safeJsonParse(val: string): any | null {\n try {\n return JSON.parse(val);\n } catch {\n return null;\n }\n}\n\nfunction clampInt(val: number, min: number, max: number): number {\n if (!Number.isFinite(val)) return min;\n return Math.max(min, Math.min(max, Math.trunc(val)));\n}\n\nfunction parseLegacyString(input: string): Partial<Draft> {\n const result: Partial<Draft> = {};\n const gpalMatch = input.match(/G(\\d+)\\s*P(\\d+)\\s*A(\\d+)\\s*L(\\d+)/i);\n if (gpalMatch) {\n const [, g, p, a, l] = gpalMatch;\n result.gpal = {\n G: clampInt(Number(g), 0, 20),\n P: clampInt(Number(p), 0, 20),\n A: clampInt(Number(a), 0, 20),\n L: clampInt(Number(l), 0, 20),\n };\n }\n\n const lmpMatch = input.match(/LMP:\\s*([^\\n]+)/i);\n if (lmpMatch?.[1]) result.lmp = lmpMatch[1].trim();\n\n const eddUsgMatch = input.match(/EDD\\s*\\(USG\\):\\s*([^\\n]+)/i);\n if (eddUsgMatch?.[1]) result.eddUSG = eddUsgMatch[1].trim();\n\n const primaryMatch = input.match(/Primary\\s*EDD:\\s*(lmp|usg)/i);\n if (primaryMatch?.[1]) result.primaryEDD = primaryMatch[1].toLowerCase() as BasedOn;\n\n const compMatch = input.match(/Complications:\\s*([^\\n]+)/i);\n if (compMatch?.[1]) result.complications = compMatch[1].trim();\n\n return result;\n}\n\nfunction normalizeToDraft(value: unknown): { draft: Draft; isNewEntry: boolean } {\n if (!value) return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n\n let parsed: any = value;\n if (typeof value === 'string') {\n const json = safeJsonParse(value);\n parsed = json ?? value;\n }\n\n // New JSON format: has gpal object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed) && 'gpal' in parsed && parsed.gpal && typeof parsed.gpal === 'object') {\n const gpal = parsed.gpal ?? {};\n const edd = parsed.edd ?? null;\n const eddUSG = (edd && typeof edd === 'object' ? edd.usg : undefined) ?? parsed.eddUSG ?? '';\n const primaryEDD = (edd && typeof edd === 'object' ? edd.primary : undefined) ?? parsed.primaryEDD ?? 'lmp';\n const lmp = parsed.lmp ?? '';\n const complications = parsed.complications ?? '';\n const outcome = parsed.outcome ?? null;\n const is_pregnant = !!parsed.is_pregnant;\n return {\n isNewEntry: false,\n draft: {\n gpal: {\n G: clampInt(Number(gpal.G ?? 0), 0, 20),\n P: clampInt(Number(gpal.P ?? 0), 0, 20),\n A: clampInt(Number(gpal.A ?? 0), 0, 20),\n L: clampInt(Number(gpal.L ?? 0), 0, 20),\n },\n lmp: typeof lmp === 'string' ? lmp : '',\n is_pregnant,\n eddUSG: typeof eddUSG === 'string' ? eddUSG : '',\n primaryEDD: primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof complications === 'string' ? complications : '',\n outcome: outcome && typeof outcome === 'object'\n ? {\n type: (outcome.type ?? '') as OutcomeType,\n date: typeof outcome.date === 'string' ? outcome.date : '',\n notes: typeof outcome.notes === 'string' ? outcome.notes : '',\n is_final: !!outcome.is_final,\n }\n : null,\n },\n };\n }\n\n // Legacy flat JSON object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const gpalFromFlat = {\n G: clampInt(Number((parsed as any).G ?? (parsed as any).g ?? 0), 0, 20),\n P: clampInt(Number((parsed as any).P ?? (parsed as any).p ?? 0), 0, 20),\n A: clampInt(Number((parsed as any).A ?? (parsed as any).a ?? 0), 0, 20),\n L: clampInt(Number((parsed as any).L ?? (parsed as any).l ?? 0), 0, 20),\n };\n return {\n isNewEntry: false,\n draft: {\n ...DEFAULT_DRAFT,\n gpal: gpalFromFlat,\n lmp: typeof (parsed as any).lmp === 'string' ? (parsed as any).lmp : '',\n eddUSG: typeof (parsed as any).eddUSG === 'string' ? (parsed as any).eddUSG : '',\n primaryEDD: (parsed as any).primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof (parsed as any).complications === 'string' ? (parsed as any).complications : '',\n outcome: (parsed as any).outcome && typeof (parsed as any).outcome === 'object'\n ? {\n type: ((parsed as any).outcome.type ?? '') as OutcomeType,\n date: typeof (parsed as any).outcome.date === 'string' ? (parsed as any).outcome.date : '',\n notes: typeof (parsed as any).outcome.notes === 'string' ? (parsed as any).outcome.notes : '',\n is_final: !!(parsed as any).outcome.is_final,\n }\n : null,\n is_pregnant: !!(parsed as any).is_pregnant,\n },\n };\n }\n\n // Legacy human-readable string\n if (typeof parsed === 'string') {\n const legacy = parseLegacyString(parsed);\n return { isNewEntry: false, draft: { ...DEFAULT_DRAFT, ...legacy } as Draft };\n }\n\n return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n}\n\nfunction computeEddFromLmp(lmpIso: string): string | null {\n if (!isValidIsoDate(lmpIso)) return null;\n const base = new Date(`${lmpIso}T00:00:00.000Z`);\n base.setUTCDate(base.getUTCDate() + 280);\n const y = base.getUTCFullYear();\n const m = pad2(base.getUTCMonth() + 1);\n const d = pad2(base.getUTCDate());\n return `${y}-${m}-${d}`;\n}\n\nfunction diffDaysUtc(fromIso: string, toIso: string): number | null {\n if (!isValidIsoDate(fromIso) || !isValidIsoDate(toIso)) return null;\n const a = new Date(`${fromIso}T00:00:00.000Z`).getTime();\n const b = new Date(`${toIso}T00:00:00.000Z`).getTime();\n return Math.floor((b - a) / (1000 * 60 * 60 * 24));\n}\n\nfunction computeGestationalAgeFromLmp(lmpIso: string, today: string): GestationalAge | null {\n const days = diffDaysUtc(lmpIso, today);\n if (days == null || days < 0) return null;\n const weeks = Math.floor(days / 7);\n const rem = days % 7;\n return { weeks, days: rem, totalDays: days, basedOn: 'lmp' };\n}\n\nfunction computeGestationalAgeFromUsgEdd(eddUsgIso: string, today: string): GestationalAge | null {\n const daysToEdd = diffDaysUtc(today, eddUsgIso);\n if (daysToEdd == null) return null;\n const daysElapsed = 280 - daysToEdd;\n if (daysElapsed < 0) return null;\n const weeks = Math.floor(daysElapsed / 7);\n const rem = daysElapsed % 7;\n return { weeks, days: rem, totalDays: daysElapsed, basedOn: 'usg' };\n}\n\nfunction computeTrimester(ga: GestationalAge | null): 1 | 2 | 3 | null {\n if (!ga) return null;\n if (ga.weeks < 13) return 1;\n if (ga.weeks < 27) return 2;\n if (ga.weeks < 42) return 3;\n return null;\n}\n\nfunction buildStored(draft: Draft, today: string): StoredObgHistory {\n const lmpIso = isValidIsoDate(draft.lmp) ? draft.lmp : null;\n const eddUsgIso = isValidIsoDate(draft.eddUSG) ? draft.eddUSG : null;\n\n if (!draft.is_pregnant) {\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: false,\n edd: null,\n gestationalAge: null,\n trimester: null,\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n };\n }\n\n const eddFromLmp = lmpIso ? computeEddFromLmp(lmpIso) : null;\n const gaFromLmp = lmpIso ? computeGestationalAgeFromLmp(lmpIso, today) : null;\n const gaFromUsg = eddUsgIso ? computeGestationalAgeFromUsgEdd(eddUsgIso, today) : null;\n\n const primary = draft.primaryEDD;\n const gaPrimary = primary === 'usg' && gaFromUsg ? gaFromUsg : gaFromLmp ? gaFromLmp : null;\n\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: true,\n edd: { lmp: eddFromLmp, usg: eddUsgIso, primary },\n gestationalAge: gaPrimary,\n trimester: computeTrimester(gaPrimary),\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n };\n}\n\nfunction stripGpalSuffix(label: string): string {\n return label.replace(/\\s*\\(G-P-A-L\\)\\s*$/i, '').trim();\n}\n\nfunction useDebouncedCommit(commit: (next: Draft) => void, delayMs: number) {\n const timeoutRef = useRef<number | null>(null);\n const latestCommit = useRef(commit);\n latestCommit.current = commit;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return (next: Draft) => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => latestCommit.current(next), delayMs);\n };\n}\n\nexport const ObstetricHistoryWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const [{ draft, isNewEntry }, setDraftState] = useState(() => normalizeToDraft(value));\n const [lmpError, setLmpError] = useState<string | null>(null);\n const [primaryEddError, setPrimaryEddError] = useState<string | null>(null);\n const [activeGpalKey, setActiveGpalKey] = useState<keyof Draft['gpal'] | null>(null);\n\n const refs = {\n G: useRef<HTMLInputElement | null>(null),\n P: useRef<HTMLInputElement | null>(null),\n A: useRef<HTMLInputElement | null>(null),\n L: useRef<HTMLInputElement | null>(null),\n } as const;\n\n const today = useMemo(() => todayIso(), []);\n\n // Keep local draft in sync with external updates (AI, reset, initial load).\n useEffect(() => {\n const next = normalizeToDraft(value);\n const currStr = JSON.stringify(buildStored(draft, today));\n const nextStr = JSON.stringify(buildStored(next.draft, today));\n if (currStr !== nextStr) setDraftState(next);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const commitImmediate = (nextDraft: Draft) => {\n const stored = buildStored(nextDraft, today);\n setValue(JSON.stringify(stored));\n };\n const commitDebounced = useDebouncedCommit(commitImmediate, 500);\n\n const storedComputed = useMemo(() => buildStored(draft, today), [draft, today]);\n\n const rightPanelEnabled = draft.is_pregnant && (!!storedComputed.lmp || !!(storedComputed.edd?.usg));\n const headerLabel = fieldDef?.label ? stripGpalSuffix(fieldDef.label) : 'Obstetric History';\n\n const setDraft = (updater: (prev: Draft) => Draft, persist: 'debounce' | 'immediate') => {\n setDraftState((prev) => {\n const nextDraft = updater(prev.draft);\n const nextState = { ...prev, draft: nextDraft };\n if (persist === 'immediate') commitImmediate(nextDraft);\n else commitDebounced(nextDraft);\n return nextState;\n });\n };\n\n const sanitizeGpalInput = (raw: string): number => {\n const digits = raw.replace(/[^\\d]/g, '').slice(0, 2);\n if (!digits) return 0;\n return clampInt(Number(digits), 0, 20);\n };\n\n const handleGpalChange = (key: keyof Draft['gpal'], raw: string) => {\n const prevWasEmpty = draft.gpal[key] === 0 && (activeGpalKey === key);\n const val = sanitizeGpalInput(raw);\n setDraft((prev) => ({ ...prev, gpal: { ...prev.gpal, [key]: val } }), 'debounce');\n\n const digitsOnly = raw.replace(/[^\\d]/g, '');\n const shouldAutoTab = digitsOnly.length === 1 && (prevWasEmpty || String(draft.gpal[key]).length >= 1);\n if (shouldAutoTab) {\n const order: (keyof Draft['gpal'])[] = ['G', 'P', 'A', 'L'];\n const idx = order.indexOf(key);\n const nextKey = order[idx + 1];\n if (nextKey) refs[nextKey].current?.focus();\n }\n };\n\n const handleLmpChange = (nextIso: string) => {\n setPrimaryEddError(null);\n if (nextIso && nextIso > today) {\n setLmpError('LMP cannot be in the future');\n return;\n }\n setLmpError(null);\n setDraft((prev) => ({ ...prev, lmp: nextIso }), 'debounce');\n };\n\n const handlePregStatus = (isPregnant: boolean) => {\n setLmpError(null);\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, is_pregnant: isPregnant }), 'immediate');\n };\n\n const handleEddUsgChange = (nextIso: string) => {\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, eddUSG: nextIso }), 'debounce');\n };\n\n const handlePrimaryEdd = (next: BasedOn) => {\n if (next === 'usg' && !isValidIsoDate(draft.eddUSG)) {\n setPrimaryEddError('Please enter EDD from USG first');\n return;\n }\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, primaryEDD: next }), 'immediate');\n };\n\n const ensureOutcome = () => {\n if (draft.outcome) return;\n setDraft(\n (prev) => ({\n ...prev,\n outcome: { type: '', date: '', notes: '', is_final: false },\n }),\n 'immediate'\n );\n };\n\n const clearOutcome = () => {\n setDraft((prev) => ({ ...prev, outcome: null }), 'immediate');\n };\n\n const updateOutcomeImmediate = (updater: (o: Outcome) => Outcome) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: updater(o) };\n },\n 'immediate'\n );\n };\n\n const updateOutcomeNotesDebounced = (notes: string) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: { ...o, notes } };\n },\n 'debounce'\n );\n };\n\n return (\n <Card className={cn('w-full', disabled && 'opacity-70 pointer-events-none')}>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base font-semibold\">{headerLabel}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isNewEntry && (\n <div className=\"rounded-md border border-blue-200 bg-blue-50 px-3 py-2 text-xs text-blue-900\">\n No previous maternity episode found. Please fill obstetric details to start tracking.\n </div>\n )}\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 items-start\">\n {/* Left panel */}\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border bg-white p-4\">\n <div className=\"text-xs font-medium text-muted-foreground mb-2\">G-P-A-L</div>\n <div className=\"grid grid-cols-4 gap-3\">\n {(['G', 'P', 'A', 'L'] as const).map((k) => (\n <div key={k} className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-gpal-${k}`} className=\"text-[11px] text-muted-foreground\">\n {k}\n </Label>\n <Input\n ref={refs[k]}\n id={`${fieldId}-gpal-${k}`}\n inputMode=\"numeric\"\n pattern=\"\\d*\"\n maxLength={2}\n value={String(draft.gpal[k] ?? 0)}\n onFocus={() => {\n setActiveGpalKey(k);\n const el = refs[k].current;\n if (el) el.select();\n }}\n onChange={(e) => handleGpalChange(k, e.target.value)}\n onKeyDown={(e) => {\n const allowed = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Home', 'End'];\n if (allowed.includes(e.key)) return;\n if (/^\\d$/.test(e.key)) return;\n e.preventDefault();\n }}\n className=\"text-center text-base\"\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-lmp`} className={cn('text-sm', lmpError && 'text-red-600')}>\n Last Menstrual Period (LMP)\n </Label>\n <Input\n id={`${fieldId}-lmp`}\n type=\"date\"\n max={today}\n value={draft.lmp}\n onChange={(e) => handleLmpChange(e.target.value)}\n className={cn(lmpError && 'border-red-500')}\n />\n {lmpError && <p className=\"text-xs text-red-600\">{lmpError}</p>}\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <div className=\"text-sm font-medium\">Pregnancy Status</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePregStatus(false)}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-xs',\n !draft.is_pregnant ? 'bg-green-600 text-white border-green-600' : 'bg-white'\n )}\n >\n Not Pregnant\n </button>\n <button\n type=\"button\"\n onClick={() => handlePregStatus(true)}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-xs',\n draft.is_pregnant ? 'bg-green-600 text-white border-green-600' : 'bg-white'\n )}\n >\n Pregnant\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-complications`} className=\"text-sm\">\n Previous Pregnancy Complications\n </Label>\n <Textarea\n id={`${fieldId}-complications`}\n placeholder=\"e.g. Pre-eclampsia, Gestational diabetes, C-section, etc.\"\n value={draft.complications}\n onChange={(e) => setDraft((prev) => ({ ...prev, complications: e.target.value }), 'debounce')}\n className=\"min-h-[140px]\"\n />\n </div>\n </div>\n\n {/* Right panel */}\n <div className=\"rounded-lg border bg-white p-4 min-h-[260px]\">\n {!draft.is_pregnant && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n Only for \"Pregnant Women\" and enter LMP to calculate gestational age and EDD\n </div>\n )}\n\n {draft.is_pregnant && !rightPanelEnabled && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n Enter LMP and/or EDD (USG) to enable gestational age and EDD calculations.\n </div>\n )}\n\n {draft.is_pregnant && rightPanelEnabled && (\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-blue-700\">Expected Delivery Date (EDD)</div>\n {storedComputed.gestationalAge?.basedOn && (\n <span className=\"rounded-full bg-blue-100 px-2 py-1 text-[11px] text-blue-700\">\n Based on {storedComputed.gestationalAge.basedOn.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"mt-3\">\n <div className=\"text-xs text-muted-foreground\">Gestational Age:</div>\n <div className=\"text-lg font-semibold\">\n {storedComputed.gestationalAge\n ? `${storedComputed.gestationalAge.weeks} weeks ${storedComputed.gestationalAge.days} days`\n : '—'}\n </div>\n <div className=\"text-xs text-muted-foreground mt-1\">\n {storedComputed.trimester ? `Trimester ${storedComputed.trimester}` : 'Trimester —'}\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-xs text-muted-foreground\">EDD (from LMP):</div>\n <div className=\"rounded-md border bg-muted/20 px-3 py-2 text-sm font-semibold\">\n {storedComputed.edd?.lmp ? formatDdMmYyyy(storedComputed.edd.lmp) : '—'}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-edd-usg`} className=\"text-sm\">\n EDD (from USG):\n </Label>\n <Input\n id={`${fieldId}-edd-usg`}\n type=\"date\"\n value={draft.eddUSG}\n onChange={(e) => handleEddUsgChange(e.target.value)}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium\">Primary EDD:</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('lmp')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'lmp' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n LMP\n </button>\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('usg')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'usg' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n USG\n </button>\n </div>\n {primaryEddError && <p className=\"text-xs text-red-600\">{primaryEddError}</p>}\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Outcome section */}\n <div className=\"rounded-lg border bg-yellow-50/60 p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold\">\n Pregnancy Outcome (Optional - To Close Episode)\n </div>\n {draft.outcome && (\n <button type=\"button\" className=\"text-sm text-red-600 hover:underline\" onClick={clearOutcome}>\n Clear\n </button>\n )}\n </div>\n\n {!draft.outcome && (\n <button\n type=\"button\"\n onClick={ensureOutcome}\n className=\"mt-3 w-full rounded-md border border-yellow-300 bg-yellow-100 px-3 py-2 text-sm font-medium\"\n >\n + Add Pregnancy Outcome\n </button>\n )}\n\n {draft.outcome && (\n <div className=\"mt-4 space-y-3\">\n <div className=\"space-y-2\">\n <Label className=\"text-sm\">\n Outcome Type <span className=\"text-red-500\">*</span>\n </Label>\n <select\n className=\"w-full rounded-md border px-3 py-2 text-sm bg-white\"\n value={draft.outcome.type}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, type: e.target.value as OutcomeType }))}\n >\n <option value=\"\">Select outcome...</option>\n <option value=\"delivery\">Normal Delivery</option>\n <option value=\"cesarean\">Cesarean Section</option>\n <option value=\"abortion\">Abortion</option>\n <option value=\"miscarriage\">Miscarriage</option>\n <option value=\"stillbirth\">Stillbirth</option>\n </select>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-date`} className=\"text-sm\">\n Date <span className=\"text-red-500\">*</span>\n </Label>\n <Input\n id={`${fieldId}-outcome-date`}\n type=\"date\"\n max={today}\n value={draft.outcome.date}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, date: e.target.value }))}\n />\n {draft.outcome.date && (\n <p className=\"text-xs text-muted-foreground\">\n Selected: {formatDdMmYyyy(draft.outcome.date)}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-notes`} className=\"text-sm\">\n Notes\n </Label>\n <Textarea\n id={`${fieldId}-outcome-notes`}\n placeholder=\"e.g. Normal vaginal delivery, healthy baby boy, 3.2kg\"\n value={draft.outcome.notes}\n onChange={(e) => updateOutcomeNotesDebounced(e.target.value)}\n className=\"min-h-[90px]\"\n />\n </div>\n\n <div className=\"rounded-md border bg-white p-3\">\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={!!draft.outcome.is_final}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, is_final: e.target.checked }))}\n />\n Close this pregnancy episode\n </label>\n {draft.outcome.is_final && (\n <div className=\"mt-3 rounded-md border border-red-300 bg-red-50 px-3 py-2 text-xs text-red-800\">\n Checking this will mark the pregnancy as completed and is intended to close the maternity episode.\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n};\n\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype EyeSide = 'right_eye' | 'left_eye';\n\ntype VaOptions = '' | '6/6' | '6/9' | '6/12' | '6/18' | '6/24' | '6/36' | '6/60' | 'CF' | 'PL';\ntype NearVaOptions =\n | ''\n | 'N4'\n | 'N5'\n | 'N6'\n | 'N8'\n | 'N10'\n | 'N12'\n | 'N14'\n | 'N18'\n | 'N24'\n | 'N36'\n | '<N36';\n\ntype PinholeOptions =\n | ''\n | 'PL−'\n | 'PL+'\n | 'FL'\n | 'HM'\n | 'CCFCF'\n | 'FC'\n | '1/60'\n | '2/60'\n | '3/60'\n | '4/60'\n | '5/60'\n | '6/60'\n | '6/36'\n | '6/24'\n | '6/18'\n | '6/12'\n | '6/9'\n | '6/7.5'\n | '6/6';\n\ntype PatientInformation = {\n systemic_history: string;\n ocular_history: string;\n chief_complaints: string;\n};\n\ntype UnaidedEyeVa = {\n ucva: VaOptions;\n pinhole_va: PinholeOptions;\n nv: NearVaOptions;\n};\n\ntype UnaidedVisualAcuity = {\n right_eye: UnaidedEyeVa;\n left_eye: UnaidedEyeVa;\n};\n\ntype RefractionEye = {\n sph: number | null;\n cyl: number | null;\n axis: number | null;\n va: VaOptions;\n pd?: number | null;\n prism?: number | null;\n};\n\ntype AddPowers = {\n right: number | null;\n left: number | null;\n};\n\ntype Refraction = {\n right_eye: RefractionEye;\n left_eye: RefractionEye;\n add: AddPowers;\n};\n\ntype IopEye = {\n iop: number | null;\n cct: number | null;\n};\n\ntype IopPachyCct = {\n method: '' | 'NCT' | 'Goldmann' | 'Tonopen' | 'iCare';\n time: string;\n right_eye: IopEye;\n left_eye: IopEye;\n};\n\ntype OphthalmologyValue = {\n patient_information: PatientInformation;\n unaided_visual_acuity: UnaidedVisualAcuity;\n current_glass_prescription: Refraction;\n iop_pachy_cct: IopPachyCct;\n refraction: Refraction;\n dilated_refraction: Refraction;\n glass_power_prescription: Refraction;\n notes: string;\n};\n\nconst UCVA_OPTIONS: VaOptions[] = ['', '6/6', '6/9', '6/12', '6/18', '6/24', '6/36', '6/60', 'CF', 'PL'];\n\nconst NEAR_VA_OPTIONS: NearVaOptions[] = ['', 'N4', 'N5', 'N6', 'N8', 'N10', 'N12', 'N14', 'N18', 'N24', 'N36', '<N36'];\n\nconst PINHOLE_OPTIONS: PinholeOptions[] = [\n '',\n 'PL−',\n 'PL+',\n 'FL',\n 'HM',\n 'CCFCF',\n 'FC',\n '1/60',\n '2/60',\n '3/60',\n '4/60',\n '5/60',\n '6/60',\n '6/36',\n '6/24',\n '6/18',\n '6/12',\n '6/9',\n '6/7.5',\n '6/6',\n];\n\nconst VA_OPTIONS: VaOptions[] = UCVA_OPTIONS;\n\nconst IOP_METHOD_OPTIONS: IopPachyCct['method'][] = ['', 'NCT', 'Goldmann', 'Tonopen', 'iCare'];\n\nfunction parseFloatOrNull(value: string): number | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction parseIntOrNull(value: string): number | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseInt(trimmed, 10);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction ensureRefractionEye(raw: any): RefractionEye {\n return {\n sph: raw?.sph ?? null,\n cyl: raw?.cyl ?? null,\n axis: raw?.axis ?? null,\n va: (raw?.va as VaOptions) ?? '',\n pd: raw?.pd ?? null,\n prism: raw?.prism ?? null,\n };\n}\n\nfunction ensureAddPowers(raw: any): AddPowers {\n return {\n right: raw?.right ?? null,\n left: raw?.left ?? null,\n };\n}\n\nfunction ensureRefraction(raw: any): Refraction {\n return {\n right_eye: ensureRefractionEye(raw?.right_eye),\n left_eye: ensureRefractionEye(raw?.left_eye),\n add: ensureAddPowers(raw?.add),\n };\n}\n\nfunction ensureUnaidedEyeVa(raw: any): UnaidedEyeVa {\n return {\n ucva: (raw?.ucva as VaOptions) ?? '',\n pinhole_va: (raw?.pinhole_va as PinholeOptions) ?? '',\n nv: (raw?.nv as NearVaOptions) ?? '',\n };\n}\n\nfunction ensureIopEye(raw: any): IopEye {\n return {\n iop: raw?.iop ?? null,\n cct: raw?.cct ?? null,\n };\n}\n\nfunction ensureValue(raw: unknown): OphthalmologyValue {\n const v = (raw || {}) as any;\n return {\n patient_information: {\n systemic_history: v.patient_information?.systemic_history ?? '',\n ocular_history: v.patient_information?.ocular_history ?? '',\n chief_complaints: v.patient_information?.chief_complaints ?? '',\n },\n unaided_visual_acuity: {\n right_eye: ensureUnaidedEyeVa(v.unaided_visual_acuity?.right_eye),\n left_eye: ensureUnaidedEyeVa(v.unaided_visual_acuity?.left_eye),\n },\n current_glass_prescription: ensureRefraction(v.current_glass_prescription),\n iop_pachy_cct: {\n method: (v.iop_pachy_cct?.method as IopPachyCct['method']) ?? '',\n time: v.iop_pachy_cct?.time ?? '',\n right_eye: ensureIopEye(v.iop_pachy_cct?.right_eye),\n left_eye: ensureIopEye(v.iop_pachy_cct?.left_eye),\n },\n refraction: ensureRefraction(v.refraction),\n dilated_refraction: ensureRefraction(v.dilated_refraction),\n glass_power_prescription: ensureRefraction(v.glass_power_prescription),\n notes: v.notes ?? '',\n };\n}\n\nconst sectionWrapperClass =\n 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0] bg-white';\n\n// Match the \"highlight-label\" textarea theme header (used for Patient notes)\nconst sectionHeaderClass =\n 'rounded-t-md bg-[#FEE8EC] px-3 py-1 text-sm shrink-0 z-[1] text-slate-600 font-medium';\n\nconst sectionBodyClass =\n 'rounded-b-md border-t border-[#D0D0D0] bg-white p-3 space-y-3';\n\nconst tableBaseClass = 'w-full border-collapse text-xs';\n\nconst tableHeaderCellClass =\n 'border border-[#E0E0E0] bg-[#F7F7F7] px-2 py-1 text-center font-semibold';\n\nconst tableCellClass = 'border border-[#E0E0E0] px-1.5 py-1 text-center align-middle';\n\nconst selectClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs focus-visible:outline-none focus-visible:ring-0';\n\nconst numberInputClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs text-right focus-visible:outline-none focus-visible:ring-0';\n\nconst textInputClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs focus-visible:outline-none focus-visible:ring-0';\n\nexport const OphthalmologyWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const safe = useMemo(() => ensureValue(value), [value]);\n\n const label = fieldDef?.label || '';\n\n const update = (updater: (current: OphthalmologyValue) => OphthalmologyValue) => {\n if (disabled) return;\n setValue(updater(ensureValue(value)));\n };\n\n const setPatientInfo = (key: keyof PatientInformation, next: string) => {\n update((current) => ({\n ...current,\n patient_information: { ...current.patient_information, [key]: next },\n }));\n };\n\n const setUnaided = (\n side: EyeSide,\n key: keyof UnaidedEyeVa,\n next: VaOptions | NearVaOptions | PinholeOptions,\n ) => {\n update((current) => ({\n ...current,\n unaided_visual_acuity: {\n ...current.unaided_visual_acuity,\n [side]: { ...current.unaided_visual_acuity[side], [key]: next } as UnaidedEyeVa,\n },\n }));\n };\n\n const setRefractionField = (\n section:\n | 'current_glass_prescription'\n | 'refraction'\n | 'dilated_refraction'\n | 'glass_power_prescription',\n side: EyeSide,\n key: keyof RefractionEye,\n next: string,\n mode: 'float' | 'int' | 'select',\n ) => {\n update((current) => {\n const base = current[section];\n const eye = base[side];\n let val: number | null | VaOptions;\n if (mode === 'select') {\n val = next as VaOptions;\n } else if (mode === 'float') {\n val = parseFloatOrNull(next);\n } else {\n val = parseIntOrNull(next);\n }\n return {\n ...current,\n [section]: {\n ...base,\n [side]: {\n ...eye,\n [key]: val,\n },\n },\n };\n });\n };\n\n const setRefractionAdd = (\n section: 'refraction' | 'dilated_refraction' | 'glass_power_prescription' | 'current_glass_prescription',\n side: 'right' | 'left',\n next: string,\n ) => {\n update((current) => {\n const base = current[section];\n const add = base.add;\n const val = parseFloatOrNull(next);\n return {\n ...current,\n [section]: {\n ...base,\n add: {\n ...add,\n [side]: val,\n },\n },\n };\n });\n };\n\n const setIopField = (side: EyeSide, key: keyof IopEye, next: string) => {\n update((current) => {\n const base = current.iop_pachy_cct;\n const eye = base[side];\n const val = parseIntOrNull(next);\n return {\n ...current,\n iop_pachy_cct: {\n ...base,\n [side]: {\n ...eye,\n [key]: val,\n },\n },\n };\n });\n };\n\n const setIopMeta = (key: keyof IopPachyCct, next: string) => {\n update((current) => ({\n ...current,\n iop_pachy_cct: {\n ...current.iop_pachy_cct,\n [key]: next,\n },\n }));\n };\n\n const setNotes = (next: string) => {\n update((current) => ({\n ...current,\n notes: next,\n }));\n };\n\n return (\n <div className={cn('space-y-4', disabled && 'opacity-70 pointer-events-none')}>\n <h3 className=\"text-base font-semibold text-slate-800\">{label}</h3>\n\n {/* Patient Information */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Patient Information</span>\n </div>\n <div className={cn(sectionBodyClass, 'grid gap-3 md:grid-cols-3')}>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Systemic History</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.systemic_history}\n onChange={(e) => setPatientInfo('systemic_history', e.target.value)}\n placeholder=\"Enter systemic history...\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Ocular History</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.ocular_history}\n onChange={(e) => setPatientInfo('ocular_history', e.target.value)}\n placeholder=\"Enter ocular history...\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Chief Complaints</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.chief_complaints}\n onChange={(e) => setPatientInfo('chief_complaints', e.target.value)}\n placeholder=\"Enter chief complaints...\"\n />\n </div>\n </div>\n </section>\n\n {/* Unaided Visual Acuity */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Unaided Visual Acuity</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={3}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={3}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>UCVA</th>\n <th className={tableHeaderCellClass}>Pinhole V/A</th>\n <th className={tableHeaderCellClass}>N/V</th>\n <th className={tableHeaderCellClass}>UCVA</th>\n <th className={tableHeaderCellClass}>Pinhole V/A</th>\n <th className={tableHeaderCellClass}>N/V</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Unaided</td>\n {/* Right */}\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.ucva}\n onChange={(e) =>\n setUnaided('right_eye', 'ucva', e.target.value as VaOptions)\n }\n >\n {UCVA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.pinhole_va}\n onChange={(e) =>\n setUnaided('right_eye', 'pinhole_va', e.target.value as PinholeOptions)\n }\n >\n {PINHOLE_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.nv}\n onChange={(e) =>\n setUnaided('right_eye', 'nv', e.target.value as NearVaOptions)\n }\n >\n {NEAR_VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.ucva}\n onChange={(e) =>\n setUnaided('left_eye', 'ucva', e.target.value as VaOptions)\n }\n >\n {UCVA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.pinhole_va}\n onChange={(e) =>\n setUnaided('left_eye', 'pinhole_va', e.target.value as PinholeOptions)\n }\n >\n {PINHOLE_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.nv}\n onChange={(e) =>\n setUnaided('left_eye', 'nv', e.target.value as NearVaOptions)\n }\n >\n {NEAR_VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Current Glass Prescription */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Current Glass Prescription</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={4}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={4}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>V/A</th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>\n Current Glass\n </td>\n {/* Right */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={\n safe.current_glass_prescription.right_eye.sph ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={\n safe.current_glass_prescription.right_eye.cyl ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={\n safe.current_glass_prescription.right_eye.axis ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.current_glass_prescription.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={\n safe.current_glass_prescription.left_eye.sph ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={\n safe.current_glass_prescription.left_eye.cyl ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={\n safe.current_glass_prescription.left_eye.axis ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.current_glass_prescription.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* IOP / Pachy / CCT Detail */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>IOP / Pachy / CCT Detail</span>\n </div>\n <div className={sectionBodyClass}>\n <div className=\"grid gap-3 md:grid-cols-[2fr,1fr] mb-3\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Method</span>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.iop_pachy_cct.method}\n onChange={(e) =>\n setIopMeta('method', e.target.value as IopPachyCct['method'])\n }\n >\n {IOP_METHOD_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt || 'Select Method'}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Time</span>\n <Input\n disabled={disabled}\n placeholder=\"HH:MM\"\n className={textInputClass}\n value={safe.iop_pachy_cct.time}\n onChange={(e) => setIopMeta('time', e.target.value)}\n />\n </div>\n </div>\n\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={2}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={2}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>IOP</th>\n <th className={tableHeaderCellClass}>CCT</th>\n <th className={tableHeaderCellClass}>IOP</th>\n <th className={tableHeaderCellClass}>CCT</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>\n Values\n </td>\n {/* Right */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.right_eye.iop ?? ''}\n onChange={(e) => setIopField('right_eye', 'iop', e.target.value)}\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.right_eye.cct ?? ''}\n onChange={(e) => setIopField('right_eye', 'cct', e.target.value)}\n />\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.left_eye.iop ?? ''}\n onChange={(e) => setIopField('left_eye', 'iop', e.target.value)}\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.left_eye.cct ?? ''}\n onChange={(e) => setIopField('left_eye', 'cct', e.target.value)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Refraction (Distance) */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Refraction (Distance)</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>V/A</th>\n <th className={tableHeaderCellClass}>P/D</th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>V/A</th>\n <th className={tableHeaderCellClass}>P/D</th>\n </tr>\n </thead>\n <tbody>\n {/* Distance row */}\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Distance</td>\n {/* Right */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.refraction.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.refraction.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.refraction.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.refraction.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n min={10}\n max={45}\n step=\"1\"\n className={numberInputClass}\n value={safe.refraction.right_eye.pd ?? ''}\n onChange={(e) =>\n setRefractionField('refraction', 'right_eye', 'pd', e.target.value, 'int')\n }\n />\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.refraction.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.refraction.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.refraction.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.refraction.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n min={10}\n max={45}\n step=\"1\"\n className={numberInputClass}\n value={safe.refraction.left_eye.pd ?? ''}\n onChange={(e) =>\n setRefractionField('refraction', 'left_eye', 'pd', e.target.value, 'int')\n }\n />\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Add</td>\n <td className={tableCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.refraction.add.right ?? ''}\n onChange={(e) => setRefractionAdd('refraction', 'right', e.target.value)}\n />\n </td>\n <td className={tableCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.refraction.add.left ?? ''}\n onChange={(e) => setRefractionAdd('refraction', 'left', e.target.value)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Dilated Refraction */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Dilated Refraction</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>Prism</th>\n <th className={tableHeaderCellClass}>V/A</th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>Prism</th>\n <th className={tableHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n {/* Dilated row */}\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Dilated</td>\n {/* Right */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.dilated_refraction.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.right_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.dilated_refraction.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.dilated_refraction.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.left_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.dilated_refraction.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Add</td>\n <td className={tableCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.add.right ?? ''}\n onChange={(e) =>\n setRefractionAdd('dilated_refraction', 'right', e.target.value)\n }\n />\n </td>\n <td className={tableCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.dilated_refraction.add.left ?? ''}\n onChange={(e) =>\n setRefractionAdd('dilated_refraction', 'left', e.target.value)\n }\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Glass Power Prescription */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Glass Power Prescription</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>Prism</th>\n <th className={tableHeaderCellClass}>V/A</th>\n <th className={tableHeaderCellClass}>Sph</th>\n <th className={tableHeaderCellClass}>Cyl</th>\n <th className={tableHeaderCellClass}>Axis</th>\n <th className={tableHeaderCellClass}>Prism</th>\n <th className={tableHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n {/* Glass power row */}\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>\n Glass Power\n </td>\n {/* Right */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.glass_power_prescription.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.right_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.glass_power_prescription.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.glass_power_prescription.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.left_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.glass_power_prescription.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Add</td>\n <td className={tableCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.add.right ?? ''}\n onChange={(e) =>\n setRefractionAdd('glass_power_prescription', 'right', e.target.value)\n }\n />\n </td>\n <td className={tableCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={numberInputClass}\n value={safe.glass_power_prescription.add.left ?? ''}\n onChange={(e) =>\n setRefractionAdd('glass_power_prescription', 'left', e.target.value)\n }\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Notes */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Notes</span>\n </div>\n <div className={sectionBodyClass}>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"w-full text-xs min-h-[100px]\"\n placeholder=\"Enter additional notes...\"\n value={safe.notes}\n onChange={(e) => setNotes(e.target.value)}\n />\n </div>\n </section>\n </div>\n );\n};\n\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype EyeSide = 'right_eye' | 'left_eye';\n\ntype EyeDiagnosis = Record<string, string>;\n\ntype OphthalDiagnosisValue = {\n right_eye: EyeDiagnosis;\n left_eye: EyeDiagnosis;\n};\n\nconst DIAGNOSIS_FIELDS: string[] = [\n 'INJURY',\n 'APPENDAGES',\n 'CONJUNCTIVA',\n 'SCLERA',\n 'CORNEA',\n 'ANTERIOR CHAMBER (AC)',\n 'PUPIL',\n 'IRIS',\n 'LENS',\n 'EXTRAOCULAR MOVEMENTS & SQUINT',\n 'INTRAOCULAR PRESSURE (IOP)',\n 'GONIOSCOPY',\n 'FUNDUS',\n];\n\nfunction ensureValue(raw: unknown): OphthalDiagnosisValue {\n const v = (raw || {}) as Partial<OphthalDiagnosisValue>;\n return {\n right_eye: v.right_eye ?? {},\n left_eye: v.left_eye ?? {},\n };\n}\n\nconst containerClass =\n 'rounded-md bg-white overflow-hidden flex flex-col';\n\nconst headerClass = 'px-3 py-2 text-sm font-medium text-slate-800 border-b border-slate-200';\n\nconst tableClass = 'w-full text-xs';\n\nconst headerCellClass =\n 'border border-slate-200 px-2 py-1 text-center font-semibold align-middle';\n\nconst cellClass = 'border border-slate-200 px-2 py-1 align-top';\n\nexport const OphthalDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const safe = useMemo(() => ensureValue(value), [value]);\n\n const label = fieldDef?.label || '';\n\n const updateEyeField = (eye: EyeSide, fieldLabel: string, next: string) => {\n if (disabled) return;\n const prev = ensureValue(value);\n setValue({\n ...prev,\n [eye]: {\n ...prev[eye],\n [fieldLabel]: next,\n },\n });\n };\n\n return (\n <div className={cn('space-y-2', disabled && 'opacity-70 pointer-events-none')}>\n {label && <h3 className=\"text-base font-semibold text-slate-800\">{label}</h3>}\n\n <section className={containerClass}>\n <div className={headerClass}>\n <span className=\"text-sm\">Diagnosis</span>\n </div>\n <div className=\"overflow-x-auto\">\n <table className={tableClass}>\n <thead>\n <tr>\n <th className={cn(headerCellClass, 'text-left px-3')}>Field</th>\n <th className={headerCellClass}>Right Eye</th>\n <th className={headerCellClass}>Left Eye</th>\n </tr>\n </thead>\n <tbody>\n {DIAGNOSIS_FIELDS.map((fieldLabel) => (\n <tr key={fieldLabel}>\n <td className={cn(cellClass, 'text-left font-semibold px-3')}>{fieldLabel}</td>\n <td className={cellClass}>\n <Textarea\n disabled={disabled}\n rows={2}\n className=\"w-full text-xs min-h-[60px] resize-none\"\n value={safe.right_eye[fieldLabel] ?? ''}\n onChange={(e) => updateEyeField('right_eye', fieldLabel, e.target.value)}\n />\n </td>\n <td className={cellClass}>\n <Textarea\n disabled={disabled}\n rows={2}\n className=\"w-full text-xs min-h-[60px] resize-none\"\n value={safe.left_eye[fieldLabel] ?? ''}\n onChange={(e) => updateEyeField('left_eye', fieldLabel, e.target.value)}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../core/utils\"\n\ntype SliderProps = React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & {\n trackClassName?: string;\n thumbClassName?: string;\n};\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(({ className, trackClassName, thumbClassName, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n className={cn(\n \"relative h-2 w-full grow overflow-hidden rounded-full bg-gray-200\",\n trackClassName\n )}\n >\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className={cn(\n \"block h-5 w-5 rounded-full border-2 border-primary bg-background 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 thumbClassName\n )}\n />\n </SliderPrimitive.Root>\n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useField } from \"../../react/useField\";\nimport { useForm } from \"../../react/useForm\";\nimport { Button } from \"../shadcn/button\";\nimport { Card } from \"../shadcn/card\";\nimport { Label } from \"../shadcn/label\";\nimport { Slider } from \"../shadcn/slider\";\nimport { Textarea } from \"../shadcn/textarea\";\n\ntype Side = \"left\" | \"right\" | \"both\";\n\ntype ConcernId =\n | \"knee\"\n | \"shoulder\"\n | \"spine\"\n | \"musculoskeletal_pain\"\n | \"hip\"\n | \"trauma\"\n | \"other\";\n\nexport type OrthopedicExamValue = {\n concerns: ConcernId[];\n sides: Partial<Record<\"knee\" | \"shoulder\" | \"hip\", Side>>;\n painScore: number; // 0–10\n physicalExam: {\n inspection: string;\n palpation: string;\n rangeOfMotion: string;\n };\n reminders: {\n dismissed: boolean;\n position?: { top: number; right: number };\n };\n};\n\nconst CONCERNS: { id: ConcernId; label: string }[] = [\n { id: \"knee\", label: \"Knee\" },\n { id: \"shoulder\", label: \"Shoulder\" },\n { id: \"spine\", label: \"Spine\" },\n { id: \"musculoskeletal_pain\", label: \"Musculoskeletal pain\" },\n { id: \"hip\", label: \"Hip\" },\n { id: \"trauma\", label: \"Trauma\" },\n { id: \"other\", label: \"Other\" },\n];\n\nconst SIDE_PARTS: Array<\"knee\" | \"shoulder\" | \"hip\"> = [\"knee\", \"shoulder\", \"hip\"];\n\nconst REMINDERS: Record<ConcernId, string[]> = {\n knee: [\n \"Inspect for swelling, deformity, scars.\",\n \"Palpate joint line, patella, and ligaments.\",\n \"Assess active/passive flexion and extension.\",\n \"Check stability (ACL/PCL/MCL/LCL) if appropriate.\",\n ],\n shoulder: [\n \"Inspect for asymmetry, wasting, deformity.\",\n \"Palpate AC joint, bicipital groove, cuff insertions.\",\n \"Assess active/passive ROM (flex/abd/ER/IR).\",\n \"Consider impingement/cuff tests if indicated.\",\n ],\n hip: [\n \"Inspect gait and standing alignment.\",\n \"Palpate greater trochanter and groin tenderness.\",\n \"Assess ROM (flex/ext/abd/add/IR/ER).\",\n \"Consider special tests (FABER/FADIR) if indicated.\",\n ],\n spine: [\n \"Inspect posture and spinal alignment.\",\n \"Palpate spinous/paraspinal tenderness.\",\n \"Assess ROM (flex/ext/lat bend/rotation).\",\n \"Document neuro screen if radicular symptoms.\",\n ],\n musculoskeletal_pain: [\n \"Localize pain and radiation; identify triggers/relievers.\",\n \"Inspect for swelling, erythema, deformity.\",\n \"Assess function and weight-bearing/ADLs impact.\",\n ],\n trauma: [\n \"Inspect for deformity, wounds, bruising.\",\n \"Check distal neurovascular status.\",\n \"Assess joint stability only if safe.\",\n ],\n other: [\n \"Clarify the concern and affected region.\",\n \"Document red flags (night pain, fever, weight loss).\",\n ],\n};\n\nconst defaultValue = (): OrthopedicExamValue => ({\n concerns: [],\n sides: {},\n painScore: 0,\n physicalExam: { inspection: \"\", palpation: \"\", rangeOfMotion: \"\" },\n reminders: { dismissed: false, position: { top: 96, right: 24 } },\n});\n\nexport const OrthopedicExamWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safeValue: OrthopedicExamValue = useMemo(() => {\n if (!value || typeof value !== \"object\") return defaultValue();\n const v = value as Partial<OrthopedicExamValue>;\n const concerns = Array.isArray(v.concerns) ? (v.concerns as ConcernId[]) : [];\n const painScore = typeof v.painScore === \"number\" ? v.painScore : 0;\n const physicalExam = v.physicalExam ?? defaultValue().physicalExam;\n const reminders = v.reminders ?? defaultValue().reminders;\n return {\n concerns,\n sides: v.sides ?? {},\n painScore: Math.min(10, Math.max(0, Math.round(painScore))),\n physicalExam: {\n inspection: physicalExam.inspection ?? \"\",\n palpation: physicalExam.palpation ?? \"\",\n rangeOfMotion: physicalExam.rangeOfMotion ?? \"\",\n },\n reminders: {\n dismissed: !!reminders.dismissed,\n position: reminders.position ?? { top: 96, right: 24 },\n },\n };\n }, [value]);\n\n const [panelOpen, setPanelOpen] = useState(false);\n const draggingRef = useRef<{\n startX: number;\n startY: number;\n startTop: number;\n startRight: number;\n } | null>(null);\n const prevConcernsLengthRef = useRef(safeValue.concerns.length);\n\n const reminderSections = useMemo(() => {\n return safeValue.concerns\n .map((id) => ({\n id,\n label: CONCERNS.find((c) => c.id === id)?.label ?? id,\n points: REMINDERS[id] ?? [],\n }))\n .filter((s) => s.points.length > 0);\n }, [safeValue.concerns]);\n\n const hasReminders = reminderSections.length > 0;\n\n // Reminders auto-open only when concerns go from 0 to non-zero; close stays collapsed until chip is clicked\n useEffect(() => {\n const prevLen = prevConcernsLengthRef.current;\n const currLen = safeValue.concerns.length;\n prevConcernsLengthRef.current = currLen;\n\n if (currLen === 0) {\n if (safeValue.reminders.dismissed) {\n setValue({ ...safeValue, reminders: { ...safeValue.reminders, dismissed: false } });\n }\n setPanelOpen(false);\n return;\n }\n\n if (prevLen === 0 && currLen > 0 && !safeValue.reminders.dismissed) {\n setPanelOpen(true);\n }\n }, [safeValue, setValue]);\n\n // Window drag listeners\n useEffect(() => {\n const onMove = (e: MouseEvent) => {\n if (!draggingRef.current) return;\n const { startX, startY, startTop, startRight } = draggingRef.current;\n const dx = e.clientX - startX;\n const dy = e.clientY - startY;\n const nextPos = { top: startTop + dy, right: startRight - dx };\n setValue({\n ...safeValue,\n reminders: {\n ...safeValue.reminders,\n position: nextPos,\n },\n });\n };\n const onUp = () => {\n draggingRef.current = null;\n };\n\n window.addEventListener(\"mousemove\", onMove);\n window.addEventListener(\"mouseup\", onUp);\n return () => {\n window.removeEventListener(\"mousemove\", onMove);\n window.removeEventListener(\"mouseup\", onUp);\n };\n }, [safeValue, setValue]);\n\n const update = (next: OrthopedicExamValue) => {\n setValue(next);\n setTouched();\n };\n\n const toggleConcern = (id: ConcernId) => {\n const selected = safeValue.concerns.includes(id);\n const nextConcerns = selected\n ? safeValue.concerns.filter((c) => c !== id)\n : [...safeValue.concerns, id];\n\n const nextSides = { ...safeValue.sides };\n if (!nextConcerns.includes(\"knee\")) delete nextSides.knee;\n if (!nextConcerns.includes(\"shoulder\")) delete nextSides.shoulder;\n if (!nextConcerns.includes(\"hip\")) delete nextSides.hip;\n\n update({ ...safeValue, concerns: nextConcerns, sides: nextSides });\n };\n\n const toggleSide = (part: \"knee\" | \"shoulder\" | \"hip\", side: Side) => {\n const current = safeValue.sides?.[part];\n const nextSides = { ...safeValue.sides };\n if (current === side) {\n delete nextSides[part];\n } else {\n nextSides[part] = side;\n }\n update({ ...safeValue, sides: nextSides });\n };\n\n const setPainScore = (score: number) => {\n update({ ...safeValue, painScore: Math.min(10, Math.max(0, Math.round(score))) });\n };\n\n const setPhysicalExam = (key: keyof OrthopedicExamValue[\"physicalExam\"], text: string) => {\n update({\n ...safeValue,\n physicalExam: {\n ...safeValue.physicalExam,\n [key]: text,\n },\n });\n };\n\n const showSidePanel = SIDE_PARTS.some((p) => safeValue.concerns.includes(p));\n\n if (!fieldDef) return null;\n\n return (\n <div className={`space-y-4 relative ${disabled ? \"opacity-60 pointer-events-none\" : \"\"}`}>\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium\">\n {fieldDef.label}\n {fieldDef.required ? <span className=\"text-red-500 ml-1\">*</span> : null}\n </Label>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-xs font-semibold text-muted-foreground\">Concern</div>\n <div className=\"flex flex-wrap gap-2\">\n {CONCERNS.map((c) => {\n const active = safeValue.concerns.includes(c.id);\n return (\n <Button\n key={c.id}\n type=\"button\"\n size=\"sm\"\n variant={active ? \"default\" : \"outline\"}\n className=\"h-6 rounded-full px-3 py-1 text-xs\"\n onClick={() => toggleConcern(c.id)}\n >\n {c.label}\n </Button>\n );\n })}\n </div>\n </div>\n\n {showSidePanel ? (\n <Card className=\"p-3 space-y-3 border-dashed\">\n <div className=\"text-xs font-semibold text-muted-foreground\">Side (Left / Right / Both)</div>\n {SIDE_PARTS.map((part) => {\n if (!safeValue.concerns.includes(part)) return null;\n const current = safeValue.sides?.[part];\n return (\n <div key={part} className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium capitalize\">{part}</span>\n <div className=\"flex gap-1\">\n {([\"left\", \"right\", \"both\"] as const).map((s) => {\n const active = current === s;\n return (\n <Button\n key={s}\n type=\"button\"\n size=\"sm\"\n variant={active ? \"default\" : \"outline\"}\n className=\"text-[11px] px-2 py-1 h-7\"\n onClick={() => toggleSide(part, s)}\n >\n {s.charAt(0).toUpperCase() + s.slice(1)}\n </Button>\n );\n })}\n </div>\n </div>\n );\n })}\n </Card>\n ) : null}\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-semibold text-muted-foreground\">Pain score</span>\n <span className=\"text-xs font-mono\">{safeValue.painScore} / 10</span>\n </div>\n <Slider\n min={0}\n max={10}\n step={1}\n value={[safeValue.painScore]}\n onValueChange={(v) => setPainScore(v[0] ?? 0)}\n trackClassName=\"!bg-gray-400\"\n thumbClassName=\"!bg-white !border-white\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Inspection</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.inspection}\n onChange={(e) => setPhysicalExam(\"inspection\", e.target.value)}\n placeholder=\"Gait, posture, deformity, swelling, scars...\"\n className=\"text-xs\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Palpation</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.palpation}\n onChange={(e) => setPhysicalExam(\"palpation\", e.target.value)}\n placeholder=\"Tenderness, warmth, crepitus, effusion...\"\n className=\"text-xs\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Range of motion</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.rangeOfMotion}\n onChange={(e) => setPhysicalExam(\"rangeOfMotion\", e.target.value)}\n placeholder=\"Flexion/extension, rotation, abduction/adduction...\"\n className=\"text-xs\"\n />\n </div>\n </div>\n\n {showError ? <p className=\"text-xs text-red-500\">{error}</p> : null}\n\n {safeValue.concerns.length > 0 && hasReminders ? (\n panelOpen ? (\n <div\n style={{\n position: \"fixed\",\n top: safeValue.reminders.position?.top ?? 96,\n right: safeValue.reminders.position?.right ?? 24,\n zIndex: 40,\n }}\n >\n <Card className=\"w-80 shadow-lg border-primary/30 bg-background/95 backdrop-blur-sm\">\n <div\n className=\"flex items-center justify-between px-3 py-2 border-b cursor-move bg-primary/5\"\n onMouseDown={(e) => {\n e.preventDefault();\n draggingRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startTop: safeValue.reminders.position?.top ?? 96,\n startRight: safeValue.reminders.position?.right ?? 24,\n };\n }}\n >\n <span className=\"text-xs font-semibold text-primary\">Exam reminders</span>\n <button\n type=\"button\"\n className=\"text-[10px] uppercase tracking-wide text-muted-foreground hover:text-destructive\"\n onMouseDown={(e) => e.stopPropagation()}\n onClick={() => setPanelOpen(false)}\n >\n Close\n </button>\n </div>\n <div className=\"px-3 py-2 max-h-64 overflow-auto space-y-3\">\n {reminderSections.map(({ id, label, points }) => (\n <div key={id}>\n <div className=\"text-xs font-semibold text-primary mb-1\">{label}</div>\n <ul className=\"list-disc list-inside space-y-1 text-[11px] text-muted-foreground\">\n {points.map((p) => (\n <li key={p}>{p}</li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </Card>\n </div>\n ) : (\n <div\n style={{\n position: \"fixed\",\n top: safeValue.reminders.position?.top ?? 96,\n right: safeValue.reminders.position?.right ?? 24,\n zIndex: 40,\n }}\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"rounded-full px-3 py-1 text-xs border-primary/30 bg-background/95 backdrop-blur-sm shadow-md\"\n onClick={() => setPanelOpen(true)}\n >\n Exam reminders\n </Button>\n </div>\n )\n ) : null}\n </div>\n );\n};","import React, { useCallback } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { TextFieldDef } from '../../core/types';\n\nexport const MarMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onOpen = useCallback(async () => {\n await handlers.onOpenMedicationOrders?.();\n setTouched();\n }, [handlers, setTouched]);\n\n if (!fieldDef || fieldDef.type !== 'textarea') return null;\n\n const textDef = fieldDef as TextFieldDef;\n const height = textDef.height;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n const labelEl = theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n );\n\n const text = typeof value === 'string' ? value : value == null ? '' : String(value);\n const hasHandler = typeof handlers.onOpenMedicationOrders === 'function';\n\n return (\n <div className={wrapperClass}>\n {labelEl}\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3\">\n <div\n id={fieldId}\n className={cn(\n 'min-h-[80px] flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm whitespace-pre-wrap',\n showError && 'border-red-500',\n !text && 'text-muted-foreground'\n )}\n style={height != null ? { minHeight: height } : undefined}\n aria-readonly=\"true\"\n >\n {text || fieldDef.placeholder || 'No medication orders added.'}\n </div>\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || !hasHandler}\n onClick={onOpen}\n className=\"shrink-0 sm:mt-0\"\n >\n Add medication orders\n </Button>\n </div>\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Button } from '../shadcn/button';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\n\ntype CMDashOrder = {\n id: string;\n item_id?: string | number | null;\n item_name?: string | null;\n generic_name?: string | null;\n dose?: string | number | null;\n route?: string | null;\n frequency?: string | null;\n admin_times?: string[] | null;\n meal_sleep_timing?: string | null;\n start_date?: string | null;\n end_date?: string | null;\n order_type?: string | null;\n status?: string | null;\n notes?: string | null;\n};\n\ntype CMDashPrescriptionResponse = {\n pharmacy_order_id?: string | null;\n pharmacy_order_ids?: string[] | null;\n notes?: string | null;\n orders?: CMDashOrder[] | null;\n /** Parallel to `orders`, from host AddMedicineDialog confirm. */\n display_lines?: unknown[] | null;\n};\n\nexport type DischargeMedicationOrder = {\n id: string;\n item_id?: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n pharmacy_order_id?: string;\n};\n\nfunction parseFieldValue(value: unknown): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n if (value == null) return { orders: [], display_lines: [] };\n if (Array.isArray(value)) {\n return {\n orders: value as DischargeMedicationOrder[],\n display_lines: value.map(() => null),\n };\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? (v.orders as DischargeMedicationOrder[]) : [];\n const rawLines = Array.isArray(v.display_lines)\n ? v.display_lines\n : Array.isArray(v.displayLines)\n ? v.displayLines\n : [];\n const display_lines = orders.map((_, i) => rawLines[i] ?? null);\n return { orders, display_lines };\n }\n return { orders: [], display_lines: [] };\n}\n\nfunction normalizePrescription(res: CMDashPrescriptionResponse): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n const pharmacyOrderId = res.pharmacy_order_id ?? undefined;\n const orders = Array.isArray(res.orders) ? res.orders : [];\n const linesRaw = Array.isArray(res.display_lines) ? res.display_lines : [];\n\n const mapped = orders\n .filter((o) => o && typeof o.id === 'string')\n .map((o) => ({\n id: o.id,\n item_id: o.item_id == null ? undefined : String(o.item_id),\n item_name: o.item_name ?? undefined,\n generic_name: o.generic_name ?? undefined,\n dose: o.dose == null ? undefined : String(o.dose),\n route: o.route ?? undefined,\n frequency: o.frequency ?? undefined,\n admin_times: Array.isArray(o.admin_times) ? o.admin_times : undefined,\n meal_sleep_timing: o.meal_sleep_timing ?? undefined,\n start_date: o.start_date ?? undefined,\n end_date: o.end_date ?? undefined,\n order_type: o.order_type ?? undefined,\n status: o.status ?? undefined,\n notes: o.notes ?? null,\n pharmacy_order_id: pharmacyOrderId,\n }));\n\n const display_lines = mapped.map((_, i) => linesRaw[i] ?? null);\n return { orders: mapped, display_lines };\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const DischargeMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const { orders, display_lines } = useMemo(() => parseFieldValue(value), [value]);\n\n const onAdd = useCallback(async () => {\n setTouched();\n const fn = handlers.onOpenDischargeMedicationOrders;\n if (!fn) return;\n const res = await fn();\n if (!res || typeof res !== 'object') return;\n const normalized = normalizePrescription(res as CMDashPrescriptionResponse);\n setValue({\n orders: normalized.orders,\n display_lines: normalized.display_lines,\n });\n }, [handlers.onOpenDischargeMedicationOrders, setTouched, setValue]);\n\n const onDelete = useCallback(\n (id: string) => {\n setTouched();\n const idx = orders.findIndex((o) => o.id === id);\n if (idx === -1) return;\n setValue({\n orders: orders.filter((o) => o.id !== id),\n display_lines: display_lines.filter((_, i) => i !== idx),\n });\n },\n [orders, display_lines, setTouched, setValue]\n );\n\n if (!visible || !fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium\">\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n <Button type=\"button\" onClick={onAdd} disabled={disabled || !handlers.onOpenDischargeMedicationOrders}>\n Add medicine\n </Button>\n </div>\n\n {fieldDef.description && <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>}\n\n {orders.length === 0 ? (\n <div\n className={cn(\n 'rounded-md border border-input bg-background px-3 py-3 text-sm text-muted-foreground',\n showError && 'border-red-500'\n )}\n >\n No medicines added.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o, rowIdx) => {\n const line = display_lines[rowIdx] as { name?: string } | null | undefined;\n const duration = formatDuration(o.start_date, o.end_date);\n const header =\n (typeof line?.name === 'string' && line.name.trim()) ||\n o.item_name ||\n 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-input bg-background p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{header}</div>\n {sub && <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">{sub}</div>}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-destructive\"\n onClick={() => onDelete(o.id)}\n aria-label=\"Delete medicine\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-foreground/80\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport type { StaticTextFieldDef, FieldDef } from '../core/types';\nimport { useField } from './useField';\nimport { TextWidget } from '../ui/widgets/Text';\nimport { RichTextWidget } from '../ui/widgets/RichTextWidget';\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 { MediaUploadWidget } from '../ui/widgets/MediaUpload';\nimport { SignatureUploadWidget } from '../ui/widgets/SignatureUpload';\nimport { EditableTableWidget } from '../ui/widgets/EditableTable';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\nimport { AddMedicationWidget } from '../ui/widgets/AddMedicationWidget';\nimport { AddInvestigationWidget } from '../ui/widgets/AddInvestigationWidget';\nimport { AddProcedureWidget } from '../ui/widgets/AddProcedureWidget';\nimport { DifferentialDiagnosisWidget } from '../ui/widgets/DifferentialDiagnosisWidget';\nimport { VitalsWidget } from '../ui/widgets/VitalsWidget';\nimport { HiddenVitalsWidget } from '../ui/widgets/HiddenVitalsWidget';\nimport { ReferralWidget } from '../ui/widgets/ReferralWidget';\nimport { FollowupWidget } from '../ui/widgets/FollowupWidget';\nimport { SmartTextareaWidget } from '../ui/widgets/SmartTextarea';\nimport { DiagnosisTextareaWidget } from '../ui/widgets/DiagnosisTextareaWidget';\nimport { Switch } from '../ui/shadcn/switch';\nimport { Label } from '../ui/shadcn/label';\nimport { useFormStore } from './FormProvider';\nimport type { ToggleFieldDef } from '../core/types';\nimport { ObstetricHistoryWidget } from '../ui/widgets/ObstetricHistoryWidget';\nimport { OphthalmologyWidget } from '../ui/widgets/OphthalmologyWidget';\nimport { OphthalDiagnosisWidget } from '../ui/widgets/OphthalDiagnosisWidget';\nimport { OrthopedicExamWidget } from '../ui/widgets/OrthopedicExamWidget';\nimport { MarMedicationOrdersWidget } from '../ui/widgets/MarMedicationOrdersWidget';\nimport { DischargeMedicationOrdersWidget } from '../ui/widgets/DischargeMedicationOrdersWidget';\nimport { fieldMetaRequestsMarMedicationOrdersButton } from '../core/marMedicationOrdersMeta';\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 return renderWidget(fieldId, fieldDef);\n};\n\nfunction renderWidget(fieldId: string, fieldDef: FieldDef) {\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n return <TextWidget fieldId={fieldId} />;\n \n case 'textarea':\n if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {\n return <MarMedicationOrdersWidget fieldId={fieldId} />;\n }\n return <TextWidget fieldId={fieldId} />;\n\n case 'richtext':\n return <RichTextWidget 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 'media_upload':\n return <MediaUploadWidget fieldId={fieldId} />;\n \n case 'signature':\n return <SignatureUploadWidget fieldId={fieldId} />;\n\n case 'editable_table':\n return <EditableTableWidget fieldId={fieldId} />;\n\n case 'medications':\n return <AddMedicationWidget fieldId={fieldId} />;\n\n case 'discharge_medication_orders':\n return <DischargeMedicationOrdersWidget fieldId={fieldId} />;\n\n case 'investigations':\n return <AddInvestigationWidget fieldId={fieldId} />;\n\n case 'procedures':\n return <AddProcedureWidget fieldId={fieldId} />;\n\n case 'differential_diagnosis':\n return <DifferentialDiagnosisWidget fieldId={fieldId} />;\n\n case 'vitals':\n return <VitalsWidget fieldId={fieldId} />;\n\n case 'hidden_vitals':\n return <HiddenVitalsWidget fieldId={fieldId} />;\n\n case 'referral':\n return <ReferralWidget fieldId={fieldId} />;\n\n case 'followup':\n return <FollowupWidget fieldId={fieldId} />;\n\n case 'smart_textarea':\n return <SmartTextareaWidget fieldId={fieldId} />;\n\n case 'diagnosis_textarea':\n return <DiagnosisTextareaWidget fieldId={fieldId} />;\n\n case 'obstetric_history':\n return <ObstetricHistoryWidget fieldId={fieldId} />;\n\n case 'eye_prescription':\n return <OphthalmologyWidget fieldId={fieldId} />;\n\n case 'ophthal_diagnosis':\n return <OphthalDiagnosisWidget fieldId={fieldId} />;\n case 'orthopedic_exam':\n return <OrthopedicExamWidget fieldId={fieldId} />;\n\n case 'toggle': {\n const { value, setValue, setTouched, disabled } = useField(fieldId);\n const store = useFormStore();\n const excludes = (fieldDef as ToggleFieldDef).excludes ?? [];\n return (\n <div className=\"flex items-center gap-3\">\n <Switch\n checked={value === true}\n disabled={disabled}\n onCheckedChange={(checked) => {\n setValue(checked);\n setTouched();\n if (checked) excludes.forEach((id) => store.setValue(id, false));\n }}\n />\n <Label className=\"text-sm font-medium leading-none cursor-pointer select-none\">\n {fieldDef.label}\n </Label>\n </div>\n );\n }\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';\n\nexport const DynamicForm: React.FC = () => {\n const store = useFormStore();\n const schema = store.getSchema();\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>\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, { useEffect, useMemo, useRef } from 'react';\nimport { useFormStore } from './FormProvider';\nimport { FieldRenderer } from './FieldRenderer';\nimport { AISuggestionsProvider, type AIMedication } from './AISuggestionsContext';\nimport type { LayoutNode, SectionChild } from '../core/types';\n\n/** Field keys that should be shown as suggestions (badges) instead of applied to form state */\nconst SUGGESTION_KEYS = new Set(['medications', 'investigations', 'procedures']);\n\n/** Shape of one differential diagnosis item from AI (must match form field value) */\nexport type AIDifferentialDiagnosisItem = {\n category: string;\n condition: string;\n likelihood: string;\n severity: string;\n treatability: string;\n keyFeatures?: string[];\n nextSteps?: string[];\n};\n\nfunction shallowEqualKeys(a: Record<string, any>, b: Record<string, any>): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const k of keysA) {\n if (!keysB.includes(k) || a[k] !== b[k]) return false;\n }\n return true;\n}\n\nfunction normalizeAIMedications(arr: unknown): AIMedication[] {\n let parsed: unknown = arr;\n if (typeof arr === 'string') {\n try {\n parsed = JSON.parse(arr);\n } catch {\n return [];\n }\n }\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((item): item is AIMedication => item != null && typeof item === 'object' && 'id' in item && 'brand_name' in item);\n}\n\nfunction normalizeDifferentialDiagnosis(val: unknown): AIDifferentialDiagnosisItem[] {\n let parsed: unknown = val;\n if (typeof val === 'string') {\n try {\n parsed = JSON.parse(val);\n } catch {\n return [];\n }\n }\n // Shape 1: object keyed by category, each with { conditions: [...] }\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const result: AIDifferentialDiagnosisItem[] = [];\n for (const [category, group] of Object.entries(parsed as Record<string, any>)) {\n if (!group || typeof group !== 'object') continue;\n const conditions = Array.isArray((group as any).conditions) ? (group as any).conditions : [];\n for (const cond of conditions) {\n if (!cond || typeof cond !== 'object') continue;\n const {\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures,\n nextSteps,\n } = cond as any;\n if (!condition || !likelihood || !severity || !treatability) continue;\n result.push({\n category,\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures: Array.isArray(keyFeatures) ? keyFeatures : undefined,\n nextSteps: Array.isArray(nextSteps) ? nextSteps : undefined,\n });\n }\n }\n return result;\n }\n\n // Shape 2: already a flat array of items\n if (!Array.isArray(parsed)) return [];\n return parsed.filter(\n (item): item is AIDifferentialDiagnosisItem =>\n item != null &&\n typeof item === 'object' &&\n 'category' in item &&\n 'condition' in item &&\n 'likelihood' in item &&\n 'severity' in item &&\n 'treatability' in item\n );\n}\n\nexport interface SmartFormProps {\n /**\n * Structured result from AI analysis (e.g. patient-doctor conversation).\n * When this is set or updated, values are applied to the form by field ID.\n * Only keys that exist in the form schema are applied; unknown keys are ignored.\n * Fields are not marked as \"touched\" so you can distinguish AI-suggested vs user-edited if needed.\n * Listens to both reference and content changes (e.g. streaming updates to the same object).\n */\n aiAnalysisResult?: Record<string, any> | null;\n}\n\n/**\n * Form view that supports applying AI analysis results after load. Use inside\n * FormProvider like DynamicForm. When aiAnalysisResult is provided (e.g. when\n * AI finishes analyzing conversation), its values are applied to the form in\n * one batch without marking fields as touched. Re-applies when the result\n * reference or content changes (e.g. streaming or incremental AI updates).\n */\nexport const SmartForm: React.FC<SmartFormProps> = ({\n aiAnalysisResult,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n const prevAiResultRef = useRef<Record<string, any> | null | undefined>(undefined);\n\n const aiSuggestions = useMemo(() => {\n if (aiAnalysisResult == null) return { medications: [] };\n const medications = normalizeAIMedications(aiAnalysisResult.medications);\n return { medications };\n }, [aiAnalysisResult]);\n\n useEffect(() => {\n if (aiAnalysisResult == null || Object.keys(aiAnalysisResult).length === 0) return;\n const prev = prevAiResultRef.current;\n if (prev != null && prev === aiAnalysisResult && shallowEqualKeys(prev, aiAnalysisResult)) return;\n // Store a shallow copy so mutation of the same object reference is detected\n // on the next render (shallowEqualKeys will see different key sets).\n prevAiResultRef.current = { ...aiAnalysisResult };\n const DD_KEYS = new Set(['differentialDiagnosis', 'differentialdiagnosis']);\n const toApply: Record<string, any> = {};\n for (const [key, val] of Object.entries(aiAnalysisResult)) {\n if (!SUGGESTION_KEYS.has(key) && !DD_KEYS.has(key)) toApply[key] = val;\n }\n const rawDd =\n aiAnalysisResult.differentialDiagnosis ??\n aiAnalysisResult.differentialdiagnosis;\n if (rawDd != null) {\n toApply.differentialdiagnosis = normalizeDifferentialDiagnosis(rawDd);\n }\n if (Object.keys(toApply).length > 0) store.setValues(toApply, { touch: false });\n }, [store, aiAnalysisResult]);\n\n // Flatten layout: no section titles or accordions; just ordered field ids\n const fieldIds: string[] = [];\n function collect(child: SectionChild | string) {\n if (typeof child === 'string') {\n fieldIds.push(child);\n } else if (child.type === 'column_layout') {\n child.children.forEach(id => fieldIds.push(id));\n }\n }\n schema.layout.forEach((node: LayoutNode) => {\n if (node.type === 'section') {\n node.children.forEach(collect);\n } else if (node.type === 'column_layout') {\n node.children.forEach(id => fieldIds.push(id));\n }\n });\n\n return (\n <AISuggestionsProvider value={aiSuggestions}>\n <div className=\"grid grid-cols-4 gap-2 w-full items-start\">\n {/* Left column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'left') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n\n {/* Center column: 50% (2 of 4 grid cols), internally split 25-25 */}\n <div className=\"col-span-2 grid grid-cols-2 gap-x-2 space-y-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'center') return null;\n\n const colSpanRaw = (fieldDef as any).colSpan ?? 1;\n const colSpan = colSpanRaw === 2 ? 2 : 1;\n\n return (\n <div key={fieldId} className={colSpan === 2 ? 'col-span-2' : 'col-span-1'}>\n <FieldRenderer fieldId={fieldId} />\n </div>\n );\n })}\n </div>\n\n {/* Right column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'right') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n </div>\n </AISuggestionsProvider>\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, { useState, useEffect } 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 ReadOnlyMediaUploadProps {\n fieldDef: BaseFieldDef;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nexport const ReadOnlyMediaUpload: React.FC<ReadOnlyMediaUploadProps> = ({\n fieldDef,\n value,\n}) => {\n const [useIframe, setUseIframe] = useState(false);\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 useEffect(() => {\n setUseIframe(false);\n }, [url]);\n\n const showAsPdf = url && (urlLooksLikePdf(url) || useIframe);\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 file 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 {showAsPdf ? (\n <iframe\n src={url}\n title={`${fieldDef.label} PDF`}\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={url}\n alt={`${fieldDef.label} upload`}\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n onError={() => setUseIframe(true)}\n />\n )}\n </div>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n </div>\n );\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 { Label } from '../shadcn/label';\nimport type { ReferralFieldDef, ReferralItem } from '../../core/types';\n\ninterface ReadOnlyReferralProps {\n fieldDef: ReferralFieldDef;\n value: unknown;\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n return {\n specialization: String((item as ReferralItem).specialization),\n is_urgent: Boolean((item as ReferralItem).is_urgent),\n };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReadOnlyReferral: React.FC<ReadOnlyReferralProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n const items = normalizeValue(value);\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {items.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No value</span>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {items.map((item, i) => {\n const isUrgent = item.is_urgent;\n return (\n <span\n key={i}\n className={\n isUrgent\n ? 'inline-flex items-center gap-1 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs font-medium'\n : 'inline-flex items-center gap-1 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs font-medium'\n }\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded\">\n U\n </span>\n )}\n {item.specialization}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ntype DischargeMedicationOrder = {\n id: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n};\n\nfunction parseOrders(value: unknown): DischargeMedicationOrder[] {\n if (value == null) return [];\n if (Array.isArray(value)) {\n return value.filter(\n (v) => v != null && typeof v === 'object' && typeof (v as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? v.orders : [];\n return orders.filter(\n (o) => o != null && typeof o === 'object' && typeof (o as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n return [];\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const ReadOnlyDischargeMedicationOrders: React.FC<{\n fieldDef: FieldDef;\n value: unknown;\n}> = ({ fieldDef, value }) => {\n const orders = useMemo(() => parseOrders(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 {orders.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No medicines added</span>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o) => {\n const duration = formatDuration(o.start_date, o.end_date);\n const header = o.item_name ?? 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-gray-200 bg-gray-50 p-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate text-gray-900\">{header}</div>\n {sub && <div className=\"text-xs text-gray-500 mt-0.5 truncate\">{sub}</div>}\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-gray-600\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-gray-800/90\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react';\nimport { ReadOnlyText } from '../ui/widgets/ReadOnlyText';\nimport { ReadOnlySelect } from '../ui/widgets/ReadOnlySelect';\nimport { ReadOnlyMultiSelect } from '../ui/widgets/ReadOnlyMultiSelect';\nimport { ReadOnlyRepeatable } from '../ui/widgets/ReadOnlyRepeatable';\nimport { ReadOnlyDate } from '../ui/widgets/ReadOnlyDate';\nimport { ReadOnlyImageUpload } from '../ui/widgets/ReadOnlyImageUpload';\nimport { ReadOnlyMediaUpload } from '../ui/widgets/ReadOnlyMediaUpload';\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 { ReadOnlyReferral } from '../ui/widgets/ReadOnlyReferral';\nimport { ReadOnlyDischargeMedicationOrders } from '../ui/widgets/ReadOnlyDischargeMedicationOrders';\nimport type {\n CheckboxFieldDef,\n FieldDef,\n RadioFieldDef,\n ReferralFieldDef,\n RepeatableFieldDef,\n SelectFieldDef,\n StaticTextFieldDef,\n} from '../core/types';\n\ninterface ReadOnlyFieldRendererProps {\n fieldDef: FieldDef;\n value: unknown;\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 SelectFieldDef} value={value} />;\n \n case 'radio':\n return <ReadOnlyRadio fieldDef={fieldDef as RadioFieldDef} value={value} />;\n \n case 'checkbox':\n return <ReadOnlyCheckbox fieldDef={fieldDef as CheckboxFieldDef} value={value} />;\n \n case 'multiselect':\n return <ReadOnlyMultiSelect fieldDef={fieldDef as SelectFieldDef} value={value} />;\n \n case 'repeatable':\n return <ReadOnlyRepeatable fieldDef={fieldDef as RepeatableFieldDef} value={value} />;\n \n case 'image_upload':\n return <ReadOnlyImageUpload fieldDef={fieldDef} value={value} />;\n\n case 'media_upload':\n return <ReadOnlyMediaUpload 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 'referral':\n return <ReadOnlyReferral fieldDef={fieldDef as ReferralFieldDef} value={value} />;\n\n case 'discharge_medication_orders':\n return <ReadOnlyDischargeMedicationOrders fieldDef={fieldDef} value={value} />;\n\n case 'toggle': {\n const isOn = value === true;\n return (\n <div className=\"space-y-1\">\n <p className=\"text-xs text-muted-foreground\">{fieldDef.label}</p>\n <span className={`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${isOn ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-600'}`}>\n {isOn ? 'Yes' : 'No'}\n </span>\n </div>\n );\n }\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/marMedicationOrdersMeta.ts","../src/core/validate.ts","../src/core/rules.ts","../src/core/persistence/index.ts","../src/core/prefill.ts","../src/core/store.ts","../src/react/VoiceContext.tsx","../src/react/FormProvider.tsx","../src/react/useForm.ts","../src/react/useField.ts","../src/react/VoiceMicButton.tsx","../src/core/utils.ts","../src/ui/shadcn/input.tsx","../src/ui/shadcn/label.tsx","../src/ui/shadcn/textarea.tsx","../src/ui/themes/textareaThemes.ts","../src/ui/themes/index.ts","../src/ui/widgets/Text.tsx","../src/ui/shadcn/button.tsx","../src/ui/shadcn/separator.tsx","../src/ui/widgets/RichTextWidget.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/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/MediaUpload.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/AISuggestionsContext.tsx","../src/ui/shadcn/dialog.tsx","../src/ui/widgets/AddEntityDialog.tsx","../src/ui/widgets/AddMedicationField.tsx","../src/ui/widgets/AddMedicationWidget.tsx","../src/ui/widgets/AddInvestigationField.tsx","../src/ui/widgets/AddInvestigationWidget.tsx","../src/ui/widgets/AddProcedureField.tsx","../src/ui/widgets/AddProcedureWidget.tsx","../src/ui/widgets/DifferentialDiagnosis.tsx","../src/ui/widgets/DifferentialDiagnosisWidget.tsx","../src/ui/shadcn/spinner.tsx","../src/ui/widgets/Vitals.tsx","../src/ui/widgets/VitalsWidget.tsx","../src/ui/widgets/HiddenVitalsWidget.tsx","../src/ui/widgets/ReferralWidget.tsx","../src/ui/shadcn/card.tsx","../src/ui/widgets/FollowupWidget.tsx","../src/react/useSmartKeywords.ts","../src/ui/widgets/SmartTextarea.tsx","../src/ui/widgets/DiagnosisTextareaWidget.tsx","../src/ui/shadcn/switch.tsx","../src/ui/widgets/ObstetricHistoryWidget.tsx","../src/ui/widgets/OphthalmologyWidget.tsx","../src/ui/widgets/OphthalDiagnosisWidget.tsx","../src/ui/shadcn/slider.tsx","../src/ui/widgets/OrthopedicExamWidget.tsx","../src/ui/widgets/MarMedicationOrdersWidget.tsx","../src/ui/widgets/DischargeMedicationOrdersWidget.tsx","../src/ui/widgets/SuggestionTextareaWidget.tsx","../src/ui/widgets/LensAssessmentWidget.tsx","../src/core/functionalImpairmentScore.ts","../src/ui/widgets/FunctionalImpairmentScoreWidget.tsx","../src/ui/widgets/BiometryIolWorkupWidget.tsx","../src/ui/widgets/SurgicalRiskFlagsWidget.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.tsx","../src/react/DynamicForm.tsx","../src/react/SmartForm.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/ReadOnlyMediaUpload.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/ui/widgets/ReadOnlyReferral.tsx","../src/ui/widgets/ReadOnlyDischargeMedicationOrders.tsx","../src/react/ReadOnlyFieldRenderer.tsx","../src/react/ReadOnlyForm.tsx","../src/react/FormControls.tsx","../src/utils/createUploadHandler.ts"],"names":["createContext","useContext","jsx","useState","useEffect","useCallback","React4","React5","React6","jsxs","Fragment","cva","React8","React9","UnderlineIcon","React11","React13","Check","React","Icon","React18","CalendarIcon","React21","format","useRef","error","X","Image","Upload","useMemo","def","Trash2","React27","React30","ChevronUp","ChevronDown","ChevronRight","Plus","ADD_FEEDBACK_MS","Spinner","React40","React45","days","Loader2","React49","ensureValue","React53","DEFAULT_TITLE","parseValue","urlLooksLikePdf","useReactTable","getCoreRowModel","flexRender","isOptionSelected","normalizeValue","formatDuration"],"mappings":"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","file":"index.mjs","sourcesContent":["export const MAR_MEDICATION_ORDERS_META_KEY = 'mar_medication_orders' as const;\n\ntype MarMedicationOrdersMeta = {\n [MAR_MEDICATION_ORDERS_META_KEY]?: boolean;\n};\n\nexport function fieldMetaRequestsMarMedicationOrdersButton(\n meta: Record<string, unknown> | undefined\n): boolean {\n if (!meta || typeof meta !== 'object') return false;\n return (meta as MarMedicationOrdersMeta)[MAR_MEDICATION_ORDERS_META_KEY] === true;\n}\n","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 if (field.type === 'smart_textarea' && typeof value === 'object' && !Array.isArray(value)) {\n if (!value.text || value.text.trim() === '') {\n return 'This field is required';\n }\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 tokenListContainsString(text: unknown, needle: unknown): boolean {\n if (typeof text !== 'string') return false;\n const want = String(needle).trim();\n if (!want) return false;\n const parts = text.split(',').map((p) => p.trim()).filter(Boolean);\n return parts.includes(want);\n}\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':\n if (Array.isArray(value)) {\n return value.includes(condition.value);\n }\n if (typeof value === 'string') {\n return tokenListContainsString(value, condition.value);\n }\n return false;\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 FormulaExpr,\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 * Voice dictation support. When provided, fields marked with `voice: true`\n * in the schema will display a microphone button.\n * The host app owns all recording logic and supplies two callbacks:\n * - `startRecording` — begin capturing audio\n * - `stopRecording` — stop capturing, transcribe, and return the transcript\n */\n voice?: {\n startRecording: (fieldId?: string) => Promise<void>;\n stopRecording: () => Promise<string>;\n };\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' || field.type === 'multiselect') values[field.id] = [];\n else if (field.type === 'smart_textarea') values[field.id] = { text: '', extractedKeywords: [] };\n else if (field.type === 'suggestion_textarea' || field.type === 'complaint_chips') values[field.id] = '';\n else if (field.type === 'lens_assessment')\n values[field.id] = {\n notes: '',\n assessmentKey: undefined,\n locs: {\n OD: { NO: 0, NC: 0, C: 0, PSC: 0 },\n OS: { NO: 0, NC: 0, C: 0, PSC: 0 },\n },\n };\n else if (field.type === 'functional_impairment_score')\n values[field.id] = {\n reading: 0,\n nightDriving: 0,\n glare: 0,\n occupation: 0,\n adl: 0,\n };\n else if (field.type === 'biometry_iol_workup')\n values[field.id] = {\n axialLengthOD: '',\n axialLengthOS: '',\n k1k2AxisOD: '',\n k1k2AxisOS: '',\n anteriorChamberDepthOD: '',\n anteriorChamberDepthOS: '',\n iolPowerOD: '',\n iolPowerOS: '',\n targetRefractionOD: '',\n targetRefractionOS: '',\n formula: 'SRK/T',\n method: 'optical_biometry',\n cornealTopoUploaded: false,\n specularMicroscopyDone: false,\n endothelialCount: '',\n };\n else if (field.type === 'surgical_risk_flags')\n values[field.id] = { OD: [], OS: [] };\n else if (field.type === 'toggle') values[field.id] = false;\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 getVoice(): StoreConfig['voice'] {\n return this.config.voice;\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 /**\n * Set multiple values at once (e.g. from AI analysis). Only updates keys that\n * exist in the schema. Runs evaluate/notify/save once.\n * @param partial Map of fieldId -> value\n * @param options.touch If false, do not mark fields as touched (e.g. for AI-suggested values)\n */\n setValues(partial: Record<string, any>, options?: { touch?: boolean }) {\n const touch = options?.touch !== false;\n let changed = false;\n const newValues = { ...this.state.values };\n const newTouched = { ...this.state.touched };\n\n for (const [fieldId, value] of Object.entries(partial)) {\n if (!this.fieldMap[fieldId]) continue; // Only apply known fields\n // Intentionally no debug logs here; widgets defensively coerce to arrays.\n if (newValues[fieldId] === value) continue;\n newValues[fieldId] = value;\n if (touch) newTouched[fieldId] = true;\n changed = true;\n }\n\n if (!changed) return;\n\n this.state.values = newValues;\n this.state.touched = newTouched;\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 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 }, 5000);\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 /**\n * Raw form values as stored internally, without any serialization or\n * transformation. Useful when consumers need access to richer structures\n * (e.g. smart_textarea keyword metadata) alongside the flattened values\n * returned by getSerializedValuesForSubmission.\n */\n getRawValues(): FormValues {\n return { ...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 (field.type === 'smart_textarea') {\n const raw = values[field.id];\n result[field.id] = raw?.text ?? null;\n return;\n }\n if (field.type === 'diagnosis_textarea') {\n const raw = values[field.id];\n // Preserve legacy string storage; otherwise submit only the text portion.\n result[field.id] =\n typeof raw === 'string'\n ? raw\n : (raw && typeof raw === 'object' ? ((raw as any).text ?? null) : null);\n return;\n }\n if (field.type === 'ophthal_diagnosis') {\n const raw = values[field.id];\n\n const formatEye = (eyeData: unknown, eyeLabel: string): string => {\n if (!eyeData || typeof eyeData !== 'object') return '';\n const entries = Object.entries(eyeData as Record<string, unknown>)\n .filter(([, value]) => typeof value === 'string' && value.trim())\n .map(([key, value]) => `${key}: ${(value as string).trim()}`);\n if (entries.length === 0) return '';\n return [eyeLabel, ...entries].join('\\n');\n };\n\n const rightEyeText = formatEye(\n raw?.right_eye ?? (raw as any)?.rightEye,\n 'Right Eye',\n );\n const leftEyeText = formatEye(\n raw?.left_eye ?? (raw as any)?.leftEye,\n 'Left Eye',\n );\n\n const parts = [rightEyeText, leftEyeText].filter(Boolean);\n result[field.id] = parts.length > 0 ? parts.join('\\n\\n') : null;\n return;\n }\n if (\n field.type === 'image_upload' ||\n field.type === 'media_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 } else if (comp.type === 'formula') {\n const evalExpr = (expr: FormulaExpr): number => {\n if (expr.type === 'field') {\n return Number(this.state.values[expr.field]) || 0;\n }\n if (expr.type === 'number') {\n return expr.value;\n }\n const left = evalExpr(expr.left);\n const right = evalExpr(expr.right);\n switch (expr.op) {\n case '+': return left + right;\n case '-': return left - right;\n case '*': return left * right;\n case '/': return right === 0 ? 0 : left / right;\n case '**': return Math.pow(left, right);\n default: return 0;\n }\n };\n const result = evalExpr(comp.expression);\n const value = Number.isFinite(result) ? Math.round(result * 10) / 10 : '';\n if (this.state.values[comp.target] !== value) {\n this.state.values[comp.target] = value;\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 if (next.voice !== undefined) this.config.voice = next.voice;\n\n if (next.role !== undefined && next.role !== this.config.role) {\n this.config.role = next.role;\n needsReeval = true;\n }\n\n if (next.prefillData !== undefined && next.prefillData !== this.prefillData) {\n this.prefillData = next.prefillData;\n this.state.values = applyPrefill(this.state.values, this.schema.fields, this.prefillData);\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, useState, useCallback } from 'react';\n\ninterface VoiceContextType {\n activeFieldId: string | null;\n setActiveFieldId: (id: string | null) => void;\n}\n\nconst VoiceContext = createContext<VoiceContextType>({\n activeFieldId: null,\n setActiveFieldId: () => {},\n});\n\nexport function useVoiceContext(): VoiceContextType {\n return useContext(VoiceContext);\n}\n\ninterface VoiceContextProviderProps {\n children: React.ReactNode;\n}\n\nexport function VoiceContextProvider({ children }: VoiceContextProviderProps) {\n const [activeFieldId, setActiveFieldIdState] = useState<string | null>(null);\n\n const setActiveFieldId = useCallback((id: string | null) => {\n setActiveFieldIdState(id);\n }, []);\n\n return (\n <VoiceContext.Provider value={{ activeFieldId, setActiveFieldId }}>\n {children}\n </VoiceContext.Provider>\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, DoctorFrequentItems, DiagnosticPackage } from '../core/types';\nimport { VoiceContextProvider } from './VoiceContext';\n\nconst FormContext = createContext<FormStore | null>(null);\n\nconst emptyFrequentItems: DoctorFrequentItems = {\n medications: [],\n investigations: [],\n procedures: [],\n};\n\nconst FrequentItemsContext = createContext<DoctorFrequentItems>(emptyFrequentItems);\nconst PackagesContext = createContext<DiagnosticPackage[]>([]);\n\nexport type FieldHandler = {\n onSearch: (query: string) => Promise<any[]>;\n recentlyUsed?: any[];\n /**\n * Called by widgets that display externally-fetched data (e.g. vitals).\n * Invoked once on mount and again when the user hits the refresh button.\n * The resolved value is written directly into the field's form state.\n */\n onFetch?: () => Promise<any>;\n /**\n * Called by the referral widget to load dropdown options. May return\n * { specializations: string[] } or { label: string; value: any }[].\n */\n onFetchOptions?: () => Promise<{ specializations?: string[] } | { label: string; value: any }[]>;\n /**\n * Called by diagnosis_textarea widgets to fetch condition-wise grades\n * from diagnosis text input.\n */\n onFetchDiagnosisGrades?: (query: string) => Promise<any>;\n /**\n * Host opens MAR / medication-orders UI (e.g. IPD discharge). On success the host\n * should update this field's value in form state.\n */\n onOpenMedicationOrders?: () => void | Promise<void>;\n /**\n * Host opens CMDash discharge medication orders slide-over. On save, return the\n * prescription payload so the widget can normalize and store it in form state.\n */\n onOpenDischargeMedicationOrders?: () => Promise<any | null> | any | null;\n};\n\nexport type FieldHandlersMap = Record<string, FieldHandler>;\n\nconst FieldHandlersContext = createContext<FieldHandlersMap>({});\n\nexport function useFieldHandlers(fieldId: string): FieldHandler {\n const map = useContext(FieldHandlersContext);\n return map[fieldId] ?? { onSearch: async () => [], recentlyUsed: [] };\n}\n\nexport function useFrequentItems(): DoctorFrequentItems {\n return useContext(FrequentItemsContext);\n}\n\nexport function usePackages(): DiagnosticPackage[] {\n return useContext(PackagesContext);\n}\n\ninterface FormProviderProps {\n schema: FormDef;\n config?: StoreConfig;\n fieldHandlers?: FieldHandlersMap;\n /**\n * Doctor-scoped frequently used items (e.g. from GET /api/doctor-state/frequent-items/).\n * Consumer fetches and passes this; Forminator flows it to medications, investigations, and procedures widgets.\n */\n frequentItems?: DoctorFrequentItems;\n packages?: DiagnosticPackage[];\n children: React.ReactNode;\n}\n\nexport const FormProvider: React.FC<FormProviderProps> = ({\n schema,\n config,\n fieldHandlers,\n frequentItems,\n packages,\n children,\n}) => {\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 const frequentItemsValue = frequentItems ?? emptyFrequentItems;\n\n return (\n <FormContext.Provider value={storeRef.current}>\n <FieldHandlersContext.Provider value={fieldHandlers ?? {}}>\n <FrequentItemsContext.Provider value={frequentItemsValue}>\n <PackagesContext.Provider value={packages ?? []}>\n <VoiceContextProvider>\n {children}\n </VoiceContextProvider>\n </PackagesContext.Provider>\n </FrequentItemsContext.Provider>\n </FieldHandlersContext.Provider>\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 getRawValues: store.getRawValues.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 React, { useCallback, useState } from 'react';\nimport { Mic, Loader2 } from 'lucide-react';\nimport { useFormStore } from './FormProvider';\nimport { useVoiceContext } from './VoiceContext';\n\ntype RecordingStatus = 'idle' | 'recording' | 'transcribing';\n\nfunction RecordingWave() {\n const bars = [\n { dur: '0.6s', values: '3;10;3', yValues: '4.5;0;4.5', delay: '0s' },\n { dur: '0.6s', values: '8;3;8', yValues: '2;4.5;2', delay: '0.1s' },\n { dur: '0.6s', values: '5;11;5', yValues: '3.5;0.5;3.5', delay: '0.05s' },\n { dur: '0.6s', values: '10;4;10', yValues: '1;4;1', delay: '0.15s' },\n ];\n return (\n <svg width=\"16\" height=\"12\" viewBox=\"0 0 18 12\" aria-hidden>\n {bars.map((b, i) => (\n <rect key={i} x={i * 4 + 1} width=\"2.5\" rx=\"1.25\" fill=\"currentColor\" y=\"0\" height=\"12\">\n <animate attributeName=\"height\" values={b.values} dur={b.dur} begin={b.delay} repeatCount=\"indefinite\" />\n <animate attributeName=\"y\" values={b.yValues} dur={b.dur} begin={b.delay} repeatCount=\"indefinite\" />\n </rect>\n ))}\n </svg>\n );\n}\n\ninterface VoiceMicButtonProps {\n fieldId: string;\n onTranscriptReady: (transcript: string) => void;\n}\n\nexport function VoiceMicButton({ fieldId, onTranscriptReady }: VoiceMicButtonProps) {\n const store = useFormStore();\n const { activeFieldId, setActiveFieldId } = useVoiceContext();\n const [status, setStatus] = useState<RecordingStatus>('idle');\n\n const voice = store.getVoice();\n\n const isActive = activeFieldId === fieldId;\n const isRecording = status === 'recording' && isActive;\n const isTranscribing = status === 'transcribing' && isActive;\n const isBlocked = activeFieldId !== null && !isActive;\n\n const handleClick = useCallback(async () => {\n if (!voice || isBlocked || isTranscribing) return;\n\n if (isRecording) {\n setStatus('transcribing');\n try {\n const transcript = await voice.stopRecording();\n if (transcript) onTranscriptReady(transcript);\n } catch {\n // silently reset on error\n } finally {\n setStatus('idle');\n setActiveFieldId(null);\n }\n } else {\n setActiveFieldId(fieldId);\n setStatus('recording');\n try {\n await voice.startRecording(fieldId);\n } catch {\n setStatus('idle');\n setActiveFieldId(null);\n }\n }\n }, [voice, isBlocked, isTranscribing, isRecording, fieldId, onTranscriptReady, setActiveFieldId]);\n\n const title = isTranscribing\n ? 'Processing…'\n : isRecording\n ? 'Stop recording'\n : 'Dictate this field';\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isBlocked || isTranscribing}\n title={title}\n className={[\n 'flex items-center gap-1 rounded px-1 py-0.5',\n 'text-[11px] font-medium transition-opacity',\n isBlocked ? 'pointer-events-none opacity-30' : '',\n isTranscribing ? 'cursor-wait opacity-50' : '',\n !isBlocked && !isTranscribing ? 'hover:opacity-70' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {isTranscribing ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-slate-400\" />\n ) : isRecording ? (\n <>\n <span className=\"text-rose-400\">\n <RecordingWave />\n </span>\n <span className=\"text-rose-400\">Stop</span>\n </>\n ) : (\n <Mic className=\"h-4 w-4 text-slate-400\" />\n )}\n </button>\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 spellCheck={false}\n className={cn(\n \"flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none 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 type { ComponentThemeConfig } from './types';\n\n/**\n * Textarea theme: label in a colored block overlapping the textarea.\n * Label has light pink background (#FEE8EC), rounded top corners only, border;\n * label overlaps the textarea so the textarea's top border radius is hidden.\n * Textarea has white background, rounded bottom corners only, border.\n */\nexport const textareaThemes: Record<string, ComponentThemeConfig> = {\n 'highlight-label': {\n wrapperClassName: 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]',\n labelClassName:\n 'rounded-t-md bg-[#FEE8EC] px-3 py-1 text-sm shrink-0 z-[1] text-slate-600',\n inputClassName:\n 'rounded-t-none rounded-b-md border-0 border-t border-[#D0D0D0] text-xs resize-none -mt-1 min-w-0 bg-white text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50',\n },\n};\n","import type { ComponentThemeConfig, FieldTypeForTheme } from './types';\nimport { textareaThemes } from './textareaThemes';\n\nconst themeRegistries: Partial<Record<FieldTypeForTheme, Record<string, ComponentThemeConfig>>> = {\n textarea: textareaThemes,\n text: textareaThemes, // same themes can apply to single-line text if desired\n};\n\n/**\n * Returns theme config for a field type and theme name.\n * Returns undefined if theme is not set or not found (no theme applied).\n */\nexport function getThemeConfig(\n fieldType: FieldTypeForTheme,\n themeName: string | undefined\n): ComponentThemeConfig | undefined {\n if (!themeName) return undefined;\n const registry = themeRegistries[fieldType];\n if (!registry) return undefined;\n return registry[themeName];\n}\n\nexport { textareaThemes } from './textareaThemes';\nexport type { ComponentThemeConfig, FieldTypeForTheme } from './types';\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\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 const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const Component = fieldDef.type === 'textarea' ? Textarea : Input;\n const isTextarea = fieldDef.type === 'textarea';\n const height = isTextarea && 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig(\n isTextarea ? 'textarea' : 'text',\n fieldDef.theme\n );\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n const labelEl = theme ? (\n <Label htmlFor={fieldId} className={labelClass}>{labelContent}</Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n );\n\n return (\n <div className={wrapperClass}>\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : labelEl}\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={inputClass}\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 { 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\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n\n","import React, { useEffect, useMemo, useReducer } from 'react';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Underline from '@tiptap/extension-underline';\nimport {\n Bold,\n Italic,\n Underline as UnderlineIcon,\n Strikethrough,\n List,\n ListOrdered,\n Undo,\n Redo,\n} from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Separator } from '../shadcn/separator';\nimport { cn } from '../../core/utils';\nimport type { Editor } from '@tiptap/core';\nimport type { RichTextFieldDef } from '../../core/types';\n\nfunction isEmptyHtml(html: string): boolean {\n const t = html.trim();\n return (\n t === '' ||\n t === '<p></p>' ||\n t === '<p><br></p>' ||\n t === '<p><br class=\"ProseMirror-trailingBreak\"></p>'\n );\n}\n\nfunction RichTextToolbar({\n editor,\n disabled,\n}: {\n editor: Editor | null;\n disabled: boolean;\n}) {\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n\n useEffect(() => {\n if (!editor) return;\n const handler = () => rerender();\n editor.on('selectionUpdate', handler);\n editor.on('transaction', handler);\n return () => {\n editor.off('selectionUpdate', handler);\n editor.off('transaction', handler);\n };\n }, [editor]);\n\n if (!editor) {\n return (\n <div className=\"flex flex-wrap gap-1 border-b border-input bg-muted/30 px-2 py-1.5 min-h-[42px]\" />\n );\n }\n\n const fmtBtn = (active: boolean, onClick: () => void, icon: React.ReactNode, title: string) => (\n <Button\n type=\"button\"\n variant={active ? 'secondary' : 'outline'}\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled}\n title={title}\n onClick={() => {\n if (!disabled) onClick();\n }}\n >\n {icon}\n </Button>\n );\n\n return (\n <div\n className=\"flex flex-wrap items-center gap-1 border-b border-input bg-muted/30 px-2 py-1.5\"\n role=\"toolbar\"\n aria-label=\"Rich text formatting\"\n >\n {fmtBtn(\n editor.isActive('bold'),\n () => editor.chain().focus().toggleBold().run(),\n <Bold className=\"h-4 w-4\" />,\n 'Bold',\n )}\n {fmtBtn(\n editor.isActive('italic'),\n () => editor.chain().focus().toggleItalic().run(),\n <Italic className=\"h-4 w-4\" />,\n 'Italic',\n )}\n {fmtBtn(\n editor.isActive('underline'),\n () => editor.chain().focus().toggleUnderline().run(),\n <UnderlineIcon className=\"h-4 w-4\" />,\n 'Underline',\n )}\n {fmtBtn(\n editor.isActive('strike'),\n () => editor.chain().focus().toggleStrike().run(),\n <Strikethrough className=\"h-4 w-4\" />,\n 'Strikethrough',\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n {fmtBtn(\n editor.isActive('bulletList'),\n () => editor.chain().focus().toggleBulletList().run(),\n <List className=\"h-4 w-4\" />,\n 'Bullet list',\n )}\n {fmtBtn(\n editor.isActive('orderedList'),\n () => editor.chain().focus().toggleOrderedList().run(),\n <ListOrdered className=\"h-4 w-4\" />,\n 'Numbered list',\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().undo()}\n title=\"Undo\"\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().redo()}\n title=\"Redo\"\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport const RichTextWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n const showError = !!error && (touched || state.submitAttempted);\n\n const def = fieldDef as RichTextFieldDef | undefined;\n const placeholder = def?.placeholder ?? 'Start typing…';\n const minHeight = def?.minHeight ?? 160;\n\n const extensions = useMemo(\n () => [\n StarterKit.configure({\n // Disable headings entirely so the UI/content can't introduce H2/H3.\n heading: false,\n bulletList: {\n HTMLAttributes: {\n class: 'list-disc pl-6 my-2',\n },\n },\n orderedList: {\n HTMLAttributes: {\n class: 'list-decimal pl-6 my-2',\n },\n },\n listItem: {\n HTMLAttributes: {\n class: 'my-1',\n },\n },\n }),\n Underline,\n Placeholder.configure({\n placeholder,\n }),\n ],\n [placeholder],\n );\n\n const stringValue = typeof value === 'string' ? value : '';\n\n const editor = useEditor(\n {\n extensions,\n content: stringValue || '',\n editable: !disabled,\n immediatelyRender: false,\n onUpdate: ({ editor: ed }) => {\n const html = ed.getHTML();\n setValue(isEmptyHtml(html) ? '' : html);\n },\n onBlur: () => setTouched(),\n editorProps: {\n attributes: {\n id: fieldId,\n class: 'focus:outline-none',\n style: `min-height: ${minHeight}px`,\n },\n },\n },\n [extensions, fieldId],\n );\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n editor.setEditable(!disabled);\n }, [editor, disabled]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n el.style.minHeight = `${minHeight}px`;\n }, [editor, minHeight]);\n\n // Listen for a custom 'insertTranscript' event dispatched by external hooks\n // (e.g. voice recording) so the widget controls its own insertion logic.\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n const handler = (e: Event) => {\n const { text } = (e as CustomEvent<{ text: string }>).detail;\n if (!text) return;\n const currentText = editor.getText();\n const prefix = currentText.length > 0 && !/\\s$/.test(currentText) ? ' ' : '';\n editor.chain().focus().insertContent(prefix + text).run();\n };\n el.addEventListener('insertTranscript', handler);\n return () => el.removeEventListener('insertTranscript', handler);\n }, [editor]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const fromForm = stringValue;\n const fromEditor = editor.getHTML();\n if (isEmptyHtml(fromForm) && isEmptyHtml(fromEditor)) return;\n if (fromForm && fromForm !== fromEditor) {\n editor.commands.setContent(fromForm, { emitUpdate: false });\n }\n if (!fromForm && !isEmptyHtml(fromEditor)) {\n editor.commands.setContent('', { emitUpdate: false });\n }\n }, [stringValue, editor]);\n\n if (!fieldDef) return null;\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n const labelEl = <Label htmlFor={fieldId}>{labelContent}</Label>;\n\n return (\n <div className=\"space-y-2\">\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : labelEl}\n <div\n className={cn(\n 'rounded-md border border-input bg-background text-sm ring-offset-background overflow-hidden',\n showError && 'border-red-500',\n disabled && 'opacity-60',\n )}\n >\n <RichTextToolbar editor={editor} disabled={disabled} />\n <div\n className={cn(\n 'px-3 py-2',\n '[&_.ProseMirror]:outline-none',\n '[&_.ProseMirror_ul]:list-disc [&_.ProseMirror_ul]:pl-6 [&_.ProseMirror_ul]:my-2',\n '[&_.ProseMirror_ol]:list-decimal [&_.ProseMirror_ol]:pl-6 [&_.ProseMirror_ol]:my-2',\n '[&_.ProseMirror_li]:list-item',\n '[&_.ProseMirror_blockquote]:border-l-4 [&_.ProseMirror_blockquote]:border-muted-foreground/40 [&_.ProseMirror_blockquote]:pl-3 [&_.ProseMirror_blockquote]:italic [&_.ProseMirror_blockquote]:my-2',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:text-muted-foreground',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:float-left',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:pointer-events-none',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:h-0',\n )}\n >\n <EditorContent editor={editor} />\n </div>\n </div>\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\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-52 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\";\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\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\ntype RdpDropdownOption = {\n value: string | number\n label: string\n disabled?: boolean\n}\n\ntype RdpDropdownProps = {\n options?: RdpDropdownOption[]\n value?: string | number\n onChange?: React.ChangeEventHandler<HTMLSelectElement>\n \"aria-label\"?: string\n}\n\nfunction CalendarDropdown(props: RdpDropdownProps) {\n const { options, value, onChange } = props\n\n const handleValueChange = (newValue: string) => {\n if (!onChange) return\n const syntheticEvent = {\n target: { value: newValue },\n } as unknown as React.ChangeEvent<HTMLSelectElement>\n onChange(syntheticEvent)\n }\n\n return (\n <Select value={value?.toString()} onValueChange={handleValueChange}>\n <SelectTrigger className=\"h-7 px-2 text-sm\" aria-label={props[\"aria-label\"]}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((option) => (\n <SelectItem\n key={option.value.toString()}\n value={option.value.toString()}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n const captionLayout = props.captionLayout ?? \"dropdown\"\n const isDropdownCaption =\n captionLayout === \"dropdown\" ||\n captionLayout === \"dropdown-months\" ||\n captionLayout === \"dropdown-years\"\n\n // Provide a broad default year range for dropdown captions.\n // Callers can override by passing `startMonth` / `endMonth`.\n const startMonth =\n props.startMonth ?? (isDropdownCaption ? new Date(1900, 0) : undefined)\n const endMonth =\n props.endMonth ?? (isDropdownCaption ? new Date(2100, 11) : undefined)\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n captionLayout={captionLayout}\n hideNavigation={props.hideNavigation ?? isDropdownCaption}\n navLayout={props.navLayout ?? (isDropdownCaption ? \"around\" : undefined)}\n startMonth={startMonth}\n endMonth={endMonth}\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: cn(\n \"text-sm font-medium\",\n isDropdownCaption && \"sr-only\"\n ),\n dropdowns: \"flex items-center gap-2\",\n months_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n years_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\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: isDropdownCaption ? \"\" : \"absolute left-1\",\n nav_button_next: isDropdownCaption ? \"\" : \"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 isDropdownCaption ? \"\" : \"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 isDropdownCaption ? \"\" : \"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: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n // @ts-expect-error react-day-picker v9 component typing differences\n Dropdown: CalendarDropdown,\n // @ts-expect-error react-day-picker v9 component typing differences\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 } 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\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nfunction isAcceptedMediaFile(file: File): boolean {\n if (file.type.startsWith('image/')) return true;\n if (file.type === 'application/pdf') return true;\n if (file.name.toLowerCase().endsWith('.pdf')) return true;\n return false;\n}\n\nexport const MediaUploadWidget: 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 [previewIsPdf, setPreviewIsPdf] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n /** When the stored value is an opaque key (no extension), keep image vs PDF from the last upload. */\n const pendingPreviewKindRef = useRef<'image' | 'pdf' | null>(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 setPreview(value);\n if (pendingPreviewKindRef.current) {\n setPreviewIsPdf(pendingPreviewKindRef.current === 'pdf');\n pendingPreviewKindRef.current = null;\n } else {\n setPreviewIsPdf(urlLooksLikePdf(value));\n }\n } else {\n setPreview(null);\n setPreviewIsPdf(false);\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 if (!isAcceptedMediaFile(file)) {\n alert('Please select an image or PDF 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 const isPdf =\n file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf');\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 setPreviewIsPdf(isPdf);\n\n // Upload file using the provided handler\n const s3Key = await uploadHandler(file, file.name);\n\n pendingPreviewKindRef.current = isPdf ? 'pdf' : 'image';\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 setPreviewIsPdf(false);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n pendingPreviewKindRef.current = null;\n setValue(null);\n setPreview(null);\n setPreviewIsPdf(false);\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 {previewIsPdf ? (\n <iframe\n src={preview}\n title=\"Uploaded PDF\"\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={preview}\n alt=\"Uploaded image\"\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n />\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 PDF, 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/*,application/pdf\"\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};\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 { createContext, useContext } from 'react';\n\n/** Shape of a medication as returned by AI analysis */\nexport type AIMedication = {\n id: string | number;\n brand_name: string;\n generic_name: string;\n form?: string;\n strength?: string;\n reason?: string;\n};\n\nexport type AISuggestions = {\n medications?: AIMedication[];\n};\n\nconst AISuggestionsContext = createContext<AISuggestions>({});\n\nexport function useAISuggestions(): AISuggestions {\n return useContext(AISuggestionsContext);\n}\n\nexport const AISuggestionsProvider = AISuggestionsContext.Provider;\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n\n","import React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from '../shadcn/dialog';\n\ntype ChipSection = {\n label: string;\n content: React.ReactNode;\n};\n\ntype AddEntityDialogProps = {\n open: boolean;\n onClose: () => void;\n title: string;\n /** Multiple chip sections (e.g. Frequently Used, Packages). Replaces recentlyUsedSlot. */\n chipSections?: ChipSection[];\n /** @deprecated Use chipSections instead */\n recentlyUsedSlot?: React.ReactNode;\n /** @deprecated Use chipSections instead */\n chipSectionLabel?: string;\n children: React.ReactNode;\n actionSlot?: React.ReactNode;\n};\n\nexport const AddEntityDialog: React.FC<AddEntityDialogProps> = ({\n open,\n onClose,\n title,\n chipSections,\n recentlyUsedSlot,\n chipSectionLabel = 'Recently Used',\n children,\n actionSlot,\n}) => {\n const sections: ChipSection[] = chipSections ??\n (recentlyUsedSlot ? [{ label: chipSectionLabel, content: recentlyUsedSlot }] : []);\n\n return (\n <Dialog open={open} onOpenChange={(o) => !o && onClose()}>\n <DialogContent className=\"max-w-4xl w-full p-0 gap-0 flex flex-col max-h-[90vh] overflow-hidden\">\n {/* Fixed header */}\n <DialogHeader className=\"px-6 pt-6 pb-4 shrink-0\">\n <DialogTitle className=\"text-lg font-semibold\">{title}</DialogTitle>\n </DialogHeader>\n\n {/* Scrollable body */}\n <div className=\"px-6 flex flex-col gap-4 overflow-y-auto flex-1 min-h-0 pb-4\">\n {sections.map((section) => (\n <div key={section.label}>\n <p className=\"text-xs text-muted-foreground mb-2\">{section.label}</p>\n <div className=\"flex flex-wrap gap-2\">{section.content}</div>\n </div>\n ))}\n\n {children}\n </div>\n\n {/* Fixed footer */}\n {actionSlot != null && (\n <div className=\"px-6 py-4 flex justify-end shrink-0 border-t border-border bg-background\">\n {actionSlot}\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Trash2, ChevronUp, ChevronDown, ChevronRight, Plus, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { AIMedication } from '../../react/AISuggestionsContext';\nimport type { MedicationFrequentItem } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nconst BEFORE_AFTER_OPTIONS = [\n { label: 'Blank', value: '' },\n { label: 'AFTER FOOD', value: 'AFTER FOOD' },\n { label: 'BEFORE FOOD', value: 'BEFORE FOOD' },\n { label: 'WITH FOOD', value: 'WITH FOOD' },\n { label: 'SINGLE DOSE', value: 'SINGLE DOSE' },\n { label: 'BED TIME', value: 'BED TIME' },\n { label: 'EMPTY STOMACH', value: 'EMPTY STOMACH' },\n { label: 'LOCAL APPLICATION', value: 'LOCAL APPLICATION' },\n { label: 'STAT', value: 'STAT' },\n { label: 'INHALATION', value: 'INHALATION' },\n] as const;\n\ntype BeforeAfterOption = (typeof BEFORE_AFTER_OPTIONS)[number]['value'];\n\nconst BEFORE_AFTER_NORMALIZATION_MAP: Record<string, BeforeAfterOption> = {\n AF: 'AFTER FOOD',\n BF: 'BEFORE FOOD',\n};\n\nexport type MedicationSearchResult = {\n id: string;\n name: string;\n generic_name?: string;\n manufacturer?: string;\n score?: number;\n};\n\n\nconst ROUTE_OPTIONS = [\n { label: 'Select route', value: '' },\n { label: 'Per Os', value: 'Per Os' },\n { label: 'Intravenous', value: 'Intravenous' },\n { label: 'Intramuscular', value: 'Intramuscular' },\n { label: 'Subcutaneous', value: 'Subcutaneous' },\n { label: 'Sublingual', value: 'Sublingual' },\n { label: 'Intranasal', value: 'Intranasal' },\n { label: 'Topical', value: 'Topical' },\n { label: 'Per Rectum', value: 'Per Rectum' },\n { label: 'Inhalation', value: 'Inhalation' },\n { label: 'ID Intradermal', value: 'ID Intradermal' },\n] as const;\n\nexport type Medication = {\n id: string;\n brand_name: string;\n generic_name: string;\n frequency: string;\n is_custom: boolean;\n duration_value: string;\n duration_unit: 'days' | 'weeks' | 'months';\n before_after: BeforeAfterOption;\n route: string;\n morning: string;\n afternoon: string;\n night: string;\n notes: string;\n};\n\nexport type AddMedicationFieldProps = {\n label?: string;\n value: Medication[];\n onChange: (items: Medication[]) => void;\n onSearch: (query: string) => Promise<MedicationSearchResult[]>;\n recentlyUsed?: MedicationSearchResult[];\n /** Doctor-scoped frequently used medications (from FormProvider frequentItems) */\n frequentItems?: MedicationFrequentItem[];\n /** AI-suggested medications shown as badges; clicking adds to value */\n suggestedMedications?: AIMedication[];\n};\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToMedication(result: MedicationSearchResult): Medication {\n return {\n id: result.id,\n brand_name: result.name,\n generic_name: result.generic_name ?? '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n route: '',\n morning: '0',\n afternoon: '0',\n night: '0',\n notes: '',\n };\n}\n\nfunction mapAIMedicationToMedication(ai: AIMedication): Medication {\n const id = ai.id != null ? String(ai.id) : '';\n return {\n id,\n brand_name: ai.brand_name ?? '',\n generic_name: ai.generic_name ?? '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n route: '',\n morning: '1',\n afternoon: '0',\n night: '1',\n notes: ai.reason ?? '',\n };\n}\n\nfunction createCustomMedication(name: string, customId: number): Medication {\n return {\n id: String(customId),\n brand_name: name.trim(),\n generic_name: '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n route: '',\n morning: '0',\n afternoon: '0',\n night: '0',\n notes: '',\n };\n}\n\n/** Parse duration string like \"5 days\" or \"2 weeks\" into value + unit */\nfunction parseDuration(duration?: string): { value: string; unit: 'days' | 'weeks' | 'months' } {\n if (!duration || !duration.trim()) return { value: '3', unit: 'days' };\n const lower = duration.trim().toLowerCase();\n const match = lower.match(/^(\\d+)\\s*(day|days|week|weeks|month|months)?$/);\n if (!match) return { value: '3', unit: 'days' };\n const value = match[1] ?? '3';\n const unitWord = match[2] ?? 'days';\n const unit: 'days' | 'weeks' | 'months' =\n unitWord.startsWith('month') ? 'months' : unitWord.startsWith('week') ? 'weeks' : 'days';\n return { value, unit };\n}\n\nfunction mapFrequentItemToMedication(item: MedicationFrequentItem): Medication {\n const parsed = parseDuration(item.duration);\n const duration_value = item.duration_value ?? parsed.value;\n const duration_unit =\n (item.duration_unit as Medication['duration_unit'] | undefined) ?? parsed.unit;\n\n const before_after: Medication['before_after'] = normalizeBeforeAfter(item.before_after);\n\n const routeNote = item.route ? `Route: ${item.route}` : '';\n const baseNotes = item.notes?.trim() || '';\n const combinedNotes =\n [baseNotes, routeNote.trim()].filter((part) => part.length > 0).join(' — ');\n\n return {\n id: item.id,\n brand_name: item.brand_name ?? item.name,\n generic_name: item.short_name ?? '',\n frequency: item.frequency ?? 'custom',\n is_custom: false,\n duration_value,\n duration_unit,\n before_after,\n route: item.route ?? '',\n morning: item.morning ?? '0',\n afternoon: item.afternoon ?? '0',\n night: item.night ?? '0',\n notes: combinedNotes,\n };\n}\n\nfunction normalizeBeforeAfter(value?: string): BeforeAfterOption {\n if (value == null) return 'AFTER FOOD';\n const mapped = BEFORE_AFTER_NORMALIZATION_MAP[value];\n if (mapped) return mapped;\n const validValues = BEFORE_AFTER_OPTIONS.map((option) => option.value);\n return validValues.includes(value as BeforeAfterOption) ? (value as BeforeAfterOption) : 'AFTER FOOD';\n}\n\nfunction Spinner({\n value,\n onChange,\n}: {\n value: string;\n onChange: (v: string) => void;\n}) {\n const num = parseInt(value, 10) || 0;\n return (\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground cursor-pointer\"\n onClick={() => onChange(String(num + 1))}\n >\n <ChevronUp className=\"h-3 w-3\" />\n </button>\n <span className=\"text-sm w-4 text-center leading-none\">{num}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground cursor-pointer\"\n onClick={() => onChange(String(Math.max(0, num - 1)))}\n >\n <ChevronDown className=\"h-3 w-3\" />\n </button>\n </div>\n );\n}\n\n// ─── Medication card (added item) ─────────────────────────────────────────────\n\nfunction MedicationCard({\n med,\n onUpdate,\n onRemove,\n}: {\n med: Medication;\n onUpdate: (updated: Medication) => void;\n onRemove: () => void;\n}) {\n const [notesOpen, setNotesOpen] = useState(false);\n\n function set<K extends keyof Medication>(key: K, val: Medication[K]) {\n onUpdate({ ...med, [key]: val });\n }\n\n return (\n <div className=\"bg-gray-50 rounded-lg p-3 space-y-2\">\n {/* Row 1: drug name, frequency dropdown, morning/afternoon/night labels, delete */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"font-semibold text-sm flex-1 min-w-0 truncate\">{med.brand_name}</span>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={med.frequency}\n onChange={(e) => set('frequency', e.target.value)}\n >\n <option value=\"custom\">select frequency</option>\n <option value=\"qid\">4 times a day (QID)</option>\n <option value=\"alternate_day\">Alternate day</option>\n <option value=\"once_weekly\">Once weekly</option>\n <option value=\"once_monthly\">Once monthly</option>\n <option value=\"as_needed\">As needed</option>\n <option value=\"fort_night\">Fort night</option>\n <option value=\"at_bed_time\">At Bed time</option>\n <option value=\"sos\">SOS only</option>\n <option value=\"biweekly\">Biweekly</option>\n <option value=\"stat\">STAT</option>\n </select>\n <div className=\"flex gap-4 items-center shrink-0\">\n {(['morning', 'afternoon', 'night'] as const).map((slot) => (\n <span\n key={slot}\n className=\"text-[10px] font-semibold uppercase text-muted-foreground tracking-wide\"\n >\n {slot === 'afternoon' ? 'AFTERNOON' : slot === 'morning' ? 'MORNING' : 'NIGHT'}\n </span>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"text-red-400 hover:text-red-600 shrink-0 p-1 cursor-pointer\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Row 2: duration (value + unit) on left; 3 dose spinners in middle; AF/BF on right */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <div className=\"flex items-center gap-1 shrink-0\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n className=\"w-11 text-sm border border-border rounded px-2 py-1 bg-white\"\n value={med.duration_value}\n onChange={(e) => {\n const v = e.target.value.replace(/\\D/g, '');\n set('duration_value', v === '' ? '' : v);\n }}\n />\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white\"\n value={med.duration_unit}\n onChange={(e) => set('duration_unit', e.target.value as Medication['duration_unit'])}\n >\n <option value=\"days\">days</option>\n <option value=\"weeks\">weeks</option>\n <option value=\"months\">months</option>\n </select>\n </div>\n <div className=\"flex gap-2 items-center flex-1 min-w-0 justify-end\">\n {(['morning', 'afternoon', 'night'] as const).map((slot) => (\n <div key={slot} className=\"flex flex-col items-center gap-0.5\">\n <Spinner value={med[slot]} onChange={(v) => set(slot, v)} />\n </div>\n ))}\n </div>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={normalizeBeforeAfter(med.before_after)}\n onChange={(e) => set('before_after', e.target.value as Medication['before_after'])}\n >\n {BEFORE_AFTER_OPTIONS.map((option) => (\n <option key={option.label} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={med.route ?? ''}\n onChange={(e) => set('route', e.target.value)}\n >\n {ROUTE_OPTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n\n {/* Row 3: medicine notes — full-width div as hit area (chevron + text), cursor-pointer */}\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setNotesOpen((o) => !o)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setNotesOpen((o) => !o);\n }\n }}\n className={cn(\n 'flex items-center gap-2 w-full text-left text-xs text-muted-foreground hover:text-foreground',\n 'cursor-pointer py-2 px-2 rounded border border-transparent hover:bg-gray-100/80 transition-colors'\n )}\n >\n <ChevronRight\n className={cn('h-3 w-3 shrink-0 transition-transform', notesOpen && 'rotate-90')}\n />\n <span>Medicine Notes</span>\n </div>\n {notesOpen && (\n <div className=\"relative z-10 mt-0.5\">\n <textarea\n className=\"block w-full text-xs border border-border rounded px-2 py-1 resize-none bg-white min-h-0\"\n rows={2}\n placeholder=\"Add notes...\"\n value={med.notes}\n onChange={(e) => set('notes', e.target.value)}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ─── Search result card ────────────────────────────────────────────────────────\n\nconst ADD_FEEDBACK_MS = 320;\n\nfunction SearchResultCard({\n result,\n isAdding,\n onSelect,\n}: {\n result: MedicationSearchResult;\n isAdding: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'w-full text-left border rounded-lg px-3 py-2 transition-all duration-300 ease-out cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'border-green-400 bg-green-50 scale-[0.98]'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n <div className=\"min-w-0 flex-1 text-left\">\n <p className=\"text-sm font-semibold leading-tight truncate\">{result.name}</p>\n {result.generic_name && (\n <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">\n Generic: {result.generic_name}\n </p>\n )}\n </div>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddMedicationField: React.FC<AddMedicationFieldProps> = ({\n label = 'Medications',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n suggestedMedications = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<MedicationSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingResultId, setAddingResultId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const customIdRef = useRef(-1);\n const valueRef = useRef<Medication[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const safeValue = Array.isArray(value) ? value : [];\n valueRef.current = safeValue;\n const addedIds = new Set(safeValue.map((m) => String(m.id)));\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingResultId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function handleRecentlyUsedToggle(result: MedicationSearchResult) {\n if (addedIds.has(String(result.id))) {\n onChange(safeValue.filter((m) => String(m.id) !== String(result.id)));\n } else {\n onChange([...safeValue, mapToMedication(result)]);\n }\n }\n\n function handleFrequentItemToggle(item: MedicationFrequentItem) {\n if (addedIds.has(String(item.id))) {\n onChange(safeValue.filter((m) => String(m.id) !== String(item.id)));\n } else {\n onChange([...safeValue, mapFrequentItemToMedication(item)]);\n }\n }\n\n function handleResultClick(result: MedicationSearchResult) {\n if (addedIds.has(String(result.id))) return;\n setAddingResultId(result.id);\n setTimeout(() => {\n onChange([...valueRef.current, mapToMedication(result)]);\n setAddingResultId(null);\n setQuery('');\n setResults([]);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function handleSave() {\n const trimmed = query.trim();\n if (!trimmed) return;\n const customId = customIdRef.current--;\n onChange([...safeValue, createCustomMedication(trimmed, customId)]);\n setQuery('');\n setResults([]);\n }\n\n function handleAddSuggestion(ai: AIMedication) {\n if (addedIds.has(String(ai.id))) return;\n onChange([...safeValue, mapAIMedicationToMedication(ai)]);\n }\n\n function updateMed(index: number, updated: Medication) {\n const next = [...safeValue];\n next[index] = updated;\n onChange(next);\n }\n\n function removeMed(index: number) {\n onChange(safeValue.filter((_, i) => i !== index));\n }\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(String(r.id));\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors cursor-pointer',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const isAdded = addedIds.has(String(item.id));\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-[11px] px-2 py-0.5 transition-colors cursor-pointer',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {item.brand_name ?? item.name}\n </button>\n );\n })\n : [];\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col border bg-white border-[#D0D0D0] space-y-3 p-3 h-fit\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added medications */}\n <div className=\"space-y-2\">\n {safeValue.map((med, i) => (\n <MedicationCard\n key={med.id}\n med={med}\n onUpdate={(u) => updateMed(i, u)}\n onRemove={() => removeMed(i)}\n />\n ))}\n </div>\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Medication\"\n recentlyUsedSlot={\n frequentItemChips.length > 0\n ? frequentItemChips\n : recentlyUsedChips.length > 0\n ? recentlyUsedChips\n : undefined\n }\n chipSectionLabel={frequentItemChips.length > 0 ? 'Frequently used' : undefined}\n actionSlot={\n <button\n type=\"button\"\n disabled={!query.trim()}\n onClick={handleSave}\n className={cn(\n 'rounded-md px-5 py-2 text-sm font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-opacity cursor-pointer',\n !query.trim() && 'opacity-40 cursor-not-allowed'\n )}\n >\n Save Medicine\n </button>\n }\n >\n <div className=\"space-y-3\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search medicines...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {/* AI-suggested medications as clickable badges (inside dialog) */}\n {suggestedMedications.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 items-center\">\n <span className=\"text-xs text-muted-foreground mr-1\">Suggestions:</span>\n {suggestedMedications\n .filter((s) => !addedIds.has(String(s.id)))\n .slice(0, 25)\n .map((s) => (\n <button\n key={String(s.id)}\n type=\"button\"\n onClick={() => handleAddSuggestion(s)}\n className=\"inline-flex items-center gap-1 rounded-full border border-dashed border-purple-300 bg-purple-50/80 text-purple-800 text-[11px] px-2 py-0.5 hover:bg-purple-100 transition-colors cursor-pointer\"\n >\n <Plus className=\"h-3 w-3\" />\n {s.brand_name || s.generic_name || String(s.id)}\n </button>\n ))}\n </div>\n )}\n\n {/* Results grid */}\n {loading && (\n <p className=\"text-xs text-muted-foreground text-center py-2\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"grid grid-cols-2 gap-2 max-h-64 overflow-y-auto\">\n {results.map((r) => (\n <SearchResultCard\n key={r.id}\n result={r}\n isAdding={addingResultId === r.id}\n onSelect={() => handleResultClick(r)}\n />\n ))}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems } from '../../react/FormProvider';\nimport { useAISuggestions } from '../../react/AISuggestionsContext';\nimport { AddMedicationField } from './AddMedicationField';\nimport type { Medication, MedicationSearchResult } from './AddMedicationField';\n\nexport const AddMedicationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { medications: suggestedMedications } = useAISuggestions();\n const { medications: frequentMedications } = useFrequentItems();\n\n const safeValue: Medication[] = Array.isArray(value) ? (value as Medication[]) : [];\n\n return (\n <AddMedicationField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<MedicationSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as MedicationSearchResult[] | undefined}\n frequentItems={frequentMedications}\n suggestedMedications={suggestedMedications}\n />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { InvestigationFrequentItem, DiagnosticPackage } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type InvestigationSearchResult = {\n id: string;\n name: string;\n code?: string;\n description?: string;\n categories?: string[];\n synonyms?: string[];\n sample_type?: string;\n method?: string;\n reference_range?: string;\n sample_unit?: string;\n sample_qty?: number;\n turnaround_time?: number;\n preparation?: string;\n service_type?: string;\n department?: string;\n is_vip_enabled?: boolean;\n is_pacs_enabled?: boolean;\n score?: number;\n};\n\nexport type Investigation = InvestigationSearchResult & {\n label: string;\n is_custom: boolean;\n fromAI: boolean;\n};\n\nexport type AddInvestigationFieldProps = {\n label?: string;\n value: Investigation[];\n onChange: (items: Investigation[]) => void;\n onSearch: (query: string) => Promise<InvestigationSearchResult[]>;\n recentlyUsed?: InvestigationSearchResult[];\n frequentItems?: InvestigationFrequentItem[];\n packages?: DiagnosticPackage[];\n};\n\nconst ADD_FEEDBACK_MS = 320;\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToInvestigation(result: InvestigationSearchResult): Investigation {\n return {\n ...result,\n label: result.name,\n is_custom: false,\n fromAI: false,\n };\n}\n\n// function mapFrequentItemToInvestigation(item: InvestigationFrequentItem): Investigation {\n// return {\n// id: String(item.id),\n// name: item.name,\n// code: item.code ?? undefined,\n// label: item.name,\n// is_custom: false,\n// fromAI: false,\n// };\n// }\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddInvestigationField: React.FC<AddInvestigationFieldProps> = ({\n label = 'Investigations',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n packages = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<InvestigationSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingId, setAddingId] = useState<string | null>(null);\n const [addingFrequentId, setAddingFrequentId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const valueRef = useRef<Investigation[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n // tracks which test IDs were added by each package: packageId → testId[]\n const addedByPackage = useRef<Map<string, string[]>>(new Map());\n // drives re-renders for package chip selected state\n const [selectedPackageIds, setSelectedPackageIds] = useState<Set<string>>(new Set());\n\n const safeValue: Investigation[] = Array.isArray(value) ? value : [];\n\n valueRef.current = safeValue;\n const addedIds = new Set(safeValue.map((inv) => inv.id));\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingId(null);\n setAddingFrequentId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function addInvestigation(result: InvestigationSearchResult) {\n if (!addedIds.has(result.id)) {\n onChange([...valueRef.current, mapToInvestigation(result)]);\n }\n setQuery('');\n setResults([]);\n }\n\n function handleResultClick(result: InvestigationSearchResult) {\n if (addedIds.has(result.id)) return;\n setAddingId(result.id);\n setTimeout(() => {\n addInvestigation(result);\n setAddingId(null);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function removeInvestigation(id: string) {\n onChange(safeValue.filter((inv) => inv.id !== id));\n }\n\n function handleRecentlyUsedToggle(result: InvestigationSearchResult) {\n if (addedIds.has(result.id)) {\n removeInvestigation(result.id);\n } else {\n addInvestigation(result);\n }\n }\n\n async function handleFrequentItemToggle(item: InvestigationFrequentItem) {\n const id = String(item.id);\n const addedById = addedIds.has(id);\n const addedByName = safeValue.some((inv) => inv.name === item.name);\n if (addedById || addedByName) {\n if (addedById) removeInvestigation(id);\n else onChange(safeValue.filter((inv) => inv.name !== item.name));\n return;\n }\n setAddingFrequentId(id);\n try {\n const searchResults = await onSearch(item.name);\n const first = searchResults?.[0];\n if (first && !valueRef.current.some((inv) => inv.id === first.id)) {\n onChange([...valueRef.current, mapToInvestigation(first)]);\n }\n } finally {\n setAddingFrequentId(null);\n }\n }\n\n function handlePackageToggle(pkg: DiagnosticPackage) {\n const alreadyAdded = addedByPackage.current.has(pkg.id);\n if (alreadyAdded) {\n const idsToRemove = new Set(addedByPackage.current.get(pkg.id) ?? []);\n onChange(valueRef.current.filter((inv) => !idsToRemove.has(inv.id)));\n addedByPackage.current.delete(pkg.id);\n setSelectedPackageIds((prev) => {\n const next = new Set(prev);\n next.delete(pkg.id);\n return next;\n });\n } else {\n const currentIds = new Set(valueRef.current.map((inv) => inv.id));\n const newTests = pkg.tests\n .filter((t) => !currentIds.has(t.id))\n .map((t) => mapToInvestigation(t));\n if (newTests.length > 0) {\n onChange([...valueRef.current, ...newTests]);\n }\n addedByPackage.current.set(pkg.id, newTests.map((t) => t.id));\n setSelectedPackageIds((prev) => new Set(prev).add(pkg.id));\n }\n }\n\n // ─── Chip builders ────────────────────────────────────────────────────────\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(r.id);\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const id = String(item.id);\n const isAdded = safeValue.some((inv) => inv.id === id) || safeValue.some((inv) => inv.name === item.name);\n const isAdding = addingFrequentId === id;\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={isAdding}\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50',\n isAdding && 'opacity-70 pointer-events-none'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {isAdding ? '…' : item.name}\n </button>\n );\n })\n : [];\n\n const packageChips = packages.map((pkg) => {\n const isAdded = selectedPackageIds.has(pkg.id);\n return (\n <button\n key={pkg.id}\n type=\"button\"\n onClick={() => handlePackageToggle(pkg)}\n className={cn(\n 'rounded-full border text-xs px-4 py-1.5 transition-colors flex items-center gap-2',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span>✓</span>}\n <span className=\"font-semibold\">{pkg.name}</span>\n <span className={cn(\n 'rounded-full px-1.5 py-0.5 text-[10px] font-medium',\n isAdded ? 'bg-green-100 text-green-600' : 'bg-purple-100 text-purple-600'\n )}>\n {pkg.tests.length}\n </span>\n </button>\n );\n });\n\n // ─── Build chip sections ──────────────────────────────────────────────────\n\n const chipSections = [];\n if (frequentItemChips.length > 0) {\n chipSections.push({ label: 'Frequently used', content: <>{frequentItemChips}</> });\n } else if (recentlyUsedChips.length > 0) {\n chipSections.push({ label: 'Recently Used', content: <>{recentlyUsedChips}</> });\n }\n if (packageChips.length > 0) {\n chipSections.push({ label: 'Packages', content: <>{packageChips}</> });\n }\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col bg-white border border-[#D0D0D0] space-y-3 p-3 h-fit\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added investigations — one row each */}\n {safeValue.length > 0 && (\n <div className=\"divide-y divide-border rounded-lg border border-border overflow-hidden\">\n {safeValue.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between px-3 py-2 bg-white hover:bg-gray-50\"\n >\n <span className=\"text-sm\">{inv.name}</span>\n <button\n type=\"button\"\n onClick={() => removeInvestigation(inv.id)}\n className=\"text-muted-foreground hover:text-red-500 transition-colors cursor-pointer\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Investigation\"\n chipSections={chipSections.length > 0 ? chipSections : undefined}\n >\n <div className=\"space-y-2\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search for an investigation...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {loading && (\n <p className=\"text-xs text-muted-foreground py-1\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"border border-border rounded-md overflow-hidden\">\n {results.map((r) => {\n const isAdding = addingId === r.id;\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleResultClick(r)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm transition-all duration-300 ease-out border-b border-border last:border-b-0 cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'bg-green-50 border-green-200'\n : 'hover:bg-gray-50'\n )}\n >\n <span className=\"truncate\">{r.name}</span>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems, usePackages } from '../../react/FormProvider';\nimport { AddInvestigationField } from './AddInvestigationField';\nimport type { Investigation, InvestigationSearchResult } from './AddInvestigationField';\n\nexport const AddInvestigationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { investigations: frequentInvestigations } = useFrequentItems();\n const packages = usePackages();\n\n const safeValue: Investigation[] = Array.isArray(value) ? (value as Investigation[]) : [];\n\n return (\n <AddInvestigationField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<InvestigationSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as InvestigationSearchResult[] | undefined}\n frequentItems={frequentInvestigations}\n packages={packages}\n />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { ProcedureFrequentItem } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n// Matches search API response.results[] shape\n\nexport type ProcedureSearchResult = {\n id: string;\n name: string;\n code?: string;\n description?: string;\n specialization?: string;\n score?: number;\n};\n\n/** Master row from search / frequent resolution — full metadata. */\nexport type MasterProcedure = ProcedureSearchResult & {\n label: string;\n is_custom: false;\n fromAI: boolean;\n};\n\n/** Custom free-text row — only `name` and `is_custom` (no extra keys). */\nexport type CustomProcedure = {\n name: string;\n is_custom: true;\n};\n\nexport type Procedure = MasterProcedure | CustomProcedure;\n\nexport type AddProcedureFieldProps = {\n label?: string;\n value: Procedure[];\n onChange: (items: Procedure[]) => void;\n onSearch: (query: string) => Promise<ProcedureSearchResult[]>;\n recentlyUsed?: ProcedureSearchResult[];\n /** Doctor-scoped frequently used procedures (from FormProvider frequentItems) */\n frequentItems?: ProcedureFrequentItem[];\n};\n\nconst ADD_FEEDBACK_MS = 320;\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToProcedure(result: ProcedureSearchResult): MasterProcedure {\n return {\n ...result,\n label: result.name,\n is_custom: false,\n fromAI: false,\n };\n}\n\nfunction createCustomProcedure(trimmedName: string): CustomProcedure {\n return { name: trimmedName.trim(), is_custom: true };\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddProcedureField: React.FC<AddProcedureFieldProps> = ({\n label = 'Procedures',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<ProcedureSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingId, setAddingId] = useState<string | null>(null);\n const [addingFrequentId, setAddingFrequentId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const valueRef = useRef<Procedure[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const safeValue: Procedure[] = Array.isArray(value) ? value : [];\n\n valueRef.current = safeValue;\n const addedIds = new Set(\n safeValue.filter((proc): proc is MasterProcedure => !proc.is_custom).map((proc) => proc.id),\n );\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingId(null);\n setAddingFrequentId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function addProcedure(result: ProcedureSearchResult) {\n if (!addedIds.has(result.id)) {\n onChange([...valueRef.current, mapToProcedure(result)]);\n }\n setQuery('');\n setResults([]);\n }\n\n function handleResultClick(result: ProcedureSearchResult) {\n if (addedIds.has(result.id)) return;\n setAddingId(result.id);\n setTimeout(() => {\n addProcedure(result);\n setAddingId(null);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function removeAt(index: number) {\n onChange(safeValue.filter((_, i) => i !== index));\n }\n\n function removeBySearchId(id: string) {\n onChange(safeValue.filter((proc) => proc.is_custom || proc.id !== id));\n }\n\n function handleAddCustom() {\n const trimmed = query.trim();\n if (!trimmed) return;\n if (valueRef.current.some((p) => p.is_custom && p.name === trimmed)) return;\n onChange([...valueRef.current, createCustomProcedure(trimmed)]);\n setQuery('');\n setResults([]);\n }\n\n function handleRecentlyUsedToggle(result: ProcedureSearchResult) {\n if (addedIds.has(result.id)) {\n removeBySearchId(result.id);\n } else {\n addProcedure(result);\n }\n }\n\n async function handleFrequentItemToggle(item: ProcedureFrequentItem) {\n const id = String(item.id);\n const addedById = addedIds.has(id);\n const addedByName = safeValue.some((proc) => proc.name === item.name);\n if (addedById || addedByName) {\n if (addedById) removeBySearchId(id);\n else onChange(safeValue.filter((proc) => proc.name !== item.name));\n return;\n }\n setAddingFrequentId(id);\n try {\n const searchResults = await onSearch(item.name);\n const first = searchResults?.[0];\n if (first && !valueRef.current.some((proc) => !proc.is_custom && proc.id === first.id)) {\n onChange([...valueRef.current, mapToProcedure(first)]);\n }\n } finally {\n setAddingFrequentId(null);\n }\n }\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(r.id);\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const id = String(item.id);\n const isAdded =\n safeValue.some((proc) => !proc.is_custom && proc.id === id) ||\n safeValue.some((proc) => proc.name === item.name);\n const isAdding = addingFrequentId === id;\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={isAdding}\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50',\n isAdding && 'opacity-70 pointer-events-none'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {isAdding ? '…' : item.name}\n </button>\n );\n })\n : [];\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col bg-white border border-[#D0D0D0] space-y-3 p-3 h-fit\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added procedures — one row each */}\n {safeValue.length > 0 && (\n <div className=\"divide-y divide-border rounded-lg border border-border overflow-hidden\">\n {safeValue.map((proc, index) => (\n <div\n key={proc.is_custom ? `custom-${index}` : proc.id}\n className=\"flex items-center justify-between px-3 py-2 bg-white hover:bg-gray-50\"\n >\n <span className=\"text-sm\">{proc.name}</span>\n <button\n type=\"button\"\n onClick={() => removeAt(index)}\n className=\"text-muted-foreground hover:text-red-500 transition-colors cursor-pointer\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Procedure\"\n recentlyUsedSlot={\n frequentItemChips.length > 0\n ? frequentItemChips\n : recentlyUsedChips.length > 0\n ? recentlyUsedChips\n : undefined\n }\n chipSectionLabel={frequentItemChips.length > 0 ? 'Frequently used' : undefined}\n actionSlot={\n <button\n type=\"button\"\n disabled={\n !query.trim() ||\n valueRef.current.some((p) => p.is_custom && p.name === query.trim())\n }\n onClick={handleAddCustom}\n className={cn(\n 'rounded-md px-5 py-2 text-sm font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-opacity cursor-pointer',\n (!query.trim() ||\n valueRef.current.some((p) => p.is_custom && p.name === query.trim())) &&\n 'opacity-40 cursor-not-allowed'\n )}\n >\n Save Procedure\n </button>\n }\n >\n <div className=\"space-y-2\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search for a procedure...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {/* Inline results — no absolute positioning to avoid overflow-clip */}\n {loading && (\n <p className=\"text-xs text-muted-foreground py-1\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"border border-border rounded-md overflow-hidden\">\n {results.map((r) => {\n const isAdding = addingId === r.id;\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleResultClick(r)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm transition-all duration-300 ease-out border-b border-border last:border-b-0 cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'bg-green-50 border-green-200'\n : 'hover:bg-gray-50'\n )}\n >\n <span className=\"truncate\">{r.name}</span>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems } from '../../react/FormProvider';\nimport { AddProcedureField } from './AddProcedureField';\nimport type { Procedure, ProcedureSearchResult } from './AddProcedureField';\n\nexport const AddProcedureWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { procedures: frequentProcedures } = useFrequentItems();\n\n const safeValue: Procedure[] = Array.isArray(value) ? (value as Procedure[]) : [];\n\n return (\n <AddProcedureField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<ProcedureSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as ProcedureSearchResult[] | undefined}\n frequentItems={frequentProcedures}\n />\n );\n};\n","import React, { useState } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type DifferentialDiagnosisItem = {\n category: string;\n condition: string;\n likelihood: string;\n severity: string;\n treatability: string;\n keyFeatures?: string[];\n nextSteps?: string[];\n};\n\nexport type DifferentialDiagnosisProps = {\n differentialDiagnosis: DifferentialDiagnosisItem[];\n className?: string;\n height?: string;\n};\n\n// ─── Helpers ────────────────────────────────────────────────────────────────────\n\nfunction getStatusBasedClass(status: string): string {\n switch ((status || '').toLowerCase()) {\n case 'high':\n return 'bg-red-100 text-red-500';\n case 'medium':\n return 'bg-yellow-100 text-yellow-600';\n case 'low':\n return 'bg-green-100 text-green-600';\n default:\n return 'bg-gray-200 text-gray-600';\n }\n}\n\n// ─── Diagnosis card (accordion) ─────────────────────────────────────────────────\n\nfunction DiagnosisCard({ item, defaultOpen = false }: { item: DifferentialDiagnosisItem; defaultOpen?: boolean }) {\n const [open, setOpen] = useState(defaultOpen);\n\n return (\n <div className=\"border border-gray-200 rounded-lg bg-[#F2F2F2] mb-2 last:mb-0 overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n className={cn(\n 'w-full text-left flex items-center gap-2 py-2 px-3 rounded-lg',\n 'cursor-pointer hover:bg-gray-200/60 transition-colors'\n )}\n >\n <ChevronRight\n className={cn('h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform', open && 'rotate-90')}\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs text-gray-500 font-medium\">\n {item.category.charAt(0).toUpperCase() + item.category.slice(1)}\n </div>\n <div className=\"text-sm text-black font-semibold mt-0.5 leading-tight\">{item.condition}</div>\n </div>\n </button>\n\n {open && (\n <div className=\"flex flex-col gap-2 px-3 pb-3 pt-0 pl-9\">\n <div className=\"flex justify-between text-xs font-semibold text-gray-500\">\n <span>LIKELIHOOD</span>\n <span>SEVERITY</span>\n <span>TREATABILITY</span>\n </div>\n <div className=\"flex justify-between gap-2\">\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.likelihood))}>\n {item.likelihood}\n </span>\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.severity))}>\n {item.severity}\n </span>\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.treatability))}>\n {item.treatability}\n </span>\n </div>\n\n {item.keyFeatures && item.keyFeatures.length > 0 && (\n <div className=\"pt-1\">\n <div className=\"text-xs font-semibold text-gray-500 mb-0.5 uppercase tracking-wider\">Key Features</div>\n <ul className=\"list-disc pl-4 text-xs text-gray-700 space-y-0.5\">\n {item.keyFeatures.map((feature, i) => (\n <li key={i}>{feature}</li>\n ))}\n </ul>\n </div>\n )}\n\n {item.nextSteps && item.nextSteps.length > 0 && (\n <div className=\"pt-1\">\n <div className=\"text-xs font-semibold text-gray-500 mb-0.5 uppercase tracking-wider\">Next Steps</div>\n <ul className=\"list-disc pl-4 text-xs text-gray-700 space-y-0.5\">\n {item.nextSteps.map((step, i) => (\n <li key={i}>{step}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\n/**\n * - Outer: rounded border [#D0D0D0], highlight label strip (#FEE8EC)\n * - Body: scrollable list of diagnosis cards with accordion expand/collapse\n */\nexport const DifferentialDiagnosis: React.FC<DifferentialDiagnosisProps> = ({\n differentialDiagnosis,\n className = '',\n height = '300px',\n}) => {\n const hasItems = Array.isArray(differentialDiagnosis) && differentialDiagnosis.length > 0;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]',\n className\n )}\n >\n {/* Header: highlight-label style */}\n <div className=\"rounded-t-md bg-[#FEE8EC] px-3 py-1.5 text-xs shrink-0 z-[1] text-slate-600 flex items-center font-semibold\">\n <span>Differential Diagnosis</span>\n </div>\n\n {/* Body: scrollable list */}\n <div\n className={cn(\n 'relative bg-white rounded-b-md border-t border-[#D0D0D0] overflow-y-auto p-3',\n 'focus-visible:outline-none'\n )}\n style={{ minHeight: height, maxHeight: height }}\n >\n {hasItems ? (\n differentialDiagnosis.map((item, idx) => (\n <DiagnosisCard key={idx} item={item} defaultOpen={idx === 0} />\n ))\n ) : (\n <p className=\"text-xs text-muted-foreground\">No differential diagnosis yet.</p>\n )}\n\n {/* Progressive blur-style overlay at bottom (30% height) */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-[30%] bg-gradient-to-t from-white via-white/80 to-transparent\" />\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { DifferentialDiagnosis } from './DifferentialDiagnosis';\nimport type { DifferentialDiagnosisItem } from './DifferentialDiagnosis';\n\nexport const DifferentialDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value } = useField(fieldId);\n\n const items: DifferentialDiagnosisItem[] = Array.isArray(value)\n ? (value as DifferentialDiagnosisItem[])\n : [];\n\n return <DifferentialDiagnosis differentialDiagnosis={items} />;\n};\n\n","import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = \"md\", ...props }, ref) => {\n const sizeClasses = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-3\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"animate-spin rounded-full border-primary border-t-transparent\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n);\nSpinner.displayName = \"Spinner\";\n\nexport { Spinner };\n","import React from 'react';\nimport { RefreshCw } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Spinner } from '../shadcn/spinner';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type VitalsData = {\n temperature?: number | null;\n height?: number | null;\n weight?: number | null;\n bmi?: number | null;\n blood_sugar?: number | null;\n notes?: string | null;\n circumference_of_head_in_cms?: number | null;\n circumference_of_waist_in_cms?: number | null;\n blood_pressure_systolic?: number | null;\n blood_pressure_diastolic?: number | null;\n heart_rate?: number | null;\n respiratory_rate?: number | null;\n oxygen_saturation?: number | null;\n recorded_at?: string | null;\n};\n\nexport type VitalsProps = {\n label?: string;\n data: VitalsData | null;\n loading?: boolean;\n error?: string | null;\n onRefresh?: () => void;\n className?: string;\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\ntype VitalItem = { label: string; value: string };\n\nfunction buildItems(data: VitalsData): VitalItem[] {\n const items: VitalItem[] = [];\n\n const hasBP =\n data.blood_pressure_systolic != null || data.blood_pressure_diastolic != null;\n if (hasBP) {\n const sys = data.blood_pressure_systolic ?? '–';\n const dia = data.blood_pressure_diastolic ?? '–';\n items.push({ label: 'BP', value: `${sys}/${dia}` });\n }\n\n if (data.heart_rate != null)\n items.push({ label: 'Heart Rate', value: `${data.heart_rate} bpm` });\n\n if (data.respiratory_rate != null)\n items.push({ label: 'Resp. Rate', value: `${data.respiratory_rate}/min` });\n\n if (data.oxygen_saturation != null)\n items.push({ label: 'SpO\\u2082', value: `${data.oxygen_saturation}%` });\n\n if (data.temperature != null)\n items.push({ label: 'Temp', value: `${data.temperature} \\u00b0F` });\n\n if (data.height != null)\n items.push({ label: 'Height', value: `${data.height} cm` });\n\n if (data.weight != null)\n items.push({ label: 'Weight', value: `${data.weight} kg` });\n\n if (data.bmi != null)\n items.push({ label: 'BMI', value: `${data.bmi}` });\n\n if (data.blood_sugar != null)\n items.push({ label: 'Blood Sugar', value: `${data.blood_sugar} mg/dL` });\n\n if (data.circumference_of_head_in_cms != null)\n items.push({ label: 'Head Circ.', value: `${data.circumference_of_head_in_cms} cm` });\n\n if (data.circumference_of_waist_in_cms != null)\n items.push({ label: 'Waist Circ.', value: `${data.circumference_of_waist_in_cms} cm` });\n\n return items;\n}\n\nfunction formatRecordedAt(iso: string | null | undefined): string {\n if (!iso) return '';\n try {\n return new Date(iso).toLocaleString(undefined, {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n } catch {\n return iso;\n }\n}\n\n// ─── Vital chip ───────────────────────────────────────────────────────────────\n\nfunction VitalChip({ label, value }: VitalItem) {\n return (\n <div className=\"flex flex-col gap-0 rounded-md min-w-fit px-1.5\">\n <span className=\"text-[10px] font-sm text-gray-500 uppercase tracking-wide leading-none\">\n {label}\n </span>\n <span className=\"text-xs text-gray-900 leading-tight\">{value}</span>\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const Vitals: React.FC<VitalsProps> = ({\n data,\n loading = false,\n error = null,\n onRefresh,\n className,\n}) => {\n const items = data ? buildItems(data) : [];\n const hasItems = items.length > 0;\n const recordedAt = data?.recorded_at ? formatRecordedAt(data.recorded_at) : null;\n const notes = data?.notes?.trim() || null;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden border border-[#D0D0D0] bg-white px-2 py-2',\n className\n )}\n >\n {loading && !hasItems ? (\n <div className=\"flex items-center gap-1.5 py-1\">\n <Spinner size=\"sm\" />\n <span className=\"text-xs text-muted-foreground\">Loading vitals…</span>\n </div>\n ) : error ? (\n <p className=\"text-xs text-red-500 py-1\">{error}</p>\n ) : hasItems ? (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-1\">\n <div className=\"flex flex-wrap gap-x-2 gap-y-0.5\">\n {items.map(item => (\n <VitalChip key={item.label} {...item} />\n ))}\n </div>\n <div className=\"flex flex-col items-end gap-0.5 shrink-0\">\n {recordedAt && (\n <span className=\"text-[10px] text-slate-500\">{recordedAt}</span>\n )}\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 cursor-pointer'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n </div>\n {notes && (\n <p className=\"text-xs text-gray-600 pt-1.5 mt-0.5\">\n {notes}\n </p>\n )}\n </div>\n ) : (\n <div className=\"flex items-center justify-between gap-2 py-1\">\n <p className=\"text-xs text-muted-foreground\">No vitals recorded.</p>\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 shrink-0'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Vitals, type VitalsData } from './Vitals';\n\nexport const VitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue, fieldDef } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n console.log('[VitalsWidget] fieldId:', fieldId, '| onFetch present:', !!handlers.onFetch, '| value:', value);\n\n const fetchVitals = useCallback(async () => {\n if (!handlers.onFetch) return;\n setLoading(true);\n setError(null);\n try {\n const data = await handlers.onFetch();\n console.log('[VitalsWidget] fetched data:', data);\n setValue(data);\n } catch {\n setError('Failed to load vitals. Please try again.');\n } finally {\n setLoading(false);\n }\n }, [handlers, setValue]);\n\n // Fetch once on mount if a handler is provided\n useEffect(() => {\n fetchVitals();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Vitals\n label={fieldDef?.label ?? 'Vitals'}\n data={(value as VitalsData | null) ?? null}\n loading={loading}\n error={error}\n onRefresh={handlers.onFetch ? fetchVitals : undefined}\n />\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\n\n/**\n * Hidden Vitals: same as a textarea (styling, behavior, form state) but visually\n * hidden in the UI. State is still saved in the background.\n */\nexport const HiddenVitalsWidget: 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 height = 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n\n const wrapperClass = cn(theme?.wrapperClassName ?? 'space-y-2', 'sr-only');\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n return (\n <div className={wrapperClass} aria-hidden=\"true\">\n {theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n )}\n <Textarea\n id={fieldId}\n value={value ?? ''}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={inputClass}\n {...(height != null && { height })}\n />\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\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 { ReferralFieldDef, ReferralItem } from '../../core/types';\n\nfunction normalizeOptions(\n response: { specializations?: string[] } | { label: string; value: any }[]\n): { label: string; value: string }[] {\n if (Array.isArray(response)) {\n return response.map((o) => ({ label: String(o.label), value: String(o.value) }));\n }\n if (response?.specializations?.length) {\n return response.specializations.map((s) => ({ label: s, value: s }));\n }\n return [];\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n const s = (item as ReferralItem).specialization;\n const u = (item as ReferralItem).is_urgent;\n return { specialization: String(s), is_urgent: Boolean(u) };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReferralWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [options, setOptions] = useState<{ label: string; value: string }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const selectedItems = normalizeValue(value);\n const availableOptions = options.filter(\n (opt) => !selectedItems.some((item) => item.specialization === opt.value)\n );\n\n const loadOptions = useCallback(async () => {\n if (handlers.onFetchOptions) {\n setLoading(true);\n try {\n const res = await handlers.onFetchOptions();\n setOptions(normalizeOptions(res));\n } finally {\n setLoading(false);\n }\n return;\n }\n const def = fieldDef as ReferralFieldDef | undefined;\n if (def?.options?.length) {\n setOptions(def.options.map((o) => ({ label: String(o.label), value: String(o.value) })));\n } else if (def?.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts.map((o) => ({ label: String(o.label), value: String(o.value) }))))\n .finally(() => setLoading(false));\n } else {\n setOptions([]);\n }\n }, [fieldDef, handlers]);\n\n useEffect(() => {\n if (!fieldDef) return;\n loadOptions();\n }, [fieldDef, loadOptions]);\n\n const handleAdd = useCallback(\n (specialization: string) => {\n const next = [...selectedItems, { specialization, is_urgent: false }];\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleRemove = useCallback(\n (specialization: string) => {\n const next = selectedItems.filter((item) => item.specialization !== specialization);\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleToggleUrgent = useCallback(\n (specialization: string) => {\n const next = selectedItems.map((item) =>\n item.specialization === specialization\n ? { ...item, is_urgent: !item.is_urgent }\n : item\n );\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>\n Referral to {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n\n {loading && <p className=\"text-xs text-muted-foreground\">Loading...</p>}\n\n {!loading && (\n <>\n <Select\n key={`referral-${selectedItems.map((i) => i.specialization).join(',')}`}\n disabled={disabled}\n value=\"\"\n onValueChange={(val) => {\n if (val) {\n handleAdd(val);\n }\n }}\n >\n <SelectTrigger id={fieldId} className={showError ? 'border-red-500' : ''}>\n <SelectValue placeholder=\"Select specializations...\" />\n </SelectTrigger>\n <SelectContent>\n {availableOptions.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n {availableOptions.length === 0 && (\n <div className=\"py-2 px-2 text-sm text-muted-foreground\">\n All specializations selected\n </div>\n )}\n </SelectContent>\n </Select>\n\n {selectedItems.length > 0 && (\n <div className=\"mt-1.5 flex h-12 flex-wrap content-start gap-1.5 overflow-y-auto pr-1\">\n {selectedItems.map((item) => {\n const isUrgent = item.is_urgent;\n const chipClass = isUrgent\n ? 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs max-w-full cursor-pointer hover:bg-red-200 transition-colors'\n : 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs max-w-full cursor-pointer hover:bg-blue-200 transition-colors';\n return (\n <div\n key={item.specialization}\n className={chipClass}\n onClick={(e) => {\n if (e.target instanceof HTMLElement && e.target.closest('button')) return;\n handleToggleUrgent(item.specialization);\n }}\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded mr-1\">\n U\n </span>\n )}\n <span className=\"truncate max-w-[120px]\">{item.specialization}</span>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(item.specialization);\n }}\n className=\"ml-0.5 text-blue-600 hover:text-blue-800 focus:outline-none flex-shrink-0 text-sm leading-none\"\n aria-label={`Remove ${item.specialization}`}\n >\n ×\n </button>\n </div>\n );\n })}\n </div>\n )}\n\n {selectedItems.length === 0 && (\n <p className=\"text-xs text-muted-foreground mt-1\">No specializations selected</p>\n )}\n\n {selectedItems.length > 0 && (\n <p className=\"text-xs text-muted-foreground mt-1.5\">\n Click a chip to mark as urgent\n </p>\n )}\n </>\n )}\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import * as React from \"react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n\n","import React, { useCallback, useState } from 'react';\nimport { format, parseISO, differenceInCalendarDays, addDays, addWeeks, addMonths } from 'date-fns';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { Card, CardContent } from '../shadcn/card';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { Calendar } from '../shadcn/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcn/popover';\nimport { Button } from '../shadcn/button';\nimport { cn } from '../../core/utils';\nimport type { FollowupValue } from '../../core/types';\n\nconst FOLLOWUP_TYPE_OPTIONS = [\n { value: 'no followup', label: 'No Follow-up' },\n { value: 'one time', label: 'One Time' },\n] as const;\n\nconst UNIT_OPTIONS = [\n { value: 'days', label: 'Days' },\n { value: 'weeks', label: 'Weeks' },\n { value: 'months', label: 'Months' },\n] as const;\n\n/** Convert duration (value + unit) to number of days from today. */\nfunction durationToDays(valueNum: number, unit: 'days' | 'weeks' | 'months'): number {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n let target: Date;\n if (unit === 'days') target = addDays(today, valueNum);\n else if (unit === 'weeks') target = addWeeks(today, valueNum);\n else target = addMonths(today, valueNum);\n return Math.max(0, differenceInCalendarDays(target, today));\n}\n\n/** Convert a future date to number of days from today. */\nfunction dateToDays(date: Date): number {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return Math.max(0, differenceInCalendarDays(d, today));\n}\n\n/** Days → date for display (today + days). */\nfunction daysToDate(days: number): Date {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return addDays(today, days);\n}\n\nfunction normalizeFollowup(value: unknown): false | FollowupValue {\n if (value === false || value === null || value === undefined) return false;\n if (typeof value !== 'object') return false;\n const o = value as Record<string, unknown>;\n if (o.followupType !== 'one time') return false;\n // New shape: { followupType, value, unit: 'days' }\n if (typeof o.value === 'string' && o.unit === 'days') {\n return { followupType: 'one time', value: o.value, unit: 'days' };\n }\n // Legacy: mode + date or mode + value/unit → convert to days\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n if (o.mode === 'date' && typeof o.date === 'string') {\n const d = parseLocalDate(o.date);\n if (d) {\n const days = dateToDays(d);\n return { followupType: 'one time', value: String(days), unit: 'days' };\n }\n }\n const val = o.value != null ? Number(String(o.value)) : 7;\n const u = (o.unit === 'weeks' || o.unit === 'months' ? o.unit : 'days') as 'days' | 'weeks' | 'months';\n const days = durationToDays(Number.isNaN(val) ? 7 : val, u);\n return { followupType: 'one time', value: String(days), unit: 'days' };\n}\n\nfunction getDefaultDate(): Date {\n const d = new Date();\n d.setDate(d.getDate() + 7);\n return d;\n}\n\nfunction parseLocalDate(dateString: string | null | undefined): Date | null {\n if (!dateString) return null;\n try {\n return parseISO(dateString);\n } catch {\n const parts = dateString.split('-');\n if (parts.length === 3) {\n const y = parseInt(parts[0], 10);\n const m = parseInt(parts[1], 10) - 1;\n const d = parseInt(parts[2], 10);\n if (!Number.isNaN(y) && !Number.isNaN(m) && !Number.isNaN(d)) {\n return new Date(y, m, d);\n }\n }\n return null;\n }\n}\n\nexport const FollowupWidget: React.FC<{ fieldId: string; showIcon?: boolean }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, visible } = useField(fieldId);\n const followup = normalizeFollowup(value);\n const [calendarOpen, setCalendarOpen] = useState(false);\n\n const currentFollowupType = followup ? followup.followupType : 'no followup';\n const hasFollowup = followup !== false;\n const [displayMode, setDisplayMode] = useState<'duration' | 'date'>('duration');\n const [displayUnit, setDisplayUnit] = useState<'days' | 'weeks' | 'months'>('days');\n const daysNum = hasFollowup ? parseInt(followup.value, 10) || 7 : 7;\n const currentDate = hasFollowup ? daysToDate(daysNum) : null;\n const followupMode = displayMode;\n const currentValue =\n hasFollowup && displayUnit === 'days'\n ? followup.value\n : hasFollowup\n ? String(\n displayUnit === 'weeks'\n ? Math.round(daysNum / 7) || 1\n : Math.round(daysNum / 30) || 1\n )\n : '7';\n const currentUnit = displayUnit;\n\n const handleFollowupTypeChange = useCallback(\n (newType: 'no followup' | 'one time') => {\n setTouched();\n if (newType === 'no followup') {\n setValue(false);\n setCalendarOpen(false);\n return;\n }\n setValue({\n followupType: 'one time',\n value: hasFollowup ? followup.value : '7',\n unit: 'days',\n });\n },\n [followup, hasFollowup, setValue, setTouched]\n );\n\n const handleModeChange = useCallback((newMode: 'duration' | 'date') => {\n setDisplayMode(newMode);\n if (newMode === 'date') setCalendarOpen(false);\n }, []);\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n setTouched();\n const num = parseInt(newValue, 10);\n const min = displayUnit === 'days' ? 0 : 1;\n const valid = (Number.isNaN(num) ? min : num) >= min || newValue === '';\n if (!valid && newValue !== '') {\n setValue({ followupType: 'one time', value: String(displayUnit === 'days' ? 0 : durationToDays(1, displayUnit)), unit: 'days' });\n return;\n }\n const days = durationToDays(Number.isNaN(num) ? (displayUnit === 'days' ? 0 : 1) : num, displayUnit);\n setValue({ followupType: 'one time', value: String(days), unit: 'days' });\n },\n [displayUnit, setValue, setTouched]\n );\n\n const handleUnitChange = useCallback((newUnit: 'days' | 'weeks' | 'months') => {\n setDisplayUnit(newUnit);\n }, []);\n\n const handleDateSelect = useCallback(\n (selected: Date | undefined) => {\n setTouched();\n setCalendarOpen(false);\n if (!selected) return;\n const days = dateToDays(selected);\n setValue({ followupType: 'one time', value: String(days), unit: 'days' });\n },\n [setValue, setTouched]\n );\n\n if (!visible || !fieldDef) return null;\n\n const minDate = new Date();\n minDate.setHours(0, 0, 0, 0);\n const selectedDate = currentDate || getDefaultDate();\n\n return (\n <Card className={cn(error && 'border-destructive')}>\n {/* <CardHeader className=\"flex flex-row items-center space-y-0\">\n {showIcon && (\n <img\n alt=\"Follow-up\"\n className=\"h-5 w-5\"\n src=\"/icons/star_png.png\"\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n />\n )}\n <Label className=\"text-base font-semibold\">{fieldDef.label}</Label>\n </CardHeader> */}\n <CardContent className=\"space-y-1 p-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center flex-shrink-0 gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground\">Follow-up</Label>\n <Select\n value={currentFollowupType}\n onValueChange={(v) => handleFollowupTypeChange(v as 'no followup' | 'one time')}\n disabled={disabled}\n >\n <SelectTrigger className=\"w-[140px] border-none bg-muted/50 text-xs py-1 focus:outline-none focus:ring-0 focus:ring-offset-0\">\n <SelectValue/>\n </SelectTrigger>\n <SelectContent>\n {FOLLOWUP_TYPE_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} className=\"text-xs\">\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {currentFollowupType !== 'no followup' && (\n <>\n <div className=\"flex items-center gap-4\">\n <Label className=\"text-xs font-medium text-muted-foreground\">Schedule by:</Label>\n <div className=\"flex items-center gap-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={`followup-mode-${fieldId}`}\n value=\"duration\"\n checked={followupMode === 'duration'}\n onChange={() => handleModeChange('duration')}\n className=\"h-4 w-4 text-primary focus:ring-primary\"\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">Duration</span>\n </label>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={`followup-mode-${fieldId}`}\n value=\"date\"\n checked={followupMode === 'date'}\n onChange={() => handleModeChange('date')}\n className=\"h-4 w-4 text-primary focus:ring-primary\"\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">Date</span>\n </label>\n </div>\n </div>\n\n {followupMode === 'duration' && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold text-muted-foreground\">In</span>\n <input\n type=\"number\"\n min={currentUnit === 'days' ? 0 : 1}\n value={currentValue}\n onChange={(e) => handleValueChange(e.target.value)}\n disabled={disabled}\n className=\"w-16 py-1.5 px-2 border border-input rounded-md text-center text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n placeholder=\"7\"\n />\n <Select\n value={currentUnit}\n onValueChange={(v) => handleUnitChange(v as 'days' | 'weeks' | 'months')}\n disabled={disabled}\n >\n <SelectTrigger className=\"w-[100px] h-8 text-xs\">\n <SelectValue className='text-xs'/>\n </SelectTrigger>\n <SelectContent>\n {UNIT_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} className=\"text-xs\">\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {followupMode === 'date' && (\n <Popover open={calendarOpen} onOpenChange={setCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"w-full justify-start text-left font-normal h-9\"\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">\n {hasFollowup && currentDate\n ? format(currentDate, 'MMM d, yyyy')\n : 'Select date'}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleDateSelect}\n disabled={(date) => date < minDate}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )}\n\n <p className=\"text-xs text-muted-foreground\">\n One-time appointment{' '}\n {followupMode === 'duration'\n ? `in ${currentValue} ${currentUnit}`\n : hasFollowup && currentDate\n ? `on ${format(currentDate, 'MMM d, yyyy')}`\n : 'date to be selected'}\n </p>\n </>\n )}\n\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </CardContent>\n </Card>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport nlp from 'compromise';\nimport type { ExtractedKeywordMatch, MatchedCondition } from '../core/types';\n\nexport interface SmartKeywordsResult {\n extractedNouns: string[];\n matchedConditions: ExtractedKeywordMatch[];\n isProcessing: boolean;\n error: string | null;\n}\n\n/**\n * Extracts noun phrases from `text` using compromise, deduplicates, then\n * searches each noun against a backend master table via `onSearch`. Returns\n * the flattened list of keyword-to-master-record matches.\n *\n * All NLP runs client-side; the backend only receives simple query strings.\n */\nexport function useSmartKeywords(\n text: string,\n onSearch: (query: string) => Promise<any[]>,\n debounceDelay = 1000,\n): SmartKeywordsResult {\n // High-level debug of hook usage on each render\n console.log('[useSmartKeywords] render', {\n textLength: text?.length ?? 0,\n hasOnSearch: typeof onSearch === 'function',\n debounceDelay,\n });\n\n const [extractedNouns, setExtractedNouns] = useState<string[]>([]);\n const [matchedConditions, setMatchedConditions] = useState<ExtractedKeywordMatch[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const abortRef = useRef(0);\n\n const processText = useCallback(\n async (input: string, runId: number) => {\n if (!input || input.trim().length === 0) {\n console.log('[useSmartKeywords] skip empty input', {\n runId,\n inputLength: input?.length ?? 0,\n });\n setExtractedNouns([]);\n setMatchedConditions([]);\n setIsProcessing(false);\n return;\n }\n\n console.log('[useSmartKeywords] processText start', {\n runId,\n inputLength: input.length,\n });\n\n setIsProcessing(true);\n setError(null);\n\n try {\n const nouns = extractNouns(input);\n const uniqueNouns = Array.from(new Set(nouns));\n\n console.log('[useSmartKeywords] extracted nouns', {\n runId,\n nouns,\n uniqueNouns,\n });\n\n if (runId !== abortRef.current) return;\n setExtractedNouns(uniqueNouns);\n\n if (uniqueNouns.length === 0) {\n console.log('[useSmartKeywords] no nouns, skipping search', { runId });\n setMatchedConditions([]);\n setIsProcessing(false);\n return;\n }\n\n const searchResults = await Promise.all(\n uniqueNouns.map(async (noun) => {\n // Normalise the keyword before hitting the backend:\n // - remove newlines\n // - strip leading bullet characters like \"- \"\n // - collapse internal whitespace to single spaces\n const normalised = noun\n .replace(/\\s+/g, ' ')\n .replace(/^[\\s-]+/, '')\n .trim();\n\n try {\n console.log('[useSmartKeywords] onSearch call', { runId, noun, normalised });\n const results: MatchedCondition[] = await onSearch(normalised);\n console.log('[useSmartKeywords] onSearch result', {\n runId,\n noun,\n normalised,\n count: Array.isArray(results) ? results.length : 0,\n });\n // Only keep the first result per noun\n const first = Array.isArray(results) && results.length > 0 ? [results[0]] : [];\n return { keyword: normalised, matches: first };\n } catch (err) {\n console.error('[useSmartKeywords] onSearch error', { runId, noun, err });\n return { keyword: normalised || noun, matches: [] as MatchedCondition[] };\n }\n }),\n );\n\n if (runId !== abortRef.current) return;\n\n const allMatches: ExtractedKeywordMatch[] = searchResults.flatMap(\n ({ keyword, matches }) =>\n matches.map((record) => ({\n extractedKeyword: keyword,\n matchedCondition: {\n id: record.id,\n name: record.name,\n created_at: record.created_at,\n updated_at: record.updated_at,\n },\n })),\n );\n\n console.log('[useSmartKeywords] allMatches computed', {\n runId,\n matchesCount: allMatches.length,\n });\n\n setMatchedConditions(allMatches);\n } catch (err) {\n if (runId !== abortRef.current) return;\n console.error('[useSmartKeywords] processText error', { runId, err });\n setError(err instanceof Error ? err.message : 'Keyword extraction failed');\n } finally {\n if (runId === abortRef.current) {\n console.log('[useSmartKeywords] processText end', { runId });\n setIsProcessing(false);\n }\n }\n },\n [onSearch],\n );\n\n useEffect(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n\n const runId = ++abortRef.current;\n console.log('[useSmartKeywords] schedule debounce', {\n runId,\n debounceDelay,\n textLength: text?.length ?? 0,\n });\n\n timerRef.current = setTimeout(() => {\n console.log('[useSmartKeywords] debounce fired', { runId });\n processText(text, runId);\n }, debounceDelay);\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [text, debounceDelay, processText]);\n\n return { extractedNouns, matchedConditions, isProcessing, error };\n}\n\nfunction extractNouns(text: string): string[] {\n const doc = nlp(text);\n const rawNouns: string[] = doc.nouns().out('array');\n\n const cleaned = rawNouns\n .map((n) => n.replace(/[^\\w\\s-]/g, '').trim().toLowerCase())\n .filter((n) => n.length > 2);\n\n console.log('[useSmartKeywords] extractNouns', {\n inputLength: text?.length ?? 0,\n rawNouns,\n cleaned,\n });\n\n return cleaned;\n}\n","import React, { useCallback, useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { useSmartKeywords } from '../../react/useSmartKeywords';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { SmartTextareaFieldDef, SmartTextareaValue, ExtractedKeywordMatch } from '../../core/types';\nimport { Loader2 } from 'lucide-react';\n\nexport const SmartTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n\n const def = fieldDef as SmartTextareaFieldDef | undefined;\n const structured = value as SmartTextareaValue | null | undefined;\n const textValue = structured?.text ?? '';\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onSearch = useCallback(\n (query: string) => handler.onSearch(query),\n [handler],\n );\n\n const { matchedConditions, isProcessing } = useSmartKeywords(\n textValue,\n onSearch,\n def?.debounceDelay ?? 1000,\n );\n\n const currentKeywords = structured?.extractedKeywords ?? [];\n\n const nextKeywords = useMemo(() => {\n if (matchedConditions.length === 0 && currentKeywords.length === 0) return currentKeywords;\n if (\n matchedConditions.length === currentKeywords.length &&\n matchedConditions.every(\n (m, i) =>\n m.matchedCondition.id === currentKeywords[i]?.matchedCondition.id &&\n m.extractedKeyword === currentKeywords[i]?.extractedKeyword,\n )\n ) {\n return currentKeywords;\n }\n return matchedConditions;\n }, [matchedConditions, currentKeywords]);\n\n const writeValue = useCallback(\n (text: string, keywords: ExtractedKeywordMatch[]) => {\n const next: SmartTextareaValue = { text, extractedKeywords: keywords };\n setValue(next);\n },\n [setValue],\n );\n\n React.useEffect(() => {\n if (nextKeywords !== currentKeywords) {\n writeValue(textValue, nextKeywords);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nextKeywords]);\n\n const handleTextChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n writeValue(e.target.value, currentKeywords);\n },\n [writeValue, currentKeywords],\n );\n\n if (!def) return null;\n\n const height = def.height;\n const theme = getThemeConfig('textarea', def.theme);\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {def.label} {def.required && <span className=\"text-red-500\">*</span>}\n {isProcessing && (\n <Loader2 className=\"inline-block ml-1.5 h-3 w-3 animate-spin text-muted-foreground\" />\n )}\n </>\n );\n\n return (\n <div className={wrapperClass}>\n {theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n )}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={handleTextChange}\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={inputClass}\n {...(height != null ? { height } : {})}\n />\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { DiagnosisTextareaFieldDef } from '../../core/types';\n\ntype DiagnosisGradeGroup = {\n condition: string;\n grades: string[];\n};\n\ntype DiagnosisGradeSelection = {\n condition: string;\n grade: string;\n};\n\ntype DiagnosisTextareaValue =\n | string\n | {\n text?: unknown;\n selectedGrade?: unknown; // legacy single-selection\n selectedGradesByCondition?: unknown; // new multi-condition single-select\n }\n | null\n | undefined;\n\ntype DiagnosisGradesArrayResponse = {\n diagnosisGrades?: Array<{\n condition?: unknown;\n grades?: unknown;\n }>;\n};\n\ntype DiagnosisMapResponse = {\n field?: unknown;\n value?: unknown;\n};\n\nfunction normalizeDiagnosisGrades(payload: unknown): DiagnosisGradeGroup[] {\n const result: DiagnosisGradeGroup[] = [];\n\n const pushGroup = (conditionRaw: unknown, gradesRaw: unknown) => {\n const condition = typeof conditionRaw === 'string' ? conditionRaw.trim() : '';\n if (!condition) return;\n if (!Array.isArray(gradesRaw)) return;\n\n const grades = Array.from(\n new Set(\n gradesRaw\n .map((grade) => (typeof grade === 'string' ? grade.trim() : ''))\n .filter(Boolean),\n ),\n );\n\n if (grades.length === 0) return;\n result.push({ condition, grades });\n };\n\n const asArrayResponse = payload as DiagnosisGradesArrayResponse;\n if (Array.isArray(asArrayResponse?.diagnosisGrades)) {\n asArrayResponse.diagnosisGrades.forEach((item) => {\n pushGroup(item?.condition, item?.grades);\n });\n return result;\n }\n\n const asMapResponse = payload as DiagnosisMapResponse;\n const mapLike =\n asMapResponse?.field === 'diagnosisgrade' && asMapResponse?.value && typeof asMapResponse.value === 'object'\n ? (asMapResponse.value as Record<string, unknown>)\n : null;\n\n if (mapLike) {\n Object.entries(mapLike).forEach(([condition, grades]) => {\n pushGroup(condition, grades);\n });\n }\n\n return result;\n}\n\nexport const DiagnosisTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n const def = fieldDef as DiagnosisTextareaFieldDef | undefined;\n\n const [gradeGroups, setGradeGroups] = React.useState<DiagnosisGradeGroup[]>([]);\n const [isLoadingGrades, setIsLoadingGrades] = React.useState(false);\n\n const normalized = React.useMemo(() => {\n const raw = value as DiagnosisTextareaValue;\n if (typeof raw === 'string') {\n return { text: raw, selectedGradesByCondition: {} as Record<string, string> };\n }\n if (!raw || typeof raw !== 'object') {\n return { text: '', selectedGradesByCondition: {} as Record<string, string> };\n }\n\n const text = typeof (raw as any).text === 'string' ? ((raw as any).text as string) : '';\n\n // Prefer new map shape.\n const mapRaw = (raw as any).selectedGradesByCondition;\n let selectedGradesByCondition: Record<string, string> = {};\n if (mapRaw && typeof mapRaw === 'object' && !Array.isArray(mapRaw)) {\n const entries = Object.entries(mapRaw as Record<string, unknown>);\n for (const [condition, gradeRaw] of entries) {\n if (typeof condition !== 'string') continue;\n if (typeof gradeRaw === 'string' && gradeRaw.trim()) {\n selectedGradesByCondition[condition] = gradeRaw;\n }\n }\n }\n\n // Backward-compat: if legacy single selection exists and no map entry yet, seed it.\n const sg = (raw as any).selectedGrade;\n if (\n sg &&\n typeof sg === 'object' &&\n typeof (sg as any).condition === 'string' &&\n typeof (sg as any).grade === 'string'\n ) {\n const condition = (sg as any).condition.trim();\n const grade = (sg as any).grade.trim();\n if (condition && grade && !selectedGradesByCondition[condition]) {\n selectedGradesByCondition = { ...selectedGradesByCondition, [condition]: grade };\n }\n }\n\n return { text, selectedGradesByCondition };\n }, [value]);\n\n const textValue = normalized.text;\n const showError = !!error && (touched || state.submitAttempted);\n\n React.useEffect(() => {\n const query = textValue.trim();\n const fetchGrades = handler.onFetchDiagnosisGrades;\n const debounceMs = def?.debounceDelay ?? 1000;\n\n if (!query || !fetchGrades) {\n setGradeGroups([]);\n setIsLoadingGrades(false);\n return;\n }\n\n let isActive = true;\n const timer = window.setTimeout(async () => {\n setIsLoadingGrades(true);\n try {\n const response = await fetchGrades(query);\n if (!isActive) return;\n setGradeGroups(normalizeDiagnosisGrades(response));\n } catch {\n if (!isActive) return;\n setGradeGroups([]);\n } finally {\n if (isActive) setIsLoadingGrades(false);\n }\n }, debounceMs);\n\n return () => {\n isActive = false;\n window.clearTimeout(timer);\n };\n }, [textValue, handler.onFetchDiagnosisGrades, def?.debounceDelay]);\n\n if (!def) return null;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const toggleSelectedGrade = (condition: string, grade: string) => {\n if (disabled) return;\n const current = normalized.selectedGradesByCondition[condition];\n const nextForCondition = current === grade ? '' : grade;\n const nextMap: Record<string, string> = { ...normalized.selectedGradesByCondition };\n if (!nextForCondition) {\n delete nextMap[condition];\n } else {\n nextMap[condition] = nextForCondition;\n }\n setValue({ text: normalized.text, selectedGradesByCondition: nextMap });\n setTouched();\n };\n\n const labelContent = (\n <>\n {def.label} {def.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n return (\n <div className={wrapperClass}>\n {theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n )}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) =>\n setValue({ text: e.target.value, selectedGradesByCondition: normalized.selectedGradesByCondition })\n }\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={inputClass}\n {...(def.height != null ? { height: def.height } : {})}\n />\n\n {isLoadingGrades && (\n <p className=\"mt-2 text-xs text-muted-foreground\">Checking diagnosis grades...</p>\n )}\n\n {!isLoadingGrades && gradeGroups.length > 0 && (\n <div\n className=\"mt-2 space-y-3 rounded-lg border border-border bg-muted/30 p-3\"\n role=\"group\"\n aria-label=\"Diagnosis grade options\"\n >\n {gradeGroups.map((group) => (\n <div key={group.condition} className=\"flex flex-col gap-1.5\">\n <span className=\"text-xs font-medium leading-none text-muted-foreground\">\n {group.condition}:\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.grades.map((grade) => (\n <button\n key={`${group.condition}-${grade}`}\n type=\"button\"\n onClick={() => toggleSelectedGrade(group.condition, grade)}\n disabled={disabled}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n normalized.selectedGradesByCondition[group.condition] === grade\n ? 'border-primary bg-primary/15 text-primary shadow-sm'\n : 'border-border/80 bg-background text-foreground hover:bg-muted/80',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n {grade}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SwitchProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ className, checked, onCheckedChange, disabled, ...props }, ref) => {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n disabled={disabled}\n ref={ref}\n onClick={() => {\n if (!disabled && onCheckedChange) {\n onCheckedChange(!checked);\n }\n }}\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n >\n <span\n data-state={checked ? \"checked\" : \"unchecked\"}\n className=\"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform\"\n style={{ transform: checked ? 'translateX(1rem)' : 'translateX(0)' }}\n />\n </button>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { Card, CardContent, CardHeader, CardTitle } from '../shadcn/card';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype BasedOn = 'lmp' | 'usg';\ntype OutcomeType = '' | 'delivery' | 'cesarean' | 'abortion' | 'miscarriage' | 'stillbirth';\n\ntype GestationalAge = {\n weeks: number;\n days: number;\n totalDays: number;\n basedOn: BasedOn;\n};\n\ntype Outcome = {\n type: OutcomeType;\n date: string; // yyyy-mm-dd (or '' while incomplete)\n notes: string;\n is_final: boolean;\n};\n\ntype StoredObgHistory = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string | null; // yyyy-mm-dd\n is_pregnant: boolean;\n edd: { lmp: string | null; usg: string | null; primary: BasedOn } | null;\n gestationalAge: GestationalAge | null;\n trimester: 1 | 2 | 3 | null;\n complications: string | null;\n outcome: Outcome | null;\n};\n\ntype Draft = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string; // '' or yyyy-mm-dd\n is_pregnant: boolean;\n eddUSG: string; // '' or yyyy-mm-dd\n primaryEDD: BasedOn;\n complications: string;\n outcome: Outcome | null;\n};\n\nconst DEFAULT_DRAFT: Draft = {\n gpal: { G: 0, P: 0, A: 0, L: 0 },\n lmp: '',\n is_pregnant: false,\n eddUSG: '',\n primaryEDD: 'lmp',\n complications: '',\n outcome: null,\n};\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction formatDdMmYyyy(iso: string): string {\n // expects yyyy-mm-dd\n const [y, m, d] = iso.split('-');\n if (!y || !m || !d) return iso;\n return `${pad2(Number(d))}/${pad2(Number(m))}/${y}`;\n}\n\nfunction todayIso(): string {\n const d = new Date();\n const y = d.getFullYear();\n const m = pad2(d.getMonth() + 1);\n const day = pad2(d.getDate());\n return `${y}-${m}-${day}`;\n}\n\nfunction isValidIsoDate(val: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(val)) return false;\n const dt = new Date(`${val}T00:00:00.000Z`);\n return !Number.isNaN(dt.getTime());\n}\n\nfunction safeJsonParse(val: string): any | null {\n try {\n return JSON.parse(val);\n } catch {\n return null;\n }\n}\n\nfunction clampInt(val: number, min: number, max: number): number {\n if (!Number.isFinite(val)) return min;\n return Math.max(min, Math.min(max, Math.trunc(val)));\n}\n\nfunction parseLegacyString(input: string): Partial<Draft> {\n const result: Partial<Draft> = {};\n const gpalMatch = input.match(/G(\\d+)\\s*P(\\d+)\\s*A(\\d+)\\s*L(\\d+)/i);\n if (gpalMatch) {\n const [, g, p, a, l] = gpalMatch;\n result.gpal = {\n G: clampInt(Number(g), 0, 20),\n P: clampInt(Number(p), 0, 20),\n A: clampInt(Number(a), 0, 20),\n L: clampInt(Number(l), 0, 20),\n };\n }\n\n const lmpMatch = input.match(/LMP:\\s*([^\\n]+)/i);\n if (lmpMatch?.[1]) result.lmp = lmpMatch[1].trim();\n\n const eddUsgMatch = input.match(/EDD\\s*\\(USG\\):\\s*([^\\n]+)/i);\n if (eddUsgMatch?.[1]) result.eddUSG = eddUsgMatch[1].trim();\n\n const primaryMatch = input.match(/Primary\\s*EDD:\\s*(lmp|usg)/i);\n if (primaryMatch?.[1]) result.primaryEDD = primaryMatch[1].toLowerCase() as BasedOn;\n\n const compMatch = input.match(/Complications:\\s*([^\\n]+)/i);\n if (compMatch?.[1]) result.complications = compMatch[1].trim();\n\n return result;\n}\n\nfunction normalizeToDraft(value: unknown): { draft: Draft; isNewEntry: boolean } {\n if (!value) return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n\n let parsed: any = value;\n if (typeof value === 'string') {\n const json = safeJsonParse(value);\n parsed = json ?? value;\n }\n\n // New JSON format: has gpal object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed) && 'gpal' in parsed && parsed.gpal && typeof parsed.gpal === 'object') {\n const gpal = parsed.gpal ?? {};\n const edd = parsed.edd ?? null;\n const eddUSG = (edd && typeof edd === 'object' ? edd.usg : undefined) ?? parsed.eddUSG ?? '';\n const primaryEDD = (edd && typeof edd === 'object' ? edd.primary : undefined) ?? parsed.primaryEDD ?? 'lmp';\n const lmp = parsed.lmp ?? '';\n const complications = parsed.complications ?? '';\n const outcome = parsed.outcome ?? null;\n const is_pregnant = !!parsed.is_pregnant;\n return {\n isNewEntry: false,\n draft: {\n gpal: {\n G: clampInt(Number(gpal.G ?? 0), 0, 20),\n P: clampInt(Number(gpal.P ?? 0), 0, 20),\n A: clampInt(Number(gpal.A ?? 0), 0, 20),\n L: clampInt(Number(gpal.L ?? 0), 0, 20),\n },\n lmp: typeof lmp === 'string' ? lmp : '',\n is_pregnant,\n eddUSG: typeof eddUSG === 'string' ? eddUSG : '',\n primaryEDD: primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof complications === 'string' ? complications : '',\n outcome: outcome && typeof outcome === 'object'\n ? {\n type: (outcome.type ?? '') as OutcomeType,\n date: typeof outcome.date === 'string' ? outcome.date : '',\n notes: typeof outcome.notes === 'string' ? outcome.notes : '',\n is_final: !!outcome.is_final,\n }\n : null,\n },\n };\n }\n\n // Legacy flat JSON object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const gpalFromFlat = {\n G: clampInt(Number((parsed as any).G ?? (parsed as any).g ?? 0), 0, 20),\n P: clampInt(Number((parsed as any).P ?? (parsed as any).p ?? 0), 0, 20),\n A: clampInt(Number((parsed as any).A ?? (parsed as any).a ?? 0), 0, 20),\n L: clampInt(Number((parsed as any).L ?? (parsed as any).l ?? 0), 0, 20),\n };\n return {\n isNewEntry: false,\n draft: {\n ...DEFAULT_DRAFT,\n gpal: gpalFromFlat,\n lmp: typeof (parsed as any).lmp === 'string' ? (parsed as any).lmp : '',\n eddUSG: typeof (parsed as any).eddUSG === 'string' ? (parsed as any).eddUSG : '',\n primaryEDD: (parsed as any).primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof (parsed as any).complications === 'string' ? (parsed as any).complications : '',\n outcome: (parsed as any).outcome && typeof (parsed as any).outcome === 'object'\n ? {\n type: ((parsed as any).outcome.type ?? '') as OutcomeType,\n date: typeof (parsed as any).outcome.date === 'string' ? (parsed as any).outcome.date : '',\n notes: typeof (parsed as any).outcome.notes === 'string' ? (parsed as any).outcome.notes : '',\n is_final: !!(parsed as any).outcome.is_final,\n }\n : null,\n is_pregnant: !!(parsed as any).is_pregnant,\n },\n };\n }\n\n // Legacy human-readable string\n if (typeof parsed === 'string') {\n const legacy = parseLegacyString(parsed);\n return { isNewEntry: false, draft: { ...DEFAULT_DRAFT, ...legacy } as Draft };\n }\n\n return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n}\n\nfunction computeEddFromLmp(lmpIso: string): string | null {\n if (!isValidIsoDate(lmpIso)) return null;\n const base = new Date(`${lmpIso}T00:00:00.000Z`);\n base.setUTCDate(base.getUTCDate() + 280);\n const y = base.getUTCFullYear();\n const m = pad2(base.getUTCMonth() + 1);\n const d = pad2(base.getUTCDate());\n return `${y}-${m}-${d}`;\n}\n\nfunction diffDaysUtc(fromIso: string, toIso: string): number | null {\n if (!isValidIsoDate(fromIso) || !isValidIsoDate(toIso)) return null;\n const a = new Date(`${fromIso}T00:00:00.000Z`).getTime();\n const b = new Date(`${toIso}T00:00:00.000Z`).getTime();\n return Math.floor((b - a) / (1000 * 60 * 60 * 24));\n}\n\nfunction computeGestationalAgeFromLmp(lmpIso: string, today: string): GestationalAge | null {\n const days = diffDaysUtc(lmpIso, today);\n if (days == null || days < 0) return null;\n const weeks = Math.floor(days / 7);\n const rem = days % 7;\n return { weeks, days: rem, totalDays: days, basedOn: 'lmp' };\n}\n\nfunction computeGestationalAgeFromUsgEdd(eddUsgIso: string, today: string): GestationalAge | null {\n const daysToEdd = diffDaysUtc(today, eddUsgIso);\n if (daysToEdd == null) return null;\n const daysElapsed = 280 - daysToEdd;\n if (daysElapsed < 0) return null;\n const weeks = Math.floor(daysElapsed / 7);\n const rem = daysElapsed % 7;\n return { weeks, days: rem, totalDays: daysElapsed, basedOn: 'usg' };\n}\n\nfunction computeTrimester(ga: GestationalAge | null): 1 | 2 | 3 | null {\n if (!ga) return null;\n if (ga.weeks < 13) return 1;\n if (ga.weeks < 27) return 2;\n if (ga.weeks < 42) return 3;\n return null;\n}\n\nfunction buildStored(draft: Draft, today: string): StoredObgHistory {\n const lmpIso = isValidIsoDate(draft.lmp) ? draft.lmp : null;\n const eddUsgIso = isValidIsoDate(draft.eddUSG) ? draft.eddUSG : null;\n\n if (!draft.is_pregnant) {\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: false,\n edd: null,\n gestationalAge: null,\n trimester: null,\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n };\n }\n\n const eddFromLmp = lmpIso ? computeEddFromLmp(lmpIso) : null;\n const gaFromLmp = lmpIso ? computeGestationalAgeFromLmp(lmpIso, today) : null;\n const gaFromUsg = eddUsgIso ? computeGestationalAgeFromUsgEdd(eddUsgIso, today) : null;\n\n const primary = draft.primaryEDD;\n const gaPrimary = primary === 'usg' && gaFromUsg ? gaFromUsg : gaFromLmp ? gaFromLmp : null;\n\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: true,\n edd: { lmp: eddFromLmp, usg: eddUsgIso, primary },\n gestationalAge: gaPrimary,\n trimester: computeTrimester(gaPrimary),\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n };\n}\n\nfunction stripGpalSuffix(label: string): string {\n return label.replace(/\\s*\\(G-P-A-L\\)\\s*$/i, '').trim();\n}\n\nfunction useDebouncedCommit(commit: (next: Draft) => void, delayMs: number) {\n const timeoutRef = useRef<number | null>(null);\n const latestCommit = useRef(commit);\n latestCommit.current = commit;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return (next: Draft) => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => latestCommit.current(next), delayMs);\n };\n}\n\nexport const ObstetricHistoryWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const [{ draft, isNewEntry }, setDraftState] = useState(() => normalizeToDraft(value));\n const [lmpError, setLmpError] = useState<string | null>(null);\n const [primaryEddError, setPrimaryEddError] = useState<string | null>(null);\n const [activeGpalKey, setActiveGpalKey] = useState<keyof Draft['gpal'] | null>(null);\n\n const refs = {\n G: useRef<HTMLInputElement | null>(null),\n P: useRef<HTMLInputElement | null>(null),\n A: useRef<HTMLInputElement | null>(null),\n L: useRef<HTMLInputElement | null>(null),\n } as const;\n\n const today = useMemo(() => todayIso(), []);\n\n // Keep local draft in sync with external updates (AI, reset, initial load).\n useEffect(() => {\n const next = normalizeToDraft(value);\n const currStr = JSON.stringify(buildStored(draft, today));\n const nextStr = JSON.stringify(buildStored(next.draft, today));\n if (currStr !== nextStr) setDraftState(next);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const commitImmediate = (nextDraft: Draft) => {\n const stored = buildStored(nextDraft, today);\n setValue(JSON.stringify(stored));\n };\n const commitDebounced = useDebouncedCommit(commitImmediate, 500);\n\n const storedComputed = useMemo(() => buildStored(draft, today), [draft, today]);\n\n const rightPanelEnabled = draft.is_pregnant && (!!storedComputed.lmp || !!(storedComputed.edd?.usg));\n const headerLabel = fieldDef?.label ? stripGpalSuffix(fieldDef.label) : 'Obstetric History';\n\n const setDraft = (updater: (prev: Draft) => Draft, persist: 'debounce' | 'immediate') => {\n setDraftState((prev) => {\n const nextDraft = updater(prev.draft);\n const nextState = { ...prev, draft: nextDraft };\n if (persist === 'immediate') commitImmediate(nextDraft);\n else commitDebounced(nextDraft);\n return nextState;\n });\n };\n\n const sanitizeGpalInput = (raw: string): number => {\n const digits = raw.replace(/[^\\d]/g, '').slice(0, 2);\n if (!digits) return 0;\n return clampInt(Number(digits), 0, 20);\n };\n\n const handleGpalChange = (key: keyof Draft['gpal'], raw: string) => {\n const prevWasEmpty = draft.gpal[key] === 0 && (activeGpalKey === key);\n const val = sanitizeGpalInput(raw);\n setDraft((prev) => ({ ...prev, gpal: { ...prev.gpal, [key]: val } }), 'debounce');\n\n const digitsOnly = raw.replace(/[^\\d]/g, '');\n const shouldAutoTab = digitsOnly.length === 1 && (prevWasEmpty || String(draft.gpal[key]).length >= 1);\n if (shouldAutoTab) {\n const order: (keyof Draft['gpal'])[] = ['G', 'P', 'A', 'L'];\n const idx = order.indexOf(key);\n const nextKey = order[idx + 1];\n if (nextKey) refs[nextKey].current?.focus();\n }\n };\n\n const handleLmpChange = (nextIso: string) => {\n setPrimaryEddError(null);\n if (nextIso && nextIso > today) {\n setLmpError('LMP cannot be in the future');\n return;\n }\n setLmpError(null);\n setDraft((prev) => ({ ...prev, lmp: nextIso }), 'debounce');\n };\n\n const handlePregStatus = (isPregnant: boolean) => {\n setLmpError(null);\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, is_pregnant: isPregnant }), 'immediate');\n };\n\n const handleEddUsgChange = (nextIso: string) => {\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, eddUSG: nextIso }), 'debounce');\n };\n\n const handlePrimaryEdd = (next: BasedOn) => {\n if (next === 'usg' && !isValidIsoDate(draft.eddUSG)) {\n setPrimaryEddError('Please enter EDD from USG first');\n return;\n }\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, primaryEDD: next }), 'immediate');\n };\n\n const ensureOutcome = () => {\n if (draft.outcome) return;\n setDraft(\n (prev) => ({\n ...prev,\n outcome: { type: '', date: '', notes: '', is_final: false },\n }),\n 'immediate'\n );\n };\n\n const clearOutcome = () => {\n setDraft((prev) => ({ ...prev, outcome: null }), 'immediate');\n };\n\n const updateOutcomeImmediate = (updater: (o: Outcome) => Outcome) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: updater(o) };\n },\n 'immediate'\n );\n };\n\n const updateOutcomeNotesDebounced = (notes: string) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: { ...o, notes } };\n },\n 'debounce'\n );\n };\n\n return (\n <Card className={cn('w-full', disabled && 'opacity-70 pointer-events-none')}>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base font-semibold\">{headerLabel}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isNewEntry && (\n <div className=\"rounded-md border border-blue-200 bg-blue-50 px-3 py-2 text-xs text-blue-900\">\n No previous maternity episode found. Please fill obstetric details to start tracking.\n </div>\n )}\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 items-start\">\n {/* Left panel */}\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border bg-white p-4\">\n <div className=\"text-xs font-medium text-muted-foreground mb-2\">G-P-A-L</div>\n <div className=\"grid grid-cols-4 gap-3\">\n {(['G', 'P', 'A', 'L'] as const).map((k) => (\n <div key={k} className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-gpal-${k}`} className=\"text-[11px] text-muted-foreground\">\n {k}\n </Label>\n <Input\n ref={refs[k]}\n id={`${fieldId}-gpal-${k}`}\n inputMode=\"numeric\"\n pattern=\"\\d*\"\n maxLength={2}\n value={String(draft.gpal[k] ?? 0)}\n onFocus={() => {\n setActiveGpalKey(k);\n const el = refs[k].current;\n if (el) el.select();\n }}\n onChange={(e) => handleGpalChange(k, e.target.value)}\n onKeyDown={(e) => {\n const allowed = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Home', 'End'];\n if (allowed.includes(e.key)) return;\n if (/^\\d$/.test(e.key)) return;\n e.preventDefault();\n }}\n className=\"text-center text-base\"\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-lmp`} className={cn('text-sm', lmpError && 'text-red-600')}>\n Last Menstrual Period (LMP)\n </Label>\n <Input\n id={`${fieldId}-lmp`}\n type=\"date\"\n max={today}\n value={draft.lmp}\n onChange={(e) => handleLmpChange(e.target.value)}\n className={cn(lmpError && 'border-red-500')}\n />\n {lmpError && <p className=\"text-xs text-red-600\">{lmpError}</p>}\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <div className=\"text-sm font-medium\">Pregnancy Status</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePregStatus(false)}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-xs',\n !draft.is_pregnant ? 'bg-green-600 text-white border-green-600' : 'bg-white'\n )}\n >\n Not Pregnant\n </button>\n <button\n type=\"button\"\n onClick={() => handlePregStatus(true)}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-xs',\n draft.is_pregnant ? 'bg-green-600 text-white border-green-600' : 'bg-white'\n )}\n >\n Pregnant\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-complications`} className=\"text-sm\">\n Previous Pregnancy Complications\n </Label>\n <Textarea\n id={`${fieldId}-complications`}\n placeholder=\"e.g. Pre-eclampsia, Gestational diabetes, C-section, etc.\"\n value={draft.complications}\n onChange={(e) => setDraft((prev) => ({ ...prev, complications: e.target.value }), 'debounce')}\n className=\"min-h-[140px]\"\n />\n </div>\n </div>\n\n {/* Right panel */}\n <div className=\"rounded-lg border bg-white p-4 min-h-[260px]\">\n {!draft.is_pregnant && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n Only for \"Pregnant Women\" and enter LMP to calculate gestational age and EDD\n </div>\n )}\n\n {draft.is_pregnant && !rightPanelEnabled && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n Enter LMP and/or EDD (USG) to enable gestational age and EDD calculations.\n </div>\n )}\n\n {draft.is_pregnant && rightPanelEnabled && (\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-blue-700\">Expected Delivery Date (EDD)</div>\n {storedComputed.gestationalAge?.basedOn && (\n <span className=\"rounded-full bg-blue-100 px-2 py-1 text-[11px] text-blue-700\">\n Based on {storedComputed.gestationalAge.basedOn.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"mt-3\">\n <div className=\"text-xs text-muted-foreground\">Gestational Age:</div>\n <div className=\"text-lg font-semibold\">\n {storedComputed.gestationalAge\n ? `${storedComputed.gestationalAge.weeks} weeks ${storedComputed.gestationalAge.days} days`\n : '—'}\n </div>\n <div className=\"text-xs text-muted-foreground mt-1\">\n {storedComputed.trimester ? `Trimester ${storedComputed.trimester}` : 'Trimester —'}\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-xs text-muted-foreground\">EDD (from LMP):</div>\n <div className=\"rounded-md border bg-muted/20 px-3 py-2 text-sm font-semibold\">\n {storedComputed.edd?.lmp ? formatDdMmYyyy(storedComputed.edd.lmp) : '—'}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-edd-usg`} className=\"text-sm\">\n EDD (from USG):\n </Label>\n <Input\n id={`${fieldId}-edd-usg`}\n type=\"date\"\n value={draft.eddUSG}\n onChange={(e) => handleEddUsgChange(e.target.value)}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium\">Primary EDD:</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('lmp')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'lmp' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n LMP\n </button>\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('usg')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'usg' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n USG\n </button>\n </div>\n {primaryEddError && <p className=\"text-xs text-red-600\">{primaryEddError}</p>}\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Outcome section */}\n <div className=\"rounded-lg border bg-yellow-50/60 p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold\">\n Pregnancy Outcome (Optional - To Close Episode)\n </div>\n {draft.outcome && (\n <button type=\"button\" className=\"text-sm text-red-600 hover:underline\" onClick={clearOutcome}>\n Clear\n </button>\n )}\n </div>\n\n {!draft.outcome && (\n <button\n type=\"button\"\n onClick={ensureOutcome}\n className=\"mt-3 w-full rounded-md border border-yellow-300 bg-yellow-100 px-3 py-2 text-sm font-medium\"\n >\n + Add Pregnancy Outcome\n </button>\n )}\n\n {draft.outcome && (\n <div className=\"mt-4 space-y-3\">\n <div className=\"space-y-2\">\n <Label className=\"text-sm\">\n Outcome Type <span className=\"text-red-500\">*</span>\n </Label>\n <select\n className=\"w-full rounded-md border px-3 py-2 text-sm bg-white\"\n value={draft.outcome.type}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, type: e.target.value as OutcomeType }))}\n >\n <option value=\"\">Select outcome...</option>\n <option value=\"delivery\">Normal Delivery</option>\n <option value=\"cesarean\">Cesarean Section</option>\n <option value=\"abortion\">Abortion</option>\n <option value=\"miscarriage\">Miscarriage</option>\n <option value=\"stillbirth\">Stillbirth</option>\n </select>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-date`} className=\"text-sm\">\n Date <span className=\"text-red-500\">*</span>\n </Label>\n <Input\n id={`${fieldId}-outcome-date`}\n type=\"date\"\n max={today}\n value={draft.outcome.date}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, date: e.target.value }))}\n />\n {draft.outcome.date && (\n <p className=\"text-xs text-muted-foreground\">\n Selected: {formatDdMmYyyy(draft.outcome.date)}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-notes`} className=\"text-sm\">\n Notes\n </Label>\n <Textarea\n id={`${fieldId}-outcome-notes`}\n placeholder=\"e.g. Normal vaginal delivery, healthy baby boy, 3.2kg\"\n value={draft.outcome.notes}\n onChange={(e) => updateOutcomeNotesDebounced(e.target.value)}\n className=\"min-h-[90px]\"\n />\n </div>\n\n <div className=\"rounded-md border bg-white p-3\">\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={!!draft.outcome.is_final}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, is_final: e.target.checked }))}\n />\n Close this pregnancy episode\n </label>\n {draft.outcome.is_final && (\n <div className=\"mt-3 rounded-md border border-red-300 bg-red-50 px-3 py-2 text-xs text-red-800\">\n Checking this will mark the pregnancy as completed and is intended to close the maternity episode.\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n};\n\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype EyeSide = 'right_eye' | 'left_eye';\n\ntype VaOptions = '' | '6/6' | '6/9' | '6/12' | '6/18' | '6/24' | '6/36' | '6/60' | 'CF' | 'PL';\ntype NearVaOptions =\n | ''\n | 'N4'\n | 'N5'\n | 'N6'\n | 'N8'\n | 'N10'\n | 'N12'\n | 'N14'\n | 'N18'\n | 'N24'\n | 'N36'\n | '<N36';\n\ntype PinholeOptions =\n | ''\n | 'PL−'\n | 'PL+'\n | 'FL'\n | 'HM'\n | 'CCFCF'\n | 'FC'\n | '1/60'\n | '2/60'\n | '3/60'\n | '4/60'\n | '5/60'\n | '6/60'\n | '6/36'\n | '6/24'\n | '6/18'\n | '6/12'\n | '6/9'\n | '6/7.5'\n | '6/6';\n\ntype PatientInformation = {\n systemic_history: string;\n ocular_history: string;\n chief_complaints: string;\n};\n\ntype UnaidedEyeVa = {\n ucva: VaOptions;\n pinhole_va: PinholeOptions;\n nv: NearVaOptions;\n};\n\ntype UnaidedVisualAcuity = {\n right_eye: UnaidedEyeVa;\n left_eye: UnaidedEyeVa;\n};\n\ntype RefractionEye = {\n sph: number | null;\n cyl: number | null;\n axis: number | null;\n va: VaOptions;\n pd?: number | null;\n prism?: number | null;\n};\n\ntype AddPowers = {\n right: number | null;\n left: number | null;\n};\n\ntype Refraction = {\n right_eye: RefractionEye;\n left_eye: RefractionEye;\n add: AddPowers;\n};\n\ntype IopEye = {\n iop: number | null;\n cct: number | null;\n};\n\ntype IopPachyCct = {\n method: '' | 'NCT' | 'Goldmann' | 'Tonopen' | 'iCare';\n time: string;\n right_eye: IopEye;\n left_eye: IopEye;\n};\n\ntype OphthalmologyValue = {\n patient_information: PatientInformation;\n unaided_visual_acuity: UnaidedVisualAcuity;\n current_glass_prescription: Refraction;\n iop_pachy_cct: IopPachyCct;\n refraction: Refraction;\n dilated_refraction: Refraction;\n glass_power_prescription: Refraction;\n notes: string;\n};\n\nconst UCVA_OPTIONS: VaOptions[] = ['', '6/6', '6/9', '6/12', '6/18', '6/24', '6/36', '6/60', 'CF', 'PL'];\n\nconst NEAR_VA_OPTIONS: NearVaOptions[] = ['', 'N4', 'N5', 'N6', 'N8', 'N10', 'N12', 'N14', 'N18', 'N24', 'N36', '<N36'];\n\nconst PINHOLE_OPTIONS: PinholeOptions[] = [\n '',\n 'PL−',\n 'PL+',\n 'FL',\n 'HM',\n 'CCFCF',\n 'FC',\n '1/60',\n '2/60',\n '3/60',\n '4/60',\n '5/60',\n '6/60',\n '6/36',\n '6/24',\n '6/18',\n '6/12',\n '6/9',\n '6/7.5',\n '6/6',\n];\n\nconst VA_OPTIONS: VaOptions[] = UCVA_OPTIONS;\n\nconst IOP_METHOD_OPTIONS: IopPachyCct['method'][] = ['', 'NCT', 'Goldmann', 'Tonopen', 'iCare'];\n\nfunction parseFloatOrNull(value: string): number | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction parseIntOrNull(value: string): number | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseInt(trimmed, 10);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction ensureRefractionEye(raw: any): RefractionEye {\n return {\n sph: raw?.sph ?? null,\n cyl: raw?.cyl ?? null,\n axis: raw?.axis ?? null,\n va: (raw?.va as VaOptions) ?? '',\n pd: raw?.pd ?? null,\n prism: raw?.prism ?? null,\n };\n}\n\nfunction ensureAddPowers(raw: any): AddPowers {\n return {\n right: raw?.right ?? null,\n left: raw?.left ?? null,\n };\n}\n\nfunction ensureRefraction(raw: any): Refraction {\n return {\n right_eye: ensureRefractionEye(raw?.right_eye),\n left_eye: ensureRefractionEye(raw?.left_eye),\n add: ensureAddPowers(raw?.add),\n };\n}\n\nfunction ensureUnaidedEyeVa(raw: any): UnaidedEyeVa {\n return {\n ucva: (raw?.ucva as VaOptions) ?? '',\n pinhole_va: (raw?.pinhole_va as PinholeOptions) ?? '',\n nv: (raw?.nv as NearVaOptions) ?? '',\n };\n}\n\nfunction ensureIopEye(raw: any): IopEye {\n return {\n iop: raw?.iop ?? null,\n cct: raw?.cct ?? null,\n };\n}\n\nfunction ensureValue(raw: unknown): OphthalmologyValue {\n const v = (raw || {}) as any;\n return {\n patient_information: {\n systemic_history: v.patient_information?.systemic_history ?? '',\n ocular_history: v.patient_information?.ocular_history ?? '',\n chief_complaints: v.patient_information?.chief_complaints ?? '',\n },\n unaided_visual_acuity: {\n right_eye: ensureUnaidedEyeVa(v.unaided_visual_acuity?.right_eye),\n left_eye: ensureUnaidedEyeVa(v.unaided_visual_acuity?.left_eye),\n },\n current_glass_prescription: ensureRefraction(v.current_glass_prescription),\n iop_pachy_cct: {\n method: (v.iop_pachy_cct?.method as IopPachyCct['method']) ?? '',\n time: v.iop_pachy_cct?.time ?? '',\n right_eye: ensureIopEye(v.iop_pachy_cct?.right_eye),\n left_eye: ensureIopEye(v.iop_pachy_cct?.left_eye),\n },\n refraction: ensureRefraction(v.refraction),\n dilated_refraction: ensureRefraction(v.dilated_refraction),\n glass_power_prescription: ensureRefraction(v.glass_power_prescription),\n notes: v.notes ?? '',\n };\n}\n\nconst sectionWrapperClass =\n 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0] bg-white';\n\n// Match the \"highlight-label\" textarea theme header (used for Patient notes)\nconst sectionHeaderClass =\n 'rounded-t-md bg-[#FEE8EC] px-3 py-1 text-sm shrink-0 z-[1] text-slate-600 font-medium';\n\nconst sectionBodyClass =\n 'rounded-b-md border-t border-[#D0D0D0] bg-white p-3 space-y-3';\n\nconst tableBaseClass = 'w-full border-collapse text-xs';\n\nconst tableHeaderCellClass =\n 'border border-[#E0E0E0] bg-[#F7F7F7] px-2 py-1 text-center font-semibold';\n\nconst tableCellClass = 'border border-[#E0E0E0] px-1.5 py-1 text-center align-middle';\n\nconst selectClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs focus-visible:outline-none focus-visible:ring-0';\n\nconst numberInputClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs text-right focus-visible:outline-none focus-visible:ring-0';\n\nconst textInputClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs focus-visible:outline-none focus-visible:ring-0';\n\n/** Refraction / glass grids: fixed layout, thin numeric cols, wider V/A & P/D; inputs flush to cell edges */\nconst refractionTableClass = 'w-full table-fixed border-collapse text-xs';\n\nconst refractionHeaderCellClass =\n 'border border-[#E0E0E0] bg-[#F7F7F7] px-1 py-1 text-center font-semibold text-[11px]';\n\nconst refractionDataCellClass =\n 'border border-[#E0E0E0] p-0 text-center align-middle min-w-0';\n\nconst refractionLabelCellClass =\n 'border border-[#E0E0E0] px-2 py-1 text-left align-middle font-semibold whitespace-nowrap';\n\nconst refractionInputClass =\n 'h-7 w-full min-w-0 border-0 rounded-none bg-transparent px-1 py-0.5 text-xs text-right shadow-none ring-0 focus-visible:ring-0 focus-visible:ring-offset-0 disabled:opacity-50';\n\nconst refractionSelectClass =\n 'box-border h-7 w-full min-w-0 max-w-full cursor-pointer border-0 rounded-none bg-transparent px-1 py-0.5 pr-6 text-xs shadow-none focus-visible:outline-none focus-visible:ring-0 disabled:opacity-50';\n\nexport const OphthalmologyWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const safe = useMemo(() => ensureValue(value), [value]);\n\n const label = fieldDef?.label || '';\n\n const update = (updater: (current: OphthalmologyValue) => OphthalmologyValue) => {\n if (disabled) return;\n setValue(updater(ensureValue(value)));\n };\n\n const setPatientInfo = (key: keyof PatientInformation, next: string) => {\n update((current) => ({\n ...current,\n patient_information: { ...current.patient_information, [key]: next },\n }));\n };\n\n const setUnaided = (\n side: EyeSide,\n key: keyof UnaidedEyeVa,\n next: VaOptions | NearVaOptions | PinholeOptions,\n ) => {\n update((current) => ({\n ...current,\n unaided_visual_acuity: {\n ...current.unaided_visual_acuity,\n [side]: { ...current.unaided_visual_acuity[side], [key]: next } as UnaidedEyeVa,\n },\n }));\n };\n\n const setRefractionField = (\n section:\n | 'current_glass_prescription'\n | 'refraction'\n | 'dilated_refraction'\n | 'glass_power_prescription',\n side: EyeSide,\n key: keyof RefractionEye,\n next: string,\n mode: 'float' | 'int' | 'select',\n ) => {\n update((current) => {\n const base = current[section];\n const eye = base[side];\n let val: number | null | VaOptions;\n if (mode === 'select') {\n val = next as VaOptions;\n } else if (mode === 'float') {\n val = parseFloatOrNull(next);\n } else {\n val = parseIntOrNull(next);\n }\n return {\n ...current,\n [section]: {\n ...base,\n [side]: {\n ...eye,\n [key]: val,\n },\n },\n };\n });\n };\n\n const setRefractionAdd = (\n section: 'refraction' | 'dilated_refraction' | 'glass_power_prescription' | 'current_glass_prescription',\n side: 'right' | 'left',\n next: string,\n ) => {\n update((current) => {\n const base = current[section];\n const add = base.add;\n const val = parseFloatOrNull(next);\n return {\n ...current,\n [section]: {\n ...base,\n add: {\n ...add,\n [side]: val,\n },\n },\n };\n });\n };\n\n const setIopField = (side: EyeSide, key: keyof IopEye, next: string) => {\n update((current) => {\n const base = current.iop_pachy_cct;\n const eye = base[side];\n const val = parseIntOrNull(next);\n return {\n ...current,\n iop_pachy_cct: {\n ...base,\n [side]: {\n ...eye,\n [key]: val,\n },\n },\n };\n });\n };\n\n const setIopMeta = (key: keyof IopPachyCct, next: string) => {\n update((current) => ({\n ...current,\n iop_pachy_cct: {\n ...current.iop_pachy_cct,\n [key]: next,\n },\n }));\n };\n\n const setNotes = (next: string) => {\n update((current) => ({\n ...current,\n notes: next,\n }));\n };\n\n return (\n <div className={cn('space-y-4', disabled && 'opacity-70 pointer-events-none')}>\n <h3 className=\"text-base font-semibold text-slate-800\">{label}</h3>\n\n {/* Patient Information */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Patient Information</span>\n </div>\n <div className={cn(sectionBodyClass, 'grid gap-3 md:grid-cols-3')}>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Systemic History</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.systemic_history}\n onChange={(e) => setPatientInfo('systemic_history', e.target.value)}\n placeholder=\"Enter systemic history...\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Ocular History</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.ocular_history}\n onChange={(e) => setPatientInfo('ocular_history', e.target.value)}\n placeholder=\"Enter ocular history...\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Chief Complaints</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.chief_complaints}\n onChange={(e) => setPatientInfo('chief_complaints', e.target.value)}\n placeholder=\"Enter chief complaints...\"\n />\n </div>\n </div>\n </section>\n\n {/* Unaided Visual Acuity */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Unaided Visual Acuity</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={3}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={3}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>UCVA</th>\n <th className={tableHeaderCellClass}>Pinhole V/A</th>\n <th className={tableHeaderCellClass}>N/V</th>\n <th className={tableHeaderCellClass}>UCVA</th>\n <th className={tableHeaderCellClass}>Pinhole V/A</th>\n <th className={tableHeaderCellClass}>N/V</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Unaided</td>\n {/* Right */}\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.ucva}\n onChange={(e) =>\n setUnaided('right_eye', 'ucva', e.target.value as VaOptions)\n }\n >\n {UCVA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.pinhole_va}\n onChange={(e) =>\n setUnaided('right_eye', 'pinhole_va', e.target.value as PinholeOptions)\n }\n >\n {PINHOLE_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.nv}\n onChange={(e) =>\n setUnaided('right_eye', 'nv', e.target.value as NearVaOptions)\n }\n >\n {NEAR_VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.ucva}\n onChange={(e) =>\n setUnaided('left_eye', 'ucva', e.target.value as VaOptions)\n }\n >\n {UCVA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.pinhole_va}\n onChange={(e) =>\n setUnaided('left_eye', 'pinhole_va', e.target.value as PinholeOptions)\n }\n >\n {PINHOLE_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.nv}\n onChange={(e) =>\n setUnaided('left_eye', 'nv', e.target.value as NearVaOptions)\n }\n >\n {NEAR_VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Current Glass Prescription */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Current Glass Prescription</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[25%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[25%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={4}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={4}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={refractionLabelCellClass}>Current Glass</td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.right_eye.sph ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.right_eye.cyl ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.right_eye.axis ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.current_glass_prescription.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.left_eye.sph ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.left_eye.cyl ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.left_eye.axis ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.current_glass_prescription.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* IOP / Pachy / CCT Detail */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>IOP / Pachy / CCT Detail</span>\n </div>\n <div className={sectionBodyClass}>\n <div className=\"grid gap-3 md:grid-cols-[2fr,1fr] mb-3\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Method</span>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.iop_pachy_cct.method}\n onChange={(e) =>\n setIopMeta('method', e.target.value as IopPachyCct['method'])\n }\n >\n {IOP_METHOD_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt || 'Select Method'}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Time</span>\n <Input\n disabled={disabled}\n placeholder=\"HH:MM\"\n className={textInputClass}\n value={safe.iop_pachy_cct.time}\n onChange={(e) => setIopMeta('time', e.target.value)}\n />\n </div>\n </div>\n\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={2}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={2}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>IOP</th>\n <th className={tableHeaderCellClass}>CCT</th>\n <th className={tableHeaderCellClass}>IOP</th>\n <th className={tableHeaderCellClass}>CCT</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>\n Values\n </td>\n {/* Right */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.right_eye.iop ?? ''}\n onChange={(e) => setIopField('right_eye', 'iop', e.target.value)}\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.right_eye.cct ?? ''}\n onChange={(e) => setIopField('right_eye', 'cct', e.target.value)}\n />\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.left_eye.iop ?? ''}\n onChange={(e) => setIopField('left_eye', 'iop', e.target.value)}\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.left_eye.cct ?? ''}\n onChange={(e) => setIopField('left_eye', 'cct', e.target.value)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Refraction (Distance) */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Refraction (Distance)</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[13%]\" />\n <col className=\"w-[12%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[13%]\" />\n <col className=\"w-[12%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>P/D</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>P/D</th>\n </tr>\n </thead>\n <tbody>\n {/* Distance row */}\n <tr>\n <td className={refractionLabelCellClass}>Distance</td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.refraction.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n min={10}\n max={45}\n step=\"1\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.pd ?? ''}\n onChange={(e) =>\n setRefractionField('refraction', 'right_eye', 'pd', e.target.value, 'int')\n }\n />\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.refraction.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n min={10}\n max={45}\n step=\"1\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.pd ?? ''}\n onChange={(e) =>\n setRefractionField('refraction', 'left_eye', 'pd', e.target.value, 'int')\n }\n />\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={refractionLabelCellClass}>Add</td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.add.right ?? ''}\n onChange={(e) => setRefractionAdd('refraction', 'right', e.target.value)}\n />\n </td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.add.left ?? ''}\n onChange={(e) => setRefractionAdd('refraction', 'left', e.target.value)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Dilated Refraction */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Dilated Refraction</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n {/* Dilated row */}\n <tr>\n <td className={refractionLabelCellClass}>Dilated</td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.dilated_refraction.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.dilated_refraction.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={refractionLabelCellClass}>Add</td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.add.right ?? ''}\n onChange={(e) =>\n setRefractionAdd('dilated_refraction', 'right', e.target.value)\n }\n />\n </td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.add.left ?? ''}\n onChange={(e) =>\n setRefractionAdd('dilated_refraction', 'left', e.target.value)\n }\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Glass Power Prescription */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Glass Power Prescription</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n {/* Glass power row */}\n <tr>\n <td className={refractionLabelCellClass}>Glass Power</td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.glass_power_prescription.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.glass_power_prescription.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={refractionLabelCellClass}>Add</td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.add.right ?? ''}\n onChange={(e) =>\n setRefractionAdd('glass_power_prescription', 'right', e.target.value)\n }\n />\n </td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.add.left ?? ''}\n onChange={(e) =>\n setRefractionAdd('glass_power_prescription', 'left', e.target.value)\n }\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Notes */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Notes</span>\n </div>\n <div className={sectionBodyClass}>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"w-full text-xs min-h-[100px]\"\n placeholder=\"Enter additional notes...\"\n value={safe.notes}\n onChange={(e) => setNotes(e.target.value)}\n />\n </div>\n </section>\n </div>\n );\n};\n\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype EyeSide = 'right_eye' | 'left_eye';\n\ntype EyeDiagnosis = Record<string, string>;\n\ntype OphthalDiagnosisValue = {\n right_eye: EyeDiagnosis;\n left_eye: EyeDiagnosis;\n};\n\nconst DIAGNOSIS_FIELDS: string[] = [\n 'INJURY',\n 'APPENDAGES',\n 'CONJUNCTIVA',\n 'SCLERA',\n 'CORNEA',\n 'ANTERIOR CHAMBER (AC)',\n 'PUPIL',\n 'IRIS',\n 'LENS',\n 'EXTRAOCULAR MOVEMENTS & SQUINT',\n 'INTRAOCULAR PRESSURE (IOP)',\n 'GONIOSCOPY',\n 'FUNDUS',\n];\n\nfunction ensureValue(raw: unknown): OphthalDiagnosisValue {\n const v = (raw || {}) as Partial<OphthalDiagnosisValue>;\n return {\n right_eye: v.right_eye ?? {},\n left_eye: v.left_eye ?? {},\n };\n}\n\nconst containerClass =\n 'rounded-md bg-white overflow-hidden flex flex-col';\n\nconst headerClass = 'px-3 py-2 text-sm font-medium text-slate-800 border-b border-slate-200';\n\nconst tableClass = 'w-full text-xs';\n\nconst headerCellClass =\n 'border border-slate-200 px-2 py-1 text-center font-semibold align-middle';\n\nconst cellClass = 'border border-slate-200 px-2 py-1 align-top';\n\nexport const OphthalDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const safe = useMemo(() => ensureValue(value), [value]);\n\n const label = fieldDef?.label || '';\n\n const updateEyeField = (eye: EyeSide, fieldLabel: string, next: string) => {\n if (disabled) return;\n const prev = ensureValue(value);\n setValue({\n ...prev,\n [eye]: {\n ...prev[eye],\n [fieldLabel]: next,\n },\n });\n };\n\n return (\n <div className={cn('space-y-2', disabled && 'opacity-70 pointer-events-none')}>\n {label && <h3 className=\"text-base font-semibold text-slate-800\">{label}</h3>}\n\n <section className={containerClass}>\n <div className={headerClass}>\n <span className=\"text-sm\">Diagnosis</span>\n </div>\n <div className=\"overflow-x-auto\">\n <table className={tableClass}>\n <thead>\n <tr>\n <th className={cn(headerCellClass, 'text-left px-3')}>Field</th>\n <th className={headerCellClass}>Right Eye</th>\n <th className={headerCellClass}>Left Eye</th>\n </tr>\n </thead>\n <tbody>\n {DIAGNOSIS_FIELDS.map((fieldLabel) => (\n <tr key={fieldLabel}>\n <td className={cn(cellClass, 'text-left font-semibold px-3')}>{fieldLabel}</td>\n <td className={cellClass}>\n <Textarea\n disabled={disabled}\n rows={2}\n className=\"w-full text-xs min-h-[60px] resize-none\"\n value={safe.right_eye[fieldLabel] ?? ''}\n onChange={(e) => updateEyeField('right_eye', fieldLabel, e.target.value)}\n />\n </td>\n <td className={cellClass}>\n <Textarea\n disabled={disabled}\n rows={2}\n className=\"w-full text-xs min-h-[60px] resize-none\"\n value={safe.left_eye[fieldLabel] ?? ''}\n onChange={(e) => updateEyeField('left_eye', fieldLabel, e.target.value)}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../core/utils\"\n\ntype SliderProps = React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & {\n trackClassName?: string;\n thumbClassName?: string;\n};\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(({ className, trackClassName, thumbClassName, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n className={cn(\n \"relative h-2 w-full grow overflow-hidden rounded-full bg-gray-200\",\n trackClassName\n )}\n >\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className={cn(\n \"block h-5 w-5 rounded-full border-2 border-primary bg-background 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 thumbClassName\n )}\n />\n </SliderPrimitive.Root>\n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useField } from \"../../react/useField\";\nimport { useForm } from \"../../react/useForm\";\nimport { Button } from \"../shadcn/button\";\nimport { Card } from \"../shadcn/card\";\nimport { Label } from \"../shadcn/label\";\nimport { Slider } from \"../shadcn/slider\";\nimport { Textarea } from \"../shadcn/textarea\";\n\ntype Side = \"left\" | \"right\" | \"both\";\n\ntype ConcernId =\n | \"knee\"\n | \"shoulder\"\n | \"spine\"\n | \"musculoskeletal_pain\"\n | \"hip\"\n | \"trauma\"\n | \"other\";\n\nexport type OrthopedicExamValue = {\n concerns: ConcernId[];\n sides: Partial<Record<\"knee\" | \"shoulder\" | \"hip\", Side>>;\n painScore: number; // 0–10\n physicalExam: {\n inspection: string;\n palpation: string;\n rangeOfMotion: string;\n };\n reminders: {\n dismissed: boolean;\n position?: { top: number; right: number };\n };\n};\n\nconst CONCERNS: { id: ConcernId; label: string }[] = [\n { id: \"knee\", label: \"Knee\" },\n { id: \"shoulder\", label: \"Shoulder\" },\n { id: \"spine\", label: \"Spine\" },\n { id: \"musculoskeletal_pain\", label: \"Musculoskeletal pain\" },\n { id: \"hip\", label: \"Hip\" },\n { id: \"trauma\", label: \"Trauma\" },\n { id: \"other\", label: \"Other\" },\n];\n\nconst SIDE_PARTS: Array<\"knee\" | \"shoulder\" | \"hip\"> = [\"knee\", \"shoulder\", \"hip\"];\n\nconst REMINDERS: Record<ConcernId, string[]> = {\n knee: [\n \"Inspect for swelling, deformity, scars.\",\n \"Palpate joint line, patella, and ligaments.\",\n \"Assess active/passive flexion and extension.\",\n \"Check stability (ACL/PCL/MCL/LCL) if appropriate.\",\n ],\n shoulder: [\n \"Inspect for asymmetry, wasting, deformity.\",\n \"Palpate AC joint, bicipital groove, cuff insertions.\",\n \"Assess active/passive ROM (flex/abd/ER/IR).\",\n \"Consider impingement/cuff tests if indicated.\",\n ],\n hip: [\n \"Inspect gait and standing alignment.\",\n \"Palpate greater trochanter and groin tenderness.\",\n \"Assess ROM (flex/ext/abd/add/IR/ER).\",\n \"Consider special tests (FABER/FADIR) if indicated.\",\n ],\n spine: [\n \"Inspect posture and spinal alignment.\",\n \"Palpate spinous/paraspinal tenderness.\",\n \"Assess ROM (flex/ext/lat bend/rotation).\",\n \"Document neuro screen if radicular symptoms.\",\n ],\n musculoskeletal_pain: [\n \"Localize pain and radiation; identify triggers/relievers.\",\n \"Inspect for swelling, erythema, deformity.\",\n \"Assess function and weight-bearing/ADLs impact.\",\n ],\n trauma: [\n \"Inspect for deformity, wounds, bruising.\",\n \"Check distal neurovascular status.\",\n \"Assess joint stability only if safe.\",\n ],\n other: [\n \"Clarify the concern and affected region.\",\n \"Document red flags (night pain, fever, weight loss).\",\n ],\n};\n\nconst defaultValue = (): OrthopedicExamValue => ({\n concerns: [],\n sides: {},\n painScore: 0,\n physicalExam: { inspection: \"\", palpation: \"\", rangeOfMotion: \"\" },\n reminders: { dismissed: false, position: { top: 96, right: 24 } },\n});\n\nexport const OrthopedicExamWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safeValue: OrthopedicExamValue = useMemo(() => {\n if (!value || typeof value !== \"object\") return defaultValue();\n const v = value as Partial<OrthopedicExamValue>;\n const concerns = Array.isArray(v.concerns) ? (v.concerns as ConcernId[]) : [];\n const painScore = typeof v.painScore === \"number\" ? v.painScore : 0;\n const physicalExam = v.physicalExam ?? defaultValue().physicalExam;\n const reminders = v.reminders ?? defaultValue().reminders;\n return {\n concerns,\n sides: v.sides ?? {},\n painScore: Math.min(10, Math.max(0, Math.round(painScore))),\n physicalExam: {\n inspection: physicalExam.inspection ?? \"\",\n palpation: physicalExam.palpation ?? \"\",\n rangeOfMotion: physicalExam.rangeOfMotion ?? \"\",\n },\n reminders: {\n dismissed: !!reminders.dismissed,\n position: reminders.position ?? { top: 96, right: 24 },\n },\n };\n }, [value]);\n\n const [panelOpen, setPanelOpen] = useState(false);\n const draggingRef = useRef<{\n startX: number;\n startY: number;\n startTop: number;\n startRight: number;\n } | null>(null);\n const prevConcernsLengthRef = useRef(safeValue.concerns.length);\n\n const reminderSections = useMemo(() => {\n return safeValue.concerns\n .map((id) => ({\n id,\n label: CONCERNS.find((c) => c.id === id)?.label ?? id,\n points: REMINDERS[id] ?? [],\n }))\n .filter((s) => s.points.length > 0);\n }, [safeValue.concerns]);\n\n const hasReminders = reminderSections.length > 0;\n\n // Reminders auto-open only when concerns go from 0 to non-zero; close stays collapsed until chip is clicked\n useEffect(() => {\n const prevLen = prevConcernsLengthRef.current;\n const currLen = safeValue.concerns.length;\n prevConcernsLengthRef.current = currLen;\n\n if (currLen === 0) {\n if (safeValue.reminders.dismissed) {\n setValue({ ...safeValue, reminders: { ...safeValue.reminders, dismissed: false } });\n }\n setPanelOpen(false);\n return;\n }\n\n if (prevLen === 0 && currLen > 0 && !safeValue.reminders.dismissed) {\n setPanelOpen(true);\n }\n }, [safeValue, setValue]);\n\n // Window drag listeners\n useEffect(() => {\n const onMove = (e: MouseEvent) => {\n if (!draggingRef.current) return;\n const { startX, startY, startTop, startRight } = draggingRef.current;\n const dx = e.clientX - startX;\n const dy = e.clientY - startY;\n const nextPos = { top: startTop + dy, right: startRight - dx };\n setValue({\n ...safeValue,\n reminders: {\n ...safeValue.reminders,\n position: nextPos,\n },\n });\n };\n const onUp = () => {\n draggingRef.current = null;\n };\n\n window.addEventListener(\"mousemove\", onMove);\n window.addEventListener(\"mouseup\", onUp);\n return () => {\n window.removeEventListener(\"mousemove\", onMove);\n window.removeEventListener(\"mouseup\", onUp);\n };\n }, [safeValue, setValue]);\n\n const update = (next: OrthopedicExamValue) => {\n setValue(next);\n setTouched();\n };\n\n const toggleConcern = (id: ConcernId) => {\n const selected = safeValue.concerns.includes(id);\n const nextConcerns = selected\n ? safeValue.concerns.filter((c) => c !== id)\n : [...safeValue.concerns, id];\n\n const nextSides = { ...safeValue.sides };\n if (!nextConcerns.includes(\"knee\")) delete nextSides.knee;\n if (!nextConcerns.includes(\"shoulder\")) delete nextSides.shoulder;\n if (!nextConcerns.includes(\"hip\")) delete nextSides.hip;\n\n update({ ...safeValue, concerns: nextConcerns, sides: nextSides });\n };\n\n const toggleSide = (part: \"knee\" | \"shoulder\" | \"hip\", side: Side) => {\n const current = safeValue.sides?.[part];\n const nextSides = { ...safeValue.sides };\n if (current === side) {\n delete nextSides[part];\n } else {\n nextSides[part] = side;\n }\n update({ ...safeValue, sides: nextSides });\n };\n\n const setPainScore = (score: number) => {\n update({ ...safeValue, painScore: Math.min(10, Math.max(0, Math.round(score))) });\n };\n\n const setPhysicalExam = (key: keyof OrthopedicExamValue[\"physicalExam\"], text: string) => {\n update({\n ...safeValue,\n physicalExam: {\n ...safeValue.physicalExam,\n [key]: text,\n },\n });\n };\n\n const showSidePanel = SIDE_PARTS.some((p) => safeValue.concerns.includes(p));\n\n if (!fieldDef) return null;\n\n return (\n <div className={`space-y-4 relative ${disabled ? \"opacity-60 pointer-events-none\" : \"\"}`}>\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium\">\n {fieldDef.label}\n {fieldDef.required ? <span className=\"text-red-500 ml-1\">*</span> : null}\n </Label>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-xs font-semibold text-muted-foreground\">Concern</div>\n <div className=\"flex flex-wrap gap-2\">\n {CONCERNS.map((c) => {\n const active = safeValue.concerns.includes(c.id);\n return (\n <Button\n key={c.id}\n type=\"button\"\n size=\"sm\"\n variant={active ? \"default\" : \"outline\"}\n className=\"h-6 rounded-full px-3 py-1 text-xs\"\n onClick={() => toggleConcern(c.id)}\n >\n {c.label}\n </Button>\n );\n })}\n </div>\n </div>\n\n {showSidePanel ? (\n <Card className=\"p-3 space-y-3 border-dashed\">\n <div className=\"text-xs font-semibold text-muted-foreground\">Side (Left / Right / Both)</div>\n {SIDE_PARTS.map((part) => {\n if (!safeValue.concerns.includes(part)) return null;\n const current = safeValue.sides?.[part];\n return (\n <div key={part} className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium capitalize\">{part}</span>\n <div className=\"flex gap-1\">\n {([\"left\", \"right\", \"both\"] as const).map((s) => {\n const active = current === s;\n return (\n <Button\n key={s}\n type=\"button\"\n size=\"sm\"\n variant={active ? \"default\" : \"outline\"}\n className=\"text-[11px] px-2 py-1 h-7\"\n onClick={() => toggleSide(part, s)}\n >\n {s.charAt(0).toUpperCase() + s.slice(1)}\n </Button>\n );\n })}\n </div>\n </div>\n );\n })}\n </Card>\n ) : null}\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-semibold text-muted-foreground\">Pain score</span>\n <span className=\"text-xs font-mono\">{safeValue.painScore} / 10</span>\n </div>\n <Slider\n min={0}\n max={10}\n step={1}\n value={[safeValue.painScore]}\n onValueChange={(v) => setPainScore(v[0] ?? 0)}\n trackClassName=\"!bg-gray-400\"\n thumbClassName=\"!bg-white !border-white\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Inspection</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.inspection}\n onChange={(e) => setPhysicalExam(\"inspection\", e.target.value)}\n placeholder=\"Gait, posture, deformity, swelling, scars...\"\n className=\"text-xs\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Palpation</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.palpation}\n onChange={(e) => setPhysicalExam(\"palpation\", e.target.value)}\n placeholder=\"Tenderness, warmth, crepitus, effusion...\"\n className=\"text-xs\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Range of motion</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.rangeOfMotion}\n onChange={(e) => setPhysicalExam(\"rangeOfMotion\", e.target.value)}\n placeholder=\"Flexion/extension, rotation, abduction/adduction...\"\n className=\"text-xs\"\n />\n </div>\n </div>\n\n {showError ? <p className=\"text-xs text-red-500\">{error}</p> : null}\n\n {safeValue.concerns.length > 0 && hasReminders ? (\n panelOpen ? (\n <div\n style={{\n position: \"fixed\",\n top: safeValue.reminders.position?.top ?? 96,\n right: safeValue.reminders.position?.right ?? 24,\n zIndex: 40,\n }}\n >\n <Card className=\"w-80 shadow-lg border-primary/30 bg-background/95 backdrop-blur-sm\">\n <div\n className=\"flex items-center justify-between px-3 py-2 border-b cursor-move bg-primary/5\"\n onMouseDown={(e) => {\n e.preventDefault();\n draggingRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startTop: safeValue.reminders.position?.top ?? 96,\n startRight: safeValue.reminders.position?.right ?? 24,\n };\n }}\n >\n <span className=\"text-xs font-semibold text-primary\">Exam reminders</span>\n <button\n type=\"button\"\n className=\"text-[10px] uppercase tracking-wide text-muted-foreground hover:text-destructive\"\n onMouseDown={(e) => e.stopPropagation()}\n onClick={() => setPanelOpen(false)}\n >\n Close\n </button>\n </div>\n <div className=\"px-3 py-2 max-h-64 overflow-auto space-y-3\">\n {reminderSections.map(({ id, label, points }) => (\n <div key={id}>\n <div className=\"text-xs font-semibold text-primary mb-1\">{label}</div>\n <ul className=\"list-disc list-inside space-y-1 text-[11px] text-muted-foreground\">\n {points.map((p) => (\n <li key={p}>{p}</li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </Card>\n </div>\n ) : (\n <div\n style={{\n position: \"fixed\",\n top: safeValue.reminders.position?.top ?? 96,\n right: safeValue.reminders.position?.right ?? 24,\n zIndex: 40,\n }}\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"rounded-full px-3 py-1 text-xs border-primary/30 bg-background/95 backdrop-blur-sm shadow-md\"\n onClick={() => setPanelOpen(true)}\n >\n Exam reminders\n </Button>\n </div>\n )\n ) : null}\n </div>\n );\n};","import React, { useCallback } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { TextFieldDef } from '../../core/types';\n\nexport const MarMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onOpen = useCallback(async () => {\n await handlers.onOpenMedicationOrders?.();\n setTouched();\n }, [handlers, setTouched]);\n\n if (!fieldDef || fieldDef.type !== 'textarea') return null;\n\n const textDef = fieldDef as TextFieldDef;\n const height = textDef.height;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n const labelEl = theme ? (\n <Label htmlFor={fieldId} className={labelClass}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId}>{labelContent}</Label>\n );\n\n const text = typeof value === 'string' ? value : value == null ? '' : String(value);\n const hasHandler = typeof handlers.onOpenMedicationOrders === 'function';\n\n return (\n <div className={wrapperClass}>\n {labelEl}\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3\">\n <div\n id={fieldId}\n className={cn(\n 'min-h-[80px] flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm whitespace-pre-wrap',\n showError && 'border-red-500',\n !text && 'text-muted-foreground'\n )}\n style={height != null ? { minHeight: height } : undefined}\n aria-readonly=\"true\"\n >\n {text || fieldDef.placeholder || 'No medication orders added.'}\n </div>\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || !hasHandler}\n onClick={onOpen}\n className=\"shrink-0 sm:mt-0\"\n >\n Add medication orders\n </Button>\n </div>\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Button } from '../shadcn/button';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\n\ntype CMDashOrder = {\n id: string;\n item_id?: string | number | null;\n item_name?: string | null;\n generic_name?: string | null;\n dose?: string | number | null;\n route?: string | null;\n frequency?: string | null;\n admin_times?: string[] | null;\n meal_sleep_timing?: string | null;\n start_date?: string | null;\n end_date?: string | null;\n order_type?: string | null;\n status?: string | null;\n notes?: string | null;\n};\n\ntype CMDashPrescriptionResponse = {\n pharmacy_order_id?: string | null;\n pharmacy_order_ids?: string[] | null;\n notes?: string | null;\n orders?: CMDashOrder[] | null;\n /** Parallel to `orders`, from host AddMedicineDialog confirm. */\n display_lines?: unknown[] | null;\n};\n\nexport type DischargeMedicationOrder = {\n id: string;\n item_id?: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n pharmacy_order_id?: string;\n};\n\nfunction parseFieldValue(value: unknown): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n if (value == null) return { orders: [], display_lines: [] };\n if (Array.isArray(value)) {\n return {\n orders: value as DischargeMedicationOrder[],\n display_lines: value.map(() => null),\n };\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? (v.orders as DischargeMedicationOrder[]) : [];\n const rawLines = Array.isArray(v.display_lines)\n ? v.display_lines\n : Array.isArray(v.displayLines)\n ? v.displayLines\n : [];\n const display_lines = orders.map((_, i) => rawLines[i] ?? null);\n return { orders, display_lines };\n }\n return { orders: [], display_lines: [] };\n}\n\nfunction normalizePrescription(res: CMDashPrescriptionResponse): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n const pharmacyOrderId = res.pharmacy_order_id ?? undefined;\n const orders = Array.isArray(res.orders) ? res.orders : [];\n const linesRaw = Array.isArray(res.display_lines) ? res.display_lines : [];\n\n const mapped = orders\n .filter((o) => o && typeof o.id === 'string')\n .map((o) => ({\n id: o.id,\n item_id: o.item_id == null ? undefined : String(o.item_id),\n item_name: o.item_name ?? undefined,\n generic_name: o.generic_name ?? undefined,\n dose: o.dose == null ? undefined : String(o.dose),\n route: o.route ?? undefined,\n frequency: o.frequency ?? undefined,\n admin_times: Array.isArray(o.admin_times) ? o.admin_times : undefined,\n meal_sleep_timing: o.meal_sleep_timing ?? undefined,\n start_date: o.start_date ?? undefined,\n end_date: o.end_date ?? undefined,\n order_type: o.order_type ?? undefined,\n status: o.status ?? undefined,\n notes: o.notes ?? null,\n pharmacy_order_id: pharmacyOrderId,\n }));\n\n const display_lines = mapped.map((_, i) => linesRaw[i] ?? null);\n return { orders: mapped, display_lines };\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const DischargeMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const { orders, display_lines } = useMemo(() => parseFieldValue(value), [value]);\n\n const onAdd = useCallback(async () => {\n setTouched();\n const fn = handlers.onOpenDischargeMedicationOrders;\n if (!fn) return;\n const res = await fn();\n if (!res || typeof res !== 'object') return;\n const normalized = normalizePrescription(res as CMDashPrescriptionResponse);\n setValue({\n orders: normalized.orders,\n display_lines: normalized.display_lines,\n });\n }, [handlers.onOpenDischargeMedicationOrders, setTouched, setValue]);\n\n const onDelete = useCallback(\n (id: string) => {\n setTouched();\n const idx = orders.findIndex((o) => o.id === id);\n if (idx === -1) return;\n setValue({\n orders: orders.filter((o) => o.id !== id),\n display_lines: display_lines.filter((_, i) => i !== idx),\n });\n },\n [orders, display_lines, setTouched, setValue]\n );\n\n if (!visible || !fieldDef) return null;\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium\">\n {fieldDef.label} {fieldDef.required && <span className=\"text-red-500\">*</span>}\n </Label>\n <Button type=\"button\" onClick={onAdd} disabled={disabled || !handlers.onOpenDischargeMedicationOrders}>\n Add medicine\n </Button>\n </div>\n\n {fieldDef.description && <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>}\n\n {orders.length === 0 ? (\n <div\n className={cn(\n 'rounded-md border border-input bg-background px-3 py-3 text-sm text-muted-foreground',\n showError && 'border-red-500'\n )}\n >\n No medicines added.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o, rowIdx) => {\n const line = display_lines[rowIdx] as { name?: string } | null | undefined;\n const duration = formatDuration(o.start_date, o.end_date);\n const header =\n (typeof line?.name === 'string' && line.name.trim()) ||\n o.item_name ||\n 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-input bg-background p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{header}</div>\n {sub && <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">{sub}</div>}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-destructive\"\n onClick={() => onDelete(o.id)}\n aria-label=\"Delete medicine\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-foreground/80\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\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 { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport { cn } from '../../core/utils';\nimport type { SelectOption, SuggestionTextareaFieldDef } from '../../core/types';\n\nconst DEFAULT_TOKEN_SEPARATOR = ', ';\n\nfunction getAppendSeparator(def: SuggestionTextareaFieldDef): string {\n const raw = def.meta && typeof (def.meta as { appendSeparator?: unknown }).appendSeparator === 'string'\n ? (def.meta as { appendSeparator: string }).appendSeparator\n : DEFAULT_TOKEN_SEPARATOR;\n return raw;\n}\n\n/** Comma-delimited tokens (trimmed), empty parts dropped. */\nexport function getSuggestionTokensFromText(text: string): string[] {\n return text.split(',').map((p) => p.trim()).filter(Boolean);\n}\n\n/** Returns text with one token toggled: chip adds the value, or removes it if already present. */\nexport function toggleSuggestionTokenInText(\n current: string,\n token: string,\n separator: string = DEFAULT_TOKEN_SEPARATOR,\n): string {\n const t = String(token).trim();\n if (!t) return current;\n const parts = getSuggestionTokensFromText(current);\n const i = parts.findIndex((p) => p === t);\n if (i >= 0) {\n parts.splice(i, 1);\n } else {\n parts.push(t);\n }\n return parts.join(separator);\n}\n\nfunction isTokenSelected(text: string, optionValue: unknown): boolean {\n const t = String(optionValue).trim();\n if (!t) return false;\n return getSuggestionTokensFromText(text).some((p) => p === t);\n}\n\n/**\n * Chip option values present in `text` as comma-separated tokens (same typing as schema `options[].value`).\n * Order follows left-to-right token order; duplicates in text only appear once.\n */\nexport function deriveKnownSuggestionChipValues(text: string, options: SelectOption[]): unknown[] {\n if (!options.length) return [];\n const allowed = new Map<string, unknown>(options.map((o) => [String(o.value), o.value] as const));\n const tokens = getSuggestionTokensFromText(text);\n const out: unknown[] = [];\n const seen = new Set<string>();\n for (const t of tokens) {\n if (!allowed.has(t) || seen.has(t)) continue;\n seen.add(t);\n out.push(allowed.get(t)!);\n }\n return out;\n}\n\nfunction parallelChipArraysEqual(a: unknown, b: unknown): boolean {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction isSuggestionField(type: string | undefined): type is SuggestionTextareaFieldDef['type'] {\n return type === 'suggestion_textarea' || type === 'complaint_chips';\n}\n\n/**\n * Reusable textarea with schema-driven **suggestion chips** inside the input area (same white\n * shell as the textarea). The field value is a **single string**: clicking a chip **appends**\n * that option’s `value` to the text (comma + space by default) or **removes** it if it was\n * already one of the comma-separated tokens. Optional `meta.parallelChipFieldId` mirrors known\n * chip selections into a sibling **`multiselect`** array. Free typing is still allowed.\n */\nexport const SuggestionTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const [options, setOptions] = useState<SelectOption[]>([]);\n const [loading, setLoading] = useState(false);\n const showError = !!error && (touched || state.submitAttempted);\n\n const def =\n fieldDef && isSuggestionField(fieldDef.type) ? (fieldDef as SuggestionTextareaFieldDef) : undefined;\n\n const textValue = value == null || typeof value === 'string' ? value || '' : String(value);\n\n const parallelChipFieldId =\n def?.meta &&\n typeof (def.meta as { parallelChipFieldId?: unknown }).parallelChipFieldId === 'string'\n ? (def.meta as { parallelChipFieldId: string }).parallelChipFieldId.trim()\n : undefined;\n\n useEffect(() => {\n if (!def) {\n setOptions([]);\n return;\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 as SelectOption[]))\n .finally(() => setLoading(false));\n } else {\n setOptions([]);\n }\n }, [def]);\n\n useEffect(() => {\n if (!parallelChipFieldId || !def) return;\n const parallelDef = store.getFieldDef(parallelChipFieldId);\n if (!parallelDef || parallelDef.type !== 'multiselect') return;\n const next = deriveKnownSuggestionChipValues(textValue, options);\n const prev = store.getFieldState(parallelChipFieldId).value;\n if (parallelChipArraysEqual(prev, next)) return;\n store.setValues({ [parallelChipFieldId]: next }, { touch: false });\n }, [def, parallelChipFieldId, textValue, options, store]);\n\n if (!def) {\n return null;\n }\n\n const appendSeparator = getAppendSeparator(def);\n const suggestionsAria =\n def.meta && typeof (def.meta as { suggestionsAriaLabel?: string }).suggestionsAriaLabel === 'string'\n ? (def.meta as { suggestionsAriaLabel: string }).suggestionsAriaLabel\n : 'Quick suggestions';\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n const height =\n def.height != null\n ? typeof def.height === 'string'\n ? Number(def.height) || undefined\n : def.height\n : undefined;\n\n const labelContent = (\n <>\n {def.label} {def.required && <span className=\"text-red-500\">*</span>}\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label>{labelContent}</Label>\n );\n\n const onChipClick = (optValue: unknown) => {\n if (disabled) return;\n setValue(toggleSuggestionTokenInText(textValue, String(optValue), appendSeparator));\n };\n\n const hasSuggestions = options.length > 0;\n const isHighlightLabel = def.theme === 'highlight-label';\n\n const suggestionShellClass = cn(\n 'flex min-w-0 flex-col overflow-hidden',\n hasSuggestions &&\n (isHighlightLabel\n ? '-mt-1 rounded-b-md border-[#D0D0D0] bg-white'\n : 'rounded-md border border-input bg-background'),\n );\n\n const chipsRowClass = cn(\n 'flex flex-wrap gap-2 px-3 pb-2 pt-3',\n hasSuggestions &&\n (isHighlightLabel ? '' : 'border-b border-input/70'),\n disabled && 'pointer-events-none opacity-50',\n );\n\n const textareaShellClass = cn(\n inputClass,\n hasSuggestions &&\n cn(\n 'mt-0 rounded-t-none rounded-b-md border-0 shadow-none focus-visible:ring-offset-0',\n isHighlightLabel ? 'border-t-0' : 'min-h-[80px]',\n ),\n );\n\n const suggestionButtons =\n loading ? (\n <span className=\"text-xs text-muted-foreground\">Loading suggestions…</span>\n ) : (\n options.map((opt) => {\n const on = isTokenSelected(textValue, opt.value);\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n onClick={() => onChipClick(opt.value)}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n on\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-muted-foreground/30 bg-background hover:bg-muted/60',\n )}\n >\n {opt.label}\n </button>\n );\n })\n );\n\n return (\n <div className={wrapperClass}>\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : (\n labelEl\n )}\n\n {def.description && <p className=\"text-xs text-muted-foreground\">{def.description}</p>}\n\n {hasSuggestions ? (\n <div className={suggestionShellClass}>\n <div className={chipsRowClass} role=\"group\" aria-label={suggestionsAria}>\n {suggestionButtons}\n </div>\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={textareaShellClass}\n placeholder={def.placeholder}\n style={height != null && Number.isFinite(height) ? { minHeight: height } : undefined}\n />\n </div>\n ) : (\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={inputClass}\n placeholder={def.placeholder}\n style={height != null && Number.isFinite(height) ? { minHeight: height } : undefined}\n />\n )}\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n\n/** @deprecated Use `SuggestionTextareaWidget`. Kept for schema compatibility. */\nexport const ComplaintChipsWidget = SuggestionTextareaWidget;\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n LensAssessmentFieldDef,\n LensAssessmentValue,\n LocsGrades,\n} from '../../core/types';\n\ntype LocsEye = 'OD' | 'OS';\ntype LocsComponentKey = keyof LocsGrades;\n\nconst EMPTY_GRADES: LocsGrades = { NO: 0, NC: 0, C: 0, PSC: 0 };\n\nconst LOCS_FIELDS: {\n key: LocsComponentKey;\n label: string;\n max: number;\n hint: string;\n}[] = [\n { key: 'NO', label: 'Nuclear Opalescence', max: 4, hint: '0–4' },\n { key: 'NC', label: 'Nuclear Colour', max: 4, hint: '0–4' },\n { key: 'C', label: 'Cortical', max: 4, hint: '0–4' },\n { key: 'PSC', label: 'Posterior Subcapsular', max: 4, hint: '0–4' },\n];\n\n/** Inline grid so layout survives Tailwind content scans that omit library bundles. */\nconst LOCS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(5.5rem, auto) minmax(5.5rem, auto)',\n columnGap: '1rem',\n rowGap: '0.5rem',\n alignItems: 'center',\n width: '100%',\n minWidth: 0,\n};\n\nfunction parseGrades(raw: unknown): LocsGrades | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const n = (k: LocsComponentKey) => {\n const v = Number(r[k]);\n return Number.isFinite(v) ? Math.trunc(v) : 0;\n };\n return { NO: n('NO'), NC: n('NC'), C: n('C'), PSC: n('PSC') };\n}\n\nfunction clampGrade(v: number): number {\n return Math.max(0, Math.min(4, Math.trunc(v)));\n}\n\nfunction parseValue(raw: unknown): LensAssessmentValue {\n const locs = {\n OD: { ...EMPTY_GRADES },\n OS: { ...EMPTY_GRADES },\n };\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const o = raw as Record<string, unknown>;\n const locsRaw = o.locs;\n if (locsRaw && typeof locsRaw === 'object' && !Array.isArray(locsRaw)) {\n const L = locsRaw as Record<string, unknown>;\n const od = parseGrades(L.OD);\n const os = parseGrades(L.OS);\n if (od)\n locs.OD = {\n NO: clampGrade(od.NO),\n NC: clampGrade(od.NC),\n C: clampGrade(od.C),\n PSC: clampGrade(od.PSC),\n };\n if (os)\n locs.OS = {\n NO: clampGrade(os.NO),\n NC: clampGrade(os.NC),\n C: clampGrade(os.C),\n PSC: clampGrade(os.PSC),\n };\n }\n return {\n notes: typeof o.notes === 'string' ? o.notes : '',\n assessmentKey: typeof o.assessmentKey === 'string' ? o.assessmentKey : undefined,\n locs,\n };\n }\n return { notes: '', assessmentKey: undefined, locs };\n}\n\nfunction cataractStage(eye: LocsEye, locs: NonNullable<LensAssessmentValue['locs']>): string {\n const g = locs[eye];\n const total = g.NO + g.NC + g.C + g.PSC;\n if (total === 0) return '—';\n if (total <= 4) return 'Early';\n if (total <= 8) return 'Moderate';\n if (total <= 12) return 'Advanced';\n return 'Hypermature';\n}\n\nfunction Stepper({\n value,\n max,\n disabled,\n ariaLabel,\n onChange,\n}: {\n value: number;\n max: number;\n disabled?: boolean;\n ariaLabel: string;\n onChange: (v: number) => void;\n}) {\n return (\n <div\n className=\"flex items-center gap-1 justify-self-center\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.max(0, value - 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n -\n </button>\n <input\n type=\"number\"\n min={0}\n max={max}\n disabled={disabled}\n value={value}\n aria-label={ariaLabel}\n onChange={(e) => onChange(Math.max(0, Math.min(max, Number(e.target.value) || 0)))}\n className=\"h-6 w-10 shrink-0 rounded border border-input bg-background px-1 py-0 text-center text-xs disabled:opacity-50\"\n />\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.min(max, value + 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n +\n </button>\n </div>\n );\n}\n\nfunction StageBadge({ stage }: { stage: string }) {\n const cls: Record<string, string> = {\n Early: 'border border-emerald-200 text-foreground',\n Moderate: 'border border-amber-200 text-foreground',\n Advanced: 'border border-orange-300 text-foreground',\n Hypermature: 'border border-destructive text-foreground',\n '—': 'border border-border text-muted-foreground',\n };\n return (\n <span\n className={cn(\n 'rounded-full bg-background px-2 py-0.5 text-[11px] font-medium',\n cls[stage] ?? 'border border-border text-muted-foreground',\n )}\n >\n {stage}\n </span>\n );\n}\n\nconst DEFAULT_TITLE = 'Lens Assessment — LOCS III';\n\n/**\n * LOCS III lens assessment: OD/OS column steppers and derived cataract-stage badges.\n */\nexport const LensAssessmentWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'lens_assessment') {\n return null;\n }\n\n const def = fieldDef as LensAssessmentFieldDef;\n const v = parseValue(value);\n const locs = v.locs ?? { OD: { ...EMPTY_GRADES }, OS: { ...EMPTY_GRADES } };\n const title =\n (def.meta?.cardTitle as string | undefined) ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setPartial = (patch: Partial<LensAssessmentValue>) => {\n setValue({ ...v, ...patch, locs: patch.locs ?? v.locs ?? locs });\n };\n\n const setLocs = (eye: LocsEye, key: LocsComponentKey, n: number) => {\n const next = clampGrade(n);\n setPartial({\n locs: {\n ...locs,\n [eye]: { ...locs[eye], [key]: next },\n },\n });\n };\n\n return (\n <div\n id={`lens-assessment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-4 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold text-foreground\">{title}</h3>\n\n <div style={LOCS_GRID_STYLE}>\n <div className=\"min-w-0\" aria-hidden />\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Right Eye</div>\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Left Eye</div>\n {LOCS_FIELDS.map((f) => (\n <div key={f.key} style={{ display: 'contents' }}>\n <div className=\"min-w-0 text-xs\">\n <div className=\"font-medium\">{f.label}</div>\n <div className=\"text-muted-foreground\">{f.hint}</div>\n </div>\n <Stepper\n value={locs.OD[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} right eye`}\n onChange={(n) => setLocs('OD', f.key, n)}\n />\n <Stepper\n value={locs.OS[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} left eye`}\n onChange={(n) => setLocs('OS', f.key, n)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"mt-3 border-t border-border pt-3 text-xs\">\n <span className=\"text-muted-foreground\">Cataract Stage</span>{' '}\n <span className=\"ml-1 inline-flex items-center gap-1\">\n OD <StageBadge stage={cataractStage('OD', locs)} />\n </span>\n <span className=\"ml-2 inline-flex items-center gap-1\">\n OS <StageBadge stage={cataractStage('OS', locs)} />\n </span>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import type { FunctionalImpairmentScoreValue } from './types';\n\nexport function clampFunctionalScore03(n: unknown): number {\n const v = typeof n === 'number' ? n : Number(n);\n if (!Number.isFinite(v)) return 0;\n return Math.max(0, Math.min(3, Math.trunc(v)));\n}\n\nexport function parseFunctionalImpairmentScore(raw: unknown): FunctionalImpairmentScoreValue {\n const base: FunctionalImpairmentScoreValue = {\n reading: 0,\n nightDriving: 0,\n glare: 0,\n occupation: 0,\n adl: 0,\n };\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return base;\n const o = raw as Record<string, unknown>;\n for (const k of Object.keys(base) as (keyof FunctionalImpairmentScoreValue)[]) {\n base[k] = clampFunctionalScore03(o[k]);\n }\n return base;\n}\n\nexport function functionalImpairmentTotal(v: FunctionalImpairmentScoreValue): number {\n return v.reading + v.nightDriving + v.glare + v.occupation + v.adl;\n}\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n FunctionalImpairmentDimension,\n FunctionalImpairmentScoreFieldDef,\n} from '../../core/types';\nimport {\n functionalImpairmentTotal,\n parseFunctionalImpairmentScore,\n} from '../../core/functionalImpairmentScore';\n\nconst ITEMS: { key: FunctionalImpairmentDimension; label: string }[] = [\n { key: 'reading', label: 'Difficulty reading' },\n { key: 'nightDriving', label: 'Night driving difficulty' },\n { key: 'glare', label: 'Glare sensitivity' },\n { key: 'occupation', label: 'Occupational impact' },\n { key: 'adl', label: 'ADL limitation' },\n];\n\nconst SCALE_LABELS = ['None', 'Mild', 'Moderate', 'Severe'] as const;\n\nconst DEFAULT_TITLE = 'Functional Impairment Score (Stage 5)';\n\n/**\n * Two columns when the card fits two compact cells (~22rem + gap);\n * one column below that. Low min so side columns still get 2-up.\n */\nconst ITEMS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 8rem), 1fr))',\n columnGap: '0.5rem',\n rowGap: '0.5rem',\n width: '100%',\n minWidth: 0,\n};\n\nfunction clamp03(n: unknown): number {\n const v = typeof n === 'number' ? n : Number(n);\n if (!Number.isFinite(v)) return 0;\n return Math.max(0, Math.min(3, Math.trunc(v)));\n}\n\n/**\n * Stage-5 functional impairment: five 0–3 items and total /15.\n */\nexport const FunctionalImpairmentScoreWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'functional_impairment_score') {\n return null;\n }\n\n const def = fieldDef as FunctionalImpairmentScoreFieldDef;\n const v = parseFunctionalImpairmentScore(value);\n const total = functionalImpairmentTotal(v);\n const title =\n (def.meta?.cardTitle as string | undefined)?.trim() ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setDim = (key: FunctionalImpairmentDimension, n: number) => {\n setValue({ ...v, [key]: clamp03(n) });\n };\n\n return (\n <div\n id={`functional-impairment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-3 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-2 text-xs font-semibold leading-tight text-foreground sm:text-[13px]\">\n {title}\n </h3>\n\n <div style={ITEMS_GRID_STYLE}>\n {ITEMS.map((it) => (\n <div key={it.key} className=\"flex min-w-0 flex-col gap-1\">\n <div className=\"text-[10px] font-medium leading-snug text-foreground sm:text-[11px]\">\n {it.label}\n </div>\n <div className=\"flex w-fit max-w-full shrink-0 gap-0.5\">\n {[0, 1, 2, 3].map((score) => (\n <button\n key={score}\n type=\"button\"\n title={SCALE_LABELS[score]}\n disabled={disabled}\n onClick={() => setDim(it.key, score)}\n className={cn(\n 'h-6 w-7 shrink-0 rounded border text-[10px] transition-colors sm:text-[11px]',\n v[it.key] === score\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-input hover:bg-muted',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n {score}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"mt-2 flex flex-col gap-1.5 border-t border-border pt-2 sm:flex-row sm:items-center sm:justify-between sm:gap-2\">\n <div className=\"text-[10px] leading-snug text-muted-foreground sm:text-[11px]\">\n Score scale: 0 = none, 3 = severe (each item)\n </div>\n <div className=\"flex flex-wrap items-center gap-1.5 sm:justify-end\">\n <span className=\"text-[10px] text-muted-foreground sm:text-[11px]\">Total</span>\n <span className=\"text-sm font-bold tabular-nums sm:text-[15px]\">\n {total}\n <span className=\"font-normal text-muted-foreground\">/15</span>\n </span>\n </div>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport type { BiometryIolWorkupFieldDef, BiometryIolWorkupValue, BiometryMethod } from '../../core/types';\n\nconst FORMULA_OPTIONS = [\n 'SRK/T',\n 'Barrett Universal II',\n 'Hoffer Q',\n 'Haigis',\n 'Holladay 1',\n 'Holladay 2',\n 'Kane',\n] as const;\n\nconst METHODS: { value: BiometryMethod; label: string }[] = [\n { value: 'optical_biometry', label: 'Optical biometry (IOL Master)' },\n { value: 'ascan_immersion', label: 'A-scan (immersion)' },\n { value: 'ascan_contact', label: 'A-scan (contact)' },\n];\n\nconst EMPTY: BiometryIolWorkupValue = {\n axialLengthOD: '',\n axialLengthOS: '',\n k1k2AxisOD: '',\n k1k2AxisOS: '',\n anteriorChamberDepthOD: '',\n anteriorChamberDepthOS: '',\n iolPowerOD: '',\n iolPowerOS: '',\n targetRefractionOD: '',\n targetRefractionOS: '',\n formula: 'SRK/T',\n method: 'optical_biometry',\n cornealTopoUploaded: false,\n specularMicroscopyDone: false,\n endothelialCount: '',\n};\n\nfunction str(x: unknown): string {\n return typeof x === 'string' ? x : '';\n}\n\nfunction parseValue(raw: unknown): BiometryIolWorkupValue {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return { ...EMPTY };\n const o = raw as Record<string, unknown>;\n const m = o.method;\n const method: BiometryMethod =\n m === 'ascan_immersion' || m === 'ascan_contact' || m === 'optical_biometry' ? m : 'optical_biometry';\n const formula = str(o.formula);\n return {\n ...EMPTY,\n axialLengthOD: str(o.axialLengthOD),\n axialLengthOS: str(o.axialLengthOS),\n k1k2AxisOD: str(o.k1k2AxisOD),\n k1k2AxisOS: str(o.k1k2AxisOS),\n anteriorChamberDepthOD: str(o.anteriorChamberDepthOD),\n anteriorChamberDepthOS: str(o.anteriorChamberDepthOS),\n iolPowerOD: str(o.iolPowerOD),\n iolPowerOS: str(o.iolPowerOS),\n targetRefractionOD: str(o.targetRefractionOD),\n targetRefractionOS: str(o.targetRefractionOS),\n formula: formula || 'SRK/T',\n method,\n cornealTopoUploaded: o.cornealTopoUploaded === true,\n specularMicroscopyDone: o.specularMicroscopyDone === true,\n endothelialCount: str(o.endothelialCount),\n };\n}\n\n/** Row padding — use the same `py-*` on paramCell, eyeTh, eye `td`s, and colspan `td`s (Tailwind must see literals; not from index.css). */\nconst paramCell =\n 'emr-biometry-param text-[11px] font-semibold leading-snug text-foreground sm:text-xs py-2';\nconst eyeTh =\n 'emr-biometry-eye text-center text-[11px] font-semibold sm:text-xs py-2';\n\nfunction Inp({\n value,\n onChange,\n disabled,\n placeholder,\n}: {\n value: string;\n onChange: (s: string) => void;\n disabled?: boolean;\n placeholder?: string;\n}) {\n return (\n <input\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n className=\"box-border w-full min-w-0 rounded border border-input bg-background px-2 py-1 text-[11px] sm:text-xs\"\n />\n );\n}\n\nconst DEFAULT_TITLE = 'Biometry & IOL Workup (Stage 7)';\n\nexport const BiometryIolWorkupWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'biometry_iol_workup') {\n return null;\n }\n\n const def = fieldDef as BiometryIolWorkupFieldDef;\n const v = parseValue(value);\n const title =\n (def.meta?.cardTitle as string | undefined)?.trim() ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const patch = (p: Partial<BiometryIolWorkupValue>) => setValue({ ...v, ...p });\n\n return (\n <div\n id={`biometry-iol-${fieldId}`}\n className=\"w-full min-w-0 max-w-full self-stretch rounded-lg border border-border bg-card p-3 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-2.5 text-sm font-semibold leading-tight text-foreground\">{title}</h3>\n\n <div className=\"w-full min-w-0 overflow-x-auto\">\n <table className=\"emr-table emr-table--biometry min-w-full\">\n <colgroup>\n <col style={{ width: '32%' }} />\n <col style={{ width: '34%' }} />\n <col style={{ width: '34%' }} />\n </colgroup>\n <thead>\n <tr>\n <th scope=\"col\" className={paramCell}>\n Parameter\n </th>\n <th scope=\"col\" className={eyeTh}>\n Right Eye\n </th>\n <th scope=\"col\" className={eyeTh}>\n Left Eye\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={paramCell}>Axial Length (mm)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.axialLengthOD}\n disabled={disabled}\n placeholder=\"e.g. 23.45\"\n onChange={(s) => patch({ axialLengthOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.axialLengthOS}\n disabled={disabled}\n placeholder=\"e.g. 23.45\"\n onChange={(s) => patch({ axialLengthOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>K1 / K2 / Axis</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.k1k2AxisOD}\n disabled={disabled}\n placeholder=\"44.0 / 44.5 / 90\"\n onChange={(s) => patch({ k1k2AxisOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.k1k2AxisOS}\n disabled={disabled}\n placeholder=\"44.0 / 44.5 / 90\"\n onChange={(s) => patch({ k1k2AxisOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={`${paramCell} whitespace-nowrap`}>Anterior Chamber Depth (mm)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.anteriorChamberDepthOD}\n disabled={disabled}\n onChange={(s) => patch({ anteriorChamberDepthOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.anteriorChamberDepthOS}\n disabled={disabled}\n onChange={(s) => patch({ anteriorChamberDepthOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>IOL Power (D)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp value={v.iolPowerOD} disabled={disabled} onChange={(s) => patch({ iolPowerOD: s })} />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp value={v.iolPowerOS} disabled={disabled} onChange={(s) => patch({ iolPowerOS: s })} />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>Target Refraction (D)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.targetRefractionOD}\n disabled={disabled}\n placeholder=\"e.g. -0.25\"\n onChange={(s) => patch({ targetRefractionOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.targetRefractionOS}\n disabled={disabled}\n placeholder=\"e.g. -0.25\"\n onChange={(s) => patch({ targetRefractionOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>Formula</td>\n <td className=\"min-w-0 px-2 py-2 align-middle\" colSpan={2}>\n <select\n value={v.formula}\n disabled={disabled}\n onChange={(e) => patch({ formula: e.target.value })}\n className=\"box-border w-full min-w-0 rounded border border-input bg-background px-2 py-1 text-[11px] sm:text-xs\"\n >\n {FORMULA_OPTIONS.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n <tr>\n <td className={`${paramCell} align-top`}>Method</td>\n <td className=\"min-w-0 px-2 py-2 align-middle\" colSpan={2}>\n <div\n role=\"radiogroup\"\n aria-label=\"Biometry method\"\n className=\"flex w-full flex-wrap items-center justify-center gap-x-3 gap-y-2 text-[11px] sm:gap-x-4 sm:text-xs\"\n >\n {METHODS.map(({ value: mv, label }) => (\n <label key={mv} className=\"flex min-w-0 shrink-0 cursor-pointer items-center gap-1.5\">\n <input\n type=\"radio\"\n name={`${fieldId}-biom-method`}\n value={mv}\n checked={v.method === mv}\n disabled={disabled}\n onChange={() => patch({ method: mv })}\n className=\"shrink-0\"\n />\n <span className=\"min-w-0 whitespace-nowrap leading-tight\">{label}</span>\n </label>\n ))}\n </div>\n </td>\n </tr>\n <tr>\n <td className={`${paramCell} align-top text-muted-foreground`}>Optional workup</td>\n <td className=\"min-w-0 px-2 py-2 align-middle\" colSpan={2}>\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap items-center justify-center gap-x-4 gap-y-2 sm:justify-between\">\n <label className=\"inline-flex min-w-0 cursor-pointer items-center gap-1.5 text-[11px] leading-snug sm:text-xs\">\n <input\n type=\"checkbox\"\n className=\"shrink-0\"\n checked={v.cornealTopoUploaded}\n disabled={disabled}\n onChange={(e) => patch({ cornealTopoUploaded: e.target.checked })}\n />\n <span>Corneal topography uploaded</span>\n </label>\n <label className=\"inline-flex min-w-0 cursor-pointer items-center gap-1.5 text-[11px] leading-snug sm:text-xs\">\n <input\n type=\"checkbox\"\n className=\"shrink-0\"\n checked={v.specularMicroscopyDone}\n disabled={disabled}\n onChange={(e) => patch({ specularMicroscopyDone: e.target.checked })}\n />\n <span>Specular microscopy done</span>\n </label>\n </div>\n <div className=\"flex flex-wrap items-center justify-end gap-2 text-[11px] sm:text-xs\">\n <span className=\"shrink-0 text-muted-foreground\">Endothelial count:</span>\n <input\n value={v.endothelialCount}\n disabled={disabled}\n placeholder=\"cells/mm²\"\n onChange={(e) => patch({ endothelialCount: e.target.value })}\n className=\"box-border w-[5.5rem] min-w-0 shrink-0 rounded border border-input bg-background px-2 py-1 text-[11px] sm:text-xs\"\n />\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n {def.description && <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type { SurgicalRiskFlagsFieldDef, SurgicalRiskFlagsValue } from '../../core/types';\n\nconst RISKS = [\n 'Small pupil',\n 'Pseudoexfoliation',\n 'Diabetes',\n 'Shallow AC',\n 'Previous ocular surgery',\n 'Zonular weakness',\n 'Mature/white cataract',\n] as const;\n\ntype Eye = 'OD' | 'OS';\n\nconst DIABETES = 'Diabetes';\n\nfunction parseValue(raw: unknown): SurgicalRiskFlagsValue {\n const empty: SurgicalRiskFlagsValue = { OD: [], OS: [] };\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return empty;\n const o = raw as Record<string, unknown>;\n const arr = (x: unknown): string[] =>\n Array.isArray(x) ? x.filter((i): i is string => typeof i === 'string') : [];\n let OD = arr(o.OD);\n let OS = arr(o.OS);\n const odD = OD.includes(DIABETES);\n const osD = OS.includes(DIABETES);\n if (odD !== osD) {\n if (odD && !osD) OS = [...OS, DIABETES];\n else if (osD && !odD) OD = [...OD, DIABETES];\n }\n return { OD, OS };\n}\n\n/** Heuristic tier from number of flags checked for that eye. */\nfunction riskTierForCount(n: number): 'High' | 'Moderate' | 'Low' {\n if (n === 0) return 'Low';\n if (n <= 2) return 'Moderate';\n return 'High';\n}\n\nfunction tierBadgeClass(tier: 'High' | 'Moderate' | 'Low'): string {\n if (tier === 'High') return 'bg-red-600 text-white';\n if (tier === 'Moderate') return 'bg-amber-500 text-white';\n return 'bg-emerald-600 text-white';\n}\n\nconst DEFAULT_TITLE = 'Surgical Risk Flags (Stage 11)';\n\nfunction RiskCol({\n eye,\n value,\n disabled,\n onToggle,\n}: {\n eye: Eye;\n value: SurgicalRiskFlagsValue;\n disabled?: boolean;\n onToggle: (eye: Eye, risk: string) => void;\n}) {\n const selected = new Set(value[eye]);\n const tier = riskTierForCount(selected.size);\n\n return (\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-xs font-semibold text-foreground\">\n {eye === 'OD' ? 'Right Eye (OD)' : 'Left Eye (OS)'}\n </div>\n <span\n className={cn(\n 'whitespace-nowrap rounded-full px-2 py-0.5 text-[11px] font-medium',\n tierBadgeClass(tier),\n )}\n >\n {tier} risk\n </span>\n </div>\n <div className=\"space-y-1.5\">\n {RISKS.map((r) => (\n <label\n key={r}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs hover:bg-muted/50\"\n >\n <input\n type=\"checkbox\"\n className=\"shrink-0\"\n checked={selected.has(r)}\n disabled={disabled}\n onChange={() => onToggle(eye, r)}\n />\n <span>{r}</span>\n </label>\n ))}\n </div>\n </div>\n );\n}\n\nexport const SurgicalRiskFlagsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'surgical_risk_flags') {\n return null;\n }\n\n const def = fieldDef as SurgicalRiskFlagsFieldDef;\n const v = parseValue(value);\n const title =\n (def.meta?.cardTitle as string | undefined)?.trim() ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const toggleRisk = (eye: Eye, risk: string) => {\n const next: SurgicalRiskFlagsValue = {\n OD: [...v.OD],\n OS: [...v.OS],\n };\n\n if (risk === DIABETES) {\n const had = next.OD.includes(DIABETES) || next.OS.includes(DIABETES);\n if (had) {\n next.OD = next.OD.filter((x) => x !== DIABETES);\n next.OS = next.OS.filter((x) => x !== DIABETES);\n } else {\n if (!next.OD.includes(DIABETES)) next.OD.push(DIABETES);\n if (!next.OS.includes(DIABETES)) next.OS.push(DIABETES);\n }\n setValue(next);\n return;\n }\n\n const list = next[eye];\n const i = list.indexOf(risk);\n if (i === -1) list.push(risk);\n else list.splice(i, 1);\n setValue(next);\n };\n\n return (\n <div\n id={`surgical-risk-flags-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-3 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold leading-tight text-foreground\">{title}</h3>\n\n <div className=\"flex gap-6\">\n <RiskCol eye=\"OD\" value={v} disabled={disabled} onToggle={toggleRisk} />\n <div className=\"w-px shrink-0 bg-border\" aria-hidden />\n <RiskCol eye=\"OS\" value={v} disabled={disabled} onToggle={toggleRisk} />\n </div>\n\n {def.description && <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport type { StaticTextFieldDef, FieldDef } from '../core/types';\nimport { useField } from './useField';\nimport { TextWidget } from '../ui/widgets/Text';\nimport { RichTextWidget } from '../ui/widgets/RichTextWidget';\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 { MediaUploadWidget } from '../ui/widgets/MediaUpload';\nimport { SignatureUploadWidget } from '../ui/widgets/SignatureUpload';\nimport { EditableTableWidget } from '../ui/widgets/EditableTable';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\nimport { AddMedicationWidget } from '../ui/widgets/AddMedicationWidget';\nimport { AddInvestigationWidget } from '../ui/widgets/AddInvestigationWidget';\nimport { AddProcedureWidget } from '../ui/widgets/AddProcedureWidget';\nimport { DifferentialDiagnosisWidget } from '../ui/widgets/DifferentialDiagnosisWidget';\nimport { VitalsWidget } from '../ui/widgets/VitalsWidget';\nimport { HiddenVitalsWidget } from '../ui/widgets/HiddenVitalsWidget';\nimport { ReferralWidget } from '../ui/widgets/ReferralWidget';\nimport { FollowupWidget } from '../ui/widgets/FollowupWidget';\nimport { SmartTextareaWidget } from '../ui/widgets/SmartTextarea';\nimport { DiagnosisTextareaWidget } from '../ui/widgets/DiagnosisTextareaWidget';\nimport { Switch } from '../ui/shadcn/switch';\nimport { Label } from '../ui/shadcn/label';\nimport { useFormStore } from './FormProvider';\nimport type { ToggleFieldDef } from '../core/types';\nimport { ObstetricHistoryWidget } from '../ui/widgets/ObstetricHistoryWidget';\nimport { OphthalmologyWidget } from '../ui/widgets/OphthalmologyWidget';\nimport { OphthalDiagnosisWidget } from '../ui/widgets/OphthalDiagnosisWidget';\nimport { OrthopedicExamWidget } from '../ui/widgets/OrthopedicExamWidget';\nimport { MarMedicationOrdersWidget } from '../ui/widgets/MarMedicationOrdersWidget';\nimport { DischargeMedicationOrdersWidget } from '../ui/widgets/DischargeMedicationOrdersWidget';\nimport { fieldMetaRequestsMarMedicationOrdersButton } from '../core/marMedicationOrdersMeta';\nimport { SuggestionTextareaWidget } from '../ui/widgets/SuggestionTextareaWidget';\nimport { LensAssessmentWidget } from '../ui/widgets/LensAssessmentWidget';\nimport { FunctionalImpairmentScoreWidget } from '../ui/widgets/FunctionalImpairmentScoreWidget';\nimport { BiometryIolWorkupWidget } from '../ui/widgets/BiometryIolWorkupWidget';\nimport { SurgicalRiskFlagsWidget } from '../ui/widgets/SurgicalRiskFlagsWidget';\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 return renderWidget(fieldId, fieldDef);\n};\n\nfunction renderWidget(fieldId: string, fieldDef: FieldDef) {\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n return <TextWidget fieldId={fieldId} />;\n \n case 'textarea':\n if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {\n return <MarMedicationOrdersWidget fieldId={fieldId} />;\n }\n return <TextWidget fieldId={fieldId} />;\n\n case 'richtext':\n return <RichTextWidget 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 'media_upload':\n return <MediaUploadWidget fieldId={fieldId} />;\n \n case 'signature':\n return <SignatureUploadWidget fieldId={fieldId} />;\n\n case 'editable_table':\n return <EditableTableWidget fieldId={fieldId} />;\n\n case 'medications':\n return <AddMedicationWidget fieldId={fieldId} />;\n\n case 'discharge_medication_orders':\n return <DischargeMedicationOrdersWidget fieldId={fieldId} />;\n\n case 'investigations':\n return <AddInvestigationWidget fieldId={fieldId} />;\n\n case 'procedures':\n return <AddProcedureWidget fieldId={fieldId} />;\n\n case 'differential_diagnosis':\n return <DifferentialDiagnosisWidget fieldId={fieldId} />;\n\n case 'vitals':\n return <VitalsWidget fieldId={fieldId} />;\n\n case 'hidden_vitals':\n return <HiddenVitalsWidget fieldId={fieldId} />;\n\n case 'referral':\n return <ReferralWidget fieldId={fieldId} />;\n\n case 'followup':\n return <FollowupWidget fieldId={fieldId} />;\n\n case 'smart_textarea':\n return <SmartTextareaWidget fieldId={fieldId} />;\n\n case 'diagnosis_textarea':\n return <DiagnosisTextareaWidget fieldId={fieldId} />;\n\n case 'obstetric_history':\n return <ObstetricHistoryWidget fieldId={fieldId} />;\n\n case 'eye_prescription':\n return <OphthalmologyWidget fieldId={fieldId} />;\n\n case 'ophthal_diagnosis':\n return <OphthalDiagnosisWidget fieldId={fieldId} />;\n case 'orthopedic_exam':\n return <OrthopedicExamWidget fieldId={fieldId} />;\n\n case 'toggle': {\n const { value, setValue, setTouched, disabled } = useField(fieldId);\n const store = useFormStore();\n const excludes = (fieldDef as ToggleFieldDef).excludes ?? [];\n return (\n <div className=\"flex items-center gap-3\">\n <Switch\n checked={value === true}\n disabled={disabled}\n onCheckedChange={(checked) => {\n setValue(checked);\n setTouched();\n if (checked) excludes.forEach((id) => store.setValue(id, false));\n }}\n />\n <Label className=\"text-sm font-medium leading-none cursor-pointer select-none\">\n {fieldDef.label}\n </Label>\n </div>\n );\n }\n case 'suggestion_textarea':\n case 'complaint_chips':\n return <SuggestionTextareaWidget fieldId={fieldId} />;\n\n case 'lens_assessment':\n return <LensAssessmentWidget fieldId={fieldId} />;\n\n case 'functional_impairment_score':\n return <FunctionalImpairmentScoreWidget fieldId={fieldId} />;\n\n case 'biometry_iol_workup':\n return <BiometryIolWorkupWidget fieldId={fieldId} />;\n\n case 'surgical_risk_flags':\n return <SurgicalRiskFlagsWidget 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';\n\nexport const DynamicForm: React.FC = () => {\n const store = useFormStore();\n const schema = store.getSchema();\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>\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, { useEffect, useMemo, useRef } from 'react';\nimport { useFormStore } from './FormProvider';\nimport { FieldRenderer } from './FieldRenderer';\nimport { AISuggestionsProvider, type AIMedication } from './AISuggestionsContext';\nimport type { LayoutNode, SectionChild } from '../core/types';\n\n/** Field keys that should be shown as suggestions (badges) instead of applied to form state */\nconst SUGGESTION_KEYS = new Set(['medications', 'investigations', 'procedures']);\n\n/** Shape of one differential diagnosis item from AI (must match form field value) */\nexport type AIDifferentialDiagnosisItem = {\n category: string;\n condition: string;\n likelihood: string;\n severity: string;\n treatability: string;\n keyFeatures?: string[];\n nextSteps?: string[];\n};\n\nfunction shallowEqualKeys(a: Record<string, any>, b: Record<string, any>): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const k of keysA) {\n if (!keysB.includes(k) || a[k] !== b[k]) return false;\n }\n return true;\n}\n\nfunction normalizeAIMedications(arr: unknown): AIMedication[] {\n let parsed: unknown = arr;\n if (typeof arr === 'string') {\n try {\n parsed = JSON.parse(arr);\n } catch {\n return [];\n }\n }\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((item): item is AIMedication => item != null && typeof item === 'object' && 'id' in item && 'brand_name' in item);\n}\n\nfunction normalizeDifferentialDiagnosis(val: unknown): AIDifferentialDiagnosisItem[] {\n let parsed: unknown = val;\n if (typeof val === 'string') {\n try {\n parsed = JSON.parse(val);\n } catch {\n return [];\n }\n }\n // Shape 1: object keyed by category, each with { conditions: [...] }\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const result: AIDifferentialDiagnosisItem[] = [];\n for (const [category, group] of Object.entries(parsed as Record<string, any>)) {\n if (!group || typeof group !== 'object') continue;\n const conditions = Array.isArray((group as any).conditions) ? (group as any).conditions : [];\n for (const cond of conditions) {\n if (!cond || typeof cond !== 'object') continue;\n const {\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures,\n nextSteps,\n } = cond as any;\n if (!condition || !likelihood || !severity || !treatability) continue;\n result.push({\n category,\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures: Array.isArray(keyFeatures) ? keyFeatures : undefined,\n nextSteps: Array.isArray(nextSteps) ? nextSteps : undefined,\n });\n }\n }\n return result;\n }\n\n // Shape 2: already a flat array of items\n if (!Array.isArray(parsed)) return [];\n return parsed.filter(\n (item): item is AIDifferentialDiagnosisItem =>\n item != null &&\n typeof item === 'object' &&\n 'category' in item &&\n 'condition' in item &&\n 'likelihood' in item &&\n 'severity' in item &&\n 'treatability' in item\n );\n}\n\nexport interface SmartFormProps {\n /**\n * Structured result from AI analysis (e.g. patient-doctor conversation).\n * When this is set or updated, values are applied to the form by field ID.\n * Only keys that exist in the form schema are applied; unknown keys are ignored.\n * Fields are not marked as \"touched\" so you can distinguish AI-suggested vs user-edited if needed.\n * Listens to both reference and content changes (e.g. streaming updates to the same object).\n */\n aiAnalysisResult?: Record<string, any> | null;\n}\n\n/**\n * Form view that supports applying AI analysis results after load. Use inside\n * FormProvider like DynamicForm. When aiAnalysisResult is provided (e.g. when\n * AI finishes analyzing conversation), its values are applied to the form in\n * one batch without marking fields as touched. Re-applies when the result\n * reference or content changes (e.g. streaming or incremental AI updates).\n */\nexport const SmartForm: React.FC<SmartFormProps> = ({\n aiAnalysisResult,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n const prevAiResultRef = useRef<Record<string, any> | null | undefined>(undefined);\n\n const aiSuggestions = useMemo(() => {\n if (aiAnalysisResult == null) return { medications: [] };\n const medications = normalizeAIMedications(aiAnalysisResult.medications);\n return { medications };\n }, [aiAnalysisResult]);\n\n useEffect(() => {\n if (aiAnalysisResult == null || Object.keys(aiAnalysisResult).length === 0) return;\n const prev = prevAiResultRef.current;\n if (prev != null && prev === aiAnalysisResult && shallowEqualKeys(prev, aiAnalysisResult)) return;\n // Store a shallow copy so mutation of the same object reference is detected\n // on the next render (shallowEqualKeys will see different key sets).\n prevAiResultRef.current = { ...aiAnalysisResult };\n const DD_KEYS = new Set(['differentialDiagnosis', 'differentialdiagnosis']);\n const toApply: Record<string, any> = {};\n for (const [key, val] of Object.entries(aiAnalysisResult)) {\n if (!SUGGESTION_KEYS.has(key) && !DD_KEYS.has(key)) toApply[key] = val;\n }\n const rawDd =\n aiAnalysisResult.differentialDiagnosis ??\n aiAnalysisResult.differentialdiagnosis;\n if (rawDd != null) {\n toApply.differentialdiagnosis = normalizeDifferentialDiagnosis(rawDd);\n }\n if (Object.keys(toApply).length > 0) store.setValues(toApply, { touch: false });\n }, [store, aiAnalysisResult]);\n\n // Flatten layout: no section titles or accordions; just ordered field ids\n const fieldIds: string[] = [];\n function collect(child: SectionChild | string) {\n if (typeof child === 'string') {\n fieldIds.push(child);\n } else if (child.type === 'column_layout') {\n child.children.forEach(id => fieldIds.push(id));\n }\n }\n schema.layout.forEach((node: LayoutNode) => {\n if (node.type === 'section') {\n node.children.forEach(collect);\n } else if (node.type === 'column_layout') {\n node.children.forEach(id => fieldIds.push(id));\n }\n });\n\n return (\n <AISuggestionsProvider value={aiSuggestions}>\n <div className=\"grid grid-cols-4 gap-2 w-full items-start\">\n {/* Left column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'left') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n\n {/* Center column: 50% (2 of 4 grid cols), internally split 25-25 */}\n <div className=\"col-span-2 grid grid-cols-2 gap-x-2 space-y-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'center') return null;\n\n const colSpanRaw = (fieldDef as any).colSpan ?? 1;\n const colSpan = colSpanRaw === 2 ? 2 : 1;\n\n return (\n <div key={fieldId} className={colSpan === 2 ? 'col-span-2' : 'col-span-1'}>\n <FieldRenderer fieldId={fieldId} />\n </div>\n );\n })}\n </div>\n\n {/* Right column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'right') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n </div>\n </AISuggestionsProvider>\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, { useState, useEffect } 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 ReadOnlyMediaUploadProps {\n fieldDef: BaseFieldDef;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nexport const ReadOnlyMediaUpload: React.FC<ReadOnlyMediaUploadProps> = ({\n fieldDef,\n value,\n}) => {\n const [useIframe, setUseIframe] = useState(false);\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 useEffect(() => {\n setUseIframe(false);\n }, [url]);\n\n const showAsPdf = url && (urlLooksLikePdf(url) || useIframe);\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 file 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 {showAsPdf ? (\n <iframe\n src={url}\n title={`${fieldDef.label} PDF`}\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={url}\n alt={`${fieldDef.label} upload`}\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n onError={() => setUseIframe(true)}\n />\n )}\n </div>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n </div>\n );\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 { Label } from '../shadcn/label';\nimport type { ReferralFieldDef, ReferralItem } from '../../core/types';\n\ninterface ReadOnlyReferralProps {\n fieldDef: ReferralFieldDef;\n value: unknown;\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n return {\n specialization: String((item as ReferralItem).specialization),\n is_urgent: Boolean((item as ReferralItem).is_urgent),\n };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReadOnlyReferral: React.FC<ReadOnlyReferralProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n const items = normalizeValue(value);\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {items.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No value</span>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {items.map((item, i) => {\n const isUrgent = item.is_urgent;\n return (\n <span\n key={i}\n className={\n isUrgent\n ? 'inline-flex items-center gap-1 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs font-medium'\n : 'inline-flex items-center gap-1 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs font-medium'\n }\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded\">\n U\n </span>\n )}\n {item.specialization}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ntype DischargeMedicationOrder = {\n id: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n};\n\nfunction parseOrders(value: unknown): DischargeMedicationOrder[] {\n if (value == null) return [];\n if (Array.isArray(value)) {\n return value.filter(\n (v) => v != null && typeof v === 'object' && typeof (v as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? v.orders : [];\n return orders.filter(\n (o) => o != null && typeof o === 'object' && typeof (o as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n return [];\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const ReadOnlyDischargeMedicationOrders: React.FC<{\n fieldDef: FieldDef;\n value: unknown;\n}> = ({ fieldDef, value }) => {\n const orders = useMemo(() => parseOrders(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 {orders.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No medicines added</span>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o) => {\n const duration = formatDuration(o.start_date, o.end_date);\n const header = o.item_name ?? 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-gray-200 bg-gray-50 p-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate text-gray-900\">{header}</div>\n {sub && <div className=\"text-xs text-gray-500 mt-0.5 truncate\">{sub}</div>}\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-gray-600\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-gray-800/90\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react';\nimport { ReadOnlyText } from '../ui/widgets/ReadOnlyText';\nimport { ReadOnlySelect } from '../ui/widgets/ReadOnlySelect';\nimport { ReadOnlyMultiSelect } from '../ui/widgets/ReadOnlyMultiSelect';\nimport { ReadOnlyRepeatable } from '../ui/widgets/ReadOnlyRepeatable';\nimport { ReadOnlyDate } from '../ui/widgets/ReadOnlyDate';\nimport { ReadOnlyImageUpload } from '../ui/widgets/ReadOnlyImageUpload';\nimport { ReadOnlyMediaUpload } from '../ui/widgets/ReadOnlyMediaUpload';\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 { ReadOnlyReferral } from '../ui/widgets/ReadOnlyReferral';\nimport { ReadOnlyDischargeMedicationOrders } from '../ui/widgets/ReadOnlyDischargeMedicationOrders';\nimport type {\n CheckboxFieldDef,\n FieldDef,\n RadioFieldDef,\n ReferralFieldDef,\n RepeatableFieldDef,\n SelectFieldDef,\n StaticTextFieldDef,\n} from '../core/types';\nimport {\n functionalImpairmentTotal,\n parseFunctionalImpairmentScore,\n} from '../core/functionalImpairmentScore';\n\ninterface ReadOnlyFieldRendererProps {\n fieldDef: FieldDef;\n value: unknown;\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 SelectFieldDef} value={value} />;\n \n case 'radio':\n return <ReadOnlyRadio fieldDef={fieldDef as RadioFieldDef} value={value} />;\n \n case 'checkbox':\n return <ReadOnlyCheckbox fieldDef={fieldDef as CheckboxFieldDef} value={value} />;\n \n case 'multiselect':\n return <ReadOnlyMultiSelect fieldDef={fieldDef as SelectFieldDef} value={value} />;\n \n case 'repeatable':\n return <ReadOnlyRepeatable fieldDef={fieldDef as RepeatableFieldDef} value={value} />;\n \n case 'image_upload':\n return <ReadOnlyImageUpload fieldDef={fieldDef} value={value} />;\n\n case 'media_upload':\n return <ReadOnlyMediaUpload 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 'referral':\n return <ReadOnlyReferral fieldDef={fieldDef as ReferralFieldDef} value={value} />;\n\n case 'discharge_medication_orders':\n return <ReadOnlyDischargeMedicationOrders fieldDef={fieldDef} value={value} />;\n\n case 'toggle': {\n const isOn = value === true;\n return (\n <div className=\"space-y-1\">\n <p className=\"text-xs text-muted-foreground\">{fieldDef.label}</p>\n <span className={`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${isOn ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-600'}`}>\n {isOn ? 'Yes' : 'No'}\n </span>\n </div>\n );\n }\n\n case 'suggestion_textarea':\n case 'complaint_chips':\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n\n case 'lens_assessment': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as {\n notes?: unknown;\n assessmentKey?: unknown;\n locs?: unknown;\n })\n : null;\n const notes = typeof v?.notes === 'string' ? v.notes : '';\n const key = typeof v?.assessmentKey === 'string' ? v.assessmentKey : null;\n const locs = v?.locs;\n const locsRecord =\n locs != null &&\n typeof locs === 'object' &&\n !Array.isArray(locs)\n ? (locs as Record<string, unknown>)\n : null;\n const eyeLine = (label: string, g: Record<string, unknown> | undefined) => {\n if (!g || typeof g !== 'object') return null;\n const num = (k: string) => (typeof g[k] === 'number' ? g[k] : '—');\n return (\n <p className=\"text-xs text-foreground\">\n {label}: NO {String(num('NO'))}, NC {String(num('NC'))}, C {String(num('C'))}, PSC{' '}\n {String(num('PSC'))}\n </p>\n );\n };\n return (\n <div className=\"space-y-2 rounded-md border p-3 text-sm\">\n {fieldDef.label && (\n <p className=\"font-medium text-foreground\">{fieldDef.label}</p>\n )}\n {locsRecord ? (\n <div className=\"space-y-1 border-l-2 border-muted pl-2\">\n {eyeLine('Right (OD)', locsRecord.OD as Record<string, unknown> | undefined)}\n {eyeLine('Left (OS)', locsRecord.OS as Record<string, unknown> | undefined)}\n </div>\n ) : null}\n {key && (\n <p className=\"text-xs text-muted-foreground\">\n Assessment (legacy): {key}\n </p>\n )}\n {notes && <p className=\"whitespace-pre-wrap text-foreground\">{notes}</p>}\n </div>\n );\n }\n\n case 'functional_impairment_score': {\n const v = parseFunctionalImpairmentScore(value);\n const total = functionalImpairmentTotal(v);\n const lines = [\n `Reading: ${v.reading}`,\n `Night driving: ${v.nightDriving}`,\n `Glare: ${v.glare}`,\n `Occupation: ${v.occupation}`,\n `ADL: ${v.adl}`,\n `Total: ${total}/15`,\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'biometry_iol_workup': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n const s = (k: string) => (typeof v[k] === 'string' ? (v[k] as string) : '');\n const b = (k: string) => v[k] === true;\n const method =\n v.method === 'ascan_immersion'\n ? 'A-scan (immersion)'\n : v.method === 'ascan_contact'\n ? 'A-scan (contact)'\n : 'Optical biometry (IOL Master)';\n const lines = [\n `Axial length OD/OS (mm): ${s('axialLengthOD')} / ${s('axialLengthOS')}`,\n `K1/K2/Axis OD/OS: ${s('k1k2AxisOD')} / ${s('k1k2AxisOS')}`,\n `AC depth OD/OS (mm): ${s('anteriorChamberDepthOD')} / ${s('anteriorChamberDepthOS')}`,\n `IOL power (D) OD/OS: ${s('iolPowerOD')} / ${s('iolPowerOS')}`,\n `Target refraction (D) OD/OS: ${s('targetRefractionOD')} / ${s('targetRefractionOS')}`,\n `Formula: ${s('formula') || '—'}`,\n `Method: ${method}`,\n `Corneal topography uploaded: ${b('cornealTopoUploaded') ? 'Yes' : 'No'}`,\n `Specular microscopy: ${b('specularMicroscopyDone') ? 'Yes' : 'No'}`,\n `Endothelial count: ${s('endothelialCount') || '—'}`,\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'surgical_risk_flags': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as { OD?: unknown; OS?: unknown })\n : null;\n const list = (x: unknown) =>\n Array.isArray(x) ? x.filter((i): i is string => typeof i === 'string').join(', ') : '—';\n const od = list(v?.OD);\n const os = list(v?.OS);\n const lines = [`Right eye (OD): ${od}`, `Left eye (OS): ${os}`].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\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 */"]}
|