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.
- package/dist/BpeChartWidget-HATASHAC.mjs +7 -0
- package/dist/BpeChartWidget-HATASHAC.mjs.map +1 -0
- package/dist/BpeChartWidget-VZRH7M7L.cjs +28 -0
- package/dist/BpeChartWidget-VZRH7M7L.cjs.map +1 -0
- package/dist/{DateTimeWidget-3AUBZYYK.mjs → DateTimeWidget-KRX4O6OD.mjs} +5 -4
- package/dist/DateTimeWidget-KRX4O6OD.mjs.map +1 -0
- package/dist/{DateTimeWidget-OS7ER5F6.cjs → DateTimeWidget-RJ7SATVA.cjs} +6 -5
- package/dist/DateTimeWidget-RJ7SATVA.cjs.map +1 -0
- package/dist/{DateWidget-KCTE6N5G.mjs → DateWidget-JEKDKPNS.mjs} +4 -3
- package/dist/DateWidget-JEKDKPNS.mjs.map +1 -0
- package/dist/{DateWidget-UNLX544Z.cjs → DateWidget-T7IQUWEA.cjs} +8 -7
- package/dist/DateWidget-T7IQUWEA.cjs.map +1 -0
- package/dist/DentalChartWidget-LYLOFWZU.cjs +21 -0
- package/dist/DentalChartWidget-LYLOFWZU.cjs.map +1 -0
- package/dist/DentalChartWidget-P2YPKAMO.mjs +8 -0
- package/dist/DentalChartWidget-P2YPKAMO.mjs.map +1 -0
- package/dist/{EditableTable-VQ72UEFF.cjs → EditableTable-OW5LC6OC.cjs} +6 -5
- package/dist/EditableTable-OW5LC6OC.cjs.map +1 -0
- package/dist/{EditableTable-XFCPKSUY.mjs → EditableTable-VZ66IXYI.mjs} +5 -4
- package/dist/EditableTable-VZ66IXYI.mjs.map +1 -0
- package/dist/ExtraOralExamWidget-JVKJ4ZWC.mjs +438 -0
- package/dist/ExtraOralExamWidget-JVKJ4ZWC.mjs.map +1 -0
- package/dist/ExtraOralExamWidget-ZIOSKMIO.cjs +440 -0
- package/dist/ExtraOralExamWidget-ZIOSKMIO.cjs.map +1 -0
- package/dist/{FollowupWidget-MAYTHM2E.cjs → FollowupWidget-2STSJSDY.cjs} +8 -7
- package/dist/FollowupWidget-2STSJSDY.cjs.map +1 -0
- package/dist/{FollowupWidget-BFZ6P2JE.mjs → FollowupWidget-GCGPWZVY.mjs} +4 -3
- package/dist/FollowupWidget-GCGPWZVY.mjs.map +1 -0
- package/dist/{OBGPathwayWidget-X67XKRIH.mjs → OBGPathwayWidget-QJNWUIEM.mjs} +4 -3
- package/dist/OBGPathwayWidget-QJNWUIEM.mjs.map +1 -0
- package/dist/{OBGPathwayWidget-XGN3HEWS.cjs → OBGPathwayWidget-YRU36UL7.cjs} +13 -12
- package/dist/OBGPathwayWidget-YRU36UL7.cjs.map +1 -0
- package/dist/{ObstetricHistoryWidget-Z4VAXH3E.mjs → ObstetricHistoryWidget-EW6JLNQ7.mjs} +4 -3
- package/dist/ObstetricHistoryWidget-EW6JLNQ7.mjs.map +1 -0
- package/dist/{ObstetricHistoryWidget-RP7NY4PV.cjs → ObstetricHistoryWidget-OOWCVFRB.cjs} +10 -9
- package/dist/ObstetricHistoryWidget-OOWCVFRB.cjs.map +1 -0
- package/dist/PregnancyStatusWidget-QTTVFBOE.cjs +96 -0
- package/dist/PregnancyStatusWidget-QTTVFBOE.cjs.map +1 -0
- package/dist/PregnancyStatusWidget-U2BEJGBJ.mjs +94 -0
- package/dist/PregnancyStatusWidget-U2BEJGBJ.mjs.map +1 -0
- package/dist/{SuggestionTextareaWidget-DY6M5JPO.cjs → SuggestionTextareaWidget-FWRZ46MV.cjs} +5 -5
- package/dist/{SuggestionTextareaWidget-DY6M5JPO.cjs.map → SuggestionTextareaWidget-FWRZ46MV.cjs.map} +1 -1
- package/dist/{SuggestionTextareaWidget-GQTWCFBG.mjs → SuggestionTextareaWidget-UNL3FZRI.mjs} +3 -3
- package/dist/{SuggestionTextareaWidget-GQTWCFBG.mjs.map → SuggestionTextareaWidget-UNL3FZRI.mjs.map} +1 -1
- package/dist/TreatmentPlanWidget-665HLKYV.mjs +317 -0
- package/dist/TreatmentPlanWidget-665HLKYV.mjs.map +1 -0
- package/dist/TreatmentPlanWidget-TATWSPLY.cjs +319 -0
- package/dist/TreatmentPlanWidget-TATWSPLY.cjs.map +1 -0
- package/dist/{chunk-4PMNVBJD.mjs → chunk-2OMQV2ZB.mjs} +4 -3
- package/dist/chunk-2OMQV2ZB.mjs.map +1 -0
- package/dist/chunk-5RT3S67O.cjs +30 -0
- package/dist/chunk-5RT3S67O.cjs.map +1 -0
- package/dist/chunk-6YUVILN5.mjs +42 -0
- package/dist/chunk-6YUVILN5.mjs.map +1 -0
- package/dist/{chunk-YEFM2ERQ.cjs → chunk-7OQFO6TM.cjs} +8 -7
- package/dist/chunk-7OQFO6TM.cjs.map +1 -0
- package/dist/chunk-BBD3Y37O.cjs +220 -0
- package/dist/chunk-BBD3Y37O.cjs.map +1 -0
- package/dist/chunk-EJ7MKHER.mjs +45 -0
- package/dist/chunk-EJ7MKHER.mjs.map +1 -0
- package/dist/{chunk-XN2QLBLT.mjs → chunk-G6Y4UJPN.mjs} +5 -4
- package/dist/chunk-G6Y4UJPN.mjs.map +1 -0
- package/dist/{chunk-AZSAPO2V.cjs → chunk-HXY3IX3G.cjs} +3 -44
- package/dist/chunk-HXY3IX3G.cjs.map +1 -0
- package/dist/{chunk-BMNY7F6H.mjs → chunk-JM7WNDNT.mjs} +4 -21
- package/dist/chunk-JM7WNDNT.mjs.map +1 -0
- package/dist/chunk-MQHZ7HD2.mjs +215 -0
- package/dist/chunk-MQHZ7HD2.mjs.map +1 -0
- package/dist/{chunk-ML47UEDU.cjs → chunk-O4FSJPU3.cjs} +2 -27
- package/dist/chunk-O4FSJPU3.cjs.map +1 -0
- package/dist/chunk-Q66LXMRR.mjs +28 -0
- package/dist/chunk-Q66LXMRR.mjs.map +1 -0
- package/dist/chunk-RILRMRXB.cjs +50 -0
- package/dist/chunk-RILRMRXB.cjs.map +1 -0
- package/dist/chunk-SQ2KNAUD.cjs +64 -0
- package/dist/chunk-SQ2KNAUD.cjs.map +1 -0
- package/dist/{chunk-TVFUWRTE.cjs → chunk-TCQQUJCL.cjs} +5 -4
- package/dist/chunk-TCQQUJCL.cjs.map +1 -0
- package/dist/chunk-UKSP3B3W.mjs +600 -0
- package/dist/chunk-UKSP3B3W.mjs.map +1 -0
- package/dist/chunk-X4AJCTON.cjs +607 -0
- package/dist/chunk-X4AJCTON.cjs.map +1 -0
- package/dist/chunk-ZZX3IG2T.mjs +25 -0
- package/dist/chunk-ZZX3IG2T.mjs.map +1 -0
- package/dist/index.cjs +107 -47
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +69 -3
- package/dist/index.d.ts +69 -3
- package/dist/index.mjs +73 -43
- package/dist/index.mjs.map +1 -1
- package/dist/read-only-table.d.cts +1 -1
- package/dist/read-only-table.d.ts +1 -1
- package/dist/smart.d.cts +1 -1
- package/dist/smart.d.ts +1 -1
- package/dist/{types-CYtJk8H9.d.ts → types-BbOnd5IN.d.cts} +53 -3
- package/dist/{types-CYtJk8H9.d.cts → types-BbOnd5IN.d.ts} +53 -3
- package/package.json +1 -1
- package/dist/DateTimeWidget-3AUBZYYK.mjs.map +0 -1
- package/dist/DateTimeWidget-OS7ER5F6.cjs.map +0 -1
- package/dist/DateWidget-KCTE6N5G.mjs.map +0 -1
- package/dist/DateWidget-UNLX544Z.cjs.map +0 -1
- package/dist/EditableTable-VQ72UEFF.cjs.map +0 -1
- package/dist/EditableTable-XFCPKSUY.mjs.map +0 -1
- package/dist/FollowupWidget-BFZ6P2JE.mjs.map +0 -1
- package/dist/FollowupWidget-MAYTHM2E.cjs.map +0 -1
- package/dist/OBGPathwayWidget-X67XKRIH.mjs.map +0 -1
- package/dist/OBGPathwayWidget-XGN3HEWS.cjs.map +0 -1
- package/dist/ObstetricHistoryWidget-RP7NY4PV.cjs.map +0 -1
- package/dist/ObstetricHistoryWidget-Z4VAXH3E.mjs.map +0 -1
- package/dist/chunk-4HDMR2LX.mjs +0 -69
- package/dist/chunk-4HDMR2LX.mjs.map +0 -1
- package/dist/chunk-4PMNVBJD.mjs.map +0 -1
- package/dist/chunk-AZSAPO2V.cjs.map +0 -1
- package/dist/chunk-BMNY7F6H.mjs.map +0 -1
- package/dist/chunk-ML47UEDU.cjs.map +0 -1
- package/dist/chunk-TVFUWRTE.cjs.map +0 -1
- package/dist/chunk-XN2QLBLT.mjs.map +0 -1
- package/dist/chunk-YEFM2ERQ.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/widgets/AntenatalPanels.tsx","../src/ui/widgets/ObstetricHistoryWidget.tsx"],"names":["useRef","useEffect","useState","useMemo","jsxs","jsx"],"mappings":"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","file":"ObstetricHistoryWidget-Z4VAXH3E.mjs","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { Input } from '../shadcn/input';\nimport { Checkbox } from '../shadcn/checkbox';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport {\n normalizeObgPathway,\n type ObgAntenatal,\n type ObgPathwayValue,\n} from '../../core/obgPathway';\nimport { ChipRow, Panel } from './_obgPanels';\nimport { useObgSymptomsSync } from './_obgSymptomsSync';\n\nconst OBG_PATHWAY_FIELD = 'obg_pathway';\n\n/**\n * Antenatal-specific panels (current pregnancy, symptoms, examination,\n * investigations) that live on the `obg_pathway` field but render under the\n * Obstetric-history widget when the antenatal zone is active. Designed to be\n * embedded into ObstetricHistoryWidget so that pregnancy-related capture lives\n * in one visual block.\n *\n * The component mirrors the antenatal subtree of `obg_pathway` into local\n * state so inputs update immediately on keystroke, even though `useField`'s\n * external-store subscription can lag re-renders for sibling components in\n * React 18 concurrent mode. Writes flow through to the form store on the same\n * tick.\n */\nexport const AntenatalPanels: React.FC = () => {\n const pathwayField = useField(OBG_PATHWAY_FIELD);\n const { writeSymptoms } = useObgSymptomsSync();\n\n // If the form has no obg_pathway field (non-OBG templates), render nothing.\n const hasField = !!pathwayField.fieldDef;\n\n const safe = useMemo<ObgPathwayValue>(\n () => normalizeObgPathway(pathwayField.value),\n [pathwayField.value],\n );\n\n // Local mirror of the antenatal subtree. Inputs read from this; writes both\n // update local state (for an instant re-render) and the form store.\n const [ant, setAnt] = useState<ObgAntenatal>(() => safe.antenatal);\n\n // Track the last antenatal we wrote to the store so we can ignore the\n // resulting \"echo\" snapshot from the subscription and only resync local\n // state when the antenatal subtree changes from outside (AI prefill, reset,\n // chip toggle that only changes zones, …).\n const lastWrittenRef = useRef<ObgAntenatal>(safe.antenatal);\n\n useEffect(() => {\n if (safe.antenatal === lastWrittenRef.current) return;\n if (JSON.stringify(safe.antenatal) === JSON.stringify(lastWrittenRef.current)) return;\n setAnt(safe.antenatal);\n lastWrittenRef.current = safe.antenatal;\n }, [safe.antenatal]);\n\n if (!hasField) return null;\n if (!safe.zones.includes('antenatal')) return null;\n\n const disabled = pathwayField.disabled;\n\n const commit = (nextAnt: ObgAntenatal) => {\n // Build `prev` from local `ant` (always up-to-date with our last commit)\n // rather than `safe` (which can lag if the field-store subscription hasn't\n // propagated yet). This keeps the prev/next prose check correct across\n // rapid keystrokes so HOPC stays in sync without ever mis-classifying our\n // own previous auto-write as user-typed prose.\n const prev: ObgPathwayValue = { ...safe, antenatal: ant };\n const nextPathway: ObgPathwayValue = { ...safe, antenatal: nextAnt };\n setAnt(nextAnt);\n lastWrittenRef.current = nextAnt;\n pathwayField.setValue(nextPathway);\n pathwayField.setTouched();\n writeSymptoms(prev, nextPathway);\n };\n\n const a = ant;\n const setAntenatal = (patch: Partial<ObgAntenatal>) => commit({ ...a, ...patch });\n const setAntenatalSymptom = (key: keyof ObgAntenatal['symptoms']) =>\n commit({ ...a, symptoms: { ...a.symptoms, [key]: !a.symptoms[key] } });\n const setAntenatalExam = (patch: Partial<ObgAntenatal['exam']>) =>\n commit({ ...a, exam: { ...a.exam, ...patch } });\n const setAntenatalInv = (patch: Partial<ObgAntenatal['investigations']>) =>\n commit({ ...a, investigations: { ...a.investigations, ...patch } });\n\n return (\n <div className=\"space-y-3 text-xs\">\n <Panel title=\"Current pregnancy details\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-4\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Gravida</span>\n <Input\n type=\"number\"\n min={0}\n className=\"h-8 text-xs\"\n value={a.gravida}\n onChange={(e) => setAntenatal({ gravida: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <div className=\"space-y-1\">\n <span className=\"block font-medium\">GA (LMP) — w / d</span>\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min={0}\n max={45}\n className=\"h-8 text-xs\"\n value={a.gaWeeksLmp}\n onChange={(e) => setAntenatal({ gaWeeksLmp: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">w</span>\n <Input\n type=\"number\"\n min={0}\n max={6}\n className=\"h-8 text-xs\"\n value={a.gaDaysLmp}\n onChange={(e) => setAntenatal({ gaDaysLmp: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">d</span>\n </div>\n </div>\n <div className=\"space-y-1\">\n <span className=\"block font-medium\">GA (USG) — w / d</span>\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min={0}\n max={45}\n className=\"h-8 text-xs\"\n value={a.gaWeeksUsg}\n onChange={(e) => setAntenatal({ gaWeeksUsg: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">w</span>\n <Input\n type=\"number\"\n min={0}\n max={6}\n className=\"h-8 text-xs\"\n value={a.gaDaysUsg}\n onChange={(e) => setAntenatal({ gaDaysUsg: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">d</span>\n </div>\n </div>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">EDD</span>\n <Input\n type=\"date\"\n className=\"h-8 text-xs\"\n value={a.edd}\n onChange={(e) => setAntenatal({ edd: e.target.value })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1 md:col-span-2\">\n <span className=\"block font-medium\">Risk category</span>\n <Select\n value={a.riskCategory === '' ? 'none' : a.riskCategory}\n onValueChange={(v) =>\n setAntenatal({\n riskCategory: v === 'none' ? '' : (v as typeof a.riskCategory),\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Low\">Low</SelectItem>\n <SelectItem value=\"High\">High</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n\n <Panel title=\"Antenatal symptoms\">\n <ChipRow\n options={[\n { key: 'nauseaVomiting', label: 'Nausea / vomiting' },\n { key: 'bleedingPV', label: 'Bleeding PV' },\n { key: 'painAbdomen', label: 'Pain abdomen' },\n { key: 'decreasedFetalMovements', label: 'Decreased fetal movements' },\n ]}\n selected={a.symptoms as unknown as Record<string, boolean>}\n onToggle={(k) => setAntenatalSymptom(k as keyof typeof a.symptoms)}\n disabled={disabled}\n />\n </Panel>\n\n <Panel title=\"Antenatal examination\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-4\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Weight (kg)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.weightKg}\n onChange={(e) => setAntenatalExam({ weightKg: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Height (cm)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.heightCm}\n onChange={(e) => setAntenatalExam({ heightCm: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">BMI</span>\n <Input\n type=\"number\"\n step={0.1}\n className=\"h-8 text-xs\"\n value={a.exam.bmi}\n onChange={(e) => setAntenatalExam({ bmi: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">BP</span>\n <Input\n placeholder=\"e.g. 120/80\"\n className=\"h-8 text-xs\"\n value={a.exam.bp}\n onChange={(e) => setAntenatalExam({ bp: e.target.value })}\n disabled={disabled}\n />\n </label>\n\n <label className=\"flex items-end gap-2 pb-1\">\n <Checkbox\n checked={a.exam.pallor}\n onCheckedChange={(c) => setAntenatalExam({ pallor: c === true })}\n disabled={disabled}\n />\n <span>Pallor</span>\n </label>\n <label className=\"flex items-end gap-2 pb-1\">\n <Checkbox\n checked={a.exam.oedema}\n onCheckedChange={(c) => setAntenatalExam({ oedema: c === true })}\n disabled={disabled}\n />\n <span>Oedema</span>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Fundal height (cm)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.fundalHeightCm}\n onChange={(e) =>\n setAntenatalExam({ fundalHeightCm: Number(e.target.value) || 0 })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">FHR (bpm)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.fhrBpm}\n onChange={(e) => setAntenatalExam({ fhrBpm: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Presentation</span>\n <Select\n value={a.exam.presentation === '' ? 'none' : a.exam.presentation}\n onValueChange={(v) =>\n setAntenatalExam({\n presentation: v === 'none' ? '' : (v as typeof a.exam.presentation),\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Cephalic\">Cephalic</SelectItem>\n <SelectItem value=\"Breech\">Breech</SelectItem>\n <SelectItem value=\"Other\">Other</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Lie</span>\n <Select\n value={a.exam.lie === '' ? 'none' : a.exam.lie}\n onValueChange={(v) =>\n setAntenatalExam({ lie: v === 'none' ? '' : (v as typeof a.exam.lie) })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Longitudinal\">Longitudinal</SelectItem>\n <SelectItem value=\"Transverse\">Transverse</SelectItem>\n <SelectItem value=\"Oblique\">Oblique</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n\n <Panel title=\"Investigations tracker\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-3\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Blood Group / Rh</span>\n <Input\n className=\"h-8 text-xs\"\n placeholder=\"e.g. O+ve\"\n value={a.investigations.bloodGroup}\n onChange={(e) => setAntenatalInv({ bloodGroup: e.target.value })}\n disabled={disabled}\n />\n </label>\n {(\n [\n { key: 'cbc', label: 'CBC' },\n { key: 'tsh', label: 'TSH' },\n { key: 'rbsOgtt', label: 'RBS / OGTT' },\n { key: 'serology', label: 'HIV / HBsAg / VDRL' },\n { key: 'urine', label: 'Urine routine' },\n ] as const\n ).map((row) => (\n <label key={row.key} className=\"space-y-1\">\n <span className=\"block font-medium\">{row.label}</span>\n <Select\n value={a.investigations[row.key] === '' ? 'none' : a.investigations[row.key]}\n onValueChange={(v) =>\n setAntenatalInv({\n [row.key]: v === 'none' ? '' : v,\n } as Partial<typeof a.investigations>)\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Done\">Done</SelectItem>\n <SelectItem value=\"Pending\">Pending</SelectItem>\n <SelectItem value=\"Abnormal\">Abnormal</SelectItem>\n </SelectContent>\n </Select>\n </label>\n ))}\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">USG</span>\n <Select\n value={a.investigations.usg === '' ? 'none' : a.investigations.usg}\n onValueChange={(v) =>\n setAntenatalInv({\n usg: (v === 'none' ? '' : v) as typeof a.investigations.usg,\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Dating\">Dating</SelectItem>\n <SelectItem value=\"NT\">NT</SelectItem>\n <SelectItem value=\"Anomaly\">Anomaly</SelectItem>\n <SelectItem value=\"Growth\">Growth</SelectItem>\n <SelectItem value=\"Pending\">Pending</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { Card, CardContent, CardHeader, CardTitle } from '../shadcn/card';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\nimport { AntenatalPanels } from './AntenatalPanels';\n\ntype BasedOn = 'lmp' | 'usg';\ntype OutcomeType = '' | 'delivery' | 'cesarean' | 'abortion' | 'miscarriage' | 'stillbirth';\ntype PregnancyStatus = 'not_pregnant' | 'pregnant' | 'unknown';\ntype Dysmenorrhea = 0 | 1 | 2 | 3;\n\ntype GestationalAge = {\n weeks: number;\n days: number;\n totalDays: number;\n basedOn: BasedOn;\n};\n\ntype Outcome = {\n type: OutcomeType;\n date: string; // yyyy-mm-dd (or '' while incomplete)\n notes: string;\n is_final: boolean;\n};\n\ntype StoredMenstrual = {\n menarche_age: number;\n cycle_length: number;\n flow_days: number;\n cycle_regular: boolean;\n dysmenorrhea: Dysmenorrhea;\n};\n\ntype StoredObgHistory = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string | null; // yyyy-mm-dd\n /** @deprecated Use `pregnancy_status`. Kept for backward compatibility (true === 'pregnant'). */\n is_pregnant: boolean;\n pregnancy_status: PregnancyStatus;\n edd: { lmp: string | null; usg: string | null; primary: BasedOn } | null;\n gestationalAge: GestationalAge | null;\n trimester: 1 | 2 | 3 | null;\n complications: string | null;\n outcome: Outcome | null;\n menstrual: StoredMenstrual;\n};\n\ntype Draft = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string; // '' or yyyy-mm-dd\n pregnancy_status: PregnancyStatus;\n eddUSG: string; // '' or yyyy-mm-dd\n primaryEDD: BasedOn;\n complications: string;\n outcome: Outcome | null;\n menstrual: StoredMenstrual;\n};\n\nconst DEFAULT_MENSTRUAL: StoredMenstrual = {\n menarche_age: 13,\n cycle_length: 28,\n flow_days: 4,\n cycle_regular: true,\n dysmenorrhea: 0,\n};\n\nconst DEFAULT_DRAFT: Draft = {\n gpal: { G: 0, P: 0, A: 0, L: 0 },\n lmp: '',\n pregnancy_status: 'not_pregnant',\n eddUSG: '',\n primaryEDD: 'lmp',\n complications: '',\n outcome: null,\n menstrual: { ...DEFAULT_MENSTRUAL },\n};\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction formatDdMmYyyy(iso: string): string {\n // expects yyyy-mm-dd\n const [y, m, d] = iso.split('-');\n if (!y || !m || !d) return iso;\n return `${pad2(Number(d))}/${pad2(Number(m))}/${y}`;\n}\n\nfunction todayIso(): string {\n const d = new Date();\n const y = d.getFullYear();\n const m = pad2(d.getMonth() + 1);\n const day = pad2(d.getDate());\n return `${y}-${m}-${day}`;\n}\n\nfunction isValidIsoDate(val: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(val)) return false;\n const dt = new Date(`${val}T00:00:00.000Z`);\n return !Number.isNaN(dt.getTime());\n}\n\nfunction safeJsonParse(val: string): any | null {\n try {\n return JSON.parse(val);\n } catch {\n return null;\n }\n}\n\nfunction clampInt(val: number, min: number, max: number): number {\n if (!Number.isFinite(val)) return min;\n return Math.max(min, Math.min(max, Math.trunc(val)));\n}\n\nfunction clampDysmenorrhea(val: unknown): Dysmenorrhea {\n const n = Math.round(Number(val));\n if (!Number.isFinite(n)) return 0;\n if (n <= 0) return 0;\n if (n >= 3) return 3;\n return n as 1 | 2;\n}\n\nfunction isPregnancyStatus(x: unknown): x is PregnancyStatus {\n return x === 'not_pregnant' || x === 'pregnant' || x === 'unknown';\n}\n\nfunction normalizeMenstrual(raw: unknown): StoredMenstrual {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n return { ...DEFAULT_MENSTRUAL };\n }\n const o = raw as Record<string, unknown>;\n const num = (v: unknown, fb: number) => {\n const n = Number(v);\n return Number.isFinite(n) ? n : fb;\n };\n return {\n menarche_age: num(o.menarche_age, DEFAULT_MENSTRUAL.menarche_age),\n cycle_length: num(o.cycle_length, DEFAULT_MENSTRUAL.cycle_length),\n flow_days: num(o.flow_days, DEFAULT_MENSTRUAL.flow_days),\n cycle_regular:\n typeof o.cycle_regular === 'boolean' ? o.cycle_regular : DEFAULT_MENSTRUAL.cycle_regular,\n dysmenorrhea: clampDysmenorrhea(o.dysmenorrhea),\n };\n}\n\nfunction parseLegacyString(input: string): Partial<Draft> {\n const result: Partial<Draft> = {};\n const gpalMatch = input.match(/G(\\d+)\\s*P(\\d+)\\s*A(\\d+)\\s*L(\\d+)/i);\n if (gpalMatch) {\n const [, g, p, a, l] = gpalMatch;\n result.gpal = {\n G: clampInt(Number(g), 0, 20),\n P: clampInt(Number(p), 0, 20),\n A: clampInt(Number(a), 0, 20),\n L: clampInt(Number(l), 0, 20),\n };\n }\n\n const lmpMatch = input.match(/LMP:\\s*([^\\n]+)/i);\n if (lmpMatch?.[1]) result.lmp = lmpMatch[1].trim();\n\n const eddUsgMatch = input.match(/EDD\\s*\\(USG\\):\\s*([^\\n]+)/i);\n if (eddUsgMatch?.[1]) result.eddUSG = eddUsgMatch[1].trim();\n\n const primaryMatch = input.match(/Primary\\s*EDD:\\s*(lmp|usg)/i);\n if (primaryMatch?.[1]) result.primaryEDD = primaryMatch[1].toLowerCase() as BasedOn;\n\n const compMatch = input.match(/Complications:\\s*([^\\n]+)/i);\n if (compMatch?.[1]) result.complications = compMatch[1].trim();\n\n return result;\n}\n\nfunction normalizeToDraft(value: unknown): { draft: Draft; isNewEntry: boolean } {\n if (!value) return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n\n let parsed: any = value;\n if (typeof value === 'string') {\n const json = safeJsonParse(value);\n parsed = json ?? value;\n }\n\n const resolvePregnancyStatus = (o: any): PregnancyStatus => {\n if (isPregnancyStatus(o?.pregnancy_status)) return o.pregnancy_status;\n if (typeof o?.is_pregnant === 'boolean') return o.is_pregnant ? 'pregnant' : 'not_pregnant';\n return 'not_pregnant';\n };\n\n // New JSON format: has gpal object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed) && 'gpal' in parsed && parsed.gpal && typeof parsed.gpal === 'object') {\n const gpal = parsed.gpal ?? {};\n const edd = parsed.edd ?? null;\n const eddUSG = (edd && typeof edd === 'object' ? edd.usg : undefined) ?? parsed.eddUSG ?? '';\n const primaryEDD = (edd && typeof edd === 'object' ? edd.primary : undefined) ?? parsed.primaryEDD ?? 'lmp';\n const lmp = parsed.lmp ?? '';\n const complications = parsed.complications ?? '';\n const outcome = parsed.outcome ?? null;\n return {\n isNewEntry: false,\n draft: {\n gpal: {\n G: clampInt(Number(gpal.G ?? 0), 0, 20),\n P: clampInt(Number(gpal.P ?? 0), 0, 20),\n A: clampInt(Number(gpal.A ?? 0), 0, 20),\n L: clampInt(Number(gpal.L ?? 0), 0, 20),\n },\n lmp: typeof lmp === 'string' ? lmp : '',\n pregnancy_status: resolvePregnancyStatus(parsed),\n eddUSG: typeof eddUSG === 'string' ? eddUSG : '',\n primaryEDD: primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof complications === 'string' ? complications : '',\n outcome: outcome && typeof outcome === 'object'\n ? {\n type: (outcome.type ?? '') as OutcomeType,\n date: typeof outcome.date === 'string' ? outcome.date : '',\n notes: typeof outcome.notes === 'string' ? outcome.notes : '',\n is_final: !!outcome.is_final,\n }\n : null,\n menstrual: normalizeMenstrual(parsed.menstrual),\n },\n };\n }\n\n // Legacy flat JSON object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const gpalFromFlat = {\n G: clampInt(Number((parsed as any).G ?? (parsed as any).g ?? 0), 0, 20),\n P: clampInt(Number((parsed as any).P ?? (parsed as any).p ?? 0), 0, 20),\n A: clampInt(Number((parsed as any).A ?? (parsed as any).a ?? 0), 0, 20),\n L: clampInt(Number((parsed as any).L ?? (parsed as any).l ?? 0), 0, 20),\n };\n return {\n isNewEntry: false,\n draft: {\n ...DEFAULT_DRAFT,\n gpal: gpalFromFlat,\n lmp: typeof (parsed as any).lmp === 'string' ? (parsed as any).lmp : '',\n eddUSG: typeof (parsed as any).eddUSG === 'string' ? (parsed as any).eddUSG : '',\n primaryEDD: (parsed as any).primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof (parsed as any).complications === 'string' ? (parsed as any).complications : '',\n outcome: (parsed as any).outcome && typeof (parsed as any).outcome === 'object'\n ? {\n type: ((parsed as any).outcome.type ?? '') as OutcomeType,\n date: typeof (parsed as any).outcome.date === 'string' ? (parsed as any).outcome.date : '',\n notes: typeof (parsed as any).outcome.notes === 'string' ? (parsed as any).outcome.notes : '',\n is_final: !!(parsed as any).outcome.is_final,\n }\n : null,\n pregnancy_status: resolvePregnancyStatus(parsed),\n menstrual: normalizeMenstrual((parsed as any).menstrual),\n },\n };\n }\n\n // Legacy human-readable string\n if (typeof parsed === 'string') {\n const legacy = parseLegacyString(parsed);\n return { isNewEntry: false, draft: { ...DEFAULT_DRAFT, ...legacy } as Draft };\n }\n\n return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n}\n\nfunction computeEddFromLmp(lmpIso: string): string | null {\n if (!isValidIsoDate(lmpIso)) return null;\n const base = new Date(`${lmpIso}T00:00:00.000Z`);\n base.setUTCDate(base.getUTCDate() + 280);\n const y = base.getUTCFullYear();\n const m = pad2(base.getUTCMonth() + 1);\n const d = pad2(base.getUTCDate());\n return `${y}-${m}-${d}`;\n}\n\nfunction diffDaysUtc(fromIso: string, toIso: string): number | null {\n if (!isValidIsoDate(fromIso) || !isValidIsoDate(toIso)) return null;\n const a = new Date(`${fromIso}T00:00:00.000Z`).getTime();\n const b = new Date(`${toIso}T00:00:00.000Z`).getTime();\n return Math.floor((b - a) / (1000 * 60 * 60 * 24));\n}\n\nfunction computeGestationalAgeFromLmp(lmpIso: string, today: string): GestationalAge | null {\n const days = diffDaysUtc(lmpIso, today);\n if (days == null || days < 0) return null;\n const weeks = Math.floor(days / 7);\n const rem = days % 7;\n return { weeks, days: rem, totalDays: days, basedOn: 'lmp' };\n}\n\nfunction computeGestationalAgeFromUsgEdd(eddUsgIso: string, today: string): GestationalAge | null {\n const daysToEdd = diffDaysUtc(today, eddUsgIso);\n if (daysToEdd == null) return null;\n const daysElapsed = 280 - daysToEdd;\n if (daysElapsed < 0) return null;\n const weeks = Math.floor(daysElapsed / 7);\n const rem = daysElapsed % 7;\n return { weeks, days: rem, totalDays: daysElapsed, basedOn: 'usg' };\n}\n\nfunction computeTrimester(ga: GestationalAge | null): 1 | 2 | 3 | null {\n if (!ga) return null;\n if (ga.weeks < 13) return 1;\n if (ga.weeks < 27) return 2;\n if (ga.weeks < 42) return 3;\n return null;\n}\n\nfunction buildStored(draft: Draft, today: string): StoredObgHistory {\n const lmpIso = isValidIsoDate(draft.lmp) ? draft.lmp : null;\n const eddUsgIso = isValidIsoDate(draft.eddUSG) ? draft.eddUSG : null;\n\n if (draft.pregnancy_status !== 'pregnant') {\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: false,\n pregnancy_status: draft.pregnancy_status,\n edd: null,\n gestationalAge: null,\n trimester: null,\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n menstrual: { ...draft.menstrual },\n };\n }\n\n const eddFromLmp = lmpIso ? computeEddFromLmp(lmpIso) : null;\n const gaFromLmp = lmpIso ? computeGestationalAgeFromLmp(lmpIso, today) : null;\n const gaFromUsg = eddUsgIso ? computeGestationalAgeFromUsgEdd(eddUsgIso, today) : null;\n\n const primary = draft.primaryEDD;\n const gaPrimary = primary === 'usg' && gaFromUsg ? gaFromUsg : gaFromLmp ? gaFromLmp : null;\n\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: true,\n pregnancy_status: 'pregnant',\n edd: { lmp: eddFromLmp, usg: eddUsgIso, primary },\n gestationalAge: gaPrimary,\n trimester: computeTrimester(gaPrimary),\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n menstrual: { ...draft.menstrual },\n };\n}\n\nfunction stripGpalSuffix(label: string): string {\n return label.replace(/\\s*\\(G-P-A-L\\)\\s*$/i, '').trim();\n}\n\nfunction useDebouncedCommit(commit: (next: Draft) => void, delayMs: number) {\n const timeoutRef = useRef<number | null>(null);\n const latestCommit = useRef(commit);\n latestCommit.current = commit;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return (next: Draft) => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => latestCommit.current(next), delayMs);\n };\n}\n\nexport const ObstetricHistoryWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const [{ draft, isNewEntry }, setDraftState] = useState(() => normalizeToDraft(value));\n const [lmpError, setLmpError] = useState<string | null>(null);\n const [primaryEddError, setPrimaryEddError] = useState<string | null>(null);\n const [activeGpalKey, setActiveGpalKey] = useState<keyof Draft['gpal'] | null>(null);\n\n const refs = {\n G: useRef<HTMLInputElement | null>(null),\n P: useRef<HTMLInputElement | null>(null),\n A: useRef<HTMLInputElement | null>(null),\n L: useRef<HTMLInputElement | null>(null),\n } as const;\n\n const today = useMemo(() => todayIso(), []);\n\n // Keep local draft in sync with external updates (AI, reset, initial load).\n useEffect(() => {\n const next = normalizeToDraft(value);\n const currStr = JSON.stringify(buildStored(draft, today));\n const nextStr = JSON.stringify(buildStored(next.draft, today));\n if (currStr !== nextStr) setDraftState(next);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const commitImmediate = (nextDraft: Draft) => {\n const stored = buildStored(nextDraft, today);\n setValue(JSON.stringify(stored));\n };\n const commitDebounced = useDebouncedCommit(commitImmediate, 500);\n\n const storedComputed = useMemo(() => buildStored(draft, today), [draft, today]);\n\n const isPregnant = draft.pregnancy_status === 'pregnant';\n const rightPanelEnabled = isPregnant && (!!storedComputed.lmp || !!(storedComputed.edd?.usg));\n const headerLabel = fieldDef?.label ? stripGpalSuffix(fieldDef.label) : 'Obstetric History';\n\n const setDraft = (updater: (prev: Draft) => Draft, persist: 'debounce' | 'immediate') => {\n setDraftState((prev) => {\n const nextDraft = updater(prev.draft);\n const nextState = { ...prev, draft: nextDraft };\n if (persist === 'immediate') commitImmediate(nextDraft);\n else commitDebounced(nextDraft);\n return nextState;\n });\n };\n\n const sanitizeGpalInput = (raw: string): number => {\n const digits = raw.replace(/[^\\d]/g, '').slice(0, 2);\n if (!digits) return 0;\n return clampInt(Number(digits), 0, 20);\n };\n\n const handleGpalChange = (key: keyof Draft['gpal'], raw: string) => {\n const prevWasEmpty = draft.gpal[key] === 0 && (activeGpalKey === key);\n const val = sanitizeGpalInput(raw);\n setDraft((prev) => ({ ...prev, gpal: { ...prev.gpal, [key]: val } }), 'debounce');\n\n const digitsOnly = raw.replace(/[^\\d]/g, '');\n const shouldAutoTab = digitsOnly.length === 1 && (prevWasEmpty || String(draft.gpal[key]).length >= 1);\n if (shouldAutoTab) {\n const order: (keyof Draft['gpal'])[] = ['G', 'P', 'A', 'L'];\n const idx = order.indexOf(key);\n const nextKey = order[idx + 1];\n if (nextKey) refs[nextKey].current?.focus();\n }\n };\n\n const handleLmpChange = (nextIso: string) => {\n setPrimaryEddError(null);\n if (nextIso && nextIso > today) {\n setLmpError('LMP cannot be in the future');\n return;\n }\n setLmpError(null);\n setDraft((prev) => ({ ...prev, lmp: nextIso }), 'debounce');\n };\n\n const handlePregStatus = (status: PregnancyStatus) => {\n setLmpError(null);\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, pregnancy_status: status }), 'immediate');\n };\n\n const setMenstrualPatch = (patch: Partial<StoredMenstrual>) => {\n setDraft((prev) => ({ ...prev, menstrual: { ...prev.menstrual, ...patch } }), 'debounce');\n };\n\n const handleEddUsgChange = (nextIso: string) => {\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, eddUSG: nextIso }), 'debounce');\n };\n\n const handlePrimaryEdd = (next: BasedOn) => {\n if (next === 'usg' && !isValidIsoDate(draft.eddUSG)) {\n setPrimaryEddError('Please enter EDD from USG first');\n return;\n }\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, primaryEDD: next }), 'immediate');\n };\n\n const ensureOutcome = () => {\n if (draft.outcome) return;\n setDraft(\n (prev) => ({\n ...prev,\n outcome: { type: '', date: '', notes: '', is_final: false },\n }),\n 'immediate'\n );\n };\n\n const clearOutcome = () => {\n setDraft((prev) => ({ ...prev, outcome: null }), 'immediate');\n };\n\n const updateOutcomeImmediate = (updater: (o: Outcome) => Outcome) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: updater(o) };\n },\n 'immediate'\n );\n };\n\n const updateOutcomeNotesDebounced = (notes: string) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: { ...o, notes } };\n },\n 'debounce'\n );\n };\n\n return (\n <Card className={cn('w-full', disabled && 'opacity-70 pointer-events-none')}>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base font-semibold\">{headerLabel}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isNewEntry && (\n <div className=\"rounded-md border border-blue-200 bg-blue-50 px-3 py-2 text-xs text-blue-900\">\n No previous maternity episode found. Please fill obstetric details to start tracking.\n </div>\n )}\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 items-start\">\n {/* Left panel */}\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border bg-white p-4\">\n <div className=\"text-xs font-medium text-muted-foreground mb-2\">G-P-A-L</div>\n <div className=\"grid grid-cols-4 gap-3\">\n {(['G', 'P', 'A', 'L'] as const).map((k) => (\n <div key={k} className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-gpal-${k}`} className=\"text-[11px] text-muted-foreground\">\n {k}\n </Label>\n <Input\n ref={refs[k]}\n id={`${fieldId}-gpal-${k}`}\n inputMode=\"numeric\"\n pattern=\"\\d*\"\n maxLength={2}\n value={String(draft.gpal[k] ?? 0)}\n onFocus={() => {\n setActiveGpalKey(k);\n const el = refs[k].current;\n if (el) el.select();\n }}\n onChange={(e) => handleGpalChange(k, e.target.value)}\n onKeyDown={(e) => {\n const allowed = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Home', 'End'];\n if (allowed.includes(e.key)) return;\n if (/^\\d$/.test(e.key)) return;\n e.preventDefault();\n }}\n className=\"text-center text-base\"\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-lmp`} className={cn('text-sm', lmpError && 'text-red-600')}>\n Last Menstrual Period (LMP)\n </Label>\n <Input\n id={`${fieldId}-lmp`}\n type=\"date\"\n max={today}\n value={draft.lmp}\n onChange={(e) => handleLmpChange(e.target.value)}\n className={cn(lmpError && 'border-red-500')}\n />\n {lmpError && <p className=\"text-xs text-red-600\">{lmpError}</p>}\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4 min-w-0\">\n <div className=\"text-sm font-medium\">Pregnancy Status</div>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePregStatus('not_pregnant')}\n className={cn(\n 'shrink-0 rounded-full border px-3 py-1.5 text-[11px] font-medium transition-colors',\n draft.pregnancy_status === 'not_pregnant'\n ? 'border-green-600 bg-green-600 text-white'\n : 'border-slate-300 bg-white text-slate-700 hover:bg-slate-50',\n )}\n >\n Not Pregnant\n </button>\n <button\n type=\"button\"\n onClick={() => handlePregStatus('pregnant')}\n className={cn(\n 'shrink-0 rounded-full border px-3 py-1.5 text-[11px] font-medium transition-colors',\n draft.pregnancy_status === 'pregnant'\n ? 'border-green-600 bg-green-600 text-white'\n : 'border-slate-300 bg-white text-slate-700 hover:bg-slate-50',\n )}\n >\n Pregnant\n </button>\n <button\n type=\"button\"\n onClick={() => handlePregStatus('unknown')}\n className={cn(\n 'shrink-0 rounded-full border px-3 py-1.5 text-[11px] font-medium transition-colors',\n draft.pregnancy_status === 'unknown'\n ? 'border-amber-500 bg-amber-500 text-white'\n : 'border-slate-300 bg-white text-slate-700 hover:bg-slate-50',\n )}\n >\n Unknown\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"rounded-lg border bg-white p-4\">\n <div className=\"text-xs font-medium text-muted-foreground mb-3\">Menstrual</div>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <label className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-menarche`} className=\"text-[11px] text-muted-foreground\">\n Menarche (age)\n </Label>\n <Input\n id={`${fieldId}-menarche`}\n type=\"number\"\n min={5}\n max={25}\n value={draft.menstrual.menarche_age}\n onChange={(e) => setMenstrualPatch({ menarche_age: Number(e.target.value) || 0 })}\n />\n </label>\n <label className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-cycle-length`} className=\"text-[11px] text-muted-foreground\">\n Cycle (days)\n </Label>\n <Input\n id={`${fieldId}-cycle-length`}\n type=\"number\"\n min={0}\n max={120}\n value={draft.menstrual.cycle_length}\n onChange={(e) => setMenstrualPatch({ cycle_length: Number(e.target.value) || 0 })}\n />\n </label>\n <label className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-flow-days`} className=\"text-[11px] text-muted-foreground\">\n Flow (days)\n </Label>\n <Input\n id={`${fieldId}-flow-days`}\n type=\"number\"\n min={0}\n max={30}\n value={draft.menstrual.flow_days}\n onChange={(e) => setMenstrualPatch({ flow_days: Number(e.target.value) || 0 })}\n />\n </label>\n <label className=\"space-y-1\">\n <Label className=\"text-[11px] text-muted-foreground\">Dysmenorrhea</Label>\n <select\n className=\"h-9 w-full rounded-md border border-input bg-background px-2 text-sm\"\n value={String(draft.menstrual.dysmenorrhea)}\n onChange={(e) =>\n setMenstrualPatch({\n dysmenorrhea: clampDysmenorrhea(Number(e.target.value)),\n })\n }\n >\n <option value=\"0\">0 — none</option>\n <option value=\"1\">1 — mild</option>\n <option value=\"2\">2 — moderate</option>\n <option value=\"3\">3 — severe</option>\n </select>\n </label>\n </div>\n <label className=\"mt-3 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.menstrual.cycle_regular}\n onChange={(e) => setMenstrualPatch({ cycle_regular: e.target.checked })}\n />\n Regular cycle\n </label>\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-complications`} className=\"text-sm\">\n Previous Pregnancy Complications\n </Label>\n <Textarea\n id={`${fieldId}-complications`}\n placeholder=\"e.g. Pre-eclampsia, Gestational diabetes, C-section, etc.\"\n value={draft.complications}\n onChange={(e) => setDraft((prev) => ({ ...prev, complications: e.target.value }), 'debounce')}\n className=\"min-h-[140px]\"\n />\n </div>\n </div>\n\n {/* Right panel */}\n <div className=\"rounded-lg border bg-white p-4 min-h-[260px]\">\n {!isPregnant && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n {draft.pregnancy_status === 'unknown'\n ? 'Pregnancy status unknown — confirm with UPT/USG to enable gestational age and EDD.'\n : 'Only for \"Pregnant Women\" and enter LMP to calculate gestational age and EDD'}\n </div>\n )}\n\n {isPregnant && !rightPanelEnabled && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n Enter LMP and/or EDD (USG) to enable gestational age and EDD calculations.\n </div>\n )}\n\n {isPregnant && rightPanelEnabled && (\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-blue-700\">Expected Delivery Date (EDD)</div>\n {storedComputed.gestationalAge?.basedOn && (\n <span className=\"rounded-full bg-blue-100 px-2 py-1 text-[11px] text-blue-700\">\n Based on {storedComputed.gestationalAge.basedOn.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"mt-3\">\n <div className=\"text-xs text-muted-foreground\">Gestational Age:</div>\n <div className=\"text-lg font-semibold\">\n {storedComputed.gestationalAge\n ? `${storedComputed.gestationalAge.weeks} weeks ${storedComputed.gestationalAge.days} days`\n : '—'}\n </div>\n <div className=\"text-xs text-muted-foreground mt-1\">\n {storedComputed.trimester ? `Trimester ${storedComputed.trimester}` : 'Trimester —'}\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-xs text-muted-foreground\">EDD (from LMP):</div>\n <div className=\"rounded-md border bg-muted/20 px-3 py-2 text-sm font-semibold\">\n {storedComputed.edd?.lmp ? formatDdMmYyyy(storedComputed.edd.lmp) : '—'}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-edd-usg`} className=\"text-sm\">\n EDD (from USG):\n </Label>\n <Input\n id={`${fieldId}-edd-usg`}\n type=\"date\"\n value={draft.eddUSG}\n onChange={(e) => handleEddUsgChange(e.target.value)}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium\">Primary EDD:</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('lmp')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'lmp' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n LMP\n </button>\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('usg')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'usg' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n USG\n </button>\n </div>\n {primaryEddError && <p className=\"text-xs text-red-600\">{primaryEddError}</p>}\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Antenatal panels (full width of the card) */}\n <AntenatalPanels />\n\n {/* Outcome section */}\n <div className=\"rounded-lg border bg-yellow-50/60 p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold\">\n Pregnancy Outcome (Optional - To Close Episode)\n </div>\n {draft.outcome && (\n <button type=\"button\" className=\"text-sm text-red-600 hover:underline\" onClick={clearOutcome}>\n Clear\n </button>\n )}\n </div>\n\n {!draft.outcome && (\n <button\n type=\"button\"\n onClick={ensureOutcome}\n className=\"mt-3 w-full rounded-md border border-yellow-300 bg-yellow-100 px-3 py-2 text-sm font-medium\"\n >\n + Add Pregnancy Outcome\n </button>\n )}\n\n {draft.outcome && (\n <div className=\"mt-4 space-y-3\">\n <div className=\"space-y-2\">\n <Label className=\"text-sm\">\n Outcome Type <span className=\"text-red-500\">*</span>\n </Label>\n <select\n className=\"w-full rounded-md border px-3 py-2 text-sm bg-white\"\n value={draft.outcome.type}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, type: e.target.value as OutcomeType }))}\n >\n <option value=\"\">Select outcome...</option>\n <option value=\"delivery\">Normal Delivery</option>\n <option value=\"cesarean\">Cesarean Section</option>\n <option value=\"abortion\">Abortion</option>\n <option value=\"miscarriage\">Miscarriage</option>\n <option value=\"stillbirth\">Stillbirth</option>\n </select>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-date`} className=\"text-sm\">\n Date <span className=\"text-red-500\">*</span>\n </Label>\n <Input\n id={`${fieldId}-outcome-date`}\n type=\"date\"\n max={today}\n value={draft.outcome.date}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, date: e.target.value }))}\n />\n {draft.outcome.date && (\n <p className=\"text-xs text-muted-foreground\">\n Selected: {formatDdMmYyyy(draft.outcome.date)}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-notes`} className=\"text-sm\">\n Notes\n </Label>\n <Textarea\n id={`${fieldId}-outcome-notes`}\n placeholder=\"e.g. Normal vaginal delivery, healthy baby boy, 3.2kg\"\n value={draft.outcome.notes}\n onChange={(e) => updateOutcomeNotesDebounced(e.target.value)}\n className=\"min-h-[90px]\"\n />\n </div>\n\n <div className=\"rounded-md border bg-white p-3\">\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={!!draft.outcome.is_final}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, is_final: e.target.checked }))}\n />\n Close this pregnancy episode\n </label>\n {draft.outcome.is_final && (\n <div className=\"mt-3 rounded-md border border-red-300 bg-red-50 px-3 py-2 text-xs text-red-800\">\n Checking this will mark the pregnancy as completed and is intended to close the maternity episode.\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n};\n\n"]}
|
package/dist/chunk-4HDMR2LX.mjs
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { OBG_ZONE_ALLOWED_CHIP_LABELS, formatObgPathwayProse, obgZoneLabel } from './chunk-IKAKE7TR.mjs';
|
|
2
|
-
import { useField, parseProseAndChipTokens, composeProseAndChips } from './chunk-2BGJZ44Q.mjs';
|
|
3
|
-
import { cn } from './chunk-VPU66PI6.mjs';
|
|
4
|
-
import 'react';
|
|
5
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
function Panel({
|
|
8
|
-
title,
|
|
9
|
-
right,
|
|
10
|
-
children
|
|
11
|
-
}) {
|
|
12
|
-
return /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-md border border-[#D0D0D0] bg-white", children: [
|
|
13
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5", children: [
|
|
14
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-slate-700", children: title }),
|
|
15
|
-
right
|
|
16
|
-
] }),
|
|
17
|
-
/* @__PURE__ */ jsx("div", { className: "p-3 text-xs", children })
|
|
18
|
-
] });
|
|
19
|
-
}
|
|
20
|
-
function ChipRow({
|
|
21
|
-
options,
|
|
22
|
-
selected,
|
|
23
|
-
onToggle,
|
|
24
|
-
disabled
|
|
25
|
-
}) {
|
|
26
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: options.map((o) => {
|
|
27
|
-
const on = !!selected[o.key];
|
|
28
|
-
return /* @__PURE__ */ jsx(
|
|
29
|
-
"button",
|
|
30
|
-
{
|
|
31
|
-
type: "button",
|
|
32
|
-
onClick: () => onToggle(o.key),
|
|
33
|
-
disabled,
|
|
34
|
-
className: cn(
|
|
35
|
-
"rounded-full border px-3 py-1 text-[11px] transition-colors",
|
|
36
|
-
on ? "border-rose-500 bg-rose-50 text-rose-700" : "border-slate-300 bg-white text-slate-600 hover:bg-slate-50"
|
|
37
|
-
),
|
|
38
|
-
children: o.label
|
|
39
|
-
},
|
|
40
|
-
o.key
|
|
41
|
-
);
|
|
42
|
-
}) });
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// src/ui/widgets/_obgSymptomsSync.ts
|
|
46
|
-
var SYMPTOMS_FIELD = "symptoms";
|
|
47
|
-
function useObgSymptomsSync() {
|
|
48
|
-
const symptomsField = useField(SYMPTOMS_FIELD);
|
|
49
|
-
const writeSymptoms = (prev, next, overrideProse) => {
|
|
50
|
-
if (symptomsField.disabled) return;
|
|
51
|
-
const cur = typeof symptomsField.value === "string" ? symptomsField.value : "";
|
|
52
|
-
const { prose: curProse } = parseProseAndChipTokens(
|
|
53
|
-
cur,
|
|
54
|
-
OBG_ZONE_ALLOWED_CHIP_LABELS
|
|
55
|
-
);
|
|
56
|
-
const prevProse = formatObgPathwayProse(prev);
|
|
57
|
-
const generatedProse = formatObgPathwayProse(next);
|
|
58
|
-
const isAutoOwned = curProse === "" || curProse === prevProse;
|
|
59
|
-
const proseInput = overrideProse !== void 0 ? overrideProse : isAutoOwned ? generatedProse : curProse;
|
|
60
|
-
const chipLabels = next.zones.map(obgZoneLabel);
|
|
61
|
-
const composed = composeProseAndChips(proseInput, chipLabels);
|
|
62
|
-
if (composed !== cur) symptomsField.setValue(composed);
|
|
63
|
-
};
|
|
64
|
-
return { writeSymptoms, symptomsField };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export { ChipRow, Panel, useObgSymptomsSync };
|
|
68
|
-
//# sourceMappingURL=chunk-4HDMR2LX.mjs.map
|
|
69
|
-
//# sourceMappingURL=chunk-4HDMR2LX.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/widgets/_obgPanels.tsx","../src/ui/widgets/_obgSymptomsSync.ts"],"names":[],"mappings":";;;;;;AAGO,SAAS,KAAA,CAAM;AAAA,EACpB,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yFAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAwC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7D;AAAA,KAAA,EACH,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAS;AAAA,GAAA,EACzC,CAAA;AAEJ;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClB,IAAA,MAAM,EAAA,GAAK,CAAC,CAAC,QAAA,CAAS,EAAE,GAAG,CAAA;AAC3B,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA;AAAA,QAC7B,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,6DAAA;AAAA,UACA,KACI,0CAAA,GACA;AAAA,SACN;AAAA,QAEC,QAAA,EAAA,CAAA,CAAE;AAAA,OAAA;AAAA,MAXE,CAAA,CAAE;AAAA,KAYT;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;;;AC7CA,IAAM,cAAA,GAAiB,UAAA;AAgBhB,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,aAAA,GAAgB,SAAS,cAAc,CAAA;AAE7C,EAAA,MAAM,aAAA,GAAgB,CACpB,IAAA,EACA,IAAA,EACA,aAAA,KACG;AACH,IAAA,IAAI,cAAc,QAAA,EAAU;AAC5B,IAAA,MAAM,MACJ,OAAO,aAAA,CAAc,KAAA,KAAU,QAAA,GAAW,cAAc,KAAA,GAAQ,EAAA;AAClE,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,uBAAA;AAAA,MAC1B,GAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,SAAA,GAAY,sBAAsB,IAAI,CAAA;AAC5C,IAAA,MAAM,cAAA,GAAiB,sBAAsB,IAAI,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,QAAA,KAAa,EAAA,IAAM,QAAA,KAAa,SAAA;AAEpD,IAAA,MAAM,UAAA,GACJ,aAAA,KAAkB,MAAA,GACd,aAAA,GACA,cACE,cAAA,GACA,QAAA;AAER,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,YAAY,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,UAAA,EAAY,UAAU,CAAA;AAC5D,IAAA,IAAI,QAAA,KAAa,GAAA,EAAK,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,OAAO,EAAE,eAAe,aAAA,EAAc;AACxC","file":"chunk-4HDMR2LX.mjs","sourcesContent":["import React from 'react';\nimport { cn } from '../../core/utils';\n\nexport function Panel({\n title,\n right,\n children,\n}: {\n title: string;\n right?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"overflow-hidden rounded-md border border-[#D0D0D0] bg-white\">\n <div className=\"flex items-center justify-between border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5\">\n <span className=\"text-xs font-semibold text-slate-700\">{title}</span>\n {right}\n </div>\n <div className=\"p-3 text-xs\">{children}</div>\n </div>\n );\n}\n\nexport function ChipRow({\n options,\n selected,\n onToggle,\n disabled,\n}: {\n options: { key: string; label: string }[];\n selected: Record<string, boolean>;\n onToggle: (key: string) => void;\n disabled?: boolean;\n}) {\n return (\n <div className=\"flex flex-wrap gap-2\">\n {options.map((o) => {\n const on = !!selected[o.key];\n return (\n <button\n key={o.key}\n type=\"button\"\n onClick={() => onToggle(o.key)}\n disabled={disabled}\n className={cn(\n 'rounded-full border px-3 py-1 text-[11px] transition-colors',\n on\n ? 'border-rose-500 bg-rose-50 text-rose-700'\n : 'border-slate-300 bg-white text-slate-600 hover:bg-slate-50',\n )}\n >\n {o.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useField } from '../../react/useField';\nimport {\n formatObgPathwayProse,\n obgZoneLabel,\n OBG_ZONE_ALLOWED_CHIP_LABELS,\n type ObgPathwayValue,\n} from '../../core/obgPathway';\nimport {\n composeProseAndChips,\n parseProseAndChipTokens,\n} from '../../core/suggestionTokens';\n\nconst SYMPTOMS_FIELD = 'symptoms';\n\n/**\n * Mirror an OBG pathway value into the `symptoms` (HOPC) textarea as\n * prose + chips. Multiple widgets (OBGPathwayWidget, AntenatalPanels) write\n * through this hook simultaneously, so the \"is current prose user-owned?\"\n * check is stateless: we compare the current prose against the prose that\n * the *previous* pathway value would have generated. If they match, the\n * textarea is still auto-owned and may be refreshed; otherwise the user has\n * edited prose and we preserve it (only the chip line is kept in sync).\n *\n * Because `formatObgPathwayProse` is deterministic, this approach is\n * correct across multiple writers and across remounts without any shared\n * ref — a previous `lastAutoProseRef`-based design fought itself when\n * OBGPathwayWidget and AntenatalPanels both wrote on the same tick.\n */\nexport function useObgSymptomsSync() {\n const symptomsField = useField(SYMPTOMS_FIELD);\n\n const writeSymptoms = (\n prev: ObgPathwayValue,\n next: ObgPathwayValue,\n overrideProse?: string,\n ) => {\n if (symptomsField.disabled) return;\n const cur =\n typeof symptomsField.value === 'string' ? symptomsField.value : '';\n const { prose: curProse } = parseProseAndChipTokens(\n cur,\n OBG_ZONE_ALLOWED_CHIP_LABELS,\n );\n\n const prevProse = formatObgPathwayProse(prev);\n const generatedProse = formatObgPathwayProse(next);\n const isAutoOwned = curProse === '' || curProse === prevProse;\n\n const proseInput =\n overrideProse !== undefined\n ? overrideProse\n : isAutoOwned\n ? generatedProse\n : curProse;\n\n const chipLabels = next.zones.map(obgZoneLabel);\n const composed = composeProseAndChips(proseInput, chipLabels);\n if (composed !== cur) symptomsField.setValue(composed);\n };\n\n return { writeSymptoms, symptomsField };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/shadcn/datetime-picker.tsx"],"names":["CalendarIcon","Calendar"],"mappings":"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","file":"chunk-4PMNVBJD.mjs","sourcesContent":["import * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { Calendar as CalendarIcon, Clock } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\nimport { Input } from \"./input\"\n\nexport interface DateTimePickerProps {\n /**\n * The current value as a Date object.\n */\n dateTime?: Date\n /**\n * Setter for the value. Use undefined to clear.\n */\n setDateTime?: (value: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nfunction parseTimeString(value: string): { hours: number; minutes: number } | null {\n if (!value) return null\n const [h, m] = value.split(\":\").map((v) => Number(v))\n if (\n Number.isNaN(h) ||\n Number.isNaN(m) ||\n h < 0 ||\n h > 23 ||\n m < 0 ||\n m > 59\n ) {\n return null\n }\n return { hours: h, minutes: m }\n}\n\nexport function DateTimePicker({\n dateTime,\n setDateTime,\n className,\n placeholder = \"Pick date & time\",\n}: DateTimePickerProps) {\n const [internalDate, setInternalDate] = React.useState<Date | undefined>(dateTime)\n const [timeString, setTimeString] = React.useState<string>(() => {\n if (!dateTime) return \"\"\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n return `${hours}:${minutes}`\n })\n\n React.useEffect(() => {\n setInternalDate(dateTime)\n if (!dateTime) {\n setTimeString(\"\")\n } else {\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n setTimeString(`${hours}:${minutes}`)\n }\n }, [dateTime])\n\n const handleDateSelect = (date: Date | undefined) => {\n setInternalDate(date)\n if (!setDateTime) return\n if (!date) {\n setDateTime(undefined)\n return\n }\n\n const parsed = parseTimeString(timeString)\n const next = new Date(date)\n if (parsed) {\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n }\n setDateTime(next)\n }\n\n const handleTimeChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const value = e.target.value\n setTimeString(value)\n if (!setDateTime) return\n\n const parsed = parseTimeString(value)\n if (!parsed) {\n // Don't propagate invalid time, just keep local string\n return\n }\n\n const base = internalDate ?? new Date()\n const next = new Date(base)\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n setInternalDate(next)\n setDateTime(next)\n }\n\n const hasValue = !!dateTime\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !hasValue && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {hasValue ? (\n <span className=\"flex items-center gap-1\">\n {format(dateTime as Date, \"PPP\")}\n <span className=\"text-muted-foreground\">•</span>\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {format(dateTime as Date, \"HH:mm\")}\n </span>\n </span>\n ) : (\n <span>{placeholder}</span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <div className=\"flex flex-col md:flex-row\">\n <Calendar\n mode=\"single\"\n selected={internalDate}\n onSelect={handleDateSelect}\n initialFocus\n />\n <div className=\"border-t md:border-t-0 md:border-l p-3 flex flex-col gap-2 min-w-[220px]\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n Time (24h)\n </label>\n <Input\n type=\"time\"\n value={timeString}\n onChange={handleTimeChange}\n className=\"w-full\"\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/shadcn/calendar.tsx","../src/ui/shadcn/popover.tsx"],"names":["Select","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","DayPicker","cn","buttonVariants","ChevronLeft","ChevronRight","PopoverPrimitive","React2"],"mappings":"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","file":"chunk-AZSAPO2V.cjs","sourcesContent":["import * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../core/utils\"\nimport { buttonVariants } from \"./button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\ntype RdpDropdownOption = {\n value: string | number\n label: string\n disabled?: boolean\n}\n\ntype RdpDropdownProps = {\n options?: RdpDropdownOption[]\n value?: string | number\n onChange?: React.ChangeEventHandler<HTMLSelectElement>\n \"aria-label\"?: string\n}\n\nfunction CalendarDropdown(props: RdpDropdownProps) {\n const { options, value, onChange } = props\n\n const handleValueChange = (newValue: string) => {\n if (!onChange) return\n const syntheticEvent = {\n target: { value: newValue },\n } as unknown as React.ChangeEvent<HTMLSelectElement>\n onChange(syntheticEvent)\n }\n\n return (\n <Select value={value?.toString()} onValueChange={handleValueChange}>\n <SelectTrigger className=\"h-7 px-2 text-sm\" aria-label={props[\"aria-label\"]}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((option) => (\n <SelectItem\n key={option.value.toString()}\n value={option.value.toString()}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n const captionLayout = props.captionLayout ?? \"dropdown\"\n const isDropdownCaption =\n captionLayout === \"dropdown\" ||\n captionLayout === \"dropdown-months\" ||\n captionLayout === \"dropdown-years\"\n\n // Provide a broad default year range for dropdown captions.\n // Callers can override by passing `startMonth` / `endMonth`.\n const startMonth =\n props.startMonth ?? (isDropdownCaption ? new Date(1900, 0) : undefined)\n const endMonth =\n props.endMonth ?? (isDropdownCaption ? new Date(2100, 11) : undefined)\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n captionLayout={captionLayout}\n hideNavigation={props.hideNavigation ?? isDropdownCaption}\n navLayout={props.navLayout ?? (isDropdownCaption ? \"around\" : undefined)}\n startMonth={startMonth}\n endMonth={endMonth}\n className={cn(\"p-3 relative\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: cn(\n \"text-sm font-medium\",\n isDropdownCaption && \"sr-only\"\n ),\n dropdowns: \"flex items-center gap-2\",\n months_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n years_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: isDropdownCaption ? \"\" : \"absolute left-1\",\n nav_button_next: isDropdownCaption ? \"\" : \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n\n // v9 keys with explicit positioning relative to the NEW container\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n isDropdownCaption ? \"\" : \"absolute left-1 top-3\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n isDropdownCaption ? \"\" : \"absolute right-1 top-3\"\n ),\n month_grid: \"w-full border-collapse space-y-1\",\n weekdays: \"flex\",\n weekday: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n week: \"flex w-full mt-2\",\n day_button: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n range_end: \"day-range-end\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n hidden: \"invisible\",\n \n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n // @ts-expect-error react-day-picker v9 component typing differences\n Dropdown: CalendarDropdown,\n Chevron: ({ orientation }) => {\n const Icon = orientation === 'left' ? ChevronLeft : ChevronRight\n return <Icon className=\"h-4 w-4\" />\n }\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/shadcn/calendar.tsx","../src/ui/shadcn/popover.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-BMNY7F6H.mjs","sourcesContent":["import * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../core/utils\"\nimport { buttonVariants } from \"./button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\ntype RdpDropdownOption = {\n value: string | number\n label: string\n disabled?: boolean\n}\n\ntype RdpDropdownProps = {\n options?: RdpDropdownOption[]\n value?: string | number\n onChange?: React.ChangeEventHandler<HTMLSelectElement>\n \"aria-label\"?: string\n}\n\nfunction CalendarDropdown(props: RdpDropdownProps) {\n const { options, value, onChange } = props\n\n const handleValueChange = (newValue: string) => {\n if (!onChange) return\n const syntheticEvent = {\n target: { value: newValue },\n } as unknown as React.ChangeEvent<HTMLSelectElement>\n onChange(syntheticEvent)\n }\n\n return (\n <Select value={value?.toString()} onValueChange={handleValueChange}>\n <SelectTrigger className=\"h-7 px-2 text-sm\" aria-label={props[\"aria-label\"]}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((option) => (\n <SelectItem\n key={option.value.toString()}\n value={option.value.toString()}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n const captionLayout = props.captionLayout ?? \"dropdown\"\n const isDropdownCaption =\n captionLayout === \"dropdown\" ||\n captionLayout === \"dropdown-months\" ||\n captionLayout === \"dropdown-years\"\n\n // Provide a broad default year range for dropdown captions.\n // Callers can override by passing `startMonth` / `endMonth`.\n const startMonth =\n props.startMonth ?? (isDropdownCaption ? new Date(1900, 0) : undefined)\n const endMonth =\n props.endMonth ?? (isDropdownCaption ? new Date(2100, 11) : undefined)\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n captionLayout={captionLayout}\n hideNavigation={props.hideNavigation ?? isDropdownCaption}\n navLayout={props.navLayout ?? (isDropdownCaption ? \"around\" : undefined)}\n startMonth={startMonth}\n endMonth={endMonth}\n className={cn(\"p-3 relative\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: cn(\n \"text-sm font-medium\",\n isDropdownCaption && \"sr-only\"\n ),\n dropdowns: \"flex items-center gap-2\",\n months_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n years_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: isDropdownCaption ? \"\" : \"absolute left-1\",\n nav_button_next: isDropdownCaption ? \"\" : \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n\n // v9 keys with explicit positioning relative to the NEW container\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n isDropdownCaption ? \"\" : \"absolute left-1 top-3\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n isDropdownCaption ? \"\" : \"absolute right-1 top-3\"\n ),\n month_grid: \"w-full border-collapse space-y-1\",\n weekdays: \"flex\",\n weekday: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n week: \"flex w-full mt-2\",\n day_button: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n range_end: \"day-range-end\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n hidden: \"invisible\",\n \n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n // @ts-expect-error react-day-picker v9 component typing differences\n Dropdown: CalendarDropdown,\n Chevron: ({ orientation }) => {\n const Icon = orientation === 'left' ? ChevronLeft : ChevronRight\n return <Icon className=\"h-4 w-4\" />\n }\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/widgets/_obgPanels.tsx","../src/ui/widgets/_obgSymptomsSync.ts"],"names":["jsxs","jsx","cn","useField","parseProseAndChipTokens","OBG_ZONE_ALLOWED_CHIP_LABELS","formatObgPathwayProse","obgZoneLabel","composeProseAndChips"],"mappings":";;;;;;;;AAGO,SAAS,KAAA,CAAM;AAAA,EACpB,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACEA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yFAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAwC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7D;AAAA,KAAA,EACH,CAAA;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAS;AAAA,GAAA,EACzC,CAAA;AAEJ;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClB,IAAA,MAAM,EAAA,GAAK,CAAC,CAAC,QAAA,CAAS,EAAE,GAAG,CAAA;AAC3B,IAAA,uBACEA,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA;AAAA,QAC7B,QAAA;AAAA,QACA,SAAA,EAAWC,oBAAA;AAAA,UACT,6DAAA;AAAA,UACA,KACI,0CAAA,GACA;AAAA,SACN;AAAA,QAEC,QAAA,EAAA,CAAA,CAAE;AAAA,OAAA;AAAA,MAXE,CAAA,CAAE;AAAA,KAYT;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;;;AC7CA,IAAM,cAAA,GAAiB,UAAA;AAgBhB,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,aAAA,GAAgBC,2BAAS,cAAc,CAAA;AAE7C,EAAA,MAAM,aAAA,GAAgB,CACpB,IAAA,EACA,IAAA,EACA,aAAA,KACG;AACH,IAAA,IAAI,cAAc,QAAA,EAAU;AAC5B,IAAA,MAAM,MACJ,OAAO,aAAA,CAAc,KAAA,KAAU,QAAA,GAAW,cAAc,KAAA,GAAQ,EAAA;AAClE,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAIC,yCAAA;AAAA,MAC1B,GAAA;AAAA,MACAC;AAAA,KACF;AAEA,IAAA,MAAM,SAAA,GAAYC,wCAAsB,IAAI,CAAA;AAC5C,IAAA,MAAM,cAAA,GAAiBA,wCAAsB,IAAI,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,QAAA,KAAa,EAAA,IAAM,QAAA,KAAa,SAAA;AAEpD,IAAA,MAAM,UAAA,GACJ,aAAA,KAAkB,MAAA,GACd,aAAA,GACA,cACE,cAAA,GACA,QAAA;AAER,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIC,8BAAY,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAWC,sCAAA,CAAqB,UAAA,EAAY,UAAU,CAAA;AAC5D,IAAA,IAAI,QAAA,KAAa,GAAA,EAAK,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,OAAO,EAAE,eAAe,aAAA,EAAc;AACxC","file":"chunk-ML47UEDU.cjs","sourcesContent":["import React from 'react';\nimport { cn } from '../../core/utils';\n\nexport function Panel({\n title,\n right,\n children,\n}: {\n title: string;\n right?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"overflow-hidden rounded-md border border-[#D0D0D0] bg-white\">\n <div className=\"flex items-center justify-between border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5\">\n <span className=\"text-xs font-semibold text-slate-700\">{title}</span>\n {right}\n </div>\n <div className=\"p-3 text-xs\">{children}</div>\n </div>\n );\n}\n\nexport function ChipRow({\n options,\n selected,\n onToggle,\n disabled,\n}: {\n options: { key: string; label: string }[];\n selected: Record<string, boolean>;\n onToggle: (key: string) => void;\n disabled?: boolean;\n}) {\n return (\n <div className=\"flex flex-wrap gap-2\">\n {options.map((o) => {\n const on = !!selected[o.key];\n return (\n <button\n key={o.key}\n type=\"button\"\n onClick={() => onToggle(o.key)}\n disabled={disabled}\n className={cn(\n 'rounded-full border px-3 py-1 text-[11px] transition-colors',\n on\n ? 'border-rose-500 bg-rose-50 text-rose-700'\n : 'border-slate-300 bg-white text-slate-600 hover:bg-slate-50',\n )}\n >\n {o.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useField } from '../../react/useField';\nimport {\n formatObgPathwayProse,\n obgZoneLabel,\n OBG_ZONE_ALLOWED_CHIP_LABELS,\n type ObgPathwayValue,\n} from '../../core/obgPathway';\nimport {\n composeProseAndChips,\n parseProseAndChipTokens,\n} from '../../core/suggestionTokens';\n\nconst SYMPTOMS_FIELD = 'symptoms';\n\n/**\n * Mirror an OBG pathway value into the `symptoms` (HOPC) textarea as\n * prose + chips. Multiple widgets (OBGPathwayWidget, AntenatalPanels) write\n * through this hook simultaneously, so the \"is current prose user-owned?\"\n * check is stateless: we compare the current prose against the prose that\n * the *previous* pathway value would have generated. If they match, the\n * textarea is still auto-owned and may be refreshed; otherwise the user has\n * edited prose and we preserve it (only the chip line is kept in sync).\n *\n * Because `formatObgPathwayProse` is deterministic, this approach is\n * correct across multiple writers and across remounts without any shared\n * ref — a previous `lastAutoProseRef`-based design fought itself when\n * OBGPathwayWidget and AntenatalPanels both wrote on the same tick.\n */\nexport function useObgSymptomsSync() {\n const symptomsField = useField(SYMPTOMS_FIELD);\n\n const writeSymptoms = (\n prev: ObgPathwayValue,\n next: ObgPathwayValue,\n overrideProse?: string,\n ) => {\n if (symptomsField.disabled) return;\n const cur =\n typeof symptomsField.value === 'string' ? symptomsField.value : '';\n const { prose: curProse } = parseProseAndChipTokens(\n cur,\n OBG_ZONE_ALLOWED_CHIP_LABELS,\n );\n\n const prevProse = formatObgPathwayProse(prev);\n const generatedProse = formatObgPathwayProse(next);\n const isAutoOwned = curProse === '' || curProse === prevProse;\n\n const proseInput =\n overrideProse !== undefined\n ? overrideProse\n : isAutoOwned\n ? generatedProse\n : curProse;\n\n const chipLabels = next.zones.map(obgZoneLabel);\n const composed = composeProseAndChips(proseInput, chipLabels);\n if (composed !== cur) symptomsField.setValue(composed);\n };\n\n return { writeSymptoms, symptomsField };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/widgets/Text.tsx","../src/ui/widgets/Select.tsx"],"names":["useField","useForm","useFormStore","Textarea","Input","getThemeConfig","cn","isLabelVisible","jsxs","Fragment","jsx","FieldRequiredIndicator","Label","fieldLabelClass","fieldWrapperClass","VoiceMicButton","fieldControlClass","fieldErrorClass","useState","useEffect","fetchOptions","Select","SelectTrigger","SelectValue","SelectContent","SelectItem"],"mappings":"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","file":"chunk-TVFUWRTE.cjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const TextWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const Component = fieldDef.type === 'textarea' ? Textarea : Input;\n const isTextarea = fieldDef.type === 'textarea';\n const height = isTextarea && 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig(\n isTextarea ? 'textarea' : 'text',\n fieldDef.theme\n );\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel\n ? theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n : null;\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : undefined;\n\n return (\n <div\n className={fieldWrapperClass(\n fieldDef,\n wrapperClass,\n isTextarea ? 'flex h-full min-h-0 flex-col' : undefined,\n )}\n >\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : (\n labelEl\n )}\n <Component\n id={fieldId}\n value={value || ''}\n onChange={(e) => setValue(fieldDef.type === 'number' ? Number(e.target.value) : e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n type={fieldDef.type === 'number' ? 'number' : 'text'}\n className={fieldControlClass(\n fieldDef,\n inputClass,\n isTextarea && height == null ? 'min-h-[80px] flex-1' : undefined,\n )}\n placeholder={placeholder}\n aria-label={!showLabel ? fieldDef.label : undefined}\n {...(isTextarea && { height })}\n />\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SelectWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as SelectFieldDef; // Cast safe due to Renderer check\n\n if (def.options) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const schemaPlaceholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : undefined;\n const selectPlaceholder = loading ? 'Loading...' : schemaPlaceholder ?? 'Select...';\n\n const showLabel = isLabelVisible(fieldDef);\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 <Select \n disabled={disabled || loading} \n value={value ? String(value) : undefined} \n onValueChange={(val) => {\n // Try to find original value type (number vs string)\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n }}\n >\n <SelectTrigger\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n showError ? 'border-red-500' : '',\n )}\n >\n <SelectValue placeholder={selectPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n \n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/widgets/Text.tsx","../src/ui/widgets/Select.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"chunk-XN2QLBLT.mjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const TextWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const Component = fieldDef.type === 'textarea' ? Textarea : Input;\n const isTextarea = fieldDef.type === 'textarea';\n const height = isTextarea && 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig(\n isTextarea ? 'textarea' : 'text',\n fieldDef.theme\n );\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel\n ? theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n : null;\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : undefined;\n\n return (\n <div\n className={fieldWrapperClass(\n fieldDef,\n wrapperClass,\n isTextarea ? 'flex h-full min-h-0 flex-col' : undefined,\n )}\n >\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : (\n labelEl\n )}\n <Component\n id={fieldId}\n value={value || ''}\n onChange={(e) => setValue(fieldDef.type === 'number' ? Number(e.target.value) : e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n type={fieldDef.type === 'number' ? 'number' : 'text'}\n className={fieldControlClass(\n fieldDef,\n inputClass,\n isTextarea && height == null ? 'min-h-[80px] flex-1' : undefined,\n )}\n placeholder={placeholder}\n aria-label={!showLabel ? fieldDef.label : undefined}\n {...(isTextarea && { height })}\n />\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SelectWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as SelectFieldDef; // Cast safe due to Renderer check\n\n if (def.options) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const schemaPlaceholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : undefined;\n const selectPlaceholder = loading ? 'Loading...' : schemaPlaceholder ?? 'Select...';\n\n const showLabel = isLabelVisible(fieldDef);\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 <Select \n disabled={disabled || loading} \n value={value ? String(value) : undefined} \n onValueChange={(val) => {\n // Try to find original value type (number vs string)\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n }}\n >\n <SelectTrigger\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n showError ? 'border-red-500' : '',\n )}\n >\n <SelectValue placeholder={selectPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n \n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/shadcn/datetime-picker.tsx"],"names":["React","Popover","jsx","PopoverTrigger","jsxs","Button","cn","CalendarIcon","format","Clock","PopoverContent","Calendar","Input"],"mappings":"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","file":"chunk-YEFM2ERQ.cjs","sourcesContent":["import * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { Calendar as CalendarIcon, Clock } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\nimport { Input } from \"./input\"\n\nexport interface DateTimePickerProps {\n /**\n * The current value as a Date object.\n */\n dateTime?: Date\n /**\n * Setter for the value. Use undefined to clear.\n */\n setDateTime?: (value: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nfunction parseTimeString(value: string): { hours: number; minutes: number } | null {\n if (!value) return null\n const [h, m] = value.split(\":\").map((v) => Number(v))\n if (\n Number.isNaN(h) ||\n Number.isNaN(m) ||\n h < 0 ||\n h > 23 ||\n m < 0 ||\n m > 59\n ) {\n return null\n }\n return { hours: h, minutes: m }\n}\n\nexport function DateTimePicker({\n dateTime,\n setDateTime,\n className,\n placeholder = \"Pick date & time\",\n}: DateTimePickerProps) {\n const [internalDate, setInternalDate] = React.useState<Date | undefined>(dateTime)\n const [timeString, setTimeString] = React.useState<string>(() => {\n if (!dateTime) return \"\"\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n return `${hours}:${minutes}`\n })\n\n React.useEffect(() => {\n setInternalDate(dateTime)\n if (!dateTime) {\n setTimeString(\"\")\n } else {\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n setTimeString(`${hours}:${minutes}`)\n }\n }, [dateTime])\n\n const handleDateSelect = (date: Date | undefined) => {\n setInternalDate(date)\n if (!setDateTime) return\n if (!date) {\n setDateTime(undefined)\n return\n }\n\n const parsed = parseTimeString(timeString)\n const next = new Date(date)\n if (parsed) {\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n }\n setDateTime(next)\n }\n\n const handleTimeChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const value = e.target.value\n setTimeString(value)\n if (!setDateTime) return\n\n const parsed = parseTimeString(value)\n if (!parsed) {\n // Don't propagate invalid time, just keep local string\n return\n }\n\n const base = internalDate ?? new Date()\n const next = new Date(base)\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n setInternalDate(next)\n setDateTime(next)\n }\n\n const hasValue = !!dateTime\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !hasValue && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {hasValue ? (\n <span className=\"flex items-center gap-1\">\n {format(dateTime as Date, \"PPP\")}\n <span className=\"text-muted-foreground\">•</span>\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {format(dateTime as Date, \"HH:mm\")}\n </span>\n </span>\n ) : (\n <span>{placeholder}</span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <div className=\"flex flex-col md:flex-row\">\n <Calendar\n mode=\"single\"\n selected={internalDate}\n onSelect={handleDateSelect}\n initialFocus\n />\n <div className=\"border-t md:border-t-0 md:border-l p-3 flex flex-col gap-2 min-w-[220px]\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n Time (24h)\n </label>\n <Input\n type=\"time\"\n value={timeString}\n onChange={handleTimeChange}\n className=\"w-full\"\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n"]}
|