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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/dentalChart.ts","../src/ui/widgets/DentalChartWidget.tsx"],"names":["jsxs","jsx","Trash2","cn","Textarea","Popover","PopoverTrigger","Fragment","PopoverContent","useField","useCallback","Button","X"],"mappings":"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","file":"chunk-X4AJCTON.cjs","sourcesContent":["import type { ToothCondition, DentalChartData } from './types';\n\nexport const CONDITION_CONFIG: Record<ToothCondition, { label: string; color: string }> = {\n cavity: { label: 'Cavity', color: '#ef4444' },\n filled: { label: 'Filled', color: '#3b82f6' },\n crown: { label: 'Crown', color: '#f59e0b' },\n missing: { label: 'Missing', color: '#9ca3af' },\n root_canal: { label: 'Root Canal (RCT)', color: '#a855f7' },\n bridge: { label: 'Bridge', color: '#f97316' },\n implant: { label: 'Implant', color: '#14b8a6' },\n fractured: { label: 'Fractured', color: '#eab308' },\n impacted: { label: 'Impacted', color: '#6366f1' },\n};\n\nexport const ALL_CONDITIONS = Object.keys(CONDITION_CONFIG) as ToothCondition[];\n\n/** FDI quadrant tooth numbers, ordered from midline outward */\nexport const QUADRANTS = {\n upperRight: [11, 12, 13, 14, 15, 16, 17, 18] as const,\n upperLeft: [21, 22, 23, 24, 25, 26, 27, 28] as const,\n lowerLeft: [31, 32, 33, 34, 35, 36, 37, 38] as const,\n lowerRight: [41, 42, 43, 44, 45, 46, 47, 48] as const,\n};\n\nconst TOOTH_NAMES: Record<number, string> = {\n 11: 'UR Central Incisor', 12: 'UR Lateral Incisor',\n 13: 'UR Canine', 14: 'UR 1st Premolar',\n 15: 'UR 2nd Premolar', 16: 'UR 1st Molar',\n 17: 'UR 2nd Molar', 18: 'UR 3rd Molar',\n 21: 'UL Central Incisor', 22: 'UL Lateral Incisor',\n 23: 'UL Canine', 24: 'UL 1st Premolar',\n 25: 'UL 2nd Premolar', 26: 'UL 1st Molar',\n 27: 'UL 2nd Molar', 28: 'UL 3rd Molar',\n 31: 'LL Central Incisor', 32: 'LL Lateral Incisor',\n 33: 'LL Canine', 34: 'LL 1st Premolar',\n 35: 'LL 2nd Premolar', 36: 'LL 1st Molar',\n 37: 'LL 2nd Molar', 38: 'LL 3rd Molar',\n 41: 'LR Central Incisor', 42: 'LR Lateral Incisor',\n 43: 'LR Canine', 44: 'LR 1st Premolar',\n 45: 'LR 2nd Premolar', 46: 'LR 1st Molar',\n 47: 'LR 2nd Molar', 48: 'LR 3rd Molar',\n};\n\nexport function toothLabel(id: number): string {\n return TOOTH_NAMES[id] ?? `Tooth ${id}`;\n}\n\n/** Conditions that support per-surface location selection. */\nexport const SURFACE_CONDITIONS: readonly ToothCondition[] = ['cavity', 'filled', 'fractured'];\n\n/** Anterior teeth that use \"Incisal\" instead of \"Occlusal\". */\nconst ANTERIOR_TEETH = new Set([13, 12, 11, 21, 22, 23, 43, 42, 41, 31, 32, 33]);\n\n/**\n * Returns the ordered surface options for a given FDI tooth number.\n * - Upper jaw → Palatal (teeth 11-28)\n * - Lower jaw → Lingual (teeth 31-48)\n * - Anteriors → Incisal instead of Occlusal\n */\nexport function getToothSurfaces(id: number): string[] {\n const isUpper = id >= 11 && id <= 28;\n const isAnterior = ANTERIOR_TEETH.has(id);\n return [\n 'Buccal',\n 'Mesial',\n 'Distal',\n isAnterior ? 'Incisal' : 'Occlusal',\n isUpper ? 'Palatal' : 'Lingual',\n ];\n}\n\n/** Coerces an unknown value into a valid `DentalChartData` shape. */\nexport function normalizeDentalChart(value: unknown): DentalChartData {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const v = value as Record<string, unknown>;\n if (v.teeth && typeof v.teeth === 'object' && !Array.isArray(v.teeth)) {\n return value as DentalChartData;\n }\n }\n return { teeth: {} };\n}\n","import React, { useCallback } from 'react';\nimport { X, Trash2 } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Button } from '../shadcn/button';\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcn/popover';\nimport { Textarea } from '../shadcn/textarea';\nimport { useField } from '../../react/useField';\nimport {\n ALL_CONDITIONS,\n CONDITION_CONFIG,\n QUADRANTS,\n SURFACE_CONDITIONS,\n getToothSurfaces,\n normalizeDentalChart,\n toothLabel,\n} from '../../core/dentalChart';\nimport type { DentalChartData, ToothCondition, ToothEntry } from '../../core/types';\n\n// ─── Tooth Editor (inside popover) ───────────────────────────────────────────\n\nfunction ToothEditor({\n id,\n entry,\n onChange,\n}: {\n id: number;\n entry: ToothEntry | undefined;\n onChange: (entry: ToothEntry) => void;\n}) {\n const conditions = entry?.conditions ?? [];\n const surfaces = entry?.surfaces ?? {};\n const notes = entry?.notes ?? '';\n const availableSurfaces = getToothSurfaces(id);\n\n const buildEntry = (\n nextConditions: ToothCondition[],\n nextSurfaces: typeof surfaces,\n nextNotes: string,\n ): ToothEntry => ({\n conditions: nextConditions,\n surfaces: Object.keys(nextSurfaces).length ? nextSurfaces : undefined,\n notes: nextNotes || undefined,\n });\n\n const toggle = (c: ToothCondition) => {\n const isActive = conditions.includes(c);\n const nextConditions = isActive\n ? conditions.filter((x) => x !== c)\n : [...conditions, c];\n // Clear surfaces for a condition being deactivated\n const nextSurfaces = { ...surfaces };\n if (isActive) delete nextSurfaces[c];\n onChange(buildEntry(nextConditions, nextSurfaces, notes));\n };\n\n const toggleSurface = (c: ToothCondition, surface: string) => {\n const current = surfaces[c] ?? [];\n const next = current.includes(surface)\n ? current.filter((s) => s !== surface)\n : [...current, surface];\n const nextSurfaces = { ...surfaces, [c]: next.length ? next : [] };\n onChange(buildEntry(conditions, nextSurfaces, notes));\n };\n\n const updateNotes = (v: string) =>\n onChange(buildEntry(conditions, surfaces, v));\n\n // Conditions active that support surface selection\n const activeSurfaceConditions = SURFACE_CONDITIONS.filter((c) =>\n conditions.includes(c),\n );\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <p className=\"text-xs font-semibold text-foreground\">Tooth {id}</p>\n <p className=\"text-[10px] text-muted-foreground\">{toothLabel(id)}</p>\n </div>\n {conditions.length > 0 && (\n <button\n type=\"button\"\n onClick={() => onChange({ conditions: [] })}\n className=\"flex shrink-0 items-center gap-1 text-[10px] text-destructive hover:underline\"\n >\n <Trash2 className=\"h-3 w-3\" />\n Clear\n </button>\n )}\n </div>\n\n {/* Condition chips */}\n <div className=\"flex flex-wrap gap-1.5\">\n {ALL_CONDITIONS.map((c) => {\n const cfg = CONDITION_CONFIG[c];\n const active = conditions.includes(c);\n return (\n <button\n key={c}\n type=\"button\"\n onClick={() => toggle(c)}\n className={cn(\n 'rounded-full border px-2.5 py-0.5 text-[10px] font-medium transition-all',\n active\n ? 'text-white'\n : 'border-border bg-background text-muted-foreground hover:border-gray-400',\n )}\n style={active ? { backgroundColor: cfg.color, borderColor: cfg.color } : undefined}\n >\n {cfg.label}\n </button>\n );\n })}\n </div>\n\n {/* Surface location pickers — one per active surface-eligible condition */}\n {activeSurfaceConditions.map((c) => {\n const cfg = CONDITION_CONFIG[c];\n const selected = surfaces[c] ?? [];\n return (\n <div key={c} className=\"space-y-1\">\n <p\n className=\"text-[10px] font-semibold uppercase tracking-wide\"\n style={{ color: cfg.color }}\n >\n {cfg.label} — surfaces\n </p>\n <div className=\"flex flex-wrap gap-1\">\n {availableSurfaces.map((surface) => {\n const on = selected.includes(surface);\n return (\n <button\n key={surface}\n type=\"button\"\n onClick={() => toggleSurface(c, surface)}\n className={cn(\n 'rounded border px-2 py-0.5 text-[10px] font-medium transition-all',\n on\n ? 'text-white'\n : 'border-border bg-background text-muted-foreground hover:border-gray-400',\n )}\n style={on ? { backgroundColor: cfg.color, borderColor: cfg.color } : undefined}\n >\n {surface}\n </button>\n );\n })}\n </div>\n </div>\n );\n })}\n\n <Textarea\n value={notes}\n onChange={(e) => updateNotes(e.target.value)}\n placeholder=\"Notes for this tooth…\"\n className=\"h-16 resize-none text-xs\"\n />\n </div>\n );\n}\n\n// ─── Single Tooth Button ──────────────────────────────────────────────────────\n\nfunction ToothButton({\n id,\n entry,\n isUpper,\n onChange,\n}: {\n id: number;\n entry: ToothEntry | undefined;\n isUpper: boolean;\n onChange: (entry: ToothEntry) => void;\n}) {\n const conditions = entry?.conditions ?? [];\n const isMissing = conditions.includes('missing');\n const primary = isMissing ? 'missing' : (conditions[0] ?? null);\n const primaryColor = primary ? CONDITION_CONFIG[primary as ToothCondition].color : null;\n const multiCount = conditions.length > 1 ? conditions.length : null;\n\n const boxStyle: React.CSSProperties = {\n position: 'relative',\n width: 46,\n height: 58,\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n borderRadius: 6,\n border: '1px solid',\n borderColor: !isMissing && primaryColor ? primaryColor : isMissing ? '#d1d5db' : '#e5e7eb',\n backgroundColor: isMissing ? '#f3f4f6' : '#ffffff',\n cursor: 'pointer',\n userSelect: 'none',\n outline: 'none',\n transition: 'box-shadow 0.15s',\n };\n\n const numberStyle: React.CSSProperties = {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 11,\n fontWeight: 700,\n color: isMissing ? '#9ca3af' : '#374151',\n lineHeight: 1,\n };\n\n const stripStyle = (rounded: 'top' | 'bottom'): React.CSSProperties => ({\n height: 10,\n flexShrink: 0,\n borderRadius: rounded === 'bottom' ? '0 0 5px 5px' : '5px 5px 0 0',\n backgroundColor: !isMissing && primaryColor ? primaryColor : 'transparent',\n });\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n title={toothLabel(id)}\n style={boxStyle}\n className=\"hover:ring-2 hover:ring-primary/30 focus:ring-2 focus:ring-primary/40\"\n >\n {isUpper ? (\n <>\n <div style={numberStyle}>{isMissing ? '✕' : id}</div>\n <div style={stripStyle('bottom')} />\n </>\n ) : (\n <>\n <div style={stripStyle('top')} />\n <div style={numberStyle}>{isMissing ? '✕' : id}</div>\n </>\n )}\n\n {/* Multi-condition badge */}\n {multiCount && (\n <span className=\"absolute -top-1.5 -right-1.5 z-10 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-primary text-[7px] font-bold text-primary-foreground\">\n {multiCount}\n </span>\n )}\n </button>\n </PopoverTrigger>\n\n <PopoverContent className=\"w-72 p-3\" side={isUpper ? 'top' : 'bottom'} align=\"center\" sideOffset={6}>\n <ToothEditor id={id} entry={entry} onChange={onChange} />\n </PopoverContent>\n </Popover>\n );\n}\n\n// ─── Tooth surface diagram ────────────────────────────────────────────────────\n\nconst ANTERIOR_IDS = new Set([13, 12, 11, 21, 22, 23, 43, 42, 41, 31, 32, 33]);\n\n/** Build a surface→color map from an entry's per-condition surface selections. */\nfunction buildSurfaceColorMap(entry: ToothEntry | undefined): Record<string, string> {\n if (!entry?.surfaces) return {};\n const map: Record<string, string> = {};\n for (const cond of SURFACE_CONDITIONS) {\n const surfs = entry.surfaces[cond as ToothCondition];\n if (!surfs?.length) continue;\n const color = CONDITION_CONFIG[cond as ToothCondition]?.color;\n if (!color) continue;\n for (const s of surfs) map[s] = color;\n }\n return map;\n}\n\n/**\n * Small SVG cross-section of a tooth crown (occlusal view).\n * 5 segments: Buccal (top) · Mesial (left) · Distal (right) ·\n * Palatal or Lingual (bottom) · Occlusal or Incisal (centre).\n */\nfunction ToothDiagram({ id, entry }: { id: number; entry: ToothEntry | undefined }) {\n const colorMap = buildSurfaceColorMap(entry);\n const hasSurfaces = Object.keys(colorMap).length > 0;\n\n const isUpper = id >= 11 && id <= 28;\n const bottomLabel = isUpper ? 'Palatal' : 'Lingual';\n const centerLabel = ANTERIOR_IDS.has(id) ? 'Incisal' : 'Occlusal';\n\n // 46 × 46 viewBox; inner corners at 11 and 35\n const S = 46;\n const I = 11;\n const segments = [\n { key: 'Buccal', d: `M0,0 L${S},0 L${S-I},${I} L${I},${I}Z` },\n { key: 'Mesial', d: `M0,0 L0,${S} L${I},${S-I} L${I},${I}Z` },\n { key: 'Distal', d: `M${S},0 L${S},${S} L${S-I},${S-I} L${S-I},${I}Z` },\n { key: bottomLabel, d: `M0,${S} L${S},${S} L${S-I},${S-I} L${I},${S-I}Z` },\n { key: centerLabel, d: `M${I},${I} L${S-I},${I} L${S-I},${S-I} L${I},${S-I}Z` },\n ];\n\n return (\n <svg\n width={S}\n height={S}\n viewBox={`0 0 ${S} ${S}`}\n style={{ flexShrink: 0, opacity: hasSurfaces ? 1 : 0.3 }}\n >\n {segments.map(({ key, d }) => {\n const color = colorMap[key];\n return (\n <path\n key={key}\n d={d}\n fill={color ?? '#f1f5f9'}\n stroke={color ? color : '#cbd5e1'}\n strokeWidth=\"1\"\n strokeLinejoin=\"round\"\n />\n );\n })}\n </svg>\n );\n}\n\n// ─── Arch Row ─────────────────────────────────────────────────────────────────\n\nfunction ArchRow({\n teeth: toothIds,\n isUpper,\n data,\n onChange,\n reverseOrder = false,\n}: {\n teeth: readonly number[];\n isUpper: boolean;\n data: DentalChartData['teeth'];\n onChange: (id: number, entry: ToothEntry) => void;\n reverseOrder?: boolean;\n}) {\n const ordered = reverseOrder ? [...toothIds].reverse() : toothIds;\n return (\n <div className=\"flex gap-1\">\n {ordered.map((id) => (\n <div key={id} className=\"flex flex-col items-center gap-0.5\">\n {isUpper && <ToothDiagram id={id} entry={data[String(id)]} />}\n <ToothButton\n id={id}\n entry={data[String(id)]}\n isUpper={isUpper}\n onChange={(entry) => onChange(id, entry)}\n />\n {!isUpper && <ToothDiagram id={id} entry={data[String(id)]} />}\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Legend ───────────────────────────────────────────────────────────────────\n\nfunction ChartLegend() {\n return (\n <div className=\"flex flex-wrap gap-x-4 gap-y-1.5\">\n {ALL_CONDITIONS.map((c) => {\n const cfg = CONDITION_CONFIG[c];\n return (\n <div key={c} className=\"flex items-center gap-1.5\">\n <span className=\"h-2.5 w-2.5 shrink-0 rounded-full\" style={{ backgroundColor: cfg.color }} />\n <span className=\"text-[10px] text-muted-foreground\">{cfg.label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ─── Forminator Widget wrapper ────────────────────────────────────────────────\n\nexport const DentalChartWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue, setTouched, disabled } = useField(fieldId);\n const data = normalizeDentalChart(value);\n const teeth = data.teeth;\n\n const handleToothChange = useCallback(\n (id: number, entry: ToothEntry) => {\n const next: DentalChartData['teeth'] = { ...teeth };\n if (entry.conditions.length === 0 && !entry.notes) {\n delete next[String(id)];\n } else {\n next[String(id)] = entry;\n }\n setValue({ teeth: next });\n setTouched();\n },\n [teeth, setValue, setTouched],\n );\n\n const markedCount = Object.keys(teeth).length;\n\n if (disabled) {\n return <DentalChartDisplay data={data} />;\n }\n\n return (\n <div className=\"rounded-xl border border-border/60 bg-card shadow-sm\">\n <div className=\"flex items-center justify-between border-b border-border/60 px-4 py-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n Intra Oral Examination – Dental Chart\n </h3>\n <p className=\"mt-0.5 text-[11px] text-muted-foreground\">\n Click any tooth to mark conditions\n {markedCount > 0 && (\n <span className=\"ml-1 font-medium text-foreground\">\n · {markedCount} {markedCount !== 1 ? 'teeth' : 'tooth'} marked\n </span>\n )}\n </p>\n </div>\n {markedCount > 0 && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => { setValue({ teeth: {} }); setTouched(); }}\n className=\"h-7 gap-1 text-xs text-destructive hover:text-destructive\"\n >\n <X className=\"h-3 w-3\" />\n Clear all\n </Button>\n )}\n </div>\n\n <div className=\"overflow-x-auto px-4 py-4\">\n <div className=\"flex justify-center\">\n <div className=\"flex flex-col items-center gap-0\">\n {/* Upper arch */}\n <div className=\"flex\">\n <div className=\"flex flex-col\">\n <span className=\"mb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">UR</span>\n <ArchRow teeth={QUADRANTS.upperRight} isUpper data={teeth} onChange={handleToothChange} reverseOrder />\n </div>\n <div className=\"mx-2 h-[58px] w-px bg-border\" />\n <div className=\"flex flex-col\">\n <span className=\"mb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">UL</span>\n <ArchRow teeth={QUADRANTS.upperLeft} isUpper data={teeth} onChange={handleToothChange} />\n </div>\n </div>\n\n <div className=\"my-2 flex w-full items-center gap-2\">\n <div className=\"h-px flex-1 bg-border\" />\n <span className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">Occlusal</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n\n {/* Lower arch */}\n <div className=\"flex\">\n <div className=\"flex flex-col\">\n <ArchRow teeth={QUADRANTS.lowerRight} isUpper={false} data={teeth} onChange={handleToothChange} reverseOrder />\n <span className=\"mt-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">LR</span>\n </div>\n <div className=\"mx-2 h-[58px] w-px bg-border\" />\n <div className=\"flex flex-col\">\n <ArchRow teeth={QUADRANTS.lowerLeft} isUpper={false} data={teeth} onChange={handleToothChange} />\n <span className=\"mt-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">LL</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"border-t border-border/60 px-4 py-3\">\n <p className=\"mb-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">Legend</p>\n <ChartLegend />\n </div>\n </div>\n );\n};\n\n// ─── Minimal display used when field is disabled ──────────────────────────────\n\nfunction DentalChartDisplay({ data }: { data: DentalChartData }) {\n const teeth = data.teeth ?? {};\n const markedCount = Object.keys(teeth).length;\n if (markedCount === 0) {\n return (\n <div className=\"rounded-xl border border-border/60 bg-card px-4 py-8 text-center text-sm text-muted-foreground shadow-sm\">\n No dental findings recorded\n </div>\n );\n }\n return <DentalChartReadOnly data={data} />;\n}\n\n// ─── Standalone read-only view (also exported for prescription pages) ─────────\n\nexport function DentalChartReadOnly({\n data,\n className,\n}: {\n data: DentalChartData;\n className?: string;\n}) {\n const teeth = data.teeth ?? {};\n const markedCount = Object.keys(teeth).length;\n\n const usedConditions = new Set(\n Object.values(teeth).flatMap((e) => e.conditions ?? []),\n );\n\n const toothNotes = Object.entries(teeth)\n .filter(([, e]) => e.notes)\n .map(([id, e]) => ({ id: Number(id), label: toothLabel(Number(id)), notes: e.notes! }));\n\n return (\n <div className={cn('rounded-xl border border-border/60 bg-card shadow-sm', className)}>\n <div className=\"flex items-center justify-between border-b border-border/60 px-4 py-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n Intra Oral Examination – Dental Chart\n </h3>\n {markedCount > 0 && (\n <p className=\"mt-0.5 text-[11px] text-muted-foreground\">\n {markedCount} {markedCount !== 1 ? 'teeth' : 'tooth'} marked\n </p>\n )}\n </div>\n </div>\n\n {markedCount === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n No dental findings recorded\n </div>\n ) : (\n <>\n <div className=\"overflow-x-auto px-4 py-4\">\n <div className=\"flex justify-center\">\n <div className=\"flex flex-col items-center gap-0\">\n {/* Upper arch */}\n <div className=\"flex\">\n <div className=\"flex flex-col\">\n <span className=\"mb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">UR</span>\n <ReadOnlyArchRow teeth={QUADRANTS.upperRight} isUpper data={teeth} reverseOrder />\n </div>\n <div className=\"mx-2 h-[58px] w-px bg-border\" />\n <div className=\"flex flex-col\">\n <span className=\"mb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">UL</span>\n <ReadOnlyArchRow teeth={QUADRANTS.upperLeft} isUpper data={teeth} />\n </div>\n </div>\n\n <div className=\"my-2 flex w-full items-center gap-2\">\n <div className=\"h-px flex-1 bg-border\" />\n <span className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">Occlusal</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n\n {/* Lower arch */}\n <div className=\"flex\">\n <div className=\"flex flex-col\">\n <ReadOnlyArchRow teeth={QUADRANTS.lowerRight} isUpper={false} data={teeth} reverseOrder />\n <span className=\"mt-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">LR</span>\n </div>\n <div className=\"mx-2 h-[58px] w-px bg-border\" />\n <div className=\"flex flex-col\">\n <ReadOnlyArchRow teeth={QUADRANTS.lowerLeft} isUpper={false} data={teeth} />\n <span className=\"mt-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">LL</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {usedConditions.size > 0 && (\n <div className=\"border-t border-border/60 px-4 py-3\">\n <p className=\"mb-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">Legend</p>\n <ReadOnlyLegend usedConditions={usedConditions} />\n </div>\n )}\n\n {toothNotes.length > 0 && (\n <div className=\"border-t border-border/60 px-4 py-3\">\n <p className=\"mb-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">Tooth Notes</p>\n <div className=\"space-y-1.5\">\n {toothNotes.map(({ id, label, notes }) => (\n <div key={id} className=\"flex gap-2 text-xs\">\n <span className=\"shrink-0 font-medium text-foreground\">{id}</span>\n <span className=\"text-muted-foreground\">{label}:</span>\n <span className=\"text-foreground\">{notes}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n\n// ─── Read-only helpers ────────────────────────────────────────────────────────\n\nfunction ReadOnlyTooth({\n id,\n entry,\n isUpper,\n}: {\n id: number;\n entry: ToothEntry | undefined;\n isUpper: boolean;\n}) {\n const conditions = entry?.conditions ?? [];\n const isMissing = conditions.includes('missing');\n const primary = isMissing ? 'missing' : (conditions[0] ?? null);\n const primaryColor = primary ? CONDITION_CONFIG[primary as ToothCondition].color : null;\n const multiCount = conditions.length > 1 ? conditions.length : null;\n\n const tooltipParts = [\n `Tooth ${id}: ${toothLabel(id)}`,\n conditions.length > 0\n ? conditions.map((c) => CONDITION_CONFIG[c as ToothCondition]?.label ?? c).join(', ')\n : 'Healthy',\n entry?.notes ? `Notes: ${entry.notes}` : null,\n ].filter(Boolean);\n\n const boxStyle: React.CSSProperties = {\n position: 'relative',\n width: 46,\n height: 58,\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n borderRadius: 6,\n border: '1px solid',\n borderColor: !isMissing && primaryColor ? primaryColor : isMissing ? '#d1d5db' : '#e5e7eb',\n backgroundColor: isMissing ? '#f3f4f6' : '#ffffff',\n userSelect: 'none',\n };\n\n const numberStyle: React.CSSProperties = {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 11,\n fontWeight: 700,\n color: isMissing ? '#9ca3af' : '#374151',\n lineHeight: 1,\n };\n\n const stripStyle = (rounded: 'top' | 'bottom'): React.CSSProperties => ({\n height: 10,\n flexShrink: 0,\n borderRadius: rounded === 'bottom' ? '0 0 5px 5px' : '5px 5px 0 0',\n backgroundColor: !isMissing && primaryColor ? primaryColor : 'transparent',\n });\n\n return (\n <div title={tooltipParts.join('\\n')} style={boxStyle}>\n {isUpper ? (\n <>\n <div style={numberStyle}>{isMissing ? '✕' : id}</div>\n <div style={stripStyle('bottom')} />\n </>\n ) : (\n <>\n <div style={stripStyle('top')} />\n <div style={numberStyle}>{isMissing ? '✕' : id}</div>\n </>\n )}\n\n {/* Multi-condition badge */}\n {multiCount && (\n <span className=\"absolute -top-1.5 -right-1.5 z-10 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-primary text-[7px] font-bold text-primary-foreground\">\n {multiCount}\n </span>\n )}\n </div>\n );\n}\n\nfunction ReadOnlyArchRow({\n teeth: toothIds,\n isUpper,\n data,\n reverseOrder = false,\n}: {\n teeth: readonly number[];\n isUpper: boolean;\n data: DentalChartData['teeth'];\n reverseOrder?: boolean;\n}) {\n const ordered = reverseOrder ? [...toothIds].reverse() : toothIds;\n return (\n <div className=\"flex gap-1\">\n {ordered.map((id) => (\n <div key={id} className=\"flex flex-col items-center gap-0.5\">\n {isUpper && <ToothDiagram id={id} entry={data[String(id)]} />}\n <ReadOnlyTooth id={id} entry={data[String(id)]} isUpper={isUpper} />\n {!isUpper && <ToothDiagram id={id} entry={data[String(id)]} />}\n </div>\n ))}\n </div>\n );\n}\n\nfunction ReadOnlyLegend({ usedConditions }: { usedConditions: Set<string> }) {\n const active = ALL_CONDITIONS.filter((c) => usedConditions.has(c));\n if (active.length === 0) return null;\n return (\n <div className=\"flex flex-wrap gap-x-4 gap-y-1.5\">\n {active.map((c) => {\n const cfg = CONDITION_CONFIG[c];\n return (\n <div key={c} className=\"flex items-center gap-1.5\">\n <span className=\"h-2.5 w-2.5 shrink-0 rounded-full\" style={{ backgroundColor: cfg.color }} />\n <span className=\"text-[10px] text-muted-foreground\">{cfg.label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { cn } from './chunk-VPU66PI6.mjs';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var Popover = PopoverPrimitive.Root;
|
|
7
|
+
var PopoverTrigger = PopoverPrimitive.Trigger;
|
|
8
|
+
var PopoverContent = React.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
9
|
+
PopoverPrimitive.Content,
|
|
10
|
+
{
|
|
11
|
+
ref,
|
|
12
|
+
align,
|
|
13
|
+
sideOffset,
|
|
14
|
+
className: cn(
|
|
15
|
+
"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",
|
|
16
|
+
className
|
|
17
|
+
),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
) }));
|
|
21
|
+
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
22
|
+
|
|
23
|
+
export { Popover, PopoverContent, PopoverTrigger };
|
|
24
|
+
//# sourceMappingURL=chunk-ZZX3IG2T.mjs.map
|
|
25
|
+
//# sourceMappingURL=chunk-ZZX3IG2T.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/shadcn/popover.tsx"],"names":[],"mappings":";;;;;AAKA,IAAM,OAAA,GAA2B,gBAAA,CAAA;AAEjC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AAExC,IAAM,cAAA,GAAuB,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,WAAW,KAAA,GAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC5D,GAAA,CAAkB,yBAAjB,EACC,QAAA,kBAAA,GAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,4aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,cAAA,CAAe,cAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA","file":"chunk-ZZX3IG2T.mjs","sourcesContent":["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"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkSQ2KNAUD_cjs = require('./chunk-SQ2KNAUD.cjs');
|
|
4
|
+
var chunkBBD3Y37O_cjs = require('./chunk-BBD3Y37O.cjs');
|
|
5
|
+
var chunkX4AJCTON_cjs = require('./chunk-X4AJCTON.cjs');
|
|
6
|
+
var chunkTCQQUJCL_cjs = require('./chunk-TCQQUJCL.cjs');
|
|
4
7
|
var chunkKJA5BLGX_cjs = require('./chunk-KJA5BLGX.cjs');
|
|
5
8
|
var chunkQKJ7BQSR_cjs = require('./chunk-QKJ7BQSR.cjs');
|
|
6
9
|
var chunkPZBJYPWW_cjs = require('./chunk-PZBJYPWW.cjs');
|
|
@@ -18,6 +21,7 @@ var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
|
|
|
18
21
|
var chunk7DISRJAB_cjs = require('./chunk-7DISRJAB.cjs');
|
|
19
22
|
var chunkKMJOTMUQ_cjs = require('./chunk-KMJOTMUQ.cjs');
|
|
20
23
|
var chunkTJHG5WHX_cjs = require('./chunk-TJHG5WHX.cjs');
|
|
24
|
+
require('./chunk-RILRMRXB.cjs');
|
|
21
25
|
require('./chunk-4KSZUIJE.cjs');
|
|
22
26
|
var chunkO3VQBPEW_cjs = require('./chunk-O3VQBPEW.cjs');
|
|
23
27
|
var chunkTB33A4PD_cjs = require('./chunk-TB33A4PD.cjs');
|
|
@@ -63,6 +67,7 @@ var CampBookingPersistenceProvider = class {
|
|
|
63
67
|
baseUrl,
|
|
64
68
|
authToken,
|
|
65
69
|
patientId,
|
|
70
|
+
entitlementId,
|
|
66
71
|
campDateFieldId = "camp_date",
|
|
67
72
|
slotFieldId = "camp_time_slot",
|
|
68
73
|
bookingFormDataFields
|
|
@@ -89,7 +94,8 @@ var CampBookingPersistenceProvider = class {
|
|
|
89
94
|
primary_slot_id: primarySlotId,
|
|
90
95
|
patient_id: patientId,
|
|
91
96
|
booking_form_data: bookingFormData,
|
|
92
|
-
idempotency_key: idempotencyKey
|
|
97
|
+
idempotency_key: idempotencyKey,
|
|
98
|
+
...entitlementId != null ? { entitlement_id: entitlementId } : {}
|
|
93
99
|
};
|
|
94
100
|
const headers = { "Content-Type": "application/json" };
|
|
95
101
|
if (authToken) headers["Authorization"] = `Bearer ${authToken}`;
|
|
@@ -2178,47 +2184,13 @@ var CampTimeSlotsWidget = ({ fieldId }) => {
|
|
|
2178
2184
|
showError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldErrorClass(fieldDef, "text-xs text-red-500"), children: error }) : null
|
|
2179
2185
|
] });
|
|
2180
2186
|
};
|
|
2181
|
-
var Switch = React6__namespace.forwardRef(
|
|
2182
|
-
({ className, checked, onCheckedChange, disabled, ...props }, ref) => {
|
|
2183
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2184
|
-
"button",
|
|
2185
|
-
{
|
|
2186
|
-
type: "button",
|
|
2187
|
-
role: "switch",
|
|
2188
|
-
"aria-checked": checked,
|
|
2189
|
-
"data-state": checked ? "checked" : "unchecked",
|
|
2190
|
-
disabled,
|
|
2191
|
-
ref,
|
|
2192
|
-
onClick: () => {
|
|
2193
|
-
if (!disabled && onCheckedChange) {
|
|
2194
|
-
onCheckedChange(!checked);
|
|
2195
|
-
}
|
|
2196
|
-
},
|
|
2197
|
-
className: chunkFHHISVCH_cjs.cn(
|
|
2198
|
-
"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
|
|
2199
|
-
className
|
|
2200
|
-
),
|
|
2201
|
-
...props,
|
|
2202
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2203
|
-
"span",
|
|
2204
|
-
{
|
|
2205
|
-
"data-state": checked ? "checked" : "unchecked",
|
|
2206
|
-
className: "pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform",
|
|
2207
|
-
style: { transform: checked ? "translateX(1rem)" : "translateX(0)" }
|
|
2208
|
-
}
|
|
2209
|
-
)
|
|
2210
|
-
}
|
|
2211
|
-
);
|
|
2212
|
-
}
|
|
2213
|
-
);
|
|
2214
|
-
Switch.displayName = "Switch";
|
|
2215
2187
|
function lazyNamed(loader, name) {
|
|
2216
2188
|
return React6__namespace.default.lazy(async () => ({ default: (await loader())[name] }));
|
|
2217
2189
|
}
|
|
2218
2190
|
var RichTextWidget = lazyNamed(() => import('./RichTextWidget-2KLV65QP.cjs'), "RichTextWidget");
|
|
2219
|
-
var DateWidget = lazyNamed(() => import('./DateWidget-
|
|
2220
|
-
var DateTimeWidget = lazyNamed(() => import('./DateTimeWidget-
|
|
2221
|
-
var EditableTableWidget = lazyNamed(() => import('./EditableTable-
|
|
2191
|
+
var DateWidget = lazyNamed(() => import('./DateWidget-T7IQUWEA.cjs'), "DateWidget");
|
|
2192
|
+
var DateTimeWidget = lazyNamed(() => import('./DateTimeWidget-RJ7SATVA.cjs'), "DateTimeWidget");
|
|
2193
|
+
var EditableTableWidget = lazyNamed(() => import('./EditableTable-OW5LC6OC.cjs'), "EditableTableWidget");
|
|
2222
2194
|
var AddMedicationWidget = lazyNamed(() => import('./AddMedicationWidget-45T4XVEL.cjs'), "AddMedicationWidget");
|
|
2223
2195
|
var DischargeMedicationOrdersWidget = lazyNamed(() => import('./DischargeMedicationOrdersWidget-WRJRYL6F.cjs'), "DischargeMedicationOrdersWidget");
|
|
2224
2196
|
var AddInvestigationWidget = lazyNamed(() => import('./AddInvestigationWidget-7FLINCTT.cjs'), "AddInvestigationWidget");
|
|
@@ -2227,15 +2199,15 @@ var DifferentialDiagnosisWidget = lazyNamed(() => import('./DifferentialDiagnosi
|
|
|
2227
2199
|
var VitalsWidget = lazyNamed(() => import('./VitalsWidget-MS3OOZSW.cjs'), "VitalsWidget");
|
|
2228
2200
|
var HiddenVitalsWidget = lazyNamed(() => import('./HiddenVitalsWidget-5GFBDDPT.cjs'), "HiddenVitalsWidget");
|
|
2229
2201
|
var ReferralWidget = lazyNamed(() => import('./ReferralWidget-27VGZCOQ.cjs'), "ReferralWidget");
|
|
2230
|
-
var FollowupWidget = lazyNamed(() => import('./FollowupWidget-
|
|
2202
|
+
var FollowupWidget = lazyNamed(() => import('./FollowupWidget-2STSJSDY.cjs'), "FollowupWidget");
|
|
2231
2203
|
var SmartTextareaWidget = lazyNamed(() => import('./SmartTextarea-WITNRNDU.cjs'), "SmartTextareaWidget");
|
|
2232
2204
|
var DiagnosisTextareaWidget = lazyNamed(() => import('./DiagnosisTextareaWidget-XJ47OZYH.cjs'), "DiagnosisTextareaWidget");
|
|
2233
|
-
var ObstetricHistoryWidget = lazyNamed(() => import('./ObstetricHistoryWidget-
|
|
2205
|
+
var ObstetricHistoryWidget = lazyNamed(() => import('./ObstetricHistoryWidget-OOWCVFRB.cjs'), "ObstetricHistoryWidget");
|
|
2234
2206
|
var OphthalmologyWidget = lazyNamed(() => import('./OphthalmologyWidget-WFSFIHT4.cjs'), "OphthalmologyWidget");
|
|
2235
2207
|
var OphthalDiagnosisWidget = lazyNamed(() => import('./OphthalDiagnosisWidget-UXXYGKD5.cjs'), "OphthalDiagnosisWidget");
|
|
2236
2208
|
var OrthopedicExamWidget = lazyNamed(() => import('./OrthopedicExamWidget-ULZTDFXJ.cjs'), "OrthopedicExamWidget");
|
|
2237
2209
|
var MarMedicationOrdersWidget = lazyNamed(() => import('./MarMedicationOrdersWidget-767F65K6.cjs'), "MarMedicationOrdersWidget");
|
|
2238
|
-
var SuggestionTextareaWidget = lazyNamed(() => import('./SuggestionTextareaWidget-
|
|
2210
|
+
var SuggestionTextareaWidget = lazyNamed(() => import('./SuggestionTextareaWidget-FWRZ46MV.cjs'), "SuggestionTextareaWidget");
|
|
2239
2211
|
var LensAssessmentWidget = lazyNamed(() => import('./LensAssessmentWidget-SIKJVVAE.cjs'), "LensAssessmentWidget");
|
|
2240
2212
|
var FunctionalImpairmentScoreWidget = lazyNamed(() => import('./FunctionalImpairmentScoreWidget-FCA4UKQA.cjs'), "FunctionalImpairmentScoreWidget");
|
|
2241
2213
|
var BiometryIolWorkupWidget = lazyNamed(() => import('./BiometryIolWorkupWidget-FWO3IWTF.cjs'), "BiometryIolWorkupWidget");
|
|
@@ -2248,7 +2220,12 @@ var UrologySmartHistoryWidget = lazyNamed(() => import('./UrologySmartHistoryWid
|
|
|
2248
2220
|
var UrologyExaminationWidget = lazyNamed(() => import('./UrologyExaminationWidget-GQLMV4FB.cjs'), "UrologyExaminationWidget");
|
|
2249
2221
|
var UrologyPathwayWidget = lazyNamed(() => import('./UrologyPathwayWidget-D6EWSOGW.cjs'), "UrologyPathwayWidget");
|
|
2250
2222
|
var OBGExaminationWidget = lazyNamed(() => import('./OBGExaminationWidget-MRTGWLXJ.cjs'), "OBGExaminationWidget");
|
|
2251
|
-
var OBGPathwayWidget = lazyNamed(() => import('./OBGPathwayWidget-
|
|
2223
|
+
var OBGPathwayWidget = lazyNamed(() => import('./OBGPathwayWidget-YRU36UL7.cjs'), "OBGPathwayWidget");
|
|
2224
|
+
var DentalChartWidget = lazyNamed(() => import('./DentalChartWidget-LYLOFWZU.cjs'), "DentalChartWidget");
|
|
2225
|
+
var TreatmentPlanWidget = lazyNamed(() => import('./TreatmentPlanWidget-TATWSPLY.cjs'), "TreatmentPlanWidget");
|
|
2226
|
+
var PregnancyStatusWidget = lazyNamed(() => import('./PregnancyStatusWidget-QTTVFBOE.cjs'), "PregnancyStatusWidget");
|
|
2227
|
+
var BpeChartWidget = lazyNamed(() => import('./BpeChartWidget-VZRH7M7L.cjs'), "BpeChartWidget");
|
|
2228
|
+
var ExtraOralExamWidget = lazyNamed(() => import('./ExtraOralExamWidget-ZIOSKMIO.cjs'), "ExtraOralExamWidget");
|
|
2252
2229
|
function lazyWidget(node) {
|
|
2253
2230
|
return /* @__PURE__ */ jsxRuntime.jsx(React6__namespace.default.Suspense, { fallback: null, children: node });
|
|
2254
2231
|
}
|
|
@@ -2263,14 +2240,14 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2263
2240
|
switch (fieldDef.type) {
|
|
2264
2241
|
case "text":
|
|
2265
2242
|
case "number":
|
|
2266
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2243
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTCQQUJCL_cjs.TextWidget, { fieldId });
|
|
2267
2244
|
case "slider":
|
|
2268
2245
|
return /* @__PURE__ */ jsxRuntime.jsx(SliderWidget, { fieldId });
|
|
2269
2246
|
case "textarea":
|
|
2270
2247
|
if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {
|
|
2271
2248
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(MarMedicationOrdersWidget, { fieldId }));
|
|
2272
2249
|
}
|
|
2273
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2250
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTCQQUJCL_cjs.TextWidget, { fieldId });
|
|
2274
2251
|
case "richtext":
|
|
2275
2252
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(RichTextWidget, { fieldId }));
|
|
2276
2253
|
case "date":
|
|
@@ -2278,7 +2255,7 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2278
2255
|
case "datetime":
|
|
2279
2256
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(DateTimeWidget, { fieldId }));
|
|
2280
2257
|
case "select":
|
|
2281
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2258
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTCQQUJCL_cjs.SelectWidget, { fieldId });
|
|
2282
2259
|
case "radio":
|
|
2283
2260
|
return /* @__PURE__ */ jsxRuntime.jsx(RadioWidget, { fieldId });
|
|
2284
2261
|
case "checkbox":
|
|
@@ -2345,6 +2322,18 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2345
2322
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(OBGExaminationWidget, { fieldId }));
|
|
2346
2323
|
case "obg_pathway":
|
|
2347
2324
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(OBGPathwayWidget, { fieldId }));
|
|
2325
|
+
case "dental_chart":
|
|
2326
|
+
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(DentalChartWidget, { fieldId }));
|
|
2327
|
+
case "bpe_chart":
|
|
2328
|
+
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(BpeChartWidget, { fieldId }));
|
|
2329
|
+
case "extra_oral_exam":
|
|
2330
|
+
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(ExtraOralExamWidget, { fieldId }));
|
|
2331
|
+
case "social_history":
|
|
2332
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTCQQUJCL_cjs.TextWidget, { fieldId });
|
|
2333
|
+
case "treatment_plan":
|
|
2334
|
+
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(TreatmentPlanWidget, { fieldId }));
|
|
2335
|
+
case "pregnancy_status":
|
|
2336
|
+
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(PregnancyStatusWidget, { fieldId }));
|
|
2348
2337
|
case "phone_input":
|
|
2349
2338
|
return /* @__PURE__ */ jsxRuntime.jsx(PhoneInputWidget, { fieldId });
|
|
2350
2339
|
case "otp_input":
|
|
@@ -2360,7 +2349,7 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2360
2349
|
const showLabel = chunk5E3APMY6_cjs.isLabelVisible(fieldDef);
|
|
2361
2350
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5E3APMY6_cjs.fieldWrapperClass(fieldDef, "flex items-center gap-3"), children: [
|
|
2362
2351
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2363
|
-
Switch,
|
|
2352
|
+
chunkSQ2KNAUD_cjs.Switch,
|
|
2364
2353
|
{
|
|
2365
2354
|
checked: value === true,
|
|
2366
2355
|
disabled,
|
|
@@ -3631,6 +3620,45 @@ var ReadOnlyFieldRenderer = ({
|
|
|
3631
3620
|
] }) : null
|
|
3632
3621
|
] });
|
|
3633
3622
|
}
|
|
3623
|
+
case "bpe_chart":
|
|
3624
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3625
|
+
chunkBBD3Y37O_cjs.BpeChartReadOnly,
|
|
3626
|
+
{
|
|
3627
|
+
data: value && typeof value === "object" && !Array.isArray(value) ? value : {},
|
|
3628
|
+
label: fieldDef.label
|
|
3629
|
+
}
|
|
3630
|
+
);
|
|
3631
|
+
case "social_history":
|
|
3632
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ReadOnlyText, { fieldDef, value });
|
|
3633
|
+
case "treatment_plan": {
|
|
3634
|
+
const items = Array.isArray(value) ? value.filter((v) => typeof v === "string") : typeof value === "string" && value ? [value] : [];
|
|
3635
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3636
|
+
ReadOnlyText,
|
|
3637
|
+
{
|
|
3638
|
+
fieldDef,
|
|
3639
|
+
value: items.length > 0 ? items.join(", ") : "\u2014"
|
|
3640
|
+
}
|
|
3641
|
+
);
|
|
3642
|
+
}
|
|
3643
|
+
case "pregnancy_status": {
|
|
3644
|
+
const ps = value && typeof value === "object" && !Array.isArray(value) ? value : { is_pregnant: false, is_breastfeeding: false };
|
|
3645
|
+
const parts = [];
|
|
3646
|
+
if (ps.is_pregnant) parts.push("Pregnant");
|
|
3647
|
+
if (ps.is_breastfeeding) parts.push("Breastfeeding");
|
|
3648
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3649
|
+
ReadOnlyText,
|
|
3650
|
+
{
|
|
3651
|
+
fieldDef,
|
|
3652
|
+
value: parts.length > 0 ? parts.join(", ") : "No"
|
|
3653
|
+
}
|
|
3654
|
+
);
|
|
3655
|
+
}
|
|
3656
|
+
case "dental_chart": {
|
|
3657
|
+
const safe = chunkX4AJCTON_cjs.normalizeDentalChart(value);
|
|
3658
|
+
const hasFindings = Object.keys(safe.teeth).length > 0;
|
|
3659
|
+
if (!hasFindings) return /* @__PURE__ */ jsxRuntime.jsx(ReadOnlyText, { fieldDef, value: "No dental findings recorded" });
|
|
3660
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkX4AJCTON_cjs.DentalChartReadOnly, { data: safe });
|
|
3661
|
+
}
|
|
3634
3662
|
case "static_text": {
|
|
3635
3663
|
const def = fieldDef;
|
|
3636
3664
|
const size = def.size ?? "regular";
|
|
@@ -3911,6 +3939,38 @@ function createUploadHandler(options) {
|
|
|
3911
3939
|
);
|
|
3912
3940
|
}
|
|
3913
3941
|
|
|
3942
|
+
Object.defineProperty(exports, "BPE_SCORES", {
|
|
3943
|
+
enumerable: true,
|
|
3944
|
+
get: function () { return chunkBBD3Y37O_cjs.BPE_SCORES; }
|
|
3945
|
+
});
|
|
3946
|
+
Object.defineProperty(exports, "BpeChartReadOnly", {
|
|
3947
|
+
enumerable: true,
|
|
3948
|
+
get: function () { return chunkBBD3Y37O_cjs.BpeChartReadOnly; }
|
|
3949
|
+
});
|
|
3950
|
+
Object.defineProperty(exports, "SEXTANTS", {
|
|
3951
|
+
enumerable: true,
|
|
3952
|
+
get: function () { return chunkBBD3Y37O_cjs.SEXTANTS; }
|
|
3953
|
+
});
|
|
3954
|
+
Object.defineProperty(exports, "DENTAL_CONDITION_CONFIG", {
|
|
3955
|
+
enumerable: true,
|
|
3956
|
+
get: function () { return chunkX4AJCTON_cjs.CONDITION_CONFIG; }
|
|
3957
|
+
});
|
|
3958
|
+
Object.defineProperty(exports, "DENTAL_QUADRANTS", {
|
|
3959
|
+
enumerable: true,
|
|
3960
|
+
get: function () { return chunkX4AJCTON_cjs.QUADRANTS; }
|
|
3961
|
+
});
|
|
3962
|
+
Object.defineProperty(exports, "DentalChartReadOnly", {
|
|
3963
|
+
enumerable: true,
|
|
3964
|
+
get: function () { return chunkX4AJCTON_cjs.DentalChartReadOnly; }
|
|
3965
|
+
});
|
|
3966
|
+
Object.defineProperty(exports, "normalizeDentalChart", {
|
|
3967
|
+
enumerable: true,
|
|
3968
|
+
get: function () { return chunkX4AJCTON_cjs.normalizeDentalChart; }
|
|
3969
|
+
});
|
|
3970
|
+
Object.defineProperty(exports, "toothLabel", {
|
|
3971
|
+
enumerable: true,
|
|
3972
|
+
get: function () { return chunkX4AJCTON_cjs.toothLabel; }
|
|
3973
|
+
});
|
|
3914
3974
|
Object.defineProperty(exports, "AddMedicationField", {
|
|
3915
3975
|
enumerable: true,
|
|
3916
3976
|
get: function () { return chunkAIZ3XYEZ_cjs.AddMedicationField; }
|