formanitor 0.2.2 → 0.2.4

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.
Files changed (118) hide show
  1. package/dist/BpeChartWidget-HATASHAC.mjs +7 -0
  2. package/dist/BpeChartWidget-HATASHAC.mjs.map +1 -0
  3. package/dist/BpeChartWidget-VZRH7M7L.cjs +28 -0
  4. package/dist/BpeChartWidget-VZRH7M7L.cjs.map +1 -0
  5. package/dist/{DateTimeWidget-3AUBZYYK.mjs → DateTimeWidget-KRX4O6OD.mjs} +5 -4
  6. package/dist/DateTimeWidget-KRX4O6OD.mjs.map +1 -0
  7. package/dist/{DateTimeWidget-OS7ER5F6.cjs → DateTimeWidget-RJ7SATVA.cjs} +6 -5
  8. package/dist/DateTimeWidget-RJ7SATVA.cjs.map +1 -0
  9. package/dist/{DateWidget-KCTE6N5G.mjs → DateWidget-JEKDKPNS.mjs} +4 -3
  10. package/dist/DateWidget-JEKDKPNS.mjs.map +1 -0
  11. package/dist/{DateWidget-UNLX544Z.cjs → DateWidget-T7IQUWEA.cjs} +8 -7
  12. package/dist/DateWidget-T7IQUWEA.cjs.map +1 -0
  13. package/dist/DentalChartWidget-LYLOFWZU.cjs +21 -0
  14. package/dist/DentalChartWidget-LYLOFWZU.cjs.map +1 -0
  15. package/dist/DentalChartWidget-P2YPKAMO.mjs +8 -0
  16. package/dist/DentalChartWidget-P2YPKAMO.mjs.map +1 -0
  17. package/dist/{EditableTable-VQ72UEFF.cjs → EditableTable-OW5LC6OC.cjs} +6 -5
  18. package/dist/EditableTable-OW5LC6OC.cjs.map +1 -0
  19. package/dist/{EditableTable-XFCPKSUY.mjs → EditableTable-VZ66IXYI.mjs} +5 -4
  20. package/dist/EditableTable-VZ66IXYI.mjs.map +1 -0
  21. package/dist/ExtraOralExamWidget-JVKJ4ZWC.mjs +438 -0
  22. package/dist/ExtraOralExamWidget-JVKJ4ZWC.mjs.map +1 -0
  23. package/dist/ExtraOralExamWidget-ZIOSKMIO.cjs +440 -0
  24. package/dist/ExtraOralExamWidget-ZIOSKMIO.cjs.map +1 -0
  25. package/dist/{FollowupWidget-MAYTHM2E.cjs → FollowupWidget-2STSJSDY.cjs} +8 -7
  26. package/dist/FollowupWidget-2STSJSDY.cjs.map +1 -0
  27. package/dist/{FollowupWidget-BFZ6P2JE.mjs → FollowupWidget-GCGPWZVY.mjs} +4 -3
  28. package/dist/FollowupWidget-GCGPWZVY.mjs.map +1 -0
  29. package/dist/{OBGPathwayWidget-X67XKRIH.mjs → OBGPathwayWidget-QJNWUIEM.mjs} +4 -3
  30. package/dist/OBGPathwayWidget-QJNWUIEM.mjs.map +1 -0
  31. package/dist/{OBGPathwayWidget-XGN3HEWS.cjs → OBGPathwayWidget-YRU36UL7.cjs} +13 -12
  32. package/dist/OBGPathwayWidget-YRU36UL7.cjs.map +1 -0
  33. package/dist/{ObstetricHistoryWidget-Z4VAXH3E.mjs → ObstetricHistoryWidget-EW6JLNQ7.mjs} +4 -3
  34. package/dist/ObstetricHistoryWidget-EW6JLNQ7.mjs.map +1 -0
  35. package/dist/{ObstetricHistoryWidget-RP7NY4PV.cjs → ObstetricHistoryWidget-OOWCVFRB.cjs} +10 -9
  36. package/dist/ObstetricHistoryWidget-OOWCVFRB.cjs.map +1 -0
  37. package/dist/PregnancyStatusWidget-QTTVFBOE.cjs +96 -0
  38. package/dist/PregnancyStatusWidget-QTTVFBOE.cjs.map +1 -0
  39. package/dist/PregnancyStatusWidget-U2BEJGBJ.mjs +94 -0
  40. package/dist/PregnancyStatusWidget-U2BEJGBJ.mjs.map +1 -0
  41. package/dist/{SuggestionTextareaWidget-DY6M5JPO.cjs → SuggestionTextareaWidget-FWRZ46MV.cjs} +5 -5
  42. package/dist/{SuggestionTextareaWidget-DY6M5JPO.cjs.map → SuggestionTextareaWidget-FWRZ46MV.cjs.map} +1 -1
  43. package/dist/{SuggestionTextareaWidget-GQTWCFBG.mjs → SuggestionTextareaWidget-UNL3FZRI.mjs} +3 -3
  44. package/dist/{SuggestionTextareaWidget-GQTWCFBG.mjs.map → SuggestionTextareaWidget-UNL3FZRI.mjs.map} +1 -1
  45. package/dist/TreatmentPlanWidget-665HLKYV.mjs +317 -0
  46. package/dist/TreatmentPlanWidget-665HLKYV.mjs.map +1 -0
  47. package/dist/TreatmentPlanWidget-TATWSPLY.cjs +319 -0
  48. package/dist/TreatmentPlanWidget-TATWSPLY.cjs.map +1 -0
  49. package/dist/{chunk-4PMNVBJD.mjs → chunk-2OMQV2ZB.mjs} +4 -3
  50. package/dist/chunk-2OMQV2ZB.mjs.map +1 -0
  51. package/dist/chunk-5RT3S67O.cjs +30 -0
  52. package/dist/chunk-5RT3S67O.cjs.map +1 -0
  53. package/dist/chunk-6YUVILN5.mjs +42 -0
  54. package/dist/chunk-6YUVILN5.mjs.map +1 -0
  55. package/dist/{chunk-YEFM2ERQ.cjs → chunk-7OQFO6TM.cjs} +8 -7
  56. package/dist/chunk-7OQFO6TM.cjs.map +1 -0
  57. package/dist/chunk-BBD3Y37O.cjs +220 -0
  58. package/dist/chunk-BBD3Y37O.cjs.map +1 -0
  59. package/dist/chunk-EJ7MKHER.mjs +45 -0
  60. package/dist/chunk-EJ7MKHER.mjs.map +1 -0
  61. package/dist/{chunk-XN2QLBLT.mjs → chunk-G6Y4UJPN.mjs} +5 -4
  62. package/dist/chunk-G6Y4UJPN.mjs.map +1 -0
  63. package/dist/{chunk-AZSAPO2V.cjs → chunk-HXY3IX3G.cjs} +3 -44
  64. package/dist/chunk-HXY3IX3G.cjs.map +1 -0
  65. package/dist/{chunk-BMNY7F6H.mjs → chunk-JM7WNDNT.mjs} +4 -21
  66. package/dist/chunk-JM7WNDNT.mjs.map +1 -0
  67. package/dist/chunk-MQHZ7HD2.mjs +215 -0
  68. package/dist/chunk-MQHZ7HD2.mjs.map +1 -0
  69. package/dist/{chunk-ML47UEDU.cjs → chunk-O4FSJPU3.cjs} +2 -27
  70. package/dist/chunk-O4FSJPU3.cjs.map +1 -0
  71. package/dist/chunk-Q66LXMRR.mjs +28 -0
  72. package/dist/chunk-Q66LXMRR.mjs.map +1 -0
  73. package/dist/chunk-RILRMRXB.cjs +50 -0
  74. package/dist/chunk-RILRMRXB.cjs.map +1 -0
  75. package/dist/chunk-SQ2KNAUD.cjs +64 -0
  76. package/dist/chunk-SQ2KNAUD.cjs.map +1 -0
  77. package/dist/{chunk-TVFUWRTE.cjs → chunk-TCQQUJCL.cjs} +5 -4
  78. package/dist/chunk-TCQQUJCL.cjs.map +1 -0
  79. package/dist/chunk-UKSP3B3W.mjs +600 -0
  80. package/dist/chunk-UKSP3B3W.mjs.map +1 -0
  81. package/dist/chunk-X4AJCTON.cjs +607 -0
  82. package/dist/chunk-X4AJCTON.cjs.map +1 -0
  83. package/dist/chunk-ZZX3IG2T.mjs +25 -0
  84. package/dist/chunk-ZZX3IG2T.mjs.map +1 -0
  85. package/dist/index.cjs +107 -47
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.d.cts +69 -3
  88. package/dist/index.d.ts +69 -3
  89. package/dist/index.mjs +73 -43
  90. package/dist/index.mjs.map +1 -1
  91. package/dist/read-only-table.d.cts +1 -1
  92. package/dist/read-only-table.d.ts +1 -1
  93. package/dist/smart.d.cts +1 -1
  94. package/dist/smart.d.ts +1 -1
  95. package/dist/{types-CYtJk8H9.d.ts → types-BbOnd5IN.d.cts} +53 -3
  96. package/dist/{types-CYtJk8H9.d.cts → types-BbOnd5IN.d.ts} +53 -3
  97. package/package.json +1 -1
  98. package/dist/DateTimeWidget-3AUBZYYK.mjs.map +0 -1
  99. package/dist/DateTimeWidget-OS7ER5F6.cjs.map +0 -1
  100. package/dist/DateWidget-KCTE6N5G.mjs.map +0 -1
  101. package/dist/DateWidget-UNLX544Z.cjs.map +0 -1
  102. package/dist/EditableTable-VQ72UEFF.cjs.map +0 -1
  103. package/dist/EditableTable-XFCPKSUY.mjs.map +0 -1
  104. package/dist/FollowupWidget-BFZ6P2JE.mjs.map +0 -1
  105. package/dist/FollowupWidget-MAYTHM2E.cjs.map +0 -1
  106. package/dist/OBGPathwayWidget-X67XKRIH.mjs.map +0 -1
  107. package/dist/OBGPathwayWidget-XGN3HEWS.cjs.map +0 -1
  108. package/dist/ObstetricHistoryWidget-RP7NY4PV.cjs.map +0 -1
  109. package/dist/ObstetricHistoryWidget-Z4VAXH3E.mjs.map +0 -1
  110. package/dist/chunk-4HDMR2LX.mjs +0 -69
  111. package/dist/chunk-4HDMR2LX.mjs.map +0 -1
  112. package/dist/chunk-4PMNVBJD.mjs.map +0 -1
  113. package/dist/chunk-AZSAPO2V.cjs.map +0 -1
  114. package/dist/chunk-BMNY7F6H.mjs.map +0 -1
  115. package/dist/chunk-ML47UEDU.cjs.map +0 -1
  116. package/dist/chunk-TVFUWRTE.cjs.map +0 -1
  117. package/dist/chunk-XN2QLBLT.mjs.map +0 -1
  118. package/dist/chunk-YEFM2ERQ.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/persistence/campBooking.ts","../src/core/marMedicationOrdersMeta.ts","../src/ui/widgets/MultiSelect.tsx","../src/ui/widgets/Repeatable.tsx","../src/ui/widgets/ImageUpload.tsx","../src/ui/widgets/MediaUpload.tsx","../src/ui/widgets/SignatureUpload.tsx","../src/ui/components/Upload.tsx","../src/ui/widgets/FormFileUpload.tsx","../src/ui/shadcn/radio-group.tsx","../src/ui/widgets/Radio.tsx","../src/ui/widgets/Checkbox.tsx","../src/ui/widgets/SliderWidget.tsx","../src/ui/widgets/PhoneInputWidget.tsx","../src/ui/widgets/OtpInputWidget.tsx","../src/ui/widgets/CampDatesWidget.tsx","../src/ui/widgets/CampTimeSlotsWidget.tsx","../src/ui/shadcn/switch.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.tsx","../src/react/DynamicForm.tsx","../src/react/renderSectionChildren.tsx","../src/react/DynamicFormV2.tsx","../src/react/MultiStepForm.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/ReadOnlyDateTime.tsx","../src/ui/widgets/ReadOnlyRadio.tsx","../src/ui/widgets/ReadOnlyCheckbox.tsx","../src/ui/widgets/ReadOnlyReferral.tsx","../src/ui/widgets/ReadOnlyDischargeMedicationOrders.tsx","../src/ui/widgets/ReadOnlyCampDates.tsx","../src/ui/widgets/ReadOnlyCampTimeSlots.tsx","../src/react/ReadOnlyFieldRenderer.tsx","../src/react/ReadOnlyForm.tsx","../src/react/FormControls.tsx","../src/utils/createUploadHandler.ts"],"names":["React","jsxs","jsx","useState","error","useRef","X","Image","Upload","useEffect","UploadIcon","useMemo","React8","Fragment","format","parseISO","React16","ChevronRight","Check","urlLooksLikePdf","isOptionSelected"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { PersistenceProvider, SavedState } from './index';\n\nexport interface CampBookingConfig {\n baseUrl: string;\n authToken?: string;\n /** Patient UUID sent as `patient_id` in the booking payload. */\n patientId: string;\n /**\n * Field ID that holds the selected camp date (a {@link CampDateSelection}).\n * The `id` of that selection is the camp instance UUID used in the URL.\n * Defaults to `\"camp_date\"`.\n */\n campDateFieldId?: string;\n /**\n * Field ID that holds the selected time slot's `primary_slot_id`.\n * Defaults to `\"camp_time_slot\"`.\n */\n slotFieldId?: string;\n /**\n * Additional field IDs whose values are included in `booking_form_data`.\n * If omitted, all values except `campDateFieldId` and `slotFieldId` are included.\n */\n bookingFormDataFields?: string[];\n}\n\n/**\n * Persistence provider that submits form values to the camp booking endpoint:\n * POST /api/camps/instances/{instance_id}/book/\n *\n * Auto-save on field changes is disabled (`autoSave: false`); call `store.save()`\n * on submit so `/book/` is not invoked while the user is still picking date/slot.\n *\n * Usage:\n * ```tsx\n * <FormProvider\n * schema={schema}\n * config={{\n * persistence: new CampBookingPersistenceProvider({\n * baseUrl: process.env.NEXT_PUBLIC_API_URL,\n * authToken: session.accessToken,\n * patientId: patient.id,\n * }),\n * }}\n * >\n * ```\n */\nexport class CampBookingPersistenceProvider implements PersistenceProvider {\n /** Camp booking is submit-only; field changes must not POST /book/. */\n readonly autoSave = false;\n\n private config: CampBookingConfig;\n\n constructor(config: CampBookingConfig) {\n this.config = config;\n }\n\n async save(_formId: string, state: SavedState): Promise<void> {\n const {\n baseUrl,\n authToken,\n patientId,\n campDateFieldId = 'camp_date',\n slotFieldId = 'camp_time_slot',\n bookingFormDataFields,\n } = this.config;\n\n const campDateValue = state.values[campDateFieldId];\n const instanceId =\n campDateValue && typeof campDateValue === 'object' && !Array.isArray(campDateValue)\n ? (campDateValue as Record<string, unknown>).id\n : null;\n\n if (!instanceId || typeof instanceId !== 'string') {\n throw new Error('Camp booking: no instance selected (camp_date field is empty or invalid).');\n }\n\n const primarySlotId = state.values[slotFieldId];\n if (!primarySlotId || typeof primarySlotId !== 'string') {\n throw new Error('Camp booking: no time slot selected.');\n }\n\n // Build booking_form_data from the remaining fields.\n const excludeKeys = new Set([campDateFieldId, slotFieldId]);\n const bookingFormData: Record<string, unknown> = {};\n const fieldKeys = bookingFormDataFields ?? Object.keys(state.values);\n for (const key of fieldKeys) {\n if (!excludeKeys.has(key)) {\n bookingFormData[key] = state.values[key];\n }\n }\n\n const idempotencyKey =\n typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'\n ? crypto.randomUUID()\n : `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n\n const payload = {\n primary_slot_id: primarySlotId,\n patient_id: patientId,\n booking_form_data: bookingFormData,\n idempotency_key: idempotencyKey,\n };\n\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n\n const response = await fetch(`${baseUrl}/api/camps/instances/${instanceId}/book/`, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => '');\n throw new Error(\n `Camp booking failed: ${response.status} ${response.statusText}${errorText ? ` – ${errorText}` : ''}`,\n );\n }\n }\n\n async load(_formId: string): Promise<SavedState | null> {\n return null;\n }\n\n async clear(_formId: string): Promise<void> {\n // No-op for bookings.\n }\n}\n","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 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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled ? 'opacity-50 pointer-events-none' : ''}`,\n )}\n >\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 && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\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 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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\n/** Browser-loadable URL only — plain S3 keys are not valid <img src>. */\nfunction extractImageDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\n}\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 /** Tracks blob: URLs we created so we can revoke them. */\n const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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 React.useEffect(() => {\n const displayUrl = extractImageDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n setPreview(null);\n return;\n }\n // Opaque key or non-displayable value: keep existing preview (e.g. in-flight blob).\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (!file.type.startsWith('image/')) {\n alert('Please select an image file');\n return;\n }\n\n const maxSize = 10 * 1024 * 1024;\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 revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\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 revokeTrackedBlob();\n setPreview(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n revokeTrackedBlob();\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={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\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={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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\n/** Browser-loadable URL only — opaque S3 keys are not valid iframe/img src. */\nfunction extractMediaDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\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 const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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 React.useEffect(() => {\n const displayUrl = extractMediaDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n if (pendingPreviewKindRef.current) {\n setPreviewIsPdf(pendingPreviewKindRef.current === 'pdf');\n pendingPreviewKindRef.current = null;\n } else {\n setPreviewIsPdf(urlLooksLikePdf(displayUrl));\n }\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n pendingPreviewKindRef.current = null;\n setPreview(null);\n setPreviewIsPdf(false);\n return;\n }\n // Opaque key: keep blob preview from in-flight upload.\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\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 const maxSize = 10 * 1024 * 1024;\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 revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n setPreviewIsPdf(isPdf);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\n\n pendingPreviewKindRef.current = isPdf ? 'pdf' : 'image';\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 pendingPreviewKindRef.current = null;\n revokeTrackedBlob();\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 revokeTrackedBlob();\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={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\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={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n {showPreview ? (\n /* ── Preview mode: existing signature from backend ── */\n <div className=\"relative\">\n <div\n className={fieldControlClass(\n fieldDef,\n 'border border-gray-200 rounded bg-white flex items-center justify-start p-2',\n )}\n >\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={fieldControlClass(\n fieldDef,\n `border rounded touch-none ${\n isConfirmed\n ? 'border-green-300 cursor-default'\n : 'border-gray-200 cursor-crosshair'\n }`,\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 && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { Upload as UploadIcon } from \"lucide-react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface UploadProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n value?: FileList | File[] | null;\n onChange: (files: FileList | null) => void;\n className?: string;\n /** Shown under placeholder, e.g. \"PDF, PNG, JPG\" */\n formatsLabel?: string;\n placeholder?: string;\n beforeUploadContent?: React.ReactNode;\n id?: string;\n /**\n * When true, do not show \"N files selected\" in the drop zone; parent can render file rows.\n */\n listLayout?: boolean;\n}\n\nexport function Upload({\n value,\n accept,\n multiple,\n disabled,\n onChange,\n className,\n formatsLabel,\n placeholder = \"Upload File\",\n beforeUploadContent,\n id: idProp,\n listLayout = false,\n}: UploadProps) {\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const generatedId = React.useId();\n const inputId = idProp ?? generatedId;\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.files ?? null);\n };\n\n React.useEffect(() => {\n if (!value && inputRef.current) {\n inputRef.current.value = \"\";\n }\n }, [value]);\n\n const count = value?.length ?? 0;\n const formatsText = formatsLabel ?? accept;\n\n return (\n <div\n className={cn(\n \"border border-dashed bg-[#F7F7F7] border-gray-200 rounded-lg py-5 px-4 flex items-center justify-center text-[#989898]\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <input\n type=\"file\"\n ref={inputRef}\n accept={accept}\n id={inputId}\n className=\"hidden\"\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n />\n <label\n htmlFor={inputId}\n className={cn(\n \"cursor-pointer w-full\",\n disabled && \"cursor-not-allowed\",\n )}\n >\n <div>\n {count > 0 && !listLayout ? (\n <div className=\"text-center text-sm font-semibold text-gray-700\">\n {count} file{count === 1 ? \"\" : \"s\"} selected\n </div>\n ) : beforeUploadContent ? (\n beforeUploadContent\n ) : (\n <div className=\"flex flex-col items-center justify-center\">\n <div className=\"text-sm text-black font-normal leading-[120%] tracking-[-0.28px] text-center\">\n Upload your surgery prescription\n <br />\n and medical records\n </div>\n <UploadIcon size={20} className=\"text-[#727272] mt-4\" />\n <div className=\"text-xs mt-1 text-text-shades-2\">\n {placeholder}\n </div>\n <div className=\"mt-2 text-10px leading-[140%] text-[#989898]\">\n Supported formats - {formatsText}\n </div>\n </div>\n )}\n </div>\n </label>\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport { X } from \"lucide-react\";\nimport { useField } from \"../../react/useField\";\nimport { useFormStore } from \"../../react/FormProvider\";\nimport { useForm } from \"../../react/useForm\";\nimport { Label } from \"../shadcn/label\";\nimport { Upload } from \"../components/Upload\";\nimport type { FileUploadFieldDef } from \"../../core/types\";\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from \"../../react/fieldStyle\";\n\nfunction fileListFromArray(files: File[]): FileList {\n const dt = new DataTransfer();\n files.forEach((f) => dt.items.add(f));\n return dt.files;\n}\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept === \"*/*\") return true;\n const tokens = accept.split(\",\").map((t) => t.trim().toLowerCase());\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return tokens.some((token) => {\n if (token.startsWith(\".\")) return name.endsWith(token);\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, -1);\n return type.startsWith(prefix);\n }\n return type === token;\n });\n}\n\nfunction basenameKey(key: string): string {\n const parts = key.split(\"/\");\n return parts[parts.length - 1] || key;\n}\n\nfunction fileRows(\n listLayout: boolean,\n localFiles: FileList | null,\n value: unknown,\n): { label: string; index: number }[] {\n if (!listLayout) return [];\n if (localFiles && localFiles.length > 0) {\n return Array.from(localFiles).map((f, i) => ({ label: f.name, index: i }));\n }\n if (Array.isArray(value) && value.length > 0) {\n return value.map((k, i) => ({\n label: basenameKey(String(k)),\n index: i,\n }));\n }\n if (value !== null && value !== undefined && value !== \"\") {\n return [{ label: basenameKey(String(value)), index: 0 }];\n }\n return [];\n}\n\nexport const FormFileUploadWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } =\n useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [localFiles, setLocalFiles] = useState<FileList | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const listLayout =\n fieldDef?.type === \"file_upload\" &&\n (fieldDef as FileUploadFieldDef).list === true;\n\n const rows = useMemo(\n () => fileRows(listLayout, localFiles, value),\n [listLayout, localFiles, value],\n );\n\n if (!fieldDef || fieldDef.type !== \"file_upload\") return null;\n\n const def = fieldDef as FileUploadFieldDef;\n const accept = def.accept ?? \"*/*\";\n const maxSize = def.maxSize ?? 10 * 1024 * 1024;\n const allowMultiple = def.multiple === true;\n\n const uploadHandler = store.getFileUploadHandler();\n const showLabel = isLabelVisible(fieldDef);\n\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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. Provide `config.onFileUpload` or\n `config.onUpload` on FormProvider.\n </p>\n </div>\n </div>\n );\n }\n\n const hasStoredValue =\n value !== null &&\n value !== undefined &&\n value !== \"\" &&\n !(Array.isArray(value) && value.length === 0);\n\n const removeFileAt = (index: number) => {\n setTouched();\n if (disabled || isUploading) return;\n\n const hadLocal = localFiles != null && localFiles.length > 0;\n\n if (hadLocal) {\n const next = Array.from(localFiles!).filter((_, i) => i !== index);\n if (next.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n setLocalFiles(fileListFromArray(next));\n if (allowMultiple && Array.isArray(value)) {\n setValue(value.filter((_, i) => i !== index));\n } else {\n setValue(null);\n }\n return;\n }\n\n if (allowMultiple && Array.isArray(value)) {\n const next = value.filter((_, i) => i !== index);\n if (next.length === 0) store.setExternalError(fieldId, null);\n setValue(next.length ? next : null);\n return;\n }\n store.setExternalError(fieldId, null);\n setValue(null);\n };\n\n const handleChange = async (files: FileList | null) => {\n setTouched();\n\n if (!files || files.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n\n const selected = Array.from(files);\n for (const file of selected) {\n if (!matchesAccept(file, accept)) {\n setLocalFiles(null);\n store.setExternalError(fieldId, `File type not allowed: ${file.name}`);\n return;\n }\n if (file.size > maxSize) {\n setLocalFiles(null);\n store.setExternalError(\n fieldId,\n `File must be less than ${Math.round(maxSize / (1024 * 1024))}MB: ${file.name}`,\n );\n return;\n }\n }\n\n store.setExternalError(fieldId, null);\n\n const toUpload = allowMultiple ? selected : [selected[0]];\n setLocalFiles(fileListFromArray(toUpload));\n\n setIsUploading(true);\n store.incrementPendingUploads();\n\n try {\n if (allowMultiple) {\n const keys: string[] = [];\n for (const file of toUpload) {\n keys.push(await uploadHandler(file, file.name));\n }\n setValue(keys);\n } else {\n const key = await uploadHandler(toUpload[0], toUpload[0].name);\n setValue(key);\n }\n store.setExternalError(fieldId, null);\n } catch (err) {\n console.error(\"[FormFileUpload] Upload failed:\", err);\n const message =\n err instanceof Error ? err.message : \"Upload failed. Please try again.\";\n store.setExternalError(fieldId, message);\n setLocalFiles(null);\n setValue(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <Upload\n accept={accept}\n multiple={allowMultiple}\n value={localFiles}\n onChange={handleChange}\n disabled={disabled || isUploading}\n listLayout={listLayout}\n placeholder={\n isUploading\n ? \"Uploading...\"\n : (def.uploadPlaceholder ?? \"Upload File\")\n }\n formatsLabel={def.uploadFormats}\n className={fieldControlClass(\n fieldDef,\n isUploading ? \"opacity-70\" : undefined,\n )}\n />\n\n {listLayout && rows.length > 0 ? (\n <ul className=\"flex flex-col gap-2 !mt-5 list-none p-0 mb-0 mx-0\">\n {rows.map((row) => (\n <li\n key={`${row.index}-${row.label}`}\n className=\"flex items-center justify-between rounded-md bg-white/50 px-3 py-2.5 text-sm text-[#191919] font-normal tracking-[-0.28px]\"\n >\n <span className=\"truncate pr-2\">{row.label}</span>\n <button\n type=\"button\"\n disabled={disabled || isUploading}\n aria-label={`Remove ${row.label}`}\n onClick={() => removeFileAt(row.index)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-400 text-white hover:bg-gray-500 disabled:opacity-50\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n\n {hasStoredValue && !listLayout ? (\n <p className=\"text-xs text-green-600\">\n {allowMultiple && Array.isArray(value)\n ? `${value.length} file(s) uploaded`\n : \"File uploaded\"}\n </p>\n ) : null}\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, \"text-xs text-gray-500\")}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, \"text-xs text-red-500\")}>\n {error}\n </p>\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';\nimport {\n FieldRequiredIndicator,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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 && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled || loading ? 'opacity-50 pointer-events-none' : ''}`,\n )}\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={fieldDescriptionClass(fieldDef, 'text-xs text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Slider } from '../shadcn/slider';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { SliderFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SliderWidget: 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 || fieldDef.type !== 'slider') return null;\n\n const def = fieldDef as SliderFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const step = def.step ?? 1;\n\n const raw = value == null || value === '' ? min : Number(value);\n const num = Number.isFinite(raw) ? Math.min(max, Math.max(min, raw)) : min;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(def);\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n <span className=\"ml-2 text-muted-foreground font-normal tabular-nums\">\n {num}/{max}\n </span>\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label className={fieldLabelClass(def, labelClass)}>{labelContent}</Label>\n ) : (\n <Label className={fieldLabelClass(def)}>{labelContent}</Label>\n )\n ) : null;\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {labelEl}\n <Slider\n className={fieldControlClass(\n def,\n cn('py-1', showError && 'opacity-90 ring-1 ring-red-500 rounded'),\n )}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n value={[num]}\n onValueChange={(v) => {\n const n = v[0] ?? min;\n setValue(n);\n setTouched();\n }}\n aria-label={!showLabel ? `${def.label} ${num}/${max}` : undefined}\n />\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype SendStatus = 'idle' | 'sending' | 'sent' | 'error';\n\nconst RESEND_COOLDOWN_SECONDS = 30;\n\nexport const PhoneInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled, value: fieldValue } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Drive the input directly from the store so the value survives remounts\n // (e.g. completed step collapsing into an accordion and re-expanding).\n const rawPhone = (fieldValue as string) ?? '';\n\n // On remount (step collapses then re-expands), local state resets to defaults.\n // Seed from the store: 10 digits + no error means OTP was already sent successfully.\n const wasAlreadySent = rawPhone.length === 10 && !error;\n\n const [status, setStatus] = useState<SendStatus>(wasAlreadySent ? 'sent' : 'idle');\n const [resendCooldown, setResendCooldown] = useState(0);\n const [resendError, setResendError] = useState('');\n\n const hasSentRef = useRef(wasAlreadySent);\n const sentPhoneRef = useRef(wasAlreadySent ? rawPhone : '');\n const isSendingRef = useRef(false);\n const isResendingRef = useRef(false);\n\n // Suppress \"Sending OTP...\" from appearing as a red error; show spinner instead.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'sending' &&\n status !== 'sent';\n\n // Resend cooldown tick.\n useEffect(() => {\n if (resendCooldown <= 0) return;\n const t = setTimeout(() => setResendCooldown((c) => Math.max(0, c - 1)), 1000);\n return () => clearTimeout(t);\n }, [resendCooldown]);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 10-digit mobile number';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 10);\n\n // If user edits after a successful send, re-lock step 1 and clear any verified OTP.\n if (hasSentRef.current && digits !== sentPhoneRef.current) {\n hasSentRef.current = false;\n sentPhoneRef.current = '';\n setStatus('idle');\n setResendCooldown(0);\n setResendError('');\n store.setExternalError(fieldId, 'Send OTP to continue');\n\n // Clear the linked OTP field so a stale verified value can't survive a phone change.\n const otpFieldId = (fieldDef.meta as any)?.otpFieldId as string | undefined;\n if (otpFieldId) {\n store.setValue(otpFieldId, '');\n store.setExternalError(otpFieldId, 'Verify OTP to continue');\n }\n }\n\n store.setValue(fieldId, digits);\n\n if (digits.length === 10 && !hasSentRef.current && !isSendingRef.current) {\n sendOtp(digits);\n }\n };\n\n const sendOtp = async (phone: string) => {\n if (isSendingRef.current) return;\n isSendingRef.current = true;\n setStatus('sending');\n store.setExternalError(fieldId, 'Sending OTP...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const sendPath = authCfg?.sendPath ?? '/api/auth/otp/send/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${sendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${phone}` }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n hasSentRef.current = true;\n sentPhoneRef.current = phone;\n setStatus('sent');\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n store.setExternalError(fieldId, null);\n } else {\n setStatus('error');\n store.setExternalError(fieldId, data.error ?? 'Failed to send OTP. Please try again.');\n }\n } catch {\n setStatus('error');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n } finally {\n isSendingRef.current = false;\n }\n };\n\n const handleResend = async () => {\n if (isResendingRef.current || resendCooldown > 0) return;\n isResendingRef.current = true;\n setResendError('');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const resendPath = authCfg?.resendPath ?? '/api/auth/otp/resend/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${resendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${rawPhone}`, retrytype: 'text' }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n setResendError('');\n } else {\n setResendError(data.error ?? 'Failed to resend OTP. Please try again.');\n }\n } catch {\n setResendError('Network error. Please try again.');\n } finally {\n isResendingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={rawPhone}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'sending'}\n placeholder={placeholder}\n maxLength={10}\n className={fieldControlClass(\n fieldDef,\n cn(\n showError && 'border-red-500',\n status === 'sent' && 'border-green-500 pr-9',\n status === 'sending' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'sending' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'sent' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'sent' && (\n <p className=\"text-xs text-green-600\">OTP sent to +91{rawPhone}</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n\n {status === 'sent' && (\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span>Didn&apos;t receive it?</span>\n <button\n type=\"button\"\n onClick={handleResend}\n disabled={resendCooldown > 0}\n className={cn(\n 'underline transition-colors',\n resendCooldown > 0\n ? 'opacity-40 cursor-not-allowed'\n : 'text-primary hover:text-primary/80 cursor-pointer',\n )}\n >\n {resendCooldown > 0 ? `Resend in ${resendCooldown}s` : 'Resend OTP'}\n </button>\n </div>\n )}\n\n {resendError && (\n <p className=\"text-xs text-red-500\">{resendError}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype VerifyStatus = 'idle' | 'verifying' | 'verified' | 'failed';\n\nexport const OtpInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Resolve which field holds the phone number (via meta or default \"phone\").\n const phoneFieldId: string =\n (fieldDef?.meta as any)?.phoneFieldId ?? 'phone';\n\n // Subscribe to phone field reactively — needed for verify API call.\n const { value: phoneValue } = useField(phoneFieldId);\n const phone = (phoneValue as string) ?? '';\n\n // Always send E.164 to the API regardless of what's stored in the form.\n const e164Phone = phone.startsWith('+') ? phone : `+91${phone}`;\n\n const [otp, setOtp] = useState('');\n const [status, setStatus] = useState<VerifyStatus>('idle');\n\n const isVerifyingRef = useRef(false);\n\n // Suppress \"Verifying...\" from showing as a red error — spinner handles that.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'verifying' &&\n status !== 'verified';\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 4-digit OTP';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 4);\n\n // Reset to idle if user re-enters after a failed attempt.\n if (status === 'failed') {\n setStatus('idle');\n store.setExternalError(fieldId, null);\n }\n\n setOtp(digits);\n store.setValue(fieldId, digits);\n\n if (digits.length === 4 && !isVerifyingRef.current) {\n verifyOtp(digits);\n }\n };\n\n const verifyOtp = async (code: string) => {\n if (isVerifyingRef.current) return;\n isVerifyingRef.current = true;\n setStatus('verifying');\n store.setExternalError(fieldId, 'Verifying...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const verifyPath = authCfg?.verifyPath ?? '/api/auth/otp/verify/';\n const res = await fetch(`${base}${verifyPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: e164Phone, otp_code: code }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setStatus('verified');\n store.setExternalError(fieldId, null);\n store.setValue(fieldId, {\n verified: true as const,\n phone: e164Phone,\n code,\n ...(data?.verification_token ? { token: data.verification_token } : {}),\n });\n } else {\n setStatus('failed');\n const msg = data.error ?? 'Invalid OTP. Please try again.';\n store.setExternalError(fieldId, msg);\n setOtp('');\n store.setValue(fieldId, '');\n }\n } catch {\n setStatus('failed');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n setOtp('');\n store.setValue(fieldId, '');\n } finally {\n isVerifyingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={otp}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'verifying' || status === 'verified'}\n placeholder={placeholder}\n maxLength={4}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'tracking-widest text-center text-lg',\n showError && 'border-red-500',\n status === 'verified' && 'border-green-500 pr-9',\n status === 'verifying' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'verifying' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'verified' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'verified' && (\n <p className=\"text-xs text-green-600\">Mobile number verified successfully</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { format, parseISO, addDays, startOfMonth, isSameMonth } from 'date-fns';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { cn } from '../../core/utils';\nimport {\n campDateSelectionFromOption,\n parseCampDateValue,\n} from '../../core/campDateValue';\nimport type { CampDateOption, CampDatesFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction formatCampDatePill(date: string): { day: string; weekday: string; label: string } {\n const parsed = parseISO(date);\n return {\n day: format(parsed, 'd'),\n weekday: format(parsed, 'EEE'),\n label: format(parsed, 'EEE, MMM d, yyyy'),\n };\n}\n\ninterface InstancesApiResult {\n id: string;\n date: string;\n notes: string;\n status: string;\n}\n\ninterface AvailabilityWindow {\n primary_slot_id: string;\n start_time: string;\n end_time: string;\n primary_available_capacity: number;\n is_bookable: boolean;\n}\n\nasync function fetchBookableInstances(\n base: string,\n campId: string,\n token: string,\n): Promise<CampDateOption[]> {\n const today = format(new Date(), 'yyyy-MM-dd');\n const end = format(addDays(new Date(), 30), 'yyyy-MM-dd');\n const headers: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n\n const res = await fetch(\n `${base}/api/camps/${campId}/instances/?start_date=${today}&end_date=${end}`,\n { headers },\n );\n if (!res.ok) throw new Error(`Instances fetch failed: ${res.status}`);\n const data = await res.json();\n const results: InstancesApiResult[] = data.results ?? [];\n\n const withAvailability = await Promise.all(\n results.map(async (inst) => {\n const avRes = await fetch(`${base}/api/camps/instances/${inst.id}/availability/`, {\n headers,\n });\n const avData = avRes.ok ? await avRes.json() : { windows: [] };\n const windows: AvailabilityWindow[] = avData.windows ?? [];\n return { inst, windows };\n }),\n );\n\n return withAvailability\n .filter(({ windows }) =>\n windows.some((w) => w.is_bookable && w.primary_available_capacity > 0),\n )\n .map(({ inst, windows }) => ({\n id: inst.id,\n date: inst.date,\n location: inst.notes || '',\n spotsLeft: windows.reduce(\n (sum, w) => sum + (w.is_bookable ? (w.primary_available_capacity ?? 0) : 0),\n 0,\n ),\n }));\n}\n\nconst datesScrollClass =\n 'flex gap-2.5 overflow-x-auto overflow-y-visible pb-4 pt-2 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden';\n\nconst CAMP_DATE_PRIMARY_GRADIENT =\n 'linear-gradient(328deg, #1F30A0 19.08%, #914BFA 80.92%)';\n\nconst campDatePillShadow = {\n unselected: 'rgba(0, 0, 0, 0.12) 0px 6px 14px',\n selected: 'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px',\n} as const;\n\nexport const CampDatesWidget: 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 showError = !!error && (touched || state.submitAttempted);\n\n const [fetchedOptions, setFetchedOptions] = useState<CampDateOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n const [monthIndex, setMonthIndex] = useState(0);\n\n const def = fieldDef as CampDatesFieldDef | undefined;\n const campId = def?.meta?.campId;\n const hasStaticOptions = (def?.options?.length ?? 0) > 0;\n\n useEffect(() => {\n if (!campId || hasStaticOptions) return;\n\n const cfg = store.getConfig();\n const base =\n cfg.auth?.baseUrl ??\n (typeof process !== 'undefined' ? (process.env?.NEXT_PUBLIC_API_URL ?? '') : '');\n const token = cfg.camps?.authToken ?? '';\n\n setIsLoading(true);\n setFetchError(null);\n\n fetchBookableInstances(base, campId, token)\n .then(setFetchedOptions)\n .catch(() => setFetchError('Failed to load available dates. Please try again.'))\n .finally(() => setIsLoading(false));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [campId, hasStaticOptions]);\n\n const camps = hasStaticOptions\n ? ((def?.options as CampDateOption[] | undefined) ?? [])\n : fetchedOptions;\n const selected = parseCampDateValue(value, camps);\n\n const sortedCamps = useMemo(\n () => [...camps].sort((a, b) => a.date.localeCompare(b.date)),\n [camps],\n );\n\n const months = useMemo(() => {\n const seen = new Set<string>();\n const result: Date[] = [];\n for (const camp of sortedCamps) {\n const monthStart = startOfMonth(parseISO(camp.date));\n const key = format(monthStart, 'yyyy-MM');\n if (!seen.has(key)) {\n seen.add(key);\n result.push(monthStart);\n }\n }\n return result;\n }, [sortedCamps]);\n\n useEffect(() => {\n if (months.length === 0) return;\n if (selected?.date) {\n const idx = months.findIndex((m) => isSameMonth(m, parseISO(selected.date)));\n if (idx >= 0) {\n setMonthIndex(idx);\n return;\n }\n }\n setMonthIndex(0);\n }, [months, selected?.date]);\n\n if (!fieldDef || !def) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n const currentMonth = months[monthIndex] ?? null;\n const visibleCamps = currentMonth\n ? sortedCamps.filter((camp) => isSameMonth(parseISO(camp.date), currentMonth))\n : sortedCamps;\n\n const canGoPrev = monthIndex > 0;\n const canGoNext = monthIndex < months.length - 1;\n\n const handleSelect = (campOptId: string) => {\n if (disabled) return;\n const camp = camps.find((c) => c.id === campOptId);\n if (!camp) return;\n\n const nextSelection = campDateSelectionFromOption(camp);\n const prevId = selected?.id ?? null;\n setValue(nextSelection);\n setTouched();\n store.setExternalError(fieldId, null);\n\n const timeSlotFieldId = def.meta?.timeSlotFieldId;\n if (timeSlotFieldId && prevId !== campOptId) {\n store.setValue(timeSlotFieldId, null);\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-3')}>\n {showLabel || months.length > 0 ? (\n <div className=\"flex items-center justify-between gap-3\">\n {showLabel ? (\n <h3 className=\"text-sm font-normal text-[#727272]\">\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </h3>\n ) : (\n <span aria-hidden className=\"shrink-0\" />\n )}\n {months.length > 0 && currentMonth ? (\n <div className=\"flex shrink-0 items-center gap-1 text-[#191919]\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n disabled={!canGoPrev || disabled}\n onClick={() => setMonthIndex((i) => Math.max(0, i - 1))}\n className={cn(\n 'rounded p-0.5 transition-opacity',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n (!canGoPrev || disabled) && 'cursor-not-allowed opacity-30',\n )}\n >\n <ChevronLeft className=\"h-4 w-4\" aria-hidden />\n </button>\n <span className=\"min-w-[3.5rem] text-center text-sm font-medium\">\n {format(currentMonth, 'MMMM')}\n </span>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n disabled={!canGoNext || disabled}\n onClick={() => setMonthIndex((i) => Math.min(months.length - 1, i + 1))}\n className={cn(\n 'rounded p-0.5 transition-opacity',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n (!canGoNext || disabled) && 'cursor-not-allowed opacity-30',\n )}\n >\n <ChevronRight className=\"h-4 w-4\" aria-hidden />\n </button>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {fieldDef.description ? (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n ) : null}\n\n {isLoading ? (\n <div className={datesScrollClass}>\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className=\"h-[76px] w-12 shrink-0 animate-pulse rounded-full bg-[#D9D9D9]\"\n />\n ))}\n </div>\n ) : fetchError ? (\n <p className=\"text-sm text-red-500\">{fetchError}</p>\n ) : camps.length === 0 && campId ? (\n <p className=\"text-sm text-muted-foreground\">No available dates in the next 30 days.</p>\n ) : (\n <div role=\"radiogroup\" aria-label={fieldDef.label} className={datesScrollClass}>\n {visibleCamps.map((camp) => {\n const { day, weekday, label } = formatCampDatePill(camp.date);\n const isSelected = selected?.id === camp.id;\n\n return (\n <button\n key={camp.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={label}\n disabled={disabled}\n onClick={() => handleSelect(camp.id)}\n className={cn(\n 'relative flex h-[76px] w-12 shrink-0 flex-col items-center justify-between gap-2.5 rounded-full p-1.5',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n !isSelected && 'bg-white',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n style={{\n boxShadow: isSelected ? 'none' : campDatePillShadow.unselected,\n }}\n >\n <div\n aria-hidden\n className={cn(\n 'absolute inset-0 rounded-full bg-[#2F2F2F] transition-opacity duration-400',\n isSelected ? 'opacity-100' : 'opacity-0',\n )}\n style={{ boxShadow: campDatePillShadow.selected }}\n />\n <div\n className={cn(\n 'relative z-10 flex h-9 w-9 items-center justify-center rounded-full text-[12px] font-medium transition-colors duration-200',\n isSelected ? 'text-white' : 'bg-[#D9D9D9] text-[#1E1E1E]',\n )}\n style={\n isSelected ? { backgroundImage: CAMP_DATE_PRIMARY_GRADIENT } : undefined\n }\n >\n {day}\n </div>\n <span\n className={cn(\n 'relative z-10 mb-1.5 text-center text-[10px] font-normal transition-colors duration-400',\n isSelected ? 'text-white' : 'text-[#1E1E1E]',\n )}\n >\n {weekday}\n </span>\n </button>\n );\n })}\n </div>\n )}\n\n {showError ? (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n ) : null}\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { format, parse, parseISO } from 'date-fns';\nimport { Calendar } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { cn } from '../../core/utils';\nimport { parseCampDateValue } from '../../core/campDateValue';\nimport type { CampDatesFieldDef, CampTimeSlotOption, CampTimeSlotsFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ninterface AvailabilityWindow {\n primary_slot_id: string;\n start_time: string;\n end_time: string;\n primary_available_capacity: number;\n is_bookable: boolean;\n}\n\nfunction formatSlotTime(time: string): string {\n try {\n return format(parse(time, 'HH:mm:ss', new Date()), 'hh:mm a');\n } catch {\n return time;\n }\n}\n\nfunction mapWindowsToSlots(windows: AvailabilityWindow[]): CampTimeSlotOption[] {\n return windows.map((w) => ({\n id: w.primary_slot_id,\n time: formatSlotTime(w.start_time),\n spotsLeft: w.is_bookable ? (w.primary_available_capacity ?? 0) : 0,\n capacity: w.primary_available_capacity ?? 0,\n }));\n}\n\nconst slotsScrollClass =\n 'w-full overflow-x-auto pb-1 [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border/70';\n\nconst slotPillShadow = '0 2.596px 5.193px 0 rgba(0, 0, 0, 0.10)';\n\nexport const CampTimeSlotsWidget: 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\n const campDateFieldId =\n (fieldDef as CampTimeSlotsFieldDef | undefined)?.meta?.campDateFieldId ?? 'camp_date';\n const { value: campDateValue, fieldDef: campDateFieldDef } = useField(campDateFieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n const def = fieldDef as CampTimeSlotsFieldDef | undefined;\n\n const campDateOptions = (campDateFieldDef as CampDatesFieldDef | undefined)?.options;\n const selectedCamp = parseCampDateValue(campDateValue, campDateOptions);\n const prevCampIdRef = useRef<string | null>(selectedCamp?.id ?? null);\n\n const [fetchedSlots, setFetchedSlots] = useState<CampTimeSlotOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n\n const hasStaticOptions = (def?.options?.length ?? 0) > 0;\n const slots = hasStaticOptions ? (def?.options ?? []) : fetchedSlots;\n const selectedSlotId = value != null ? String(value) : null;\n\n // Fetch availability whenever the selected instance changes (and no static options).\n useEffect(() => {\n if (hasStaticOptions || !selectedCamp?.id) {\n if (!selectedCamp?.id) {\n setFetchedSlots([]);\n setFetchError(null);\n }\n return;\n }\n\n const instanceId = selectedCamp.id;\n const cfg = store.getConfig();\n const base =\n cfg.auth?.baseUrl ??\n (typeof process !== 'undefined' ? (process.env?.NEXT_PUBLIC_API_URL ?? '') : '');\n const token = cfg.camps?.authToken ?? '';\n const headers: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n\n setIsLoading(true);\n setFetchError(null);\n\n fetch(`${base}/api/camps/instances/${instanceId}/availability/`, { headers })\n .then((r) => {\n if (!r.ok) throw new Error(`Availability fetch failed: ${r.status}`);\n return r.json();\n })\n .then((data) => {\n setFetchedSlots(mapWindowsToSlots(data.windows ?? []));\n })\n .catch(() => setFetchError('Failed to load time slots. Please try again.'))\n .finally(() => setIsLoading(false));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedCamp?.id, hasStaticOptions]);\n\n // Clear the selected slot when the date changes.\n useEffect(() => {\n const campId = selectedCamp?.id ?? null;\n if (prevCampIdRef.current !== null && prevCampIdRef.current !== campId && selectedSlotId) {\n setValue(null);\n }\n prevCampIdRef.current = campId;\n }, [selectedCamp?.id, selectedSlotId, setValue]);\n\n // Invalidate the slot selection when it's no longer available.\n useEffect(() => {\n if (!selectedSlotId) return;\n const slotStillValid = slots.some((slot) => slot.id === selectedSlotId && slot.spotsLeft > 0);\n if (!slotStillValid) {\n setValue(null);\n }\n }, [selectedSlotId, setValue, slots]);\n\n if (!fieldDef || !def) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const handleSelect = (slotId: string, button?: HTMLButtonElement) => {\n if (disabled) return;\n setValue(slotId);\n setTouched();\n button?.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n };\n\n const dateLabel = selectedCamp?.date\n ? format(parseISO(selectedCamp.date), 'EEE, MMM d, yyyy')\n : null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-3')}>\n {showLabel ? (\n <div className=\"space-y-0.5\">\n <h3\n className={fieldLabelClass(\n fieldDef,\n 'text-lg font-semibold leading-tight text-foreground',\n )}\n >\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </h3>\n {dateLabel ? (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Calendar className=\"h-3.5 w-3.5 shrink-0\" aria-hidden />\n {dateLabel}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {isLoading ? (\n <div className={slotsScrollClass}>\n <div className=\"relative\" style={{ minWidth: 'max-content' }}>\n <div className=\"absolute left-0 right-0 top-0 h-0.5 w-full bg-[#DCDCDC]\" />\n <div className=\"flex gap-4 pt-3\">\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"mb-2 h-[34px] w-[86px] shrink-0 animate-pulse rounded-full bg-[#DCDCDC]\"\n />\n ))}\n </div>\n </div>\n </div>\n ) : fetchError ? (\n <p className=\"text-sm text-red-500\">{fetchError}</p>\n ) : !selectedCamp?.id ? (\n <p className=\"text-sm text-muted-foreground\">Select a date to see available time slots.</p>\n ) : slots.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No time slots available for this date.</p>\n ) : (\n <div\n role=\"radiogroup\"\n aria-label={fieldDef.label}\n className={slotsScrollClass}\n >\n <div className=\"relative\" style={{ minWidth: 'max-content' }}>\n <div className=\"absolute left-0 right-0 top-0 h-0.5 w-full bg-[#DCDCDC]\" />\n <div className=\"flex gap-4 pt-3\">\n {slots.map((slot) => {\n const isFull = slot.spotsLeft <= 0;\n const selected = selectedSlotId === slot.id;\n\n return (\n <button\n key={slot.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled || isFull}\n onClick={(e) => handleSelect(slot.id, e.currentTarget)}\n className={cn(\n 'relative mb-2 w-[86px] shrink-0 rounded-full px-3 py-2 text-xs font-medium transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n isFull\n ? 'cursor-not-allowed bg-[#DCDCDC]/60 text-black/40'\n : selected\n ? 'bg-[#2F2F2F] text-white'\n : 'bg-[#DCDCDC] text-black',\n disabled && !isFull && 'cursor-not-allowed opacity-60',\n )}\n style={isFull ? undefined : { boxShadow: slotPillShadow }}\n >\n {selected && !isFull ? (\n <span\n className=\"absolute -top-3 left-0 right-0 h-0.5 bg-[#6641D8]\"\n aria-hidden\n />\n ) : null}\n <span className=\"whitespace-nowrap\">{slot.time}</span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n )}\n\n {showError ? (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n ) : null}\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 from 'react';\nimport type { StaticTextFieldDef, FieldDef } from '../core/types';\nimport { cn } from '../core/utils';\nimport { useField } from './useField';\n// Lightweight widgets kept eager: they only depend on Radix + native inputs and\n// are common in simple forms, so loading them behind Suspense would add a flash\n// for no real byte savings.\nimport { TextWidget } from '../ui/widgets/Text';\nimport { SelectWidget } from '../ui/widgets/Select';\nimport { MultiSelectWidget } from '../ui/widgets/MultiSelect';\nimport { RepeatableWidget } from '../ui/widgets/Repeatable';\nimport { ImageUploadWidget } from '../ui/widgets/ImageUpload';\nimport { MediaUploadWidget } from '../ui/widgets/MediaUpload';\nimport { SignatureUploadWidget } from '../ui/widgets/SignatureUpload';\nimport { FormFileUploadWidget } from '../ui/widgets/FormFileUpload';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\nimport { SliderWidget } from '../ui/widgets/SliderWidget';\nimport { PhoneInputWidget } from '../ui/widgets/PhoneInputWidget';\nimport { OtpInputWidget } from '../ui/widgets/OtpInputWidget';\nimport { CampDatesWidget } from '../ui/widgets/CampDatesWidget';\nimport { CampTimeSlotsWidget } from '../ui/widgets/CampTimeSlotsWidget';\nimport { Switch } from '../ui/shadcn/switch';\nimport { Label } from '../ui/shadcn/label';\nimport { useFormStore } from './FormProvider';\nimport type { ToggleFieldDef } from '../core/types';\nimport { fieldMetaRequestsMarMedicationOrdersButton } from '../core/marMedicationOrdersMeta';\nimport {\n FieldRequiredIndicator,\n fieldDescriptionClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from './fieldStyle';\n\ntype WidgetComponent = React.ComponentType<{ fieldId: string }>;\n\n// Heavy / specialty widgets are loaded on demand so simple forms never ship\n// their dependencies. Each becomes its own async chunk, fetched only when a\n// form actually renders that field type. The big wins:\n// - richtext -> TipTap + ProseMirror\n// - date / datetime -> react-day-picker\n// - smart_textarea -> compromise (NLP)\n// - editable_table -> @tanstack/react-table\n// The specialty medical widgets are large and rarely used in lead forms.\nfunction lazyNamed(\n loader: () => Promise<Record<string, unknown>>,\n name: string,\n): React.LazyExoticComponent<WidgetComponent> {\n return React.lazy(async () => ({ default: (await loader())[name] as WidgetComponent }));\n}\n\nconst RichTextWidget = lazyNamed(() => import('../ui/widgets/RichTextWidget'), 'RichTextWidget');\nconst DateWidget = lazyNamed(() => import('../ui/widgets/DateWidget'), 'DateWidget');\nconst DateTimeWidget = lazyNamed(() => import('../ui/widgets/DateTimeWidget'), 'DateTimeWidget');\nconst EditableTableWidget = lazyNamed(() => import('../ui/widgets/EditableTable'), 'EditableTableWidget');\nconst AddMedicationWidget = lazyNamed(() => import('../ui/widgets/AddMedicationWidget'), 'AddMedicationWidget');\nconst DischargeMedicationOrdersWidget = lazyNamed(() => import('../ui/widgets/DischargeMedicationOrdersWidget'), 'DischargeMedicationOrdersWidget');\nconst AddInvestigationWidget = lazyNamed(() => import('../ui/widgets/AddInvestigationWidget'), 'AddInvestigationWidget');\nconst AddProcedureWidget = lazyNamed(() => import('../ui/widgets/AddProcedureWidget'), 'AddProcedureWidget');\nconst DifferentialDiagnosisWidget = lazyNamed(() => import('../ui/widgets/DifferentialDiagnosisWidget'), 'DifferentialDiagnosisWidget');\nconst VitalsWidget = lazyNamed(() => import('../ui/widgets/VitalsWidget'), 'VitalsWidget');\nconst HiddenVitalsWidget = lazyNamed(() => import('../ui/widgets/HiddenVitalsWidget'), 'HiddenVitalsWidget');\nconst ReferralWidget = lazyNamed(() => import('../ui/widgets/ReferralWidget'), 'ReferralWidget');\nconst FollowupWidget = lazyNamed(() => import('../ui/widgets/FollowupWidget'), 'FollowupWidget');\nconst SmartTextareaWidget = lazyNamed(() => import('../ui/widgets/SmartTextarea'), 'SmartTextareaWidget');\nconst DiagnosisTextareaWidget = lazyNamed(() => import('../ui/widgets/DiagnosisTextareaWidget'), 'DiagnosisTextareaWidget');\nconst ObstetricHistoryWidget = lazyNamed(() => import('../ui/widgets/ObstetricHistoryWidget'), 'ObstetricHistoryWidget');\nconst OphthalmologyWidget = lazyNamed(() => import('../ui/widgets/OphthalmologyWidget'), 'OphthalmologyWidget');\nconst OphthalDiagnosisWidget = lazyNamed(() => import('../ui/widgets/OphthalDiagnosisWidget'), 'OphthalDiagnosisWidget');\nconst OrthopedicExamWidget = lazyNamed(() => import('../ui/widgets/OrthopedicExamWidget'), 'OrthopedicExamWidget');\nconst MarMedicationOrdersWidget = lazyNamed(() => import('../ui/widgets/MarMedicationOrdersWidget'), 'MarMedicationOrdersWidget');\nconst SuggestionTextareaWidget = lazyNamed(() => import('../ui/widgets/SuggestionTextareaWidget'), 'SuggestionTextareaWidget');\nconst LensAssessmentWidget = lazyNamed(() => import('../ui/widgets/LensAssessmentWidget'), 'LensAssessmentWidget');\nconst FunctionalImpairmentScoreWidget = lazyNamed(() => import('../ui/widgets/FunctionalImpairmentScoreWidget'), 'FunctionalImpairmentScoreWidget');\nconst BiometryIolWorkupWidget = lazyNamed(() => import('../ui/widgets/BiometryIolWorkupWidget'), 'BiometryIolWorkupWidget');\nconst SurgicalRiskFlagsWidget = lazyNamed(() => import('../ui/widgets/SurgicalRiskFlagsWidget'), 'SurgicalRiskFlagsWidget');\nconst GsSmartHistoryWidget = lazyNamed(() => import('../ui/widgets/GsSmartHistoryWidget'), 'GsSmartHistoryWidget');\nconst GsExaminationWidget = lazyNamed(() => import('../ui/widgets/GsExaminationWidget'), 'GsExaminationWidget');\nconst GsGradingWidget = lazyNamed(() => import('../ui/widgets/GsGradingWidget'), 'GsGradingWidget');\nconst PainScaleFlagsWidget = lazyNamed(() => import('../ui/widgets/PainScaleFlagsWidget'), 'PainScaleFlagsWidget');\nconst UrologySmartHistoryWidget = lazyNamed(() => import('../ui/widgets/UrologySmartHistoryWidget'), 'UrologySmartHistoryWidget');\nconst UrologyExaminationWidget = lazyNamed(() => import('../ui/widgets/UrologyExaminationWidget'), 'UrologyExaminationWidget');\nconst UrologyPathwayWidget = lazyNamed(() => import('../ui/widgets/UrologyPathwayWidget'), 'UrologyPathwayWidget');\nconst OBGExaminationWidget = lazyNamed(() => import('../ui/widgets/OBGExaminationWidget'), 'OBGExaminationWidget');\nconst OBGPathwayWidget = lazyNamed(() => import('../ui/widgets/OBGPathwayWidget'), 'OBGPathwayWidget');\n\n// Wraps a lazily-loaded widget in a Suspense boundary. fallback is null to\n// avoid layout shift; the same field type shares one chunk, fetched once.\nfunction lazyWidget(node: React.ReactNode) {\n return <React.Suspense fallback={null}>{node}</React.Suspense>;\n}\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 'slider':\n return <SliderWidget fieldId={fieldId} />;\n\n case 'textarea':\n if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {\n return lazyWidget(<MarMedicationOrdersWidget fieldId={fieldId} />);\n }\n return <TextWidget fieldId={fieldId} />;\n\n case 'richtext':\n return lazyWidget(<RichTextWidget fieldId={fieldId} />);\n\n case 'date':\n return lazyWidget(<DateWidget fieldId={fieldId} />);\n\n case 'datetime':\n return lazyWidget(<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 'file_upload':\n return <FormFileUploadWidget fieldId={fieldId} />;\n\n case 'signature':\n return <SignatureUploadWidget fieldId={fieldId} />;\n\n case 'editable_table':\n return lazyWidget(<EditableTableWidget fieldId={fieldId} />);\n\n case 'medications':\n return lazyWidget(<AddMedicationWidget fieldId={fieldId} />);\n\n case 'discharge_medication_orders':\n return lazyWidget(<DischargeMedicationOrdersWidget fieldId={fieldId} />);\n\n case 'investigations':\n return lazyWidget(<AddInvestigationWidget fieldId={fieldId} />);\n\n case 'procedures':\n return lazyWidget(<AddProcedureWidget fieldId={fieldId} />);\n\n case 'differential_diagnosis':\n return lazyWidget(<DifferentialDiagnosisWidget fieldId={fieldId} />);\n\n case 'vitals':\n return lazyWidget(<VitalsWidget fieldId={fieldId} />);\n\n case 'hidden_vitals':\n return lazyWidget(<HiddenVitalsWidget fieldId={fieldId} />);\n\n case 'referral':\n return lazyWidget(<ReferralWidget fieldId={fieldId} />);\n\n case 'followup':\n return lazyWidget(<FollowupWidget fieldId={fieldId} />);\n\n case 'smart_textarea':\n return lazyWidget(<SmartTextareaWidget fieldId={fieldId} />);\n\n case 'diagnosis_textarea':\n return lazyWidget(<DiagnosisTextareaWidget fieldId={fieldId} />);\n\n case 'obstetric_history':\n return lazyWidget(<ObstetricHistoryWidget fieldId={fieldId} />);\n\n case 'eye_prescription':\n return lazyWidget(<OphthalmologyWidget fieldId={fieldId} />);\n\n case 'ophthal_diagnosis':\n return lazyWidget(<OphthalDiagnosisWidget fieldId={fieldId} />);\n case 'orthopedic_exam':\n return lazyWidget(<OrthopedicExamWidget fieldId={fieldId} />);\n\n case 'general_surgery_smart_history':\n return lazyWidget(<GsSmartHistoryWidget fieldId={fieldId} />);\n\n case 'general_surgery_examination':\n return lazyWidget(<GsExaminationWidget fieldId={fieldId} />);\n\n case 'general_surgery_grading':\n return lazyWidget(<GsGradingWidget fieldId={fieldId} />);\n\n case 'pain_scale_flags':\n return lazyWidget(<PainScaleFlagsWidget fieldId={fieldId} />);\n\n case 'urology_smart_history':\n return lazyWidget(<UrologySmartHistoryWidget fieldId={fieldId} />);\n\n case 'urology_examination':\n return lazyWidget(<UrologyExaminationWidget fieldId={fieldId} />);\n\n case 'urology_pathway':\n return lazyWidget(<UrologyPathwayWidget fieldId={fieldId} />);\n\n case 'obg_examination':\n return lazyWidget(<OBGExaminationWidget fieldId={fieldId} />);\n\n case 'obg_pathway':\n return lazyWidget(<OBGPathwayWidget fieldId={fieldId} />);\n\n case 'phone_input':\n return <PhoneInputWidget fieldId={fieldId} />;\n\n case 'otp_input':\n return <OtpInputWidget fieldId={fieldId} />;\n\n case 'camp_dates':\n return <CampDatesWidget fieldId={fieldId} />;\n\n case 'camp_time_slots':\n return <CampTimeSlotsWidget 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 const showLabel = isLabelVisible(fieldDef);\n return (\n <div className={fieldWrapperClass(fieldDef, '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 {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n 'text-sm font-medium leading-none cursor-pointer select-none',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n </div>\n );\n }\n case 'suggestion_textarea':\n case 'complaint_chips':\n return lazyWidget(<SuggestionTextareaWidget fieldId={fieldId} />);\n\n case 'lens_assessment':\n return lazyWidget(<LensAssessmentWidget fieldId={fieldId} />);\n\n case 'functional_impairment_score':\n return lazyWidget(<FunctionalImpairmentScoreWidget fieldId={fieldId} />);\n\n case 'biometry_iol_workup':\n return lazyWidget(<BiometryIolWorkupWidget fieldId={fieldId} />);\n\n case 'surgical_risk_flags':\n return lazyWidget(<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\n className={fieldWrapperClass(\n def,\n cn(labelClass, 'text-muted-foreground'),\n )}\n >\n {def.label}\n {def.description && (\n <p className={fieldDescriptionClass(def, cn('mt-1', descClass, 'opacity-90'))}>\n {def.description}\n </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 from \"react\";\nimport type { SectionChild } from \"../core/types\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\n\nexport function renderSectionChildren(children: SectionChild[]) {\n return children.map((child, index) => {\n if (typeof child === \"string\") {\n return <FieldRenderer key={child} fieldId={child} />;\n }\n if (child.type === \"column_layout\") {\n return (\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 }\n return <React.Fragment key={index} />;\n });\n}\n","import React from \"react\";\nimport type { LayoutNode } from \"../core/types\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\nexport type DynamicFormV2SectionMode = \"accordion\" | \"plain\";\n\nexport interface DynamicFormV2Props {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n /**\n * `accordion` — bordered collapsible sections (same as DynamicForm).\n * `plain` — simple vertical stack, no card/accordion chrome.\n */\n sectionMode?: DynamicFormV2SectionMode;\n /** In `plain` mode, show the section title above fields. Default true. Ignored for accordion. */\n showSectionTitles?: boolean;\n className?: string;\n}\n\nfunction PlainSection({\n title,\n showHeading,\n children,\n}: {\n title: string;\n showHeading: boolean;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"mb-6 space-y-4\">\n {showHeading ? (\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n ) : null}\n {children}\n </div>\n );\n}\n\n/**\n * Alternate layout shell for alternative designs (e.g. marketing / minimal flows).\n * Same schema traversal as {@link DynamicForm}; configurable title and section chrome.\n */\nexport const DynamicFormV2: React.FC<DynamicFormV2Props> = ({\n showTitle = true,\n sectionMode = \"plain\",\n showSectionTitles = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle ? (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n ) : null}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"section\") {\n if (sectionMode === \"accordion\") {\n return (\n <Section key={node.id} title={node.title}>\n {renderSectionChildren(node.children)}\n </Section>\n );\n }\n return (\n <PlainSection\n key={node.id}\n title={node.title}\n showHeading={showSectionTitles}\n >\n {renderSectionChildren(node.children)}\n </PlainSection>\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, { useState, useEffect } from \"react\";\nimport { Check } from \"lucide-react\";\nimport type {\n CampDatesFieldDef,\n FormState,\n LayoutNode,\n MultiStepLayoutNode,\n MultiStepNode,\n FieldDef,\n} from \"../core/types\";\nimport { parseCampDateValue } from \"../core/campDateValue\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction flattenStepFieldIds(step: MultiStepNode): string[] {\n const ids: string[] = [];\n for (const child of step.children) {\n if (typeof child === \"string\") {\n ids.push(child);\n } else if (child.type === \"column_layout\") {\n ids.push(...child.children);\n }\n }\n return ids;\n}\n\nfunction isFieldComplete(\n id: string,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n if (state.visibility[id] === false) return true; // hidden fields don't block\n if (state.errors[id]) return false;\n const def = fieldMap[id];\n if (def?.required) {\n const v = state.values[id];\n if (v === null || v === undefined || v === \"\") return false;\n if (Array.isArray(v) && v.length === 0) return false;\n if (def.type === \"camp_dates\") {\n if (!parseCampDateValue(v, (def as CampDatesFieldDef).options)?.id) return false;\n }\n if (def.type === \"otp_input\") {\n if (!v || typeof v !== \"object\" || (v as { verified?: boolean }).verified !== true) {\n return false;\n }\n }\n }\n return true;\n}\n\nfunction isStepComplete(\n step: MultiStepNode,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n return flattenStepFieldIds(step).every((id) =>\n isFieldComplete(id, state, fieldMap)\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stepper header\n// ---------------------------------------------------------------------------\n\ntype StepStatus = \"complete\" | \"active\" | \"locked\";\n\ninterface StepperProps {\n steps: MultiStepNode[];\n statuses: StepStatus[];\n variant: \"numbered\" | \"dots\" | \"labels\";\n}\n\nconst Stepper: React.FC<StepperProps> = ({ steps, statuses, variant }) => {\n if (variant === \"dots\") {\n return (\n <div className=\"flex items-center gap-2 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div\n className={cn(\n \"h-2.5 w-2.5 rounded-full transition-colors\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary ring-2 ring-primary/30\",\n status === \"locked\" && \"bg-muted\"\n )}\n title={step.title}\n />\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n if (variant === \"labels\") {\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex flex-col items-center gap-1\">\n <div\n className={cn(\n \"h-2 w-2 rounded-full\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary\",\n status === \"locked\" && \"bg-muted\"\n )}\n />\n <span\n className={cn(\n \"text-xs whitespace-nowrap\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mb-4 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n // numbered (default)\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex shrink-0 items-center gap-2\">\n <div\n className={cn(\n \"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full border-2 text-xs font-semibold leading-none transition-colors\",\n status === \"complete\" && \"border-primary bg-primary\",\n status === \"active\" && \"border-primary bg-background\",\n status === \"locked\" && \"border-border bg-background\"\n )}\n >\n {status === \"complete\" ? (\n <Check className=\"h-3.5 w-3.5 shrink-0 text-primary-foreground\" />\n ) : (\n <span\n className={cn(\n \"tabular-nums\",\n status === \"active\" && \"text-primary\",\n status === \"locked\" && \"text-muted-foreground\"\n )}\n >\n {i + 1}\n </span>\n )}\n </div>\n <span\n className={cn(\n \"text-sm font-medium hidden sm:block\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mx-3 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Active step shell — plain section, visually prominent\n// ---------------------------------------------------------------------------\n\nconst ActiveStep: React.FC<{ title: string; children: React.ReactNode }> = ({\n title,\n children,\n}) => (\n <div className=\"mb-4 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n {children}\n </div>\n);\n\n// ---------------------------------------------------------------------------\n// Wizard — handles one multi_step layout node\n// ---------------------------------------------------------------------------\n\ninterface WizardProps {\n node: MultiStepLayoutNode;\n}\n\nconst Wizard: React.FC<WizardProps> = ({ node }) => {\n const store = useFormStore();\n // Spread into a new object on every store notification so React sees a\n // changed reference and actually re-renders. The store mutates nested\n // properties (values, errors, visibility) but keeps `this.state` as the\n // same object, so passing it directly would cause React to bail out.\n const [formState, setFormState] = useState<FormState>(() => ({\n ...store.getState(),\n }));\n\n useEffect(() => {\n return store.subscribe((state) => {\n setFormState({ ...state });\n });\n }, [store]);\n\n const schema = store.getSchema();\n const fieldMap: Record<string, FieldDef> = {};\n schema.fields.forEach((f) => {\n fieldMap[f.id] = f;\n });\n\n const { steps, meta } = node;\n const showStepper = meta?.showStepper !== false;\n const variant = meta?.stepperVariant ?? \"numbered\";\n const collapseCompleted = meta?.collapseCompleted !== false;\n\n // Compute per-step status\n const stepComplete = steps.map((s) =>\n isStepComplete(s, formState, fieldMap)\n );\n\n // First incomplete step is active; steps before it are complete; steps after are locked.\n const activeIndex =\n stepComplete.findIndex((c) => !c) === -1\n ? steps.length // all complete\n : stepComplete.findIndex((c) => !c);\n\n const statuses: StepStatus[] = steps.map((_, i) => {\n if (i < activeIndex) return \"complete\";\n if (i === activeIndex) return \"active\";\n return \"locked\";\n });\n\n return (\n <div>\n {node.title && (\n <h2 className=\"text-lg font-semibold mb-4\">{node.title}</h2>\n )}\n {showStepper && (\n <Stepper steps={steps} statuses={statuses} variant={variant} />\n )}\n <div className=\"space-y-2\">\n {steps.map((step, i) => {\n const status = statuses[i];\n\n // Locked steps are not mounted at all — this is the \"unlock\" behaviour.\n if (status === \"locked\") return null;\n\n const children = renderSectionChildren(step.children);\n\n if (status === \"complete\") {\n // Completed steps stay editable. Accordion chrome is optional via collapseCompleted.\n if (collapseCompleted) {\n return (\n <Section key={step.id} title={step.title}>\n {children}\n </Section>\n );\n }\n return (\n <ActiveStep key={step.id} title={step.title}>\n {children}\n </ActiveStep>\n );\n }\n\n // Active step\n return (\n <ActiveStep key={step.id} title={step.title}>\n {children}\n </ActiveStep>\n );\n })}\n </div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface MultiStepFormProps {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n className?: string;\n}\n\n/**\n * Renders a form schema that may contain `multi_step` layout nodes in addition\n * to the standard `section` / `column_layout` nodes.\n *\n * Multi-step groups unlock steps linearly: a step becomes visible only when\n * all fields in the previous step are valid (no errors, required fields filled).\n */\nexport const MultiStepForm: React.FC<MultiStepFormProps> = ({\n showTitle = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle && (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n )}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"multi_step\") {\n return <Wizard key={node.id} node={node} />;\n }\n if (node.type === \"section\") {\n return (\n <div key={node.id} className=\"mb-6 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">\n {node.title}\n </h2>\n {renderSectionChildren(node.children)}\n </div>\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 { cn } from '../core/utils';\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-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\n key={fieldId}\n className={cn(\n 'min-h-0 flex flex-col',\n colSpan === 2 ? 'col-span-2' : 'col-span-1 h-full',\n )}\n >\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 { cn } from '../../core/utils';\nimport type { FieldDef } from '../../core/types';\nimport { richTextHtmlClassName } from './richTextClassName';\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={cn(\n richTextHtmlClassName(),\n 'text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50',\n )}\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 from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateTimeProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDateTime: React.FC<ReadOnlyDateTimeProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">\n {fieldDef.label}\n </Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || (\n <span className=\"text-gray-400 italic\">No date &amp; time selected</span>\n )}\n </div>\n </div>\n );\n};\n\n","import React, { 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 { format, parseISO } from 'date-fns';\nimport { MapPin } from 'lucide-react';\nimport { Label } from '../shadcn/label';\nimport { MOCK_CAMP_DATES } from '../../core/campMockData';\nimport { parseCampDateValue } from '../../core/campDateValue';\nimport type { CampDatesFieldDef } from '../../core/types';\n\ninterface ReadOnlyCampDatesProps {\n fieldDef: CampDatesFieldDef;\n value: unknown;\n}\n\nexport const ReadOnlyCampDates: React.FC<ReadOnlyCampDatesProps> = ({ fieldDef, value }) => {\n const camps = fieldDef.options?.length ? fieldDef.options : MOCK_CAMP_DATES;\n const selected = parseCampDateValue(value, camps);\n const isEmpty = !selected;\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=\"rounded-md border border-gray-200 bg-gray-50 p-3 min-h-[2.5rem]\">\n {isEmpty ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n <div className=\"space-y-1\">\n <p className=\"font-medium text-gray-900\">\n {format(parseISO(selected.date), 'EEE, MMM d, yyyy')}\n </p>\n {selected.location ? (\n <p className=\"flex items-center gap-1 text-sm text-gray-600\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0\" aria-hidden />\n {selected.location}\n </p>\n ) : null}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { MOCK_CAMP_TIME_SLOTS } from '../../core/campMockData';\nimport type { CampTimeSlotsFieldDef } from '../../core/types';\n\ninterface ReadOnlyCampTimeSlotsProps {\n fieldDef: CampTimeSlotsFieldDef;\n value: unknown;\n}\n\nexport const ReadOnlyCampTimeSlots: React.FC<ReadOnlyCampTimeSlotsProps> = ({ fieldDef, value }) => {\n const slots = fieldDef.options?.length ? fieldDef.options : MOCK_CAMP_TIME_SLOTS;\n const selected = slots.find((slot) => String(slot.id) === String(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=\"min-h-[2.5rem] rounded-md border border-gray-200 bg-gray-50 p-3\">\n {isEmpty || !selected ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n <span className=\"font-medium text-gray-900\">{selected.time}</span>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { ReadOnlyText } from '../ui/widgets/ReadOnlyText';\nimport { ReadOnlySelect } from '../ui/widgets/ReadOnlySelect';\nimport { ReadOnlyMultiSelect } from '../ui/widgets/ReadOnlyMultiSelect';\nimport { ReadOnlyRepeatable } from '../ui/widgets/ReadOnlyRepeatable';\nimport { ReadOnlyDate } from '../ui/widgets/ReadOnlyDate';\nimport { ReadOnlyImageUpload } from '../ui/widgets/ReadOnlyImageUpload';\nimport { ReadOnlyMediaUpload } from '../ui/widgets/ReadOnlyMediaUpload';\nimport { ReadOnlySignature } from '../ui/widgets/ReadOnlySignature';\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 { ReadOnlyCampDates } from '../ui/widgets/ReadOnlyCampDates';\nimport { ReadOnlyCampTimeSlots } from '../ui/widgets/ReadOnlyCampTimeSlots';\nimport type {\n CampDatesFieldDef,\n CampTimeSlotsFieldDef,\n CheckboxFieldDef,\n FieldDef,\n PainScaleFlagsFieldDef,\n RadioFieldDef,\n ReferralFieldDef,\n RepeatableFieldDef,\n SelectFieldDef,\n StaticTextFieldDef,\n} from '../core/types';\nimport {\n functionalImpairmentTotal,\n parseFunctionalImpairmentScore,\n} from '../core/functionalImpairmentScore';\nimport { normalizePainScaleFlags } from '../core/painScaleFlags';\nimport { normalizeGeneralSurgerySmartHistory } from '../core/generalSurgeryPathway';\nimport { normalizeObgPathway } from '../core/obgPathway';\nimport { normalizeUrologySmartHistory } from '../core/urologyPathway';\n\n// ReadOnlyTable renders via @tanstack/react-table; load it on demand so the\n// read-only form path doesn't ship the table library unless a table is shown.\nconst ReadOnlyTable = React.lazy(() =>\n import('../ui/widgets/ReadOnlyTable').then((m) => ({ default: m.ReadOnlyTable })),\n);\n\ninterface ReadOnlyFieldRendererProps {\n fieldDef: FieldDef;\n value: unknown;\n /**\n * Full form values; required for `suggestion_textarea` with `meta.embeddedFieldIds` so embedded\n * fields can be shown in read-only view.\n */\n allValues?: Record<string, unknown>;\n /** Resolve embedded field definitions by id (e.g. `schema.fields` map). */\n resolveFieldDef?: (fieldId: string) => FieldDef | undefined;\n}\n\nexport const ReadOnlyFieldRenderer: React.FC<ReadOnlyFieldRendererProps> = ({\n fieldDef,\n value,\n allValues,\n resolveFieldDef,\n}) => {\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 'slider':\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 'file_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 (\n <React.Suspense fallback={null}>\n <ReadOnlyTable fieldDef={fieldDef} value={value} />\n </React.Suspense>\n );\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 'camp_dates':\n return <ReadOnlyCampDates fieldDef={fieldDef as CampDatesFieldDef} value={value} />;\n\n case 'camp_time_slots':\n return <ReadOnlyCampTimeSlots fieldDef={fieldDef as CampTimeSlotsFieldDef} 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 const embeddedIds =\n fieldDef.meta &&\n Array.isArray((fieldDef.meta as { embeddedFieldIds?: unknown }).embeddedFieldIds)\n ? ((fieldDef.meta as { embeddedFieldIds: unknown[] }).embeddedFieldIds as unknown[])\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0)\n .map((id) => id.trim())\n : [];\n const showEmbedded =\n embeddedIds.length > 0 && resolveFieldDef && allValues && typeof allValues === 'object';\n\n if (!showEmbedded) {\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n }\n\n return (\n <div className=\"space-y-3\">\n <ReadOnlyText fieldDef={fieldDef} value={value} />\n <div className=\"grid gap-3 border-t border-muted-foreground/20 pt-3 sm:grid-cols-3\">\n {embeddedIds.map((id) => {\n const fd = resolveFieldDef(id);\n if (!fd) return null;\n return (\n <ReadOnlyFieldRenderer\n key={id}\n fieldDef={fd}\n value={allValues[id]}\n allValues={allValues}\n resolveFieldDef={resolveFieldDef}\n />\n );\n })}\n </div>\n </div>\n );\n }\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 'pain_scale_flags': {\n const def = fieldDef as PainScaleFlagsFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const safe = normalizePainScaleFlags(value, { min, max });\n const opts = def.options ?? [];\n const flagLabels = safe.flags.map((fv) => {\n const o = opts.find((x) => x.value === fv || String(x.value) === String(fv));\n return o?.label ?? fv;\n });\n const lines = [\n `Pain score (VAS): ${safe.pain}/${max}`,\n flagLabels.length > 0 ? `Triage flags: ${flagLabels.join(', ')}` : 'Triage flags: —',\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'urology_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeUrologySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\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 {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\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 {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_pathway':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeGeneralSurgerySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\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 {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'general_surgery_grading':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\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 {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_pathway': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeObgPathway(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\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 {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\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 {clinicalStr}\n </div>\n </div>\n ) : null}\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 allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\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 allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\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 allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport { useForm } from \"./useForm\";\nimport { cn } from \"../core/utils\";\nimport { Button } from \"../ui/shadcn/button\";\n\nexport interface FormControlsProps {\n className?: string;\n containerStyle?: React.CSSProperties;\n /**\n * When false, hides workflow state + valid/invalid text. Buttons stay right-aligned unless\n * `actionsFullWidth` is used. Default true (existing behaviour).\n */\n showWorkflowStatus?: boolean;\n statusClassName?: string;\n statusStyle?: React.CSSProperties;\n /** Classes for the buttons row wrapper. */\n actionsClassName?: string;\n actionsStyle?: React.CSSProperties;\n /**\n * When workflow status is hidden, make action buttons stretch (column on small screens;\n * on `sm+` submit row grows with flex). Ignored while `showWorkflowStatus` is true.\n */\n actionsFullWidth?: boolean;\n /** Applied to both Save Draft and Submit buttons. */\n buttonClassName?: string;\n onSaveDraft?: () => void;\n onSubmit?: (to: string) => void;\n /** Override the label on the submit/transition button. Defaults to \"Submit\". */\n submitLabel?: string;\n}\n\nexport const FormControls: React.FC<FormControlsProps> = ({\n className,\n containerStyle,\n showWorkflowStatus = true,\n statusClassName,\n statusStyle,\n actionsClassName,\n actionsStyle,\n actionsFullWidth = false,\n buttonClassName,\n onSaveDraft,\n onSubmit,\n submitLabel,\n}) => {\n const {\n state,\n availableTransitions,\n submit,\n transition,\n hasPersistence,\n markSubmitAttempted,\n } = useForm();\n\n const hasUploadsInFlight = (state.pendingUploads ?? 0) > 0;\n\n const draftAvailable = onSaveDraft || (hasPersistence && submit);\n const submitAvailable =\n onSubmit || (availableTransitions.length > 0 && transition);\n\n if (!draftAvailable && !submitAvailable) {\n return null;\n }\n\n const useWideActions = !showWorkflowStatus && actionsFullWidth;\n const buttonCn = cn(\n buttonClassName,\n useWideActions && \"w-full sm:flex-1 min-w-0\",\n );\n\n return (\n <div\n className={cn(\n \"flex gap-4 border-t p-4 items-center\",\n showWorkflowStatus\n ? \"justify-between\"\n : useWideActions\n ? \"flex-col sm:flex-row sm:justify-stretch sm:gap-4\"\n : \"justify-end\",\n className,\n )}\n style={containerStyle}\n >\n {showWorkflowStatus ? (\n <div\n className={cn(\"flex items-center gap-4\", statusClassName)}\n style={statusStyle}\n >\n <span className=\"font-bold text-sm text-gray-700\">\n State: {state.workflowState}\n </span>\n <span\n className={cn(\n \"text-sm\",\n state.isValid ? \"text-green-600\" : \"text-red-600\",\n )}\n >\n {state.isValid ? \"Valid\" : \"Invalid\"}\n </span>\n </div>\n ) : null}\n\n <div\n className={cn(\n \"flex gap-2\",\n useWideActions\n ? \"w-full flex-col sm:flex-row sm:flex-1 sm:justify-end sm:max-w-none\"\n : \"flex-shrink-0\",\n actionsClassName,\n )}\n style={actionsStyle}\n >\n {draftAvailable && (\n <Button\n onClick={onSaveDraft || submit}\n variant=\"outline\"\n size=\"sm\"\n disabled={hasUploadsInFlight}\n className={buttonCn}\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 className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : availableTransitions.length > 1\n ? `Submit to ${t.to}`\n : (submitLabel ?? \"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 className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : (submitLabel ?? \"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 /** Data server origin (no trailing slash), e.g. `https://dataserver.example.com`. */\n apiBaseUrl: string;\n headers?: Record<string, string>; // For auth headers, etc.\n}\n\nfunction normalizeBaseUrl(apiBaseUrl: string): string {\n return apiBaseUrl.replace(/\\/+$/, '');\n}\n\nasync function uploadViaPresignedEndpoint(\n options: CreateUploadHandlerOptions,\n presignPath: string,\n file: File | Blob,\n filename: string,\n): Promise<string> {\n const { apiBaseUrl, headers = {} } = options;\n const base = normalizeBaseUrl(apiBaseUrl);\n const path =\n presignPath.startsWith('/') ? presignPath : `/${presignPath}`;\n const response = await fetch(`${base}${path}`, {\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 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 return presignedData.s3_key;\n}\n\n/**\n * Presigned upload handler: `POST …/api/forms/media-upload/` then PUT/POST file\n * to `presigned_url`. Use as `config.onUpload` on `FormProvider`; `file_upload`\n * fields use the same handler unless you set `config.onFileUpload`.\n */\nexport function createUploadHandler(options: CreateUploadHandlerOptions) {\n return async (file: File | Blob, filename: string): Promise<string> =>\n uploadViaPresignedEndpoint(\n options,\n '/api/forms/media-upload/',\n file,\n filename,\n );\n}"]}
1
+ {"version":3,"sources":["../src/core/persistence/campBooking.ts","../src/core/marMedicationOrdersMeta.ts","../src/ui/widgets/MultiSelect.tsx","../src/ui/widgets/Repeatable.tsx","../src/ui/widgets/ImageUpload.tsx","../src/ui/widgets/MediaUpload.tsx","../src/ui/widgets/SignatureUpload.tsx","../src/ui/components/Upload.tsx","../src/ui/widgets/FormFileUpload.tsx","../src/ui/shadcn/radio-group.tsx","../src/ui/widgets/Radio.tsx","../src/ui/widgets/Checkbox.tsx","../src/ui/widgets/SliderWidget.tsx","../src/ui/widgets/PhoneInputWidget.tsx","../src/ui/widgets/OtpInputWidget.tsx","../src/ui/widgets/CampDatesWidget.tsx","../src/ui/widgets/CampTimeSlotsWidget.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.tsx","../src/react/DynamicForm.tsx","../src/react/renderSectionChildren.tsx","../src/react/DynamicFormV2.tsx","../src/react/MultiStepForm.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/ReadOnlyDateTime.tsx","../src/ui/widgets/ReadOnlyRadio.tsx","../src/ui/widgets/ReadOnlyCheckbox.tsx","../src/ui/widgets/ReadOnlyReferral.tsx","../src/ui/widgets/ReadOnlyDischargeMedicationOrders.tsx","../src/ui/widgets/ReadOnlyCampDates.tsx","../src/ui/widgets/ReadOnlyCampTimeSlots.tsx","../src/react/ReadOnlyFieldRenderer.tsx","../src/react/ReadOnlyForm.tsx","../src/react/FormControls.tsx","../src/utils/createUploadHandler.ts"],"names":["React","jsxs","jsx","useState","error","useRef","X","Image","Upload","useEffect","UploadIcon","useMemo","React8","Fragment","format","parseISO","ChevronRight","Check","urlLooksLikePdf","isOptionSelected"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { PersistenceProvider, SavedState } from './index';\n\nexport interface CampBookingConfig {\n baseUrl: string;\n authToken?: string;\n /** Patient UUID sent as `patient_id` in the booking payload. */\n patientId: string;\n /**\n * Field ID that holds the selected camp date (a {@link CampDateSelection}).\n * The `id` of that selection is the camp instance UUID used in the URL.\n * Defaults to `\"camp_date\"`.\n */\n campDateFieldId?: string;\n /**\n * Field ID that holds the selected time slot's `primary_slot_id`.\n * Defaults to `\"camp_time_slot\"`.\n */\n slotFieldId?: string;\n /**\n * Additional field IDs whose values are included in `booking_form_data`.\n * If omitted, all values except `campDateFieldId` and `slotFieldId` are included.\n */\n bookingFormDataFields?: string[];\n /** Optional loyalty entitlement sent as `entitlement_id` in the booking payload. */\n entitlementId?: number;\n}\n\n/**\n * Persistence provider that submits form values to the camp booking endpoint:\n * POST /api/camps/instances/{instance_id}/book/\n *\n * Auto-save on field changes is disabled (`autoSave: false`); call `store.save()`\n * on submit so `/book/` is not invoked while the user is still picking date/slot.\n *\n * Usage:\n * ```tsx\n * <FormProvider\n * schema={schema}\n * config={{\n * persistence: new CampBookingPersistenceProvider({\n * baseUrl: process.env.NEXT_PUBLIC_API_URL,\n * authToken: session.accessToken,\n * patientId: patient.id,\n * }),\n * }}\n * >\n * ```\n */\nexport class CampBookingPersistenceProvider implements PersistenceProvider {\n /** Camp booking is submit-only; field changes must not POST /book/. */\n readonly autoSave = false;\n\n private config: CampBookingConfig;\n\n constructor(config: CampBookingConfig) {\n this.config = config;\n }\n\n async save(_formId: string, state: SavedState): Promise<void> {\n const {\n baseUrl,\n authToken,\n patientId,\n entitlementId,\n campDateFieldId = 'camp_date',\n slotFieldId = 'camp_time_slot',\n bookingFormDataFields,\n } = this.config;\n\n const campDateValue = state.values[campDateFieldId];\n const instanceId =\n campDateValue && typeof campDateValue === 'object' && !Array.isArray(campDateValue)\n ? (campDateValue as Record<string, unknown>).id\n : null;\n\n if (!instanceId || typeof instanceId !== 'string') {\n throw new Error('Camp booking: no instance selected (camp_date field is empty or invalid).');\n }\n\n const primarySlotId = state.values[slotFieldId];\n if (!primarySlotId || typeof primarySlotId !== 'string') {\n throw new Error('Camp booking: no time slot selected.');\n }\n\n // Build booking_form_data from the remaining fields.\n const excludeKeys = new Set([campDateFieldId, slotFieldId]);\n const bookingFormData: Record<string, unknown> = {};\n const fieldKeys = bookingFormDataFields ?? Object.keys(state.values);\n for (const key of fieldKeys) {\n if (!excludeKeys.has(key)) {\n bookingFormData[key] = state.values[key];\n }\n }\n\n const idempotencyKey =\n typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'\n ? crypto.randomUUID()\n : `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n\n const payload = {\n primary_slot_id: primarySlotId,\n patient_id: patientId,\n booking_form_data: bookingFormData,\n idempotency_key: idempotencyKey,\n ...(entitlementId != null ? { entitlement_id: entitlementId } : {}),\n };\n\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n\n const response = await fetch(`${baseUrl}/api/camps/instances/${instanceId}/book/`, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => '');\n throw new Error(\n `Camp booking failed: ${response.status} ${response.statusText}${errorText ? ` – ${errorText}` : ''}`,\n );\n }\n }\n\n async load(_formId: string): Promise<SavedState | null> {\n return null;\n }\n\n async clear(_formId: string): Promise<void> {\n // No-op for bookings.\n }\n}\n","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 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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled ? 'opacity-50 pointer-events-none' : ''}`,\n )}\n >\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 && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\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 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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\n/** Browser-loadable URL only — plain S3 keys are not valid <img src>. */\nfunction extractImageDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\n}\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 /** Tracks blob: URLs we created so we can revoke them. */\n const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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 React.useEffect(() => {\n const displayUrl = extractImageDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n setPreview(null);\n return;\n }\n // Opaque key or non-displayable value: keep existing preview (e.g. in-flight blob).\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (!file.type.startsWith('image/')) {\n alert('Please select an image file');\n return;\n }\n\n const maxSize = 10 * 1024 * 1024;\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 revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\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 revokeTrackedBlob();\n setPreview(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n revokeTrackedBlob();\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={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\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={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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\n/** Browser-loadable URL only — opaque S3 keys are not valid iframe/img src. */\nfunction extractMediaDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\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 const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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 React.useEffect(() => {\n const displayUrl = extractMediaDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n if (pendingPreviewKindRef.current) {\n setPreviewIsPdf(pendingPreviewKindRef.current === 'pdf');\n pendingPreviewKindRef.current = null;\n } else {\n setPreviewIsPdf(urlLooksLikePdf(displayUrl));\n }\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n pendingPreviewKindRef.current = null;\n setPreview(null);\n setPreviewIsPdf(false);\n return;\n }\n // Opaque key: keep blob preview from in-flight upload.\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\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 const maxSize = 10 * 1024 * 1024;\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 revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n setPreviewIsPdf(isPdf);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\n\n pendingPreviewKindRef.current = isPdf ? 'pdf' : 'image';\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 pendingPreviewKindRef.current = null;\n revokeTrackedBlob();\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 revokeTrackedBlob();\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={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\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={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n {showPreview ? (\n /* ── Preview mode: existing signature from backend ── */\n <div className=\"relative\">\n <div\n className={fieldControlClass(\n fieldDef,\n 'border border-gray-200 rounded bg-white flex items-center justify-start p-2',\n )}\n >\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={fieldControlClass(\n fieldDef,\n `border rounded touch-none ${\n isConfirmed\n ? 'border-green-300 cursor-default'\n : 'border-gray-200 cursor-crosshair'\n }`,\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 && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { Upload as UploadIcon } from \"lucide-react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface UploadProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n value?: FileList | File[] | null;\n onChange: (files: FileList | null) => void;\n className?: string;\n /** Shown under placeholder, e.g. \"PDF, PNG, JPG\" */\n formatsLabel?: string;\n placeholder?: string;\n beforeUploadContent?: React.ReactNode;\n id?: string;\n /**\n * When true, do not show \"N files selected\" in the drop zone; parent can render file rows.\n */\n listLayout?: boolean;\n}\n\nexport function Upload({\n value,\n accept,\n multiple,\n disabled,\n onChange,\n className,\n formatsLabel,\n placeholder = \"Upload File\",\n beforeUploadContent,\n id: idProp,\n listLayout = false,\n}: UploadProps) {\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const generatedId = React.useId();\n const inputId = idProp ?? generatedId;\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.files ?? null);\n };\n\n React.useEffect(() => {\n if (!value && inputRef.current) {\n inputRef.current.value = \"\";\n }\n }, [value]);\n\n const count = value?.length ?? 0;\n const formatsText = formatsLabel ?? accept;\n\n return (\n <div\n className={cn(\n \"border border-dashed bg-[#F7F7F7] border-gray-200 rounded-lg py-5 px-4 flex items-center justify-center text-[#989898]\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <input\n type=\"file\"\n ref={inputRef}\n accept={accept}\n id={inputId}\n className=\"hidden\"\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n />\n <label\n htmlFor={inputId}\n className={cn(\n \"cursor-pointer w-full\",\n disabled && \"cursor-not-allowed\",\n )}\n >\n <div>\n {count > 0 && !listLayout ? (\n <div className=\"text-center text-sm font-semibold text-gray-700\">\n {count} file{count === 1 ? \"\" : \"s\"} selected\n </div>\n ) : beforeUploadContent ? (\n beforeUploadContent\n ) : (\n <div className=\"flex flex-col items-center justify-center\">\n <div className=\"text-sm text-black font-normal leading-[120%] tracking-[-0.28px] text-center\">\n Upload your surgery prescription\n <br />\n and medical records\n </div>\n <UploadIcon size={20} className=\"text-[#727272] mt-4\" />\n <div className=\"text-xs mt-1 text-text-shades-2\">\n {placeholder}\n </div>\n <div className=\"mt-2 text-10px leading-[140%] text-[#989898]\">\n Supported formats - {formatsText}\n </div>\n </div>\n )}\n </div>\n </label>\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport { X } from \"lucide-react\";\nimport { useField } from \"../../react/useField\";\nimport { useFormStore } from \"../../react/FormProvider\";\nimport { useForm } from \"../../react/useForm\";\nimport { Label } from \"../shadcn/label\";\nimport { Upload } from \"../components/Upload\";\nimport type { FileUploadFieldDef } from \"../../core/types\";\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from \"../../react/fieldStyle\";\n\nfunction fileListFromArray(files: File[]): FileList {\n const dt = new DataTransfer();\n files.forEach((f) => dt.items.add(f));\n return dt.files;\n}\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept === \"*/*\") return true;\n const tokens = accept.split(\",\").map((t) => t.trim().toLowerCase());\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return tokens.some((token) => {\n if (token.startsWith(\".\")) return name.endsWith(token);\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, -1);\n return type.startsWith(prefix);\n }\n return type === token;\n });\n}\n\nfunction basenameKey(key: string): string {\n const parts = key.split(\"/\");\n return parts[parts.length - 1] || key;\n}\n\nfunction fileRows(\n listLayout: boolean,\n localFiles: FileList | null,\n value: unknown,\n): { label: string; index: number }[] {\n if (!listLayout) return [];\n if (localFiles && localFiles.length > 0) {\n return Array.from(localFiles).map((f, i) => ({ label: f.name, index: i }));\n }\n if (Array.isArray(value) && value.length > 0) {\n return value.map((k, i) => ({\n label: basenameKey(String(k)),\n index: i,\n }));\n }\n if (value !== null && value !== undefined && value !== \"\") {\n return [{ label: basenameKey(String(value)), index: 0 }];\n }\n return [];\n}\n\nexport const FormFileUploadWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } =\n useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [localFiles, setLocalFiles] = useState<FileList | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const listLayout =\n fieldDef?.type === \"file_upload\" &&\n (fieldDef as FileUploadFieldDef).list === true;\n\n const rows = useMemo(\n () => fileRows(listLayout, localFiles, value),\n [listLayout, localFiles, value],\n );\n\n if (!fieldDef || fieldDef.type !== \"file_upload\") return null;\n\n const def = fieldDef as FileUploadFieldDef;\n const accept = def.accept ?? \"*/*\";\n const maxSize = def.maxSize ?? 10 * 1024 * 1024;\n const allowMultiple = def.multiple === true;\n\n const uploadHandler = store.getFileUploadHandler();\n const showLabel = isLabelVisible(fieldDef);\n\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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. Provide `config.onFileUpload` or\n `config.onUpload` on FormProvider.\n </p>\n </div>\n </div>\n );\n }\n\n const hasStoredValue =\n value !== null &&\n value !== undefined &&\n value !== \"\" &&\n !(Array.isArray(value) && value.length === 0);\n\n const removeFileAt = (index: number) => {\n setTouched();\n if (disabled || isUploading) return;\n\n const hadLocal = localFiles != null && localFiles.length > 0;\n\n if (hadLocal) {\n const next = Array.from(localFiles!).filter((_, i) => i !== index);\n if (next.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n setLocalFiles(fileListFromArray(next));\n if (allowMultiple && Array.isArray(value)) {\n setValue(value.filter((_, i) => i !== index));\n } else {\n setValue(null);\n }\n return;\n }\n\n if (allowMultiple && Array.isArray(value)) {\n const next = value.filter((_, i) => i !== index);\n if (next.length === 0) store.setExternalError(fieldId, null);\n setValue(next.length ? next : null);\n return;\n }\n store.setExternalError(fieldId, null);\n setValue(null);\n };\n\n const handleChange = async (files: FileList | null) => {\n setTouched();\n\n if (!files || files.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n\n const selected = Array.from(files);\n for (const file of selected) {\n if (!matchesAccept(file, accept)) {\n setLocalFiles(null);\n store.setExternalError(fieldId, `File type not allowed: ${file.name}`);\n return;\n }\n if (file.size > maxSize) {\n setLocalFiles(null);\n store.setExternalError(\n fieldId,\n `File must be less than ${Math.round(maxSize / (1024 * 1024))}MB: ${file.name}`,\n );\n return;\n }\n }\n\n store.setExternalError(fieldId, null);\n\n const toUpload = allowMultiple ? selected : [selected[0]];\n setLocalFiles(fileListFromArray(toUpload));\n\n setIsUploading(true);\n store.incrementPendingUploads();\n\n try {\n if (allowMultiple) {\n const keys: string[] = [];\n for (const file of toUpload) {\n keys.push(await uploadHandler(file, file.name));\n }\n setValue(keys);\n } else {\n const key = await uploadHandler(toUpload[0], toUpload[0].name);\n setValue(key);\n }\n store.setExternalError(fieldId, null);\n } catch (err) {\n console.error(\"[FormFileUpload] Upload failed:\", err);\n const message =\n err instanceof Error ? err.message : \"Upload failed. Please try again.\";\n store.setExternalError(fieldId, message);\n setLocalFiles(null);\n setValue(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <Upload\n accept={accept}\n multiple={allowMultiple}\n value={localFiles}\n onChange={handleChange}\n disabled={disabled || isUploading}\n listLayout={listLayout}\n placeholder={\n isUploading\n ? \"Uploading...\"\n : (def.uploadPlaceholder ?? \"Upload File\")\n }\n formatsLabel={def.uploadFormats}\n className={fieldControlClass(\n fieldDef,\n isUploading ? \"opacity-70\" : undefined,\n )}\n />\n\n {listLayout && rows.length > 0 ? (\n <ul className=\"flex flex-col gap-2 !mt-5 list-none p-0 mb-0 mx-0\">\n {rows.map((row) => (\n <li\n key={`${row.index}-${row.label}`}\n className=\"flex items-center justify-between rounded-md bg-white/50 px-3 py-2.5 text-sm text-[#191919] font-normal tracking-[-0.28px]\"\n >\n <span className=\"truncate pr-2\">{row.label}</span>\n <button\n type=\"button\"\n disabled={disabled || isUploading}\n aria-label={`Remove ${row.label}`}\n onClick={() => removeFileAt(row.index)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-400 text-white hover:bg-gray-500 disabled:opacity-50\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n\n {hasStoredValue && !listLayout ? (\n <p className=\"text-xs text-green-600\">\n {allowMultiple && Array.isArray(value)\n ? `${value.length} file(s) uploaded`\n : \"File uploaded\"}\n </p>\n ) : null}\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, \"text-xs text-gray-500\")}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, \"text-xs text-red-500\")}>\n {error}\n </p>\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';\nimport {\n FieldRequiredIndicator,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\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 && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\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';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\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 const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled || loading ? 'opacity-50 pointer-events-none' : ''}`,\n )}\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={fieldDescriptionClass(fieldDef, 'text-xs text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Slider } from '../shadcn/slider';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { SliderFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SliderWidget: 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 || fieldDef.type !== 'slider') return null;\n\n const def = fieldDef as SliderFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const step = def.step ?? 1;\n\n const raw = value == null || value === '' ? min : Number(value);\n const num = Number.isFinite(raw) ? Math.min(max, Math.max(min, raw)) : min;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(def);\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n <span className=\"ml-2 text-muted-foreground font-normal tabular-nums\">\n {num}/{max}\n </span>\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label className={fieldLabelClass(def, labelClass)}>{labelContent}</Label>\n ) : (\n <Label className={fieldLabelClass(def)}>{labelContent}</Label>\n )\n ) : null;\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {labelEl}\n <Slider\n className={fieldControlClass(\n def,\n cn('py-1', showError && 'opacity-90 ring-1 ring-red-500 rounded'),\n )}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n value={[num]}\n onValueChange={(v) => {\n const n = v[0] ?? min;\n setValue(n);\n setTouched();\n }}\n aria-label={!showLabel ? `${def.label} ${num}/${max}` : undefined}\n />\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype SendStatus = 'idle' | 'sending' | 'sent' | 'error';\n\nconst RESEND_COOLDOWN_SECONDS = 30;\n\nexport const PhoneInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled, value: fieldValue } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Drive the input directly from the store so the value survives remounts\n // (e.g. completed step collapsing into an accordion and re-expanding).\n const rawPhone = (fieldValue as string) ?? '';\n\n // On remount (step collapses then re-expands), local state resets to defaults.\n // Seed from the store: 10 digits + no error means OTP was already sent successfully.\n const wasAlreadySent = rawPhone.length === 10 && !error;\n\n const [status, setStatus] = useState<SendStatus>(wasAlreadySent ? 'sent' : 'idle');\n const [resendCooldown, setResendCooldown] = useState(0);\n const [resendError, setResendError] = useState('');\n\n const hasSentRef = useRef(wasAlreadySent);\n const sentPhoneRef = useRef(wasAlreadySent ? rawPhone : '');\n const isSendingRef = useRef(false);\n const isResendingRef = useRef(false);\n\n // Suppress \"Sending OTP...\" from appearing as a red error; show spinner instead.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'sending' &&\n status !== 'sent';\n\n // Resend cooldown tick.\n useEffect(() => {\n if (resendCooldown <= 0) return;\n const t = setTimeout(() => setResendCooldown((c) => Math.max(0, c - 1)), 1000);\n return () => clearTimeout(t);\n }, [resendCooldown]);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 10-digit mobile number';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 10);\n\n // If user edits after a successful send, re-lock step 1 and clear any verified OTP.\n if (hasSentRef.current && digits !== sentPhoneRef.current) {\n hasSentRef.current = false;\n sentPhoneRef.current = '';\n setStatus('idle');\n setResendCooldown(0);\n setResendError('');\n store.setExternalError(fieldId, 'Send OTP to continue');\n\n // Clear the linked OTP field so a stale verified value can't survive a phone change.\n const otpFieldId = (fieldDef.meta as any)?.otpFieldId as string | undefined;\n if (otpFieldId) {\n store.setValue(otpFieldId, '');\n store.setExternalError(otpFieldId, 'Verify OTP to continue');\n }\n }\n\n store.setValue(fieldId, digits);\n\n if (digits.length === 10 && !hasSentRef.current && !isSendingRef.current) {\n sendOtp(digits);\n }\n };\n\n const sendOtp = async (phone: string) => {\n if (isSendingRef.current) return;\n isSendingRef.current = true;\n setStatus('sending');\n store.setExternalError(fieldId, 'Sending OTP...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const sendPath = authCfg?.sendPath ?? '/api/auth/otp/send/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${sendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${phone}` }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n hasSentRef.current = true;\n sentPhoneRef.current = phone;\n setStatus('sent');\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n store.setExternalError(fieldId, null);\n } else {\n setStatus('error');\n store.setExternalError(fieldId, data.error ?? 'Failed to send OTP. Please try again.');\n }\n } catch {\n setStatus('error');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n } finally {\n isSendingRef.current = false;\n }\n };\n\n const handleResend = async () => {\n if (isResendingRef.current || resendCooldown > 0) return;\n isResendingRef.current = true;\n setResendError('');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const resendPath = authCfg?.resendPath ?? '/api/auth/otp/resend/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${resendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${rawPhone}`, retrytype: 'text' }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n setResendError('');\n } else {\n setResendError(data.error ?? 'Failed to resend OTP. Please try again.');\n }\n } catch {\n setResendError('Network error. Please try again.');\n } finally {\n isResendingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={rawPhone}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'sending'}\n placeholder={placeholder}\n maxLength={10}\n className={fieldControlClass(\n fieldDef,\n cn(\n showError && 'border-red-500',\n status === 'sent' && 'border-green-500 pr-9',\n status === 'sending' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'sending' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'sent' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'sent' && (\n <p className=\"text-xs text-green-600\">OTP sent to +91{rawPhone}</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n\n {status === 'sent' && (\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span>Didn&apos;t receive it?</span>\n <button\n type=\"button\"\n onClick={handleResend}\n disabled={resendCooldown > 0}\n className={cn(\n 'underline transition-colors',\n resendCooldown > 0\n ? 'opacity-40 cursor-not-allowed'\n : 'text-primary hover:text-primary/80 cursor-pointer',\n )}\n >\n {resendCooldown > 0 ? `Resend in ${resendCooldown}s` : 'Resend OTP'}\n </button>\n </div>\n )}\n\n {resendError && (\n <p className=\"text-xs text-red-500\">{resendError}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype VerifyStatus = 'idle' | 'verifying' | 'verified' | 'failed';\n\nexport const OtpInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Resolve which field holds the phone number (via meta or default \"phone\").\n const phoneFieldId: string =\n (fieldDef?.meta as any)?.phoneFieldId ?? 'phone';\n\n // Subscribe to phone field reactively — needed for verify API call.\n const { value: phoneValue } = useField(phoneFieldId);\n const phone = (phoneValue as string) ?? '';\n\n // Always send E.164 to the API regardless of what's stored in the form.\n const e164Phone = phone.startsWith('+') ? phone : `+91${phone}`;\n\n const [otp, setOtp] = useState('');\n const [status, setStatus] = useState<VerifyStatus>('idle');\n\n const isVerifyingRef = useRef(false);\n\n // Suppress \"Verifying...\" from showing as a red error — spinner handles that.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'verifying' &&\n status !== 'verified';\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 4-digit OTP';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 4);\n\n // Reset to idle if user re-enters after a failed attempt.\n if (status === 'failed') {\n setStatus('idle');\n store.setExternalError(fieldId, null);\n }\n\n setOtp(digits);\n store.setValue(fieldId, digits);\n\n if (digits.length === 4 && !isVerifyingRef.current) {\n verifyOtp(digits);\n }\n };\n\n const verifyOtp = async (code: string) => {\n if (isVerifyingRef.current) return;\n isVerifyingRef.current = true;\n setStatus('verifying');\n store.setExternalError(fieldId, 'Verifying...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const verifyPath = authCfg?.verifyPath ?? '/api/auth/otp/verify/';\n const res = await fetch(`${base}${verifyPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: e164Phone, otp_code: code }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setStatus('verified');\n store.setExternalError(fieldId, null);\n store.setValue(fieldId, {\n verified: true as const,\n phone: e164Phone,\n code,\n ...(data?.verification_token ? { token: data.verification_token } : {}),\n });\n } else {\n setStatus('failed');\n const msg = data.error ?? 'Invalid OTP. Please try again.';\n store.setExternalError(fieldId, msg);\n setOtp('');\n store.setValue(fieldId, '');\n }\n } catch {\n setStatus('failed');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n setOtp('');\n store.setValue(fieldId, '');\n } finally {\n isVerifyingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={otp}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'verifying' || status === 'verified'}\n placeholder={placeholder}\n maxLength={4}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'tracking-widest text-center text-lg',\n showError && 'border-red-500',\n status === 'verified' && 'border-green-500 pr-9',\n status === 'verifying' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'verifying' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'verified' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'verified' && (\n <p className=\"text-xs text-green-600\">Mobile number verified successfully</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { format, parseISO, addDays, startOfMonth, isSameMonth } from 'date-fns';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { cn } from '../../core/utils';\nimport {\n campDateSelectionFromOption,\n parseCampDateValue,\n} from '../../core/campDateValue';\nimport type { CampDateOption, CampDatesFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction formatCampDatePill(date: string): { day: string; weekday: string; label: string } {\n const parsed = parseISO(date);\n return {\n day: format(parsed, 'd'),\n weekday: format(parsed, 'EEE'),\n label: format(parsed, 'EEE, MMM d, yyyy'),\n };\n}\n\ninterface InstancesApiResult {\n id: string;\n date: string;\n notes: string;\n status: string;\n}\n\ninterface AvailabilityWindow {\n primary_slot_id: string;\n start_time: string;\n end_time: string;\n primary_available_capacity: number;\n is_bookable: boolean;\n}\n\nasync function fetchBookableInstances(\n base: string,\n campId: string,\n token: string,\n): Promise<CampDateOption[]> {\n const today = format(new Date(), 'yyyy-MM-dd');\n const end = format(addDays(new Date(), 30), 'yyyy-MM-dd');\n const headers: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n\n const res = await fetch(\n `${base}/api/camps/${campId}/instances/?start_date=${today}&end_date=${end}`,\n { headers },\n );\n if (!res.ok) throw new Error(`Instances fetch failed: ${res.status}`);\n const data = await res.json();\n const results: InstancesApiResult[] = data.results ?? [];\n\n const withAvailability = await Promise.all(\n results.map(async (inst) => {\n const avRes = await fetch(`${base}/api/camps/instances/${inst.id}/availability/`, {\n headers,\n });\n const avData = avRes.ok ? await avRes.json() : { windows: [] };\n const windows: AvailabilityWindow[] = avData.windows ?? [];\n return { inst, windows };\n }),\n );\n\n return withAvailability\n .filter(({ windows }) =>\n windows.some((w) => w.is_bookable && w.primary_available_capacity > 0),\n )\n .map(({ inst, windows }) => ({\n id: inst.id,\n date: inst.date,\n location: inst.notes || '',\n spotsLeft: windows.reduce(\n (sum, w) => sum + (w.is_bookable ? (w.primary_available_capacity ?? 0) : 0),\n 0,\n ),\n }));\n}\n\nconst datesScrollClass =\n 'flex gap-2.5 overflow-x-auto overflow-y-visible pb-4 pt-2 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden';\n\nconst CAMP_DATE_PRIMARY_GRADIENT =\n 'linear-gradient(328deg, #1F30A0 19.08%, #914BFA 80.92%)';\n\nconst campDatePillShadow = {\n unselected: 'rgba(0, 0, 0, 0.12) 0px 6px 14px',\n selected: 'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px',\n} as const;\n\nexport const CampDatesWidget: 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 showError = !!error && (touched || state.submitAttempted);\n\n const [fetchedOptions, setFetchedOptions] = useState<CampDateOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n const [monthIndex, setMonthIndex] = useState(0);\n\n const def = fieldDef as CampDatesFieldDef | undefined;\n const campId = def?.meta?.campId;\n const hasStaticOptions = (def?.options?.length ?? 0) > 0;\n\n useEffect(() => {\n if (!campId || hasStaticOptions) return;\n\n const cfg = store.getConfig();\n const base =\n cfg.auth?.baseUrl ??\n (typeof process !== 'undefined' ? (process.env?.NEXT_PUBLIC_API_URL ?? '') : '');\n const token = cfg.camps?.authToken ?? '';\n\n setIsLoading(true);\n setFetchError(null);\n\n fetchBookableInstances(base, campId, token)\n .then(setFetchedOptions)\n .catch(() => setFetchError('Failed to load available dates. Please try again.'))\n .finally(() => setIsLoading(false));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [campId, hasStaticOptions]);\n\n const camps = hasStaticOptions\n ? ((def?.options as CampDateOption[] | undefined) ?? [])\n : fetchedOptions;\n const selected = parseCampDateValue(value, camps);\n\n const sortedCamps = useMemo(\n () => [...camps].sort((a, b) => a.date.localeCompare(b.date)),\n [camps],\n );\n\n const months = useMemo(() => {\n const seen = new Set<string>();\n const result: Date[] = [];\n for (const camp of sortedCamps) {\n const monthStart = startOfMonth(parseISO(camp.date));\n const key = format(monthStart, 'yyyy-MM');\n if (!seen.has(key)) {\n seen.add(key);\n result.push(monthStart);\n }\n }\n return result;\n }, [sortedCamps]);\n\n useEffect(() => {\n if (months.length === 0) return;\n if (selected?.date) {\n const idx = months.findIndex((m) => isSameMonth(m, parseISO(selected.date)));\n if (idx >= 0) {\n setMonthIndex(idx);\n return;\n }\n }\n setMonthIndex(0);\n }, [months, selected?.date]);\n\n if (!fieldDef || !def) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n const currentMonth = months[monthIndex] ?? null;\n const visibleCamps = currentMonth\n ? sortedCamps.filter((camp) => isSameMonth(parseISO(camp.date), currentMonth))\n : sortedCamps;\n\n const canGoPrev = monthIndex > 0;\n const canGoNext = monthIndex < months.length - 1;\n\n const handleSelect = (campOptId: string) => {\n if (disabled) return;\n const camp = camps.find((c) => c.id === campOptId);\n if (!camp) return;\n\n const nextSelection = campDateSelectionFromOption(camp);\n const prevId = selected?.id ?? null;\n setValue(nextSelection);\n setTouched();\n store.setExternalError(fieldId, null);\n\n const timeSlotFieldId = def.meta?.timeSlotFieldId;\n if (timeSlotFieldId && prevId !== campOptId) {\n store.setValue(timeSlotFieldId, null);\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-3')}>\n {showLabel || months.length > 0 ? (\n <div className=\"flex items-center justify-between gap-3\">\n {showLabel ? (\n <h3 className=\"text-sm font-normal text-[#727272]\">\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </h3>\n ) : (\n <span aria-hidden className=\"shrink-0\" />\n )}\n {months.length > 0 && currentMonth ? (\n <div className=\"flex shrink-0 items-center gap-1 text-[#191919]\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n disabled={!canGoPrev || disabled}\n onClick={() => setMonthIndex((i) => Math.max(0, i - 1))}\n className={cn(\n 'rounded p-0.5 transition-opacity',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n (!canGoPrev || disabled) && 'cursor-not-allowed opacity-30',\n )}\n >\n <ChevronLeft className=\"h-4 w-4\" aria-hidden />\n </button>\n <span className=\"min-w-[3.5rem] text-center text-sm font-medium\">\n {format(currentMonth, 'MMMM')}\n </span>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n disabled={!canGoNext || disabled}\n onClick={() => setMonthIndex((i) => Math.min(months.length - 1, i + 1))}\n className={cn(\n 'rounded p-0.5 transition-opacity',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n (!canGoNext || disabled) && 'cursor-not-allowed opacity-30',\n )}\n >\n <ChevronRight className=\"h-4 w-4\" aria-hidden />\n </button>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {fieldDef.description ? (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n ) : null}\n\n {isLoading ? (\n <div className={datesScrollClass}>\n {[0, 1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className=\"h-[76px] w-12 shrink-0 animate-pulse rounded-full bg-[#D9D9D9]\"\n />\n ))}\n </div>\n ) : fetchError ? (\n <p className=\"text-sm text-red-500\">{fetchError}</p>\n ) : camps.length === 0 && campId ? (\n <p className=\"text-sm text-muted-foreground\">No available dates in the next 30 days.</p>\n ) : (\n <div role=\"radiogroup\" aria-label={fieldDef.label} className={datesScrollClass}>\n {visibleCamps.map((camp) => {\n const { day, weekday, label } = formatCampDatePill(camp.date);\n const isSelected = selected?.id === camp.id;\n\n return (\n <button\n key={camp.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={label}\n disabled={disabled}\n onClick={() => handleSelect(camp.id)}\n className={cn(\n 'relative flex h-[76px] w-12 shrink-0 flex-col items-center justify-between gap-2.5 rounded-full p-1.5',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n !isSelected && 'bg-white',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n style={{\n boxShadow: isSelected ? 'none' : campDatePillShadow.unselected,\n }}\n >\n <div\n aria-hidden\n className={cn(\n 'absolute inset-0 rounded-full bg-[#2F2F2F] transition-opacity duration-400',\n isSelected ? 'opacity-100' : 'opacity-0',\n )}\n style={{ boxShadow: campDatePillShadow.selected }}\n />\n <div\n className={cn(\n 'relative z-10 flex h-9 w-9 items-center justify-center rounded-full text-[12px] font-medium transition-colors duration-200',\n isSelected ? 'text-white' : 'bg-[#D9D9D9] text-[#1E1E1E]',\n )}\n style={\n isSelected ? { backgroundImage: CAMP_DATE_PRIMARY_GRADIENT } : undefined\n }\n >\n {day}\n </div>\n <span\n className={cn(\n 'relative z-10 mb-1.5 text-center text-[10px] font-normal transition-colors duration-400',\n isSelected ? 'text-white' : 'text-[#1E1E1E]',\n )}\n >\n {weekday}\n </span>\n </button>\n );\n })}\n </div>\n )}\n\n {showError ? (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n ) : null}\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { format, parse, parseISO } from 'date-fns';\nimport { Calendar } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { cn } from '../../core/utils';\nimport { parseCampDateValue } from '../../core/campDateValue';\nimport type { CampDatesFieldDef, CampTimeSlotOption, CampTimeSlotsFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ninterface AvailabilityWindow {\n primary_slot_id: string;\n start_time: string;\n end_time: string;\n primary_available_capacity: number;\n is_bookable: boolean;\n}\n\nfunction formatSlotTime(time: string): string {\n try {\n return format(parse(time, 'HH:mm:ss', new Date()), 'hh:mm a');\n } catch {\n return time;\n }\n}\n\nfunction mapWindowsToSlots(windows: AvailabilityWindow[]): CampTimeSlotOption[] {\n return windows.map((w) => ({\n id: w.primary_slot_id,\n time: formatSlotTime(w.start_time),\n spotsLeft: w.is_bookable ? (w.primary_available_capacity ?? 0) : 0,\n capacity: w.primary_available_capacity ?? 0,\n }));\n}\n\nconst slotsScrollClass =\n 'w-full overflow-x-auto pb-1 [scrollbar-width:thin] [&::-webkit-scrollbar]:h-1 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border/70';\n\nconst slotPillShadow = '0 2.596px 5.193px 0 rgba(0, 0, 0, 0.10)';\n\nexport const CampTimeSlotsWidget: 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\n const campDateFieldId =\n (fieldDef as CampTimeSlotsFieldDef | undefined)?.meta?.campDateFieldId ?? 'camp_date';\n const { value: campDateValue, fieldDef: campDateFieldDef } = useField(campDateFieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n const def = fieldDef as CampTimeSlotsFieldDef | undefined;\n\n const campDateOptions = (campDateFieldDef as CampDatesFieldDef | undefined)?.options;\n const selectedCamp = parseCampDateValue(campDateValue, campDateOptions);\n const prevCampIdRef = useRef<string | null>(selectedCamp?.id ?? null);\n\n const [fetchedSlots, setFetchedSlots] = useState<CampTimeSlotOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [fetchError, setFetchError] = useState<string | null>(null);\n\n const hasStaticOptions = (def?.options?.length ?? 0) > 0;\n const slots = hasStaticOptions ? (def?.options ?? []) : fetchedSlots;\n const selectedSlotId = value != null ? String(value) : null;\n\n // Fetch availability whenever the selected instance changes (and no static options).\n useEffect(() => {\n if (hasStaticOptions || !selectedCamp?.id) {\n if (!selectedCamp?.id) {\n setFetchedSlots([]);\n setFetchError(null);\n }\n return;\n }\n\n const instanceId = selectedCamp.id;\n const cfg = store.getConfig();\n const base =\n cfg.auth?.baseUrl ??\n (typeof process !== 'undefined' ? (process.env?.NEXT_PUBLIC_API_URL ?? '') : '');\n const token = cfg.camps?.authToken ?? '';\n const headers: Record<string, string> = token ? { Authorization: `Bearer ${token}` } : {};\n\n setIsLoading(true);\n setFetchError(null);\n\n fetch(`${base}/api/camps/instances/${instanceId}/availability/`, { headers })\n .then((r) => {\n if (!r.ok) throw new Error(`Availability fetch failed: ${r.status}`);\n return r.json();\n })\n .then((data) => {\n setFetchedSlots(mapWindowsToSlots(data.windows ?? []));\n })\n .catch(() => setFetchError('Failed to load time slots. Please try again.'))\n .finally(() => setIsLoading(false));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedCamp?.id, hasStaticOptions]);\n\n // Clear the selected slot when the date changes.\n useEffect(() => {\n const campId = selectedCamp?.id ?? null;\n if (prevCampIdRef.current !== null && prevCampIdRef.current !== campId && selectedSlotId) {\n setValue(null);\n }\n prevCampIdRef.current = campId;\n }, [selectedCamp?.id, selectedSlotId, setValue]);\n\n // Invalidate the slot selection when it's no longer available.\n useEffect(() => {\n if (!selectedSlotId) return;\n const slotStillValid = slots.some((slot) => slot.id === selectedSlotId && slot.spotsLeft > 0);\n if (!slotStillValid) {\n setValue(null);\n }\n }, [selectedSlotId, setValue, slots]);\n\n if (!fieldDef || !def) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const handleSelect = (slotId: string, button?: HTMLButtonElement) => {\n if (disabled) return;\n setValue(slotId);\n setTouched();\n button?.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n };\n\n const dateLabel = selectedCamp?.date\n ? format(parseISO(selectedCamp.date), 'EEE, MMM d, yyyy')\n : null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-3')}>\n {showLabel ? (\n <div className=\"space-y-0.5\">\n <h3\n className={fieldLabelClass(\n fieldDef,\n 'text-lg font-semibold leading-tight text-foreground',\n )}\n >\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </h3>\n {dateLabel ? (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Calendar className=\"h-3.5 w-3.5 shrink-0\" aria-hidden />\n {dateLabel}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {isLoading ? (\n <div className={slotsScrollClass}>\n <div className=\"relative\" style={{ minWidth: 'max-content' }}>\n <div className=\"absolute left-0 right-0 top-0 h-0.5 w-full bg-[#DCDCDC]\" />\n <div className=\"flex gap-4 pt-3\">\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"mb-2 h-[34px] w-[86px] shrink-0 animate-pulse rounded-full bg-[#DCDCDC]\"\n />\n ))}\n </div>\n </div>\n </div>\n ) : fetchError ? (\n <p className=\"text-sm text-red-500\">{fetchError}</p>\n ) : !selectedCamp?.id ? (\n <p className=\"text-sm text-muted-foreground\">Select a date to see available time slots.</p>\n ) : slots.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No time slots available for this date.</p>\n ) : (\n <div\n role=\"radiogroup\"\n aria-label={fieldDef.label}\n className={slotsScrollClass}\n >\n <div className=\"relative\" style={{ minWidth: 'max-content' }}>\n <div className=\"absolute left-0 right-0 top-0 h-0.5 w-full bg-[#DCDCDC]\" />\n <div className=\"flex gap-4 pt-3\">\n {slots.map((slot) => {\n const isFull = slot.spotsLeft <= 0;\n const selected = selectedSlotId === slot.id;\n\n return (\n <button\n key={slot.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled || isFull}\n onClick={(e) => handleSelect(slot.id, e.currentTarget)}\n className={cn(\n 'relative mb-2 w-[86px] shrink-0 rounded-full px-3 py-2 text-xs font-medium transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n isFull\n ? 'cursor-not-allowed bg-[#DCDCDC]/60 text-black/40'\n : selected\n ? 'bg-[#2F2F2F] text-white'\n : 'bg-[#DCDCDC] text-black',\n disabled && !isFull && 'cursor-not-allowed opacity-60',\n )}\n style={isFull ? undefined : { boxShadow: slotPillShadow }}\n >\n {selected && !isFull ? (\n <span\n className=\"absolute -top-3 left-0 right-0 h-0.5 bg-[#6641D8]\"\n aria-hidden\n />\n ) : null}\n <span className=\"whitespace-nowrap\">{slot.time}</span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n )}\n\n {showError ? (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n ) : null}\n </div>\n );\n};\n","import React from 'react';\nimport type { StaticTextFieldDef, FieldDef } from '../core/types';\nimport { cn } from '../core/utils';\nimport { useField } from './useField';\n// Lightweight widgets kept eager: they only depend on Radix + native inputs and\n// are common in simple forms, so loading them behind Suspense would add a flash\n// for no real byte savings.\nimport { TextWidget } from '../ui/widgets/Text';\nimport { SelectWidget } from '../ui/widgets/Select';\nimport { MultiSelectWidget } from '../ui/widgets/MultiSelect';\nimport { RepeatableWidget } from '../ui/widgets/Repeatable';\nimport { ImageUploadWidget } from '../ui/widgets/ImageUpload';\nimport { MediaUploadWidget } from '../ui/widgets/MediaUpload';\nimport { SignatureUploadWidget } from '../ui/widgets/SignatureUpload';\nimport { FormFileUploadWidget } from '../ui/widgets/FormFileUpload';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\nimport { SliderWidget } from '../ui/widgets/SliderWidget';\nimport { PhoneInputWidget } from '../ui/widgets/PhoneInputWidget';\nimport { OtpInputWidget } from '../ui/widgets/OtpInputWidget';\nimport { CampDatesWidget } from '../ui/widgets/CampDatesWidget';\nimport { CampTimeSlotsWidget } from '../ui/widgets/CampTimeSlotsWidget';\nimport { Switch } from '../ui/shadcn/switch';\nimport { Label } from '../ui/shadcn/label';\nimport { useFormStore } from './FormProvider';\nimport type { ToggleFieldDef } from '../core/types';\nimport { fieldMetaRequestsMarMedicationOrdersButton } from '../core/marMedicationOrdersMeta';\nimport {\n FieldRequiredIndicator,\n fieldDescriptionClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from './fieldStyle';\n\ntype WidgetComponent = React.ComponentType<{ fieldId: string }>;\n\n// Heavy / specialty widgets are loaded on demand so simple forms never ship\n// their dependencies. Each becomes its own async chunk, fetched only when a\n// form actually renders that field type. The big wins:\n// - richtext -> TipTap + ProseMirror\n// - date / datetime -> react-day-picker\n// - smart_textarea -> compromise (NLP)\n// - editable_table -> @tanstack/react-table\n// The specialty medical widgets are large and rarely used in lead forms.\nfunction lazyNamed(\n loader: () => Promise<Record<string, unknown>>,\n name: string,\n): React.LazyExoticComponent<WidgetComponent> {\n return React.lazy(async () => ({ default: (await loader())[name] as WidgetComponent }));\n}\n\nconst RichTextWidget = lazyNamed(() => import('../ui/widgets/RichTextWidget'), 'RichTextWidget');\nconst DateWidget = lazyNamed(() => import('../ui/widgets/DateWidget'), 'DateWidget');\nconst DateTimeWidget = lazyNamed(() => import('../ui/widgets/DateTimeWidget'), 'DateTimeWidget');\nconst EditableTableWidget = lazyNamed(() => import('../ui/widgets/EditableTable'), 'EditableTableWidget');\nconst AddMedicationWidget = lazyNamed(() => import('../ui/widgets/AddMedicationWidget'), 'AddMedicationWidget');\nconst DischargeMedicationOrdersWidget = lazyNamed(() => import('../ui/widgets/DischargeMedicationOrdersWidget'), 'DischargeMedicationOrdersWidget');\nconst AddInvestigationWidget = lazyNamed(() => import('../ui/widgets/AddInvestigationWidget'), 'AddInvestigationWidget');\nconst AddProcedureWidget = lazyNamed(() => import('../ui/widgets/AddProcedureWidget'), 'AddProcedureWidget');\nconst DifferentialDiagnosisWidget = lazyNamed(() => import('../ui/widgets/DifferentialDiagnosisWidget'), 'DifferentialDiagnosisWidget');\nconst VitalsWidget = lazyNamed(() => import('../ui/widgets/VitalsWidget'), 'VitalsWidget');\nconst HiddenVitalsWidget = lazyNamed(() => import('../ui/widgets/HiddenVitalsWidget'), 'HiddenVitalsWidget');\nconst ReferralWidget = lazyNamed(() => import('../ui/widgets/ReferralWidget'), 'ReferralWidget');\nconst FollowupWidget = lazyNamed(() => import('../ui/widgets/FollowupWidget'), 'FollowupWidget');\nconst SmartTextareaWidget = lazyNamed(() => import('../ui/widgets/SmartTextarea'), 'SmartTextareaWidget');\nconst DiagnosisTextareaWidget = lazyNamed(() => import('../ui/widgets/DiagnosisTextareaWidget'), 'DiagnosisTextareaWidget');\nconst ObstetricHistoryWidget = lazyNamed(() => import('../ui/widgets/ObstetricHistoryWidget'), 'ObstetricHistoryWidget');\nconst OphthalmologyWidget = lazyNamed(() => import('../ui/widgets/OphthalmologyWidget'), 'OphthalmologyWidget');\nconst OphthalDiagnosisWidget = lazyNamed(() => import('../ui/widgets/OphthalDiagnosisWidget'), 'OphthalDiagnosisWidget');\nconst OrthopedicExamWidget = lazyNamed(() => import('../ui/widgets/OrthopedicExamWidget'), 'OrthopedicExamWidget');\nconst MarMedicationOrdersWidget = lazyNamed(() => import('../ui/widgets/MarMedicationOrdersWidget'), 'MarMedicationOrdersWidget');\nconst SuggestionTextareaWidget = lazyNamed(() => import('../ui/widgets/SuggestionTextareaWidget'), 'SuggestionTextareaWidget');\nconst LensAssessmentWidget = lazyNamed(() => import('../ui/widgets/LensAssessmentWidget'), 'LensAssessmentWidget');\nconst FunctionalImpairmentScoreWidget = lazyNamed(() => import('../ui/widgets/FunctionalImpairmentScoreWidget'), 'FunctionalImpairmentScoreWidget');\nconst BiometryIolWorkupWidget = lazyNamed(() => import('../ui/widgets/BiometryIolWorkupWidget'), 'BiometryIolWorkupWidget');\nconst SurgicalRiskFlagsWidget = lazyNamed(() => import('../ui/widgets/SurgicalRiskFlagsWidget'), 'SurgicalRiskFlagsWidget');\nconst GsSmartHistoryWidget = lazyNamed(() => import('../ui/widgets/GsSmartHistoryWidget'), 'GsSmartHistoryWidget');\nconst GsExaminationWidget = lazyNamed(() => import('../ui/widgets/GsExaminationWidget'), 'GsExaminationWidget');\nconst GsGradingWidget = lazyNamed(() => import('../ui/widgets/GsGradingWidget'), 'GsGradingWidget');\nconst PainScaleFlagsWidget = lazyNamed(() => import('../ui/widgets/PainScaleFlagsWidget'), 'PainScaleFlagsWidget');\nconst UrologySmartHistoryWidget = lazyNamed(() => import('../ui/widgets/UrologySmartHistoryWidget'), 'UrologySmartHistoryWidget');\nconst UrologyExaminationWidget = lazyNamed(() => import('../ui/widgets/UrologyExaminationWidget'), 'UrologyExaminationWidget');\nconst UrologyPathwayWidget = lazyNamed(() => import('../ui/widgets/UrologyPathwayWidget'), 'UrologyPathwayWidget');\nconst OBGExaminationWidget = lazyNamed(() => import('../ui/widgets/OBGExaminationWidget'), 'OBGExaminationWidget');\nconst OBGPathwayWidget = lazyNamed(() => import('../ui/widgets/OBGPathwayWidget'), 'OBGPathwayWidget');\nconst DentalChartWidget = lazyNamed(() => import('../ui/widgets/DentalChartWidget'), 'DentalChartWidget');\nconst TreatmentPlanWidget = lazyNamed(() => import('../ui/widgets/TreatmentPlanWidget'), 'TreatmentPlanWidget');\nconst PregnancyStatusWidget = lazyNamed(() => import('../ui/widgets/PregnancyStatusWidget'), 'PregnancyStatusWidget');\nconst BpeChartWidget = lazyNamed(() => import('../ui/widgets/BpeChartWidget'), 'BpeChartWidget');\nconst ExtraOralExamWidget = lazyNamed(() => import('../ui/widgets/ExtraOralExamWidget'), 'ExtraOralExamWidget');\n\n// Wraps a lazily-loaded widget in a Suspense boundary. fallback is null to\n// avoid layout shift; the same field type shares one chunk, fetched once.\nfunction lazyWidget(node: React.ReactNode) {\n return <React.Suspense fallback={null}>{node}</React.Suspense>;\n}\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 'slider':\n return <SliderWidget fieldId={fieldId} />;\n\n case 'textarea':\n if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {\n return lazyWidget(<MarMedicationOrdersWidget fieldId={fieldId} />);\n }\n return <TextWidget fieldId={fieldId} />;\n\n case 'richtext':\n return lazyWidget(<RichTextWidget fieldId={fieldId} />);\n\n case 'date':\n return lazyWidget(<DateWidget fieldId={fieldId} />);\n\n case 'datetime':\n return lazyWidget(<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 'file_upload':\n return <FormFileUploadWidget fieldId={fieldId} />;\n\n case 'signature':\n return <SignatureUploadWidget fieldId={fieldId} />;\n\n case 'editable_table':\n return lazyWidget(<EditableTableWidget fieldId={fieldId} />);\n\n case 'medications':\n return lazyWidget(<AddMedicationWidget fieldId={fieldId} />);\n\n case 'discharge_medication_orders':\n return lazyWidget(<DischargeMedicationOrdersWidget fieldId={fieldId} />);\n\n case 'investigations':\n return lazyWidget(<AddInvestigationWidget fieldId={fieldId} />);\n\n case 'procedures':\n return lazyWidget(<AddProcedureWidget fieldId={fieldId} />);\n\n case 'differential_diagnosis':\n return lazyWidget(<DifferentialDiagnosisWidget fieldId={fieldId} />);\n\n case 'vitals':\n return lazyWidget(<VitalsWidget fieldId={fieldId} />);\n\n case 'hidden_vitals':\n return lazyWidget(<HiddenVitalsWidget fieldId={fieldId} />);\n\n case 'referral':\n return lazyWidget(<ReferralWidget fieldId={fieldId} />);\n\n case 'followup':\n return lazyWidget(<FollowupWidget fieldId={fieldId} />);\n\n case 'smart_textarea':\n return lazyWidget(<SmartTextareaWidget fieldId={fieldId} />);\n\n case 'diagnosis_textarea':\n return lazyWidget(<DiagnosisTextareaWidget fieldId={fieldId} />);\n\n case 'obstetric_history':\n return lazyWidget(<ObstetricHistoryWidget fieldId={fieldId} />);\n\n case 'eye_prescription':\n return lazyWidget(<OphthalmologyWidget fieldId={fieldId} />);\n\n case 'ophthal_diagnosis':\n return lazyWidget(<OphthalDiagnosisWidget fieldId={fieldId} />);\n case 'orthopedic_exam':\n return lazyWidget(<OrthopedicExamWidget fieldId={fieldId} />);\n\n case 'general_surgery_smart_history':\n return lazyWidget(<GsSmartHistoryWidget fieldId={fieldId} />);\n\n case 'general_surgery_examination':\n return lazyWidget(<GsExaminationWidget fieldId={fieldId} />);\n\n case 'general_surgery_grading':\n return lazyWidget(<GsGradingWidget fieldId={fieldId} />);\n\n case 'pain_scale_flags':\n return lazyWidget(<PainScaleFlagsWidget fieldId={fieldId} />);\n\n case 'urology_smart_history':\n return lazyWidget(<UrologySmartHistoryWidget fieldId={fieldId} />);\n\n case 'urology_examination':\n return lazyWidget(<UrologyExaminationWidget fieldId={fieldId} />);\n\n case 'urology_pathway':\n return lazyWidget(<UrologyPathwayWidget fieldId={fieldId} />);\n\n case 'obg_examination':\n return lazyWidget(<OBGExaminationWidget fieldId={fieldId} />);\n\n case 'obg_pathway':\n return lazyWidget(<OBGPathwayWidget fieldId={fieldId} />);\n\n case 'dental_chart':\n return lazyWidget(<DentalChartWidget fieldId={fieldId} />);\n\n case 'bpe_chart':\n return lazyWidget(<BpeChartWidget fieldId={fieldId} />);\n\n case 'extra_oral_exam':\n return lazyWidget(<ExtraOralExamWidget fieldId={fieldId} />);\n\n case 'social_history':\n return <TextWidget fieldId={fieldId} />;\n\n case 'treatment_plan':\n return lazyWidget(<TreatmentPlanWidget fieldId={fieldId} />);\n\n case 'pregnancy_status':\n return lazyWidget(<PregnancyStatusWidget fieldId={fieldId} />);\n\n case 'phone_input':\n return <PhoneInputWidget fieldId={fieldId} />;\n\n case 'otp_input':\n return <OtpInputWidget fieldId={fieldId} />;\n\n case 'camp_dates':\n return <CampDatesWidget fieldId={fieldId} />;\n\n case 'camp_time_slots':\n return <CampTimeSlotsWidget 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 const showLabel = isLabelVisible(fieldDef);\n return (\n <div className={fieldWrapperClass(fieldDef, '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 {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n 'text-sm font-medium leading-none cursor-pointer select-none',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n </div>\n );\n }\n case 'suggestion_textarea':\n case 'complaint_chips':\n return lazyWidget(<SuggestionTextareaWidget fieldId={fieldId} />);\n\n case 'lens_assessment':\n return lazyWidget(<LensAssessmentWidget fieldId={fieldId} />);\n\n case 'functional_impairment_score':\n return lazyWidget(<FunctionalImpairmentScoreWidget fieldId={fieldId} />);\n\n case 'biometry_iol_workup':\n return lazyWidget(<BiometryIolWorkupWidget fieldId={fieldId} />);\n\n case 'surgical_risk_flags':\n return lazyWidget(<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\n className={fieldWrapperClass(\n def,\n cn(labelClass, 'text-muted-foreground'),\n )}\n >\n {def.label}\n {def.description && (\n <p className={fieldDescriptionClass(def, cn('mt-1', descClass, 'opacity-90'))}>\n {def.description}\n </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 from \"react\";\nimport type { SectionChild } from \"../core/types\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\n\nexport function renderSectionChildren(children: SectionChild[]) {\n return children.map((child, index) => {\n if (typeof child === \"string\") {\n return <FieldRenderer key={child} fieldId={child} />;\n }\n if (child.type === \"column_layout\") {\n return (\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 }\n return <React.Fragment key={index} />;\n });\n}\n","import React from \"react\";\nimport type { LayoutNode } from \"../core/types\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\nexport type DynamicFormV2SectionMode = \"accordion\" | \"plain\";\n\nexport interface DynamicFormV2Props {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n /**\n * `accordion` — bordered collapsible sections (same as DynamicForm).\n * `plain` — simple vertical stack, no card/accordion chrome.\n */\n sectionMode?: DynamicFormV2SectionMode;\n /** In `plain` mode, show the section title above fields. Default true. Ignored for accordion. */\n showSectionTitles?: boolean;\n className?: string;\n}\n\nfunction PlainSection({\n title,\n showHeading,\n children,\n}: {\n title: string;\n showHeading: boolean;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"mb-6 space-y-4\">\n {showHeading ? (\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n ) : null}\n {children}\n </div>\n );\n}\n\n/**\n * Alternate layout shell for alternative designs (e.g. marketing / minimal flows).\n * Same schema traversal as {@link DynamicForm}; configurable title and section chrome.\n */\nexport const DynamicFormV2: React.FC<DynamicFormV2Props> = ({\n showTitle = true,\n sectionMode = \"plain\",\n showSectionTitles = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle ? (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n ) : null}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"section\") {\n if (sectionMode === \"accordion\") {\n return (\n <Section key={node.id} title={node.title}>\n {renderSectionChildren(node.children)}\n </Section>\n );\n }\n return (\n <PlainSection\n key={node.id}\n title={node.title}\n showHeading={showSectionTitles}\n >\n {renderSectionChildren(node.children)}\n </PlainSection>\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, { useState, useEffect } from \"react\";\nimport { Check } from \"lucide-react\";\nimport type {\n CampDatesFieldDef,\n FormState,\n LayoutNode,\n MultiStepLayoutNode,\n MultiStepNode,\n FieldDef,\n} from \"../core/types\";\nimport { parseCampDateValue } from \"../core/campDateValue\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction flattenStepFieldIds(step: MultiStepNode): string[] {\n const ids: string[] = [];\n for (const child of step.children) {\n if (typeof child === \"string\") {\n ids.push(child);\n } else if (child.type === \"column_layout\") {\n ids.push(...child.children);\n }\n }\n return ids;\n}\n\nfunction isFieldComplete(\n id: string,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n if (state.visibility[id] === false) return true; // hidden fields don't block\n if (state.errors[id]) return false;\n const def = fieldMap[id];\n if (def?.required) {\n const v = state.values[id];\n if (v === null || v === undefined || v === \"\") return false;\n if (Array.isArray(v) && v.length === 0) return false;\n if (def.type === \"camp_dates\") {\n if (!parseCampDateValue(v, (def as CampDatesFieldDef).options)?.id) return false;\n }\n if (def.type === \"otp_input\") {\n if (!v || typeof v !== \"object\" || (v as { verified?: boolean }).verified !== true) {\n return false;\n }\n }\n }\n return true;\n}\n\nfunction isStepComplete(\n step: MultiStepNode,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n return flattenStepFieldIds(step).every((id) =>\n isFieldComplete(id, state, fieldMap)\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stepper header\n// ---------------------------------------------------------------------------\n\ntype StepStatus = \"complete\" | \"active\" | \"locked\";\n\ninterface StepperProps {\n steps: MultiStepNode[];\n statuses: StepStatus[];\n variant: \"numbered\" | \"dots\" | \"labels\";\n}\n\nconst Stepper: React.FC<StepperProps> = ({ steps, statuses, variant }) => {\n if (variant === \"dots\") {\n return (\n <div className=\"flex items-center gap-2 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div\n className={cn(\n \"h-2.5 w-2.5 rounded-full transition-colors\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary ring-2 ring-primary/30\",\n status === \"locked\" && \"bg-muted\"\n )}\n title={step.title}\n />\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n if (variant === \"labels\") {\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex flex-col items-center gap-1\">\n <div\n className={cn(\n \"h-2 w-2 rounded-full\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary\",\n status === \"locked\" && \"bg-muted\"\n )}\n />\n <span\n className={cn(\n \"text-xs whitespace-nowrap\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mb-4 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n // numbered (default)\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex shrink-0 items-center gap-2\">\n <div\n className={cn(\n \"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full border-2 text-xs font-semibold leading-none transition-colors\",\n status === \"complete\" && \"border-primary bg-primary\",\n status === \"active\" && \"border-primary bg-background\",\n status === \"locked\" && \"border-border bg-background\"\n )}\n >\n {status === \"complete\" ? (\n <Check className=\"h-3.5 w-3.5 shrink-0 text-primary-foreground\" />\n ) : (\n <span\n className={cn(\n \"tabular-nums\",\n status === \"active\" && \"text-primary\",\n status === \"locked\" && \"text-muted-foreground\"\n )}\n >\n {i + 1}\n </span>\n )}\n </div>\n <span\n className={cn(\n \"text-sm font-medium hidden sm:block\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mx-3 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Active step shell — plain section, visually prominent\n// ---------------------------------------------------------------------------\n\nconst ActiveStep: React.FC<{ title: string; children: React.ReactNode }> = ({\n title,\n children,\n}) => (\n <div className=\"mb-4 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n {children}\n </div>\n);\n\n// ---------------------------------------------------------------------------\n// Wizard — handles one multi_step layout node\n// ---------------------------------------------------------------------------\n\ninterface WizardProps {\n node: MultiStepLayoutNode;\n}\n\nconst Wizard: React.FC<WizardProps> = ({ node }) => {\n const store = useFormStore();\n // Spread into a new object on every store notification so React sees a\n // changed reference and actually re-renders. The store mutates nested\n // properties (values, errors, visibility) but keeps `this.state` as the\n // same object, so passing it directly would cause React to bail out.\n const [formState, setFormState] = useState<FormState>(() => ({\n ...store.getState(),\n }));\n\n useEffect(() => {\n return store.subscribe((state) => {\n setFormState({ ...state });\n });\n }, [store]);\n\n const schema = store.getSchema();\n const fieldMap: Record<string, FieldDef> = {};\n schema.fields.forEach((f) => {\n fieldMap[f.id] = f;\n });\n\n const { steps, meta } = node;\n const showStepper = meta?.showStepper !== false;\n const variant = meta?.stepperVariant ?? \"numbered\";\n const collapseCompleted = meta?.collapseCompleted !== false;\n\n // Compute per-step status\n const stepComplete = steps.map((s) =>\n isStepComplete(s, formState, fieldMap)\n );\n\n // First incomplete step is active; steps before it are complete; steps after are locked.\n const activeIndex =\n stepComplete.findIndex((c) => !c) === -1\n ? steps.length // all complete\n : stepComplete.findIndex((c) => !c);\n\n const statuses: StepStatus[] = steps.map((_, i) => {\n if (i < activeIndex) return \"complete\";\n if (i === activeIndex) return \"active\";\n return \"locked\";\n });\n\n return (\n <div>\n {node.title && (\n <h2 className=\"text-lg font-semibold mb-4\">{node.title}</h2>\n )}\n {showStepper && (\n <Stepper steps={steps} statuses={statuses} variant={variant} />\n )}\n <div className=\"space-y-2\">\n {steps.map((step, i) => {\n const status = statuses[i];\n\n // Locked steps are not mounted at all — this is the \"unlock\" behaviour.\n if (status === \"locked\") return null;\n\n const children = renderSectionChildren(step.children);\n\n if (status === \"complete\") {\n // Completed steps stay editable. Accordion chrome is optional via collapseCompleted.\n if (collapseCompleted) {\n return (\n <Section key={step.id} title={step.title}>\n {children}\n </Section>\n );\n }\n return (\n <ActiveStep key={step.id} title={step.title}>\n {children}\n </ActiveStep>\n );\n }\n\n // Active step\n return (\n <ActiveStep key={step.id} title={step.title}>\n {children}\n </ActiveStep>\n );\n })}\n </div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface MultiStepFormProps {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n className?: string;\n}\n\n/**\n * Renders a form schema that may contain `multi_step` layout nodes in addition\n * to the standard `section` / `column_layout` nodes.\n *\n * Multi-step groups unlock steps linearly: a step becomes visible only when\n * all fields in the previous step are valid (no errors, required fields filled).\n */\nexport const MultiStepForm: React.FC<MultiStepFormProps> = ({\n showTitle = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle && (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n )}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"multi_step\") {\n return <Wizard key={node.id} node={node} />;\n }\n if (node.type === \"section\") {\n return (\n <div key={node.id} className=\"mb-6 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">\n {node.title}\n </h2>\n {renderSectionChildren(node.children)}\n </div>\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 { cn } from '../core/utils';\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-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\n key={fieldId}\n className={cn(\n 'min-h-0 flex flex-col',\n colSpan === 2 ? 'col-span-2' : 'col-span-1 h-full',\n )}\n >\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 { cn } from '../../core/utils';\nimport type { FieldDef } from '../../core/types';\nimport { richTextHtmlClassName } from './richTextClassName';\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={cn(\n richTextHtmlClassName(),\n 'text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50',\n )}\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 from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateTimeProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDateTime: React.FC<ReadOnlyDateTimeProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">\n {fieldDef.label}\n </Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || (\n <span className=\"text-gray-400 italic\">No date &amp; time selected</span>\n )}\n </div>\n </div>\n );\n};\n\n","import React, { 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 { format, parseISO } from 'date-fns';\nimport { MapPin } from 'lucide-react';\nimport { Label } from '../shadcn/label';\nimport { MOCK_CAMP_DATES } from '../../core/campMockData';\nimport { parseCampDateValue } from '../../core/campDateValue';\nimport type { CampDatesFieldDef } from '../../core/types';\n\ninterface ReadOnlyCampDatesProps {\n fieldDef: CampDatesFieldDef;\n value: unknown;\n}\n\nexport const ReadOnlyCampDates: React.FC<ReadOnlyCampDatesProps> = ({ fieldDef, value }) => {\n const camps = fieldDef.options?.length ? fieldDef.options : MOCK_CAMP_DATES;\n const selected = parseCampDateValue(value, camps);\n const isEmpty = !selected;\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=\"rounded-md border border-gray-200 bg-gray-50 p-3 min-h-[2.5rem]\">\n {isEmpty ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n <div className=\"space-y-1\">\n <p className=\"font-medium text-gray-900\">\n {format(parseISO(selected.date), 'EEE, MMM d, yyyy')}\n </p>\n {selected.location ? (\n <p className=\"flex items-center gap-1 text-sm text-gray-600\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0\" aria-hidden />\n {selected.location}\n </p>\n ) : null}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { MOCK_CAMP_TIME_SLOTS } from '../../core/campMockData';\nimport type { CampTimeSlotsFieldDef } from '../../core/types';\n\ninterface ReadOnlyCampTimeSlotsProps {\n fieldDef: CampTimeSlotsFieldDef;\n value: unknown;\n}\n\nexport const ReadOnlyCampTimeSlots: React.FC<ReadOnlyCampTimeSlotsProps> = ({ fieldDef, value }) => {\n const slots = fieldDef.options?.length ? fieldDef.options : MOCK_CAMP_TIME_SLOTS;\n const selected = slots.find((slot) => String(slot.id) === String(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=\"min-h-[2.5rem] rounded-md border border-gray-200 bg-gray-50 p-3\">\n {isEmpty || !selected ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n <span className=\"font-medium text-gray-900\">{selected.time}</span>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { ReadOnlyText } from '../ui/widgets/ReadOnlyText';\nimport { ReadOnlySelect } from '../ui/widgets/ReadOnlySelect';\nimport { ReadOnlyMultiSelect } from '../ui/widgets/ReadOnlyMultiSelect';\nimport { ReadOnlyRepeatable } from '../ui/widgets/ReadOnlyRepeatable';\nimport { ReadOnlyDate } from '../ui/widgets/ReadOnlyDate';\nimport { ReadOnlyImageUpload } from '../ui/widgets/ReadOnlyImageUpload';\nimport { ReadOnlyMediaUpload } from '../ui/widgets/ReadOnlyMediaUpload';\nimport { ReadOnlySignature } from '../ui/widgets/ReadOnlySignature';\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 { ReadOnlyCampDates } from '../ui/widgets/ReadOnlyCampDates';\nimport { ReadOnlyCampTimeSlots } from '../ui/widgets/ReadOnlyCampTimeSlots';\nimport type {\n CampDatesFieldDef,\n CampTimeSlotsFieldDef,\n CheckboxFieldDef,\n FieldDef,\n PainScaleFlagsFieldDef,\n RadioFieldDef,\n ReferralFieldDef,\n RepeatableFieldDef,\n SelectFieldDef,\n StaticTextFieldDef,\n} from '../core/types';\nimport {\n functionalImpairmentTotal,\n parseFunctionalImpairmentScore,\n} from '../core/functionalImpairmentScore';\nimport { normalizePainScaleFlags } from '../core/painScaleFlags';\nimport { normalizeGeneralSurgerySmartHistory } from '../core/generalSurgeryPathway';\nimport { normalizeObgPathway } from '../core/obgPathway';\nimport { normalizeUrologySmartHistory } from '../core/urologyPathway';\nimport { normalizeDentalChart } from '../core/dentalChart';\nimport { DentalChartReadOnly } from '../ui/widgets/DentalChartWidget';\nimport { BpeChartReadOnly } from '../ui/widgets/BpeChartWidget';\nimport type { BpeChartData } from '../ui/widgets/BpeChartWidget';\nimport type { PregnancyStatusValue } from '../core/types';\n\n// ReadOnlyTable renders via @tanstack/react-table; load it on demand so the\n// read-only form path doesn't ship the table library unless a table is shown.\nconst ReadOnlyTable = React.lazy(() =>\n import('../ui/widgets/ReadOnlyTable').then((m) => ({ default: m.ReadOnlyTable })),\n);\n\ninterface ReadOnlyFieldRendererProps {\n fieldDef: FieldDef;\n value: unknown;\n /**\n * Full form values; required for `suggestion_textarea` with `meta.embeddedFieldIds` so embedded\n * fields can be shown in read-only view.\n */\n allValues?: Record<string, unknown>;\n /** Resolve embedded field definitions by id (e.g. `schema.fields` map). */\n resolveFieldDef?: (fieldId: string) => FieldDef | undefined;\n}\n\nexport const ReadOnlyFieldRenderer: React.FC<ReadOnlyFieldRendererProps> = ({\n fieldDef,\n value,\n allValues,\n resolveFieldDef,\n}) => {\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 'slider':\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 'file_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 (\n <React.Suspense fallback={null}>\n <ReadOnlyTable fieldDef={fieldDef} value={value} />\n </React.Suspense>\n );\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 'camp_dates':\n return <ReadOnlyCampDates fieldDef={fieldDef as CampDatesFieldDef} value={value} />;\n\n case 'camp_time_slots':\n return <ReadOnlyCampTimeSlots fieldDef={fieldDef as CampTimeSlotsFieldDef} 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 const embeddedIds =\n fieldDef.meta &&\n Array.isArray((fieldDef.meta as { embeddedFieldIds?: unknown }).embeddedFieldIds)\n ? ((fieldDef.meta as { embeddedFieldIds: unknown[] }).embeddedFieldIds as unknown[])\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0)\n .map((id) => id.trim())\n : [];\n const showEmbedded =\n embeddedIds.length > 0 && resolveFieldDef && allValues && typeof allValues === 'object';\n\n if (!showEmbedded) {\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n }\n\n return (\n <div className=\"space-y-3\">\n <ReadOnlyText fieldDef={fieldDef} value={value} />\n <div className=\"grid gap-3 border-t border-muted-foreground/20 pt-3 sm:grid-cols-3\">\n {embeddedIds.map((id) => {\n const fd = resolveFieldDef(id);\n if (!fd) return null;\n return (\n <ReadOnlyFieldRenderer\n key={id}\n fieldDef={fd}\n value={allValues[id]}\n allValues={allValues}\n resolveFieldDef={resolveFieldDef}\n />\n );\n })}\n </div>\n </div>\n );\n }\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 'pain_scale_flags': {\n const def = fieldDef as PainScaleFlagsFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const safe = normalizePainScaleFlags(value, { min, max });\n const opts = def.options ?? [];\n const flagLabels = safe.flags.map((fv) => {\n const o = opts.find((x) => x.value === fv || String(x.value) === String(fv));\n return o?.label ?? fv;\n });\n const lines = [\n `Pain score (VAS): ${safe.pain}/${max}`,\n flagLabels.length > 0 ? `Triage flags: ${flagLabels.join(', ')}` : 'Triage flags: —',\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'urology_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeUrologySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\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 {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\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 {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_pathway':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeGeneralSurgerySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\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 {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'general_surgery_grading':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\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 {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_pathway': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeObgPathway(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\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 {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\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 {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'bpe_chart':\n return (\n <BpeChartReadOnly\n data={(value && typeof value === 'object' && !Array.isArray(value) ? value : {}) as BpeChartData}\n label={fieldDef.label}\n />\n );\n\n case 'social_history':\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n\n case 'treatment_plan': {\n const items = Array.isArray(value)\n ? (value as unknown[]).filter((v): v is string => typeof v === 'string')\n : typeof value === 'string' && value\n ? [value]\n : [];\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={items.length > 0 ? items.join(', ') : '—'}\n />\n );\n }\n\n case 'pregnancy_status': {\n const ps = value && typeof value === 'object' && !Array.isArray(value)\n ? (value as PregnancyStatusValue)\n : { is_pregnant: false, is_breastfeeding: false };\n const parts: string[] = [];\n if (ps.is_pregnant) parts.push('Pregnant');\n if (ps.is_breastfeeding) parts.push('Breastfeeding');\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={parts.length > 0 ? parts.join(', ') : 'No'}\n />\n );\n }\n\n case 'dental_chart': {\n const safe = normalizeDentalChart(value);\n const hasFindings = Object.keys(safe.teeth).length > 0;\n if (!hasFindings) return <ReadOnlyText fieldDef={fieldDef} value=\"No dental findings recorded\" />;\n return <DentalChartReadOnly data={safe} />;\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 allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\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 allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\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 allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport { useForm } from \"./useForm\";\nimport { cn } from \"../core/utils\";\nimport { Button } from \"../ui/shadcn/button\";\n\nexport interface FormControlsProps {\n className?: string;\n containerStyle?: React.CSSProperties;\n /**\n * When false, hides workflow state + valid/invalid text. Buttons stay right-aligned unless\n * `actionsFullWidth` is used. Default true (existing behaviour).\n */\n showWorkflowStatus?: boolean;\n statusClassName?: string;\n statusStyle?: React.CSSProperties;\n /** Classes for the buttons row wrapper. */\n actionsClassName?: string;\n actionsStyle?: React.CSSProperties;\n /**\n * When workflow status is hidden, make action buttons stretch (column on small screens;\n * on `sm+` submit row grows with flex). Ignored while `showWorkflowStatus` is true.\n */\n actionsFullWidth?: boolean;\n /** Applied to both Save Draft and Submit buttons. */\n buttonClassName?: string;\n onSaveDraft?: () => void;\n onSubmit?: (to: string) => void;\n /** Override the label on the submit/transition button. Defaults to \"Submit\". */\n submitLabel?: string;\n}\n\nexport const FormControls: React.FC<FormControlsProps> = ({\n className,\n containerStyle,\n showWorkflowStatus = true,\n statusClassName,\n statusStyle,\n actionsClassName,\n actionsStyle,\n actionsFullWidth = false,\n buttonClassName,\n onSaveDraft,\n onSubmit,\n submitLabel,\n}) => {\n const {\n state,\n availableTransitions,\n submit,\n transition,\n hasPersistence,\n markSubmitAttempted,\n } = useForm();\n\n const hasUploadsInFlight = (state.pendingUploads ?? 0) > 0;\n\n const draftAvailable = onSaveDraft || (hasPersistence && submit);\n const submitAvailable =\n onSubmit || (availableTransitions.length > 0 && transition);\n\n if (!draftAvailable && !submitAvailable) {\n return null;\n }\n\n const useWideActions = !showWorkflowStatus && actionsFullWidth;\n const buttonCn = cn(\n buttonClassName,\n useWideActions && \"w-full sm:flex-1 min-w-0\",\n );\n\n return (\n <div\n className={cn(\n \"flex gap-4 border-t p-4 items-center\",\n showWorkflowStatus\n ? \"justify-between\"\n : useWideActions\n ? \"flex-col sm:flex-row sm:justify-stretch sm:gap-4\"\n : \"justify-end\",\n className,\n )}\n style={containerStyle}\n >\n {showWorkflowStatus ? (\n <div\n className={cn(\"flex items-center gap-4\", statusClassName)}\n style={statusStyle}\n >\n <span className=\"font-bold text-sm text-gray-700\">\n State: {state.workflowState}\n </span>\n <span\n className={cn(\n \"text-sm\",\n state.isValid ? \"text-green-600\" : \"text-red-600\",\n )}\n >\n {state.isValid ? \"Valid\" : \"Invalid\"}\n </span>\n </div>\n ) : null}\n\n <div\n className={cn(\n \"flex gap-2\",\n useWideActions\n ? \"w-full flex-col sm:flex-row sm:flex-1 sm:justify-end sm:max-w-none\"\n : \"flex-shrink-0\",\n actionsClassName,\n )}\n style={actionsStyle}\n >\n {draftAvailable && (\n <Button\n onClick={onSaveDraft || submit}\n variant=\"outline\"\n size=\"sm\"\n disabled={hasUploadsInFlight}\n className={buttonCn}\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 className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : availableTransitions.length > 1\n ? `Submit to ${t.to}`\n : (submitLabel ?? \"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 className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : (submitLabel ?? \"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 /** Data server origin (no trailing slash), e.g. `https://dataserver.example.com`. */\n apiBaseUrl: string;\n headers?: Record<string, string>; // For auth headers, etc.\n}\n\nfunction normalizeBaseUrl(apiBaseUrl: string): string {\n return apiBaseUrl.replace(/\\/+$/, '');\n}\n\nasync function uploadViaPresignedEndpoint(\n options: CreateUploadHandlerOptions,\n presignPath: string,\n file: File | Blob,\n filename: string,\n): Promise<string> {\n const { apiBaseUrl, headers = {} } = options;\n const base = normalizeBaseUrl(apiBaseUrl);\n const path =\n presignPath.startsWith('/') ? presignPath : `/${presignPath}`;\n const response = await fetch(`${base}${path}`, {\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 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 return presignedData.s3_key;\n}\n\n/**\n * Presigned upload handler: `POST …/api/forms/media-upload/` then PUT/POST file\n * to `presigned_url`. Use as `config.onUpload` on `FormProvider`; `file_upload`\n * fields use the same handler unless you set `config.onFileUpload`.\n */\nexport function createUploadHandler(options: CreateUploadHandlerOptions) {\n return async (file: File | Blob, filename: string): Promise<string> =>\n uploadViaPresignedEndpoint(\n options,\n '/api/forms/media-upload/',\n file,\n filename,\n );\n}"]}