formanitor 0.2.3 → 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 +104 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +67 -3
- package/dist/index.d.ts +67 -3
- package/dist/index.mjs +70 -42
- 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');
|
|
@@ -2180,47 +2184,13 @@ var CampTimeSlotsWidget = ({ fieldId }) => {
|
|
|
2180
2184
|
showError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldErrorClass(fieldDef, "text-xs text-red-500"), children: error }) : null
|
|
2181
2185
|
] });
|
|
2182
2186
|
};
|
|
2183
|
-
var Switch = React6__namespace.forwardRef(
|
|
2184
|
-
({ className, checked, onCheckedChange, disabled, ...props }, ref) => {
|
|
2185
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2186
|
-
"button",
|
|
2187
|
-
{
|
|
2188
|
-
type: "button",
|
|
2189
|
-
role: "switch",
|
|
2190
|
-
"aria-checked": checked,
|
|
2191
|
-
"data-state": checked ? "checked" : "unchecked",
|
|
2192
|
-
disabled,
|
|
2193
|
-
ref,
|
|
2194
|
-
onClick: () => {
|
|
2195
|
-
if (!disabled && onCheckedChange) {
|
|
2196
|
-
onCheckedChange(!checked);
|
|
2197
|
-
}
|
|
2198
|
-
},
|
|
2199
|
-
className: chunkFHHISVCH_cjs.cn(
|
|
2200
|
-
"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",
|
|
2201
|
-
className
|
|
2202
|
-
),
|
|
2203
|
-
...props,
|
|
2204
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2205
|
-
"span",
|
|
2206
|
-
{
|
|
2207
|
-
"data-state": checked ? "checked" : "unchecked",
|
|
2208
|
-
className: "pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform",
|
|
2209
|
-
style: { transform: checked ? "translateX(1rem)" : "translateX(0)" }
|
|
2210
|
-
}
|
|
2211
|
-
)
|
|
2212
|
-
}
|
|
2213
|
-
);
|
|
2214
|
-
}
|
|
2215
|
-
);
|
|
2216
|
-
Switch.displayName = "Switch";
|
|
2217
2187
|
function lazyNamed(loader, name) {
|
|
2218
2188
|
return React6__namespace.default.lazy(async () => ({ default: (await loader())[name] }));
|
|
2219
2189
|
}
|
|
2220
2190
|
var RichTextWidget = lazyNamed(() => import('./RichTextWidget-2KLV65QP.cjs'), "RichTextWidget");
|
|
2221
|
-
var DateWidget = lazyNamed(() => import('./DateWidget-
|
|
2222
|
-
var DateTimeWidget = lazyNamed(() => import('./DateTimeWidget-
|
|
2223
|
-
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");
|
|
2224
2194
|
var AddMedicationWidget = lazyNamed(() => import('./AddMedicationWidget-45T4XVEL.cjs'), "AddMedicationWidget");
|
|
2225
2195
|
var DischargeMedicationOrdersWidget = lazyNamed(() => import('./DischargeMedicationOrdersWidget-WRJRYL6F.cjs'), "DischargeMedicationOrdersWidget");
|
|
2226
2196
|
var AddInvestigationWidget = lazyNamed(() => import('./AddInvestigationWidget-7FLINCTT.cjs'), "AddInvestigationWidget");
|
|
@@ -2229,15 +2199,15 @@ var DifferentialDiagnosisWidget = lazyNamed(() => import('./DifferentialDiagnosi
|
|
|
2229
2199
|
var VitalsWidget = lazyNamed(() => import('./VitalsWidget-MS3OOZSW.cjs'), "VitalsWidget");
|
|
2230
2200
|
var HiddenVitalsWidget = lazyNamed(() => import('./HiddenVitalsWidget-5GFBDDPT.cjs'), "HiddenVitalsWidget");
|
|
2231
2201
|
var ReferralWidget = lazyNamed(() => import('./ReferralWidget-27VGZCOQ.cjs'), "ReferralWidget");
|
|
2232
|
-
var FollowupWidget = lazyNamed(() => import('./FollowupWidget-
|
|
2202
|
+
var FollowupWidget = lazyNamed(() => import('./FollowupWidget-2STSJSDY.cjs'), "FollowupWidget");
|
|
2233
2203
|
var SmartTextareaWidget = lazyNamed(() => import('./SmartTextarea-WITNRNDU.cjs'), "SmartTextareaWidget");
|
|
2234
2204
|
var DiagnosisTextareaWidget = lazyNamed(() => import('./DiagnosisTextareaWidget-XJ47OZYH.cjs'), "DiagnosisTextareaWidget");
|
|
2235
|
-
var ObstetricHistoryWidget = lazyNamed(() => import('./ObstetricHistoryWidget-
|
|
2205
|
+
var ObstetricHistoryWidget = lazyNamed(() => import('./ObstetricHistoryWidget-OOWCVFRB.cjs'), "ObstetricHistoryWidget");
|
|
2236
2206
|
var OphthalmologyWidget = lazyNamed(() => import('./OphthalmologyWidget-WFSFIHT4.cjs'), "OphthalmologyWidget");
|
|
2237
2207
|
var OphthalDiagnosisWidget = lazyNamed(() => import('./OphthalDiagnosisWidget-UXXYGKD5.cjs'), "OphthalDiagnosisWidget");
|
|
2238
2208
|
var OrthopedicExamWidget = lazyNamed(() => import('./OrthopedicExamWidget-ULZTDFXJ.cjs'), "OrthopedicExamWidget");
|
|
2239
2209
|
var MarMedicationOrdersWidget = lazyNamed(() => import('./MarMedicationOrdersWidget-767F65K6.cjs'), "MarMedicationOrdersWidget");
|
|
2240
|
-
var SuggestionTextareaWidget = lazyNamed(() => import('./SuggestionTextareaWidget-
|
|
2210
|
+
var SuggestionTextareaWidget = lazyNamed(() => import('./SuggestionTextareaWidget-FWRZ46MV.cjs'), "SuggestionTextareaWidget");
|
|
2241
2211
|
var LensAssessmentWidget = lazyNamed(() => import('./LensAssessmentWidget-SIKJVVAE.cjs'), "LensAssessmentWidget");
|
|
2242
2212
|
var FunctionalImpairmentScoreWidget = lazyNamed(() => import('./FunctionalImpairmentScoreWidget-FCA4UKQA.cjs'), "FunctionalImpairmentScoreWidget");
|
|
2243
2213
|
var BiometryIolWorkupWidget = lazyNamed(() => import('./BiometryIolWorkupWidget-FWO3IWTF.cjs'), "BiometryIolWorkupWidget");
|
|
@@ -2250,7 +2220,12 @@ var UrologySmartHistoryWidget = lazyNamed(() => import('./UrologySmartHistoryWid
|
|
|
2250
2220
|
var UrologyExaminationWidget = lazyNamed(() => import('./UrologyExaminationWidget-GQLMV4FB.cjs'), "UrologyExaminationWidget");
|
|
2251
2221
|
var UrologyPathwayWidget = lazyNamed(() => import('./UrologyPathwayWidget-D6EWSOGW.cjs'), "UrologyPathwayWidget");
|
|
2252
2222
|
var OBGExaminationWidget = lazyNamed(() => import('./OBGExaminationWidget-MRTGWLXJ.cjs'), "OBGExaminationWidget");
|
|
2253
|
-
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");
|
|
2254
2229
|
function lazyWidget(node) {
|
|
2255
2230
|
return /* @__PURE__ */ jsxRuntime.jsx(React6__namespace.default.Suspense, { fallback: null, children: node });
|
|
2256
2231
|
}
|
|
@@ -2265,14 +2240,14 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2265
2240
|
switch (fieldDef.type) {
|
|
2266
2241
|
case "text":
|
|
2267
2242
|
case "number":
|
|
2268
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2243
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTCQQUJCL_cjs.TextWidget, { fieldId });
|
|
2269
2244
|
case "slider":
|
|
2270
2245
|
return /* @__PURE__ */ jsxRuntime.jsx(SliderWidget, { fieldId });
|
|
2271
2246
|
case "textarea":
|
|
2272
2247
|
if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {
|
|
2273
2248
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(MarMedicationOrdersWidget, { fieldId }));
|
|
2274
2249
|
}
|
|
2275
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2250
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTCQQUJCL_cjs.TextWidget, { fieldId });
|
|
2276
2251
|
case "richtext":
|
|
2277
2252
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(RichTextWidget, { fieldId }));
|
|
2278
2253
|
case "date":
|
|
@@ -2280,7 +2255,7 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2280
2255
|
case "datetime":
|
|
2281
2256
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(DateTimeWidget, { fieldId }));
|
|
2282
2257
|
case "select":
|
|
2283
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2258
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTCQQUJCL_cjs.SelectWidget, { fieldId });
|
|
2284
2259
|
case "radio":
|
|
2285
2260
|
return /* @__PURE__ */ jsxRuntime.jsx(RadioWidget, { fieldId });
|
|
2286
2261
|
case "checkbox":
|
|
@@ -2347,6 +2322,18 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2347
2322
|
return lazyWidget(/* @__PURE__ */ jsxRuntime.jsx(OBGExaminationWidget, { fieldId }));
|
|
2348
2323
|
case "obg_pathway":
|
|
2349
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 }));
|
|
2350
2337
|
case "phone_input":
|
|
2351
2338
|
return /* @__PURE__ */ jsxRuntime.jsx(PhoneInputWidget, { fieldId });
|
|
2352
2339
|
case "otp_input":
|
|
@@ -2362,7 +2349,7 @@ function renderWidget(fieldId, fieldDef) {
|
|
|
2362
2349
|
const showLabel = chunk5E3APMY6_cjs.isLabelVisible(fieldDef);
|
|
2363
2350
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5E3APMY6_cjs.fieldWrapperClass(fieldDef, "flex items-center gap-3"), children: [
|
|
2364
2351
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2365
|
-
Switch,
|
|
2352
|
+
chunkSQ2KNAUD_cjs.Switch,
|
|
2366
2353
|
{
|
|
2367
2354
|
checked: value === true,
|
|
2368
2355
|
disabled,
|
|
@@ -3633,6 +3620,45 @@ var ReadOnlyFieldRenderer = ({
|
|
|
3633
3620
|
] }) : null
|
|
3634
3621
|
] });
|
|
3635
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
|
+
}
|
|
3636
3662
|
case "static_text": {
|
|
3637
3663
|
const def = fieldDef;
|
|
3638
3664
|
const size = def.size ?? "regular";
|
|
@@ -3913,6 +3939,38 @@ function createUploadHandler(options) {
|
|
|
3913
3939
|
);
|
|
3914
3940
|
}
|
|
3915
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
|
+
});
|
|
3916
3974
|
Object.defineProperty(exports, "AddMedicationField", {
|
|
3917
3975
|
enumerable: true,
|
|
3918
3976
|
get: function () { return chunkAIZ3XYEZ_cjs.AddMedicationField; }
|