@eka-care/medical-records-ui 1.0.34 → 1.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/{OriginalRecordPanel-AK5IPYPP.mjs → OriginalRecordPanel-GGRHXGWI.mjs} +4 -4
  2. package/dist/{OriginalRecordPanel-2PBQASS3.js → OriginalRecordPanel-IUZUPXY2.js} +19 -19
  3. package/dist/{OriginalRecordPanel-2PBQASS3.js.map → OriginalRecordPanel-IUZUPXY2.js.map} +1 -1
  4. package/dist/SmartUploadModal-DOEIOLQU.js +9 -0
  5. package/dist/{SmartUploadModal-M3WQRFO4.js.map → SmartUploadModal-DOEIOLQU.js.map} +1 -1
  6. package/dist/SmartUploadModal-SMDIOE3L.mjs +9 -0
  7. package/dist/VitalHistoryPanel-AQ6QVGCB.mjs +10 -0
  8. package/dist/VitalHistoryPanel-L4QTKZBC.js +10 -0
  9. package/dist/{VitalHistoryPanel-22QMSV5Q.js.map → VitalHistoryPanel-L4QTKZBC.js.map} +1 -1
  10. package/dist/{chunk-BIN5FHTM.mjs → chunk-32VKLNCO.mjs} +3 -3
  11. package/dist/{chunk-LH2G6KKA.mjs → chunk-3P36QOHC.mjs} +2 -2
  12. package/dist/{chunk-U3WP4DEG.mjs → chunk-4MEMDAB5.mjs} +2 -2
  13. package/dist/chunk-4MEMDAB5.mjs.map +1 -0
  14. package/dist/{chunk-UQNOD5EC.js → chunk-57BG7LVP.js} +2 -2
  15. package/dist/{chunk-UQNOD5EC.js.map → chunk-57BG7LVP.js.map} +1 -1
  16. package/dist/{chunk-YQFYORNE.js → chunk-ESURVA6B.js} +21 -21
  17. package/dist/{chunk-YQFYORNE.js.map → chunk-ESURVA6B.js.map} +1 -1
  18. package/dist/{chunk-V2S4XGEO.mjs → chunk-HNRF345J.mjs} +2 -2
  19. package/dist/{chunk-YHPGVJ7P.js → chunk-KWF6LUXK.js} +7 -7
  20. package/dist/{chunk-YHPGVJ7P.js.map → chunk-KWF6LUXK.js.map} +1 -1
  21. package/dist/{chunk-3NAIW2AJ.js → chunk-LYPWE42A.js} +16 -16
  22. package/dist/{chunk-3NAIW2AJ.js.map → chunk-LYPWE42A.js.map} +1 -1
  23. package/dist/{chunk-AQHSSUEC.mjs → chunk-SO5RWBVJ.mjs} +3 -3
  24. package/dist/{chunk-2ZBMMIHZ.js → chunk-TNTVD3TN.js} +4 -4
  25. package/dist/{chunk-2ZBMMIHZ.js.map → chunk-TNTVD3TN.js.map} +1 -1
  26. package/dist/index.js +93 -93
  27. package/dist/index.mjs +9 -9
  28. package/dist/widgets-DYR6LERQ.js +43 -0
  29. package/dist/{widgets-RRTL4XCO.js.map → widgets-DYR6LERQ.js.map} +1 -1
  30. package/dist/{widgets-2WXR34ER.mjs → widgets-KNUDQAKD.mjs} +2 -2
  31. package/package.json +1 -1
  32. package/dist/SmartUploadModal-LZT55L2J.mjs +0 -9
  33. package/dist/SmartUploadModal-M3WQRFO4.js +0 -9
  34. package/dist/VitalHistoryPanel-22QMSV5Q.js +0 -10
  35. package/dist/VitalHistoryPanel-J2TPULMP.mjs +0 -10
  36. package/dist/chunk-U3WP4DEG.mjs.map +0 -1
  37. package/dist/widgets-RRTL4XCO.js +0 -43
  38. /package/dist/{OriginalRecordPanel-AK5IPYPP.mjs.map → OriginalRecordPanel-GGRHXGWI.mjs.map} +0 -0
  39. /package/dist/{SmartUploadModal-LZT55L2J.mjs.map → SmartUploadModal-SMDIOE3L.mjs.map} +0 -0
  40. /package/dist/{VitalHistoryPanel-J2TPULMP.mjs.map → VitalHistoryPanel-AQ6QVGCB.mjs.map} +0 -0
  41. /package/dist/{chunk-BIN5FHTM.mjs.map → chunk-32VKLNCO.mjs.map} +0 -0
  42. /package/dist/{chunk-LH2G6KKA.mjs.map → chunk-3P36QOHC.mjs.map} +0 -0
  43. /package/dist/{chunk-V2S4XGEO.mjs.map → chunk-HNRF345J.mjs.map} +0 -0
  44. /package/dist/{chunk-AQHSSUEC.mjs.map → chunk-SO5RWBVJ.mjs.map} +0 -0
  45. /package/dist/{widgets-2WXR34ER.mjs.map → widgets-KNUDQAKD.mjs.map} +0 -0
@@ -2,17 +2,17 @@
2
2
  import {
3
3
  SmartSparkles_default,
4
4
  useRecordPanelTable
5
- } from "./chunk-BIN5FHTM.mjs";
5
+ } from "./chunk-32VKLNCO.mjs";
6
6
  import {
7
7
  useRecordPreview,
8
8
  useSmartRecordsActions
9
- } from "./chunk-V2S4XGEO.mjs";
9
+ } from "./chunk-HNRF345J.mjs";
10
10
  import {
11
11
  IconButton,
12
12
  Typography,
13
13
  epochToDisplay,
14
14
  useSdk
15
- } from "./chunk-U3WP4DEG.mjs";
15
+ } from "./chunk-4MEMDAB5.mjs";
16
16
 
17
17
  // src/views/components/shared/OriginalRecordPanel.tsx
18
18
  import { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -499,4 +499,4 @@ function OriginalRecordPanel({
499
499
  export {
500
500
  OriginalRecordPanel
501
501
  };
502
- //# sourceMappingURL=OriginalRecordPanel-AK5IPYPP.mjs.map
502
+ //# sourceMappingURL=OriginalRecordPanel-GGRHXGWI.mjs.map
@@ -2,17 +2,17 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkYHPGVJ7Pjs = require('./chunk-YHPGVJ7P.js');
5
+ var _chunkKWF6LUXKjs = require('./chunk-KWF6LUXK.js');
6
6
 
7
7
 
8
8
 
9
- var _chunk2ZBMMIHZjs = require('./chunk-2ZBMMIHZ.js');
9
+ var _chunkTNTVD3TNjs = require('./chunk-TNTVD3TN.js');
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
- var _chunkUQNOD5ECjs = require('./chunk-UQNOD5EC.js');
15
+ var _chunk57BG7LVPjs = require('./chunk-57BG7LVP.js');
16
16
 
17
17
  // src/views/components/shared/OriginalRecordPanel.tsx
18
18
  var _react = require('react');
@@ -36,12 +36,12 @@ function OriginalRecordPanel({
36
36
  caseId,
37
37
  onBack
38
38
  }) {
39
- const { store } = _chunkUQNOD5ECjs.useSdk.call(void 0, );
39
+ const { store } = _chunk57BG7LVPjs.useSdk.call(void 0, );
40
40
  const record = _zustand.useStore.call(void 0, store, (s) => s.records.byId[recordId]);
41
41
  const recordsById = _zustand.useStore.call(void 0, store, (s) => s.records.byId);
42
- const preview = _chunk2ZBMMIHZjs.useRecordPreview.call(void 0, recordId);
43
- const { openOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote } = _chunk2ZBMMIHZjs.useSmartRecordsActions.call(void 0, );
44
- const { status: vitalsStatus, table } = _chunkYHPGVJ7Pjs.useRecordPanelTable.call(void 0,
42
+ const preview = _chunkTNTVD3TNjs.useRecordPreview.call(void 0, recordId);
43
+ const { openOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote } = _chunkTNTVD3TNjs.useSmartRecordsActions.call(void 0, );
44
+ const { status: vitalsStatus, table } = _chunkKWF6LUXKjs.useRecordPanelTable.call(void 0,
45
45
  _optionalChain([record, 'optionalAccess', _3 => _3.isSmart]) ? recordId : null
46
46
  );
47
47
  const [smartPanelOpen, setSmartPanelOpen] = _react.useState.call(void 0, true);
@@ -135,7 +135,7 @@ function OriginalRecordPanel({
135
135
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel", children: [
136
136
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel-header", children: [
137
137
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
138
- _chunkUQNOD5ECjs.IconButton,
138
+ _chunk57BG7LVPjs.IconButton,
139
139
  {
140
140
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft, { size: 16, "aria-hidden": true }),
141
141
  label: "Back",
@@ -215,7 +215,7 @@ function OriginalRecordPanel({
215
215
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-icon", children: [
216
216
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.File, { size: 16, "aria-hidden": true }),
217
217
  r.isSmart && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
218
- _chunkYHPGVJ7Pjs.SmartSparkles_default,
218
+ _chunkKWF6LUXKjs.SmartSparkles_default,
219
219
  {
220
220
  className: "mr-orig__dropdown-smart-dot",
221
221
  "aria-label": "Smart report"
@@ -226,12 +226,12 @@ function OriginalRecordPanel({
226
226
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-title-row", children: [
227
227
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__dropdown-title", children: r.title }),
228
228
  r.isSmart && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-orig__dropdown-smart-badge", children: [
229
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYHPGVJ7Pjs.SmartSparkles_default, { "aria-hidden": true }),
229
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKWF6LUXKjs.SmartSparkles_default, { "aria-hidden": true }),
230
230
  "Smart Report"
231
231
  ] })
232
232
  ] }),
233
233
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-meta", children: [
234
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunkUQNOD5ECjs.epochToDisplay.call(void 0, r.createdAtEpoch) }),
234
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunk57BG7LVPjs.epochToDisplay.call(void 0, r.createdAtEpoch) }),
235
235
  r.isSmart && r.totalVitals > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
236
236
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__dropdown-dot", children: "\xB7" }),
237
237
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
@@ -263,8 +263,8 @@ function OriginalRecordPanel({
263
263
  }) })
264
264
  ] })
265
265
  ] }) : record ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel-info", children: [
266
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUQNOD5ECjs.Typography, { variant: "label", as: "span", className: "mr-sv__panel-name", children: record.title }),
267
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUQNOD5ECjs.Typography, { variant: "hint", as: "span", className: "mr-sv__panel-meta-text", children: _chunkUQNOD5ECjs.epochToDisplay.call(void 0, record.createdAtEpoch) })
266
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "label", as: "span", className: "mr-sv__panel-name", children: record.title }),
267
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "hint", as: "span", className: "mr-sv__panel-meta-text", children: _chunk57BG7LVPjs.epochToDisplay.call(void 0, record.createdAtEpoch) })
268
268
  ] }) : null,
269
269
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__header-actions", children: [
270
270
  isSmart && !smartPanelOpen && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -274,13 +274,13 @@ function OriginalRecordPanel({
274
274
  className: "mr-orig__show-smart-btn",
275
275
  onClick: () => setSmartPanelOpen(true),
276
276
  children: [
277
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYHPGVJ7Pjs.SmartSparkles_default, { "aria-hidden": true }),
277
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKWF6LUXKjs.SmartSparkles_default, { "aria-hidden": true }),
278
278
  "Smart Report"
279
279
  ]
280
280
  }
281
281
  ),
282
282
  hasPreview && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
283
- _chunkUQNOD5ECjs.IconButton,
283
+ _chunk57BG7LVPjs.IconButton,
284
284
  {
285
285
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { size: 16, "aria-hidden": true }),
286
286
  label: "Open in new tab",
@@ -309,8 +309,8 @@ function OriginalRecordPanel({
309
309
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { size: 44, className: "mr-sv__loading-spinner", "aria-hidden": true })
310
310
  }
311
311
  ),
312
- preview.status === "error" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUQNOD5ECjs.Typography, { variant: "muted", className: "mr-sv__panel-empty", children: "Failed to load document preview." }),
313
- preview.status === "loaded" && preview.files.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUQNOD5ECjs.Typography, { variant: "muted", className: "mr-sv__panel-empty", children: "No preview available for this record." }),
312
+ preview.status === "error" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "muted", className: "mr-sv__panel-empty", children: "Failed to load document preview." }),
313
+ preview.status === "loaded" && preview.files.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "muted", className: "mr-sv__panel-empty", children: "No preview available for this record." }),
314
314
  hasPreview && !isSmart && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
315
315
  "div",
316
316
  {
@@ -390,7 +390,7 @@ function OriginalRecordPanel({
390
390
  "aria-hidden": true
391
391
  }
392
392
  ) }),
393
- vitalsStatus === "loaded" && filteredRows.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUQNOD5ECjs.Typography, { variant: "muted", className: "mr-orig__smart-empty", children: "No vitals match." }),
393
+ vitalsStatus === "loaded" && filteredRows.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "muted", className: "mr-orig__smart-empty", children: "No vitals match." }),
394
394
  vitalsStatus === "loaded" && filteredRows.map((row, idx) => {
395
395
  const cell = row.cells[0];
396
396
  const isOor = row.latestStatus === "high" || row.latestStatus === "low";
@@ -499,4 +499,4 @@ function OriginalRecordPanel({
499
499
 
500
500
 
501
501
  exports.OriginalRecordPanel = OriginalRecordPanel;
502
- //# sourceMappingURL=OriginalRecordPanel-2PBQASS3.js.map
502
+ //# sourceMappingURL=OriginalRecordPanel-IUZUPXY2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/OriginalRecordPanel-2PBQASS3.js","../src/views/components/shared/OriginalRecordPanel.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/medical-records-ui/medical-records-ui/dist/OriginalRecordPanel-2PBQASS3.js","sourcesContent":[null,"\"use client\";\n\nimport { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, ExternalLink, Check, File, LoaderCircle, Search } from \"lucide-react\";\nimport { useStore } from \"zustand\";\nimport { useSdk } from \"../../../connection/useSdk\";\nimport { useRecordPreview } from \"../../../connection/useRecordPreview\";\nimport { useRecordPanelTable } from \"../../hooks/care-panel/useRecordPanelTable\";\nimport { epochToDisplay } from \"../../../helpers/formatters\";\nimport { useSmartRecordsActions } from \"../../context/SmartRecordsActionsContext\";\nimport { IconButton, Typography } from \"widgets\";\nimport type { RecordItem } from \"../../../helpers\";\nimport type { PanelRow } from \"../../../helpers/vitalsPanel\";\nimport SmartSparkles from \"icons/SmartSparkles\";\n\nconst DocumentViewer = lazy(() =>\n import(\"../../RecordPreview/DocumentViewer\").then((m) => ({\n default: m.DocumentViewer,\n })),\n);\n\ninterface OriginalRecordPanelProps {\n recordId: string;\n caseId?: string;\n onBack: () => void;\n}\n\ntype SrTab = \"all\" | \"oor\" | \"none\";\n\nfunction buildVitalsText(rows: PanelRow[]): string {\n return rows\n .map((r) => {\n const cell = r.cells[0];\n const ref = cell?.refRange ? ` (Ref: ${cell.refRange})` : \"\";\n return `${r.name}: ${cell?.value ?? \"—\"} ${r.unit}${ref}`;\n })\n .join(\"\\n\");\n}\n\nexport function OriginalRecordPanel({\n recordId,\n caseId,\n onBack,\n}: OriginalRecordPanelProps) {\n const { store } = useSdk();\n const record = useStore(store, (s) => s.records.byId[recordId]);\n const recordsById = useStore(store, (s) => s.records.byId);\n const preview = useRecordPreview(recordId);\n const { openOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote } =\n useSmartRecordsActions();\n\n // Smart report vitals (only fetched when record.isSmart)\n const { status: vitalsStatus, table } = useRecordPanelTable(\n record?.isSmart ? recordId : null,\n );\n const [smartPanelOpen, setSmartPanelOpen] = useState(true);\n const [srSearch, setSrSearch] = useState(\"\");\n const [srTab, setSrTab] = useState<SrTab>(\"all\");\n const [srSelected, setSrSelected] = useState<Set<string>>(new Set());\n const srCopyBtnRef = useRef<HTMLButtonElement>(null);\n\n // Dropdown state\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!dropdownOpen) return;\n const handler = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [dropdownOpen]);\n\n const caseRecords = useMemo<RecordItem[]>(() => {\n if (!caseId) return [];\n return Object.values(recordsById)\n .filter((r): r is RecordItem => r != null && r.cases.includes(caseId))\n .sort((a, b) => b.createdAtEpoch - a.createdAtEpoch);\n }, [recordsById, caseId]);\n\n const currentIndex = caseRecords.findIndex((r) => r.id === recordId);\n const total = caseRecords.length;\n\n const goTo = useCallback(\n (r: RecordItem) => {\n setDropdownOpen(false);\n openOriginal(r.id, \"smart\", undefined, caseId);\n },\n [openOriginal, caseId],\n );\n\n const showNavPicker = caseId && total > 0;\n\n // Smart report vitals filtering\n const allRows = table.rows;\n const oorRows = useMemo(\n () => allRows.filter((r) => r.latestStatus === \"high\" || r.latestStatus === \"low\"),\n [allRows],\n );\n const noInterpRows = useMemo(\n () => allRows.filter((r) => r.latestStatus === \"unknown\"),\n [allRows],\n );\n\n const baseRows = srTab === \"oor\" ? oorRows : srTab === \"none\" ? noInterpRows : allRows;\n\n const filteredRows = useMemo(() => {\n if (!srSearch) return baseRows;\n const q = srSearch.toLowerCase();\n return baseRows.filter((r) => r.name.toLowerCase().includes(q));\n }, [baseRows, srSearch]);\n\n const tabCounts = useMemo(() => {\n if (!srSearch) return { all: allRows.length, oor: oorRows.length, none: noInterpRows.length };\n const q = srSearch.toLowerCase();\n return {\n all: allRows.filter((r) => r.name.toLowerCase().includes(q)).length,\n oor: oorRows.filter((r) => r.name.toLowerCase().includes(q)).length,\n none: noInterpRows.filter((r) => r.name.toLowerCase().includes(q)).length,\n };\n }, [srSearch, allRows, oorRows, noInterpRows]);\n\n useEffect(() => {\n setSrSelected(new Set());\n }, [srTab, srSearch]);\n\n const srAllSelected =\n filteredRows.length > 0 && filteredRows.every((r) => srSelected.has(r.key));\n const srSomeSelected = srSelected.size > 0;\n\n const toggleSrRow = useCallback((key: string) => {\n setSrSelected((prev) => {\n const next = new Set(prev);\n next.has(key) ? next.delete(key) : next.add(key);\n return next;\n });\n }, []);\n\n const toggleSrAll = useCallback(() => {\n setSrSelected(\n srAllSelected ? new Set() : new Set(filteredRows.map((r) => r.key)),\n );\n }, [srAllSelected, filteredRows]);\n\n const handleSrCopyToNote = useCallback(() => {\n const selectedRows = filteredRows.filter((r) => srSelected.has(r.key));\n if (!selectedRows.length) return;\n const text = buildVitalsText(selectedRows);\n if (onCopyVitalsToNote) {\n void onCopyVitalsToNote(text);\n } else if (onCopyToNote) {\n const rect = srCopyBtnRef.current?.getBoundingClientRect();\n void onCopyToNote(\n text,\n rect ? { x: rect.left + rect.width / 2, y: rect.bottom } : undefined,\n );\n }\n }, [filteredRows, srSelected, onCopyVitalsToNote, onCopyToNote]);\n\n const isSmart = record?.isSmart ?? false;\n const hasPreview = preview.status === \"loaded\" && preview.files.length > 0;\n\n return (\n <div className=\"mr-sv__panel\">\n <div className=\"mr-sv__panel-header\">\n <IconButton\n icon={<ChevronLeft size={16} aria-hidden />}\n label=\"Back\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onBack}\n />\n\n {showNavPicker ? (\n <div className=\"mr-orig__nav-wrap\" ref={dropdownRef}>\n <div\n className={`mr-orig__nav-pill${dropdownOpen ? \" mr-orig__nav-pill--open\" : \"\"}`}\n role=\"button\"\n tabIndex={0}\n onClick={() => setDropdownOpen((v) => !v)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setDropdownOpen((v) => !v);\n }\n }}\n >\n <button\n type=\"button\"\n className=\"mr-orig__nav-chevron\"\n onClick={(e) => {\n e.stopPropagation();\n setDropdownOpen((v) => !v);\n }}\n aria-label=\"Show records\"\n >\n <ChevronLeft size={14} aria-hidden />\n </button>\n <div className=\"mr-orig__nav-text\">\n <span className=\"mr-orig__nav-title\">{record?.title ?? \"Record\"}</span>\n <span className=\"mr-orig__nav-counter\">\n {currentIndex + 1} of {total}\n </span>\n </div>\n <button\n type=\"button\"\n className=\"mr-orig__nav-chevron\"\n onClick={(e) => {\n e.stopPropagation();\n setDropdownOpen((v) => !v);\n }}\n aria-label=\"Show records\"\n >\n <ChevronRight size={14} aria-hidden />\n </button>\n </div>\n\n {dropdownOpen && (\n <div className=\"mr-orig__dropdown\">\n <div className=\"mr-orig__dropdown-eyebrow\">\n {total} RECORD{total !== 1 ? \"S\" : \"\"} FOUND IN THIS ENCOUNTER\n </div>\n <div className=\"mr-orig__dropdown-list\">\n {caseRecords.map((r) => {\n const isActive = r.id === recordId;\n return (\n <button\n key={r.id}\n type=\"button\"\n className={`mr-orig__dropdown-item${isActive ? \" mr-orig__dropdown-item--active\" : \"\"}`}\n onClick={() => goTo(r)}\n >\n <div className=\"mr-orig__dropdown-icon\">\n <File size={16} aria-hidden />\n {r.isSmart && (\n <SmartSparkles\n className=\"mr-orig__dropdown-smart-dot\"\n aria-label=\"Smart report\"\n />\n )}\n </div>\n <div className=\"mr-orig__dropdown-info\">\n <div className=\"mr-orig__dropdown-title-row\">\n <span className=\"mr-orig__dropdown-title\">{r.title}</span>\n {r.isSmart && (\n <span className=\"mr-orig__dropdown-smart-badge\">\n <SmartSparkles aria-hidden />\n Smart Report\n </span>\n )}\n </div>\n <div className=\"mr-orig__dropdown-meta\">\n <span>{epochToDisplay(r.createdAtEpoch)}</span>\n {r.isSmart && r.totalVitals > 0 && (\n <>\n <span className=\"mr-orig__dropdown-dot\">·</span>\n <span>{r.totalVitals} vitals</span>\n </>\n )}\n {r.isSmart && r.outOfRangeVitals > 0 && (\n <>\n <span className=\"mr-orig__dropdown-dot\">·</span>\n <span className=\"mr-orig__dropdown-oor\">\n {r.outOfRangeVitals} out of range\n </span>\n </>\n )}\n </div>\n </div>\n {isActive && (\n <Check\n size={14}\n className=\"mr-orig__dropdown-check\"\n aria-hidden\n />\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n ) : record ? (\n <div className=\"mr-sv__panel-info\">\n <Typography variant=\"label\" as=\"span\" className=\"mr-sv__panel-name\">\n {record.title}\n </Typography>\n <Typography variant=\"hint\" as=\"span\" className=\"mr-sv__panel-meta-text\">\n {epochToDisplay(record.createdAtEpoch)}\n </Typography>\n </div>\n ) : null}\n\n <div className=\"mr-orig__header-actions\">\n {isSmart && !smartPanelOpen && (\n <button\n type=\"button\"\n className=\"mr-orig__show-smart-btn\"\n onClick={() => setSmartPanelOpen(true)}\n >\n <SmartSparkles aria-hidden />\n Smart Report\n </button>\n )}\n {hasPreview && (\n <IconButton\n icon={<ExternalLink size={16} aria-hidden />}\n label=\"Open in new tab\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n window.open(preview.files[0].url, \"_blank\", \"noopener,noreferrer\")\n }\n />\n )}\n </div>\n </div>\n\n <div\n className=\"mr-sv__panel-body\"\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", overflow: \"hidden\" }}\n >\n {preview.status === \"loading\" && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n }}\n >\n <LoaderCircle size={44} className=\"mr-sv__loading-spinner\" aria-hidden />\n </div>\n )}\n {preview.status === \"error\" && (\n <Typography variant=\"muted\" className=\"mr-sv__panel-empty\">\n Failed to load document preview.\n </Typography>\n )}\n {preview.status === \"loaded\" && preview.files.length === 0 && (\n <Typography variant=\"muted\" className=\"mr-sv__panel-empty\">\n No preview available for this record.\n </Typography>\n )}\n\n {/* Non-smart: full-width PDF */}\n {hasPreview && !isSmart && (\n <div\n className=\"mr-record-preview__body\"\n style={{ flex: 1, display: \"flex\", overflow: \"hidden\" }}\n >\n <Suspense fallback={null}>\n <DocumentViewer\n files={preview.files}\n title={record?.title ?? \"\"}\n isHtml={preview.isHtml}\n />\n </Suspense>\n </div>\n )}\n\n {/* Smart: split view — PDF left, smart report panel right */}\n {hasPreview && isSmart && (\n <div className=\"mr-orig__split\">\n <div className=\"mr-orig__pdf-side\">\n <Suspense fallback={null}>\n <DocumentViewer\n files={preview.files}\n title={record?.title ?? \"\"}\n isHtml={preview.isHtml}\n />\n </Suspense>\n </div>\n\n {smartPanelOpen && (\n <div className=\"mr-orig__smart-side\">\n {/* Header */}\n <div className=\"mr-orig__smart-hdr\">\n <span className=\"mr-orig__smart-title\">Smart Report</span>\n <button\n type=\"button\"\n className=\"mr-orig__smart-collapse-btn\"\n aria-label=\"Collapse smart report panel\"\n onClick={() => setSmartPanelOpen(false)}\n >\n <ChevronRight size={16} aria-hidden />\n </button>\n </div>\n\n {/* Search */}\n <div className=\"mr-orig__smart-search\">\n <Search size={14} aria-hidden className=\"mr-orig__smart-search-icon\" />\n <input\n type=\"text\"\n className=\"mr-orig__smart-search-input\"\n placeholder=\"Search vitals\"\n value={srSearch}\n onChange={(e) => setSrSearch(e.target.value)}\n />\n </div>\n\n {/* Filter tabs */}\n <div className=\"mr-orig__smart-tabs-wrap\">\n <div className=\"mr-orig__smart-tabs\">\n {([\"all\", \"oor\", \"none\"] as SrTab[]).map((tab) => {\n const count =\n tab === \"all\"\n ? tabCounts.all\n : tab === \"oor\"\n ? tabCounts.oor\n : tabCounts.none;\n const label =\n tab === \"all\"\n ? \"All\"\n : tab === \"oor\"\n ? \"Out of range\"\n : \"No interpretation\";\n return (\n <button\n key={tab}\n type=\"button\"\n className={`mr-orig__smart-tab${srTab === tab ? \" mr-orig__smart-tab--active\" : \"\"}`}\n onClick={() => setSrTab(tab)}\n >\n {label} ({count})\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Vital list */}\n <div className=\"mr-orig__smart-list\">\n {vitalsStatus === \"loading\" && (\n <div className=\"mr-orig__smart-loading\">\n <LoaderCircle\n size={20}\n className=\"mr-sv__loading-spinner\"\n aria-hidden\n />\n </div>\n )}\n {vitalsStatus === \"loaded\" && filteredRows.length === 0 && (\n <Typography variant=\"muted\" className=\"mr-orig__smart-empty\">\n No vitals match.\n </Typography>\n )}\n {vitalsStatus === \"loaded\" &&\n filteredRows.map((row, idx) => {\n const cell = row.cells[0];\n const isOor =\n row.latestStatus === \"high\" || row.latestStatus === \"low\";\n const isSelected = srSelected.has(row.key);\n const isLast = idx === filteredRows.length - 1;\n return (\n <div\n key={row.key}\n className={`mr-orig__vital-item${isLast ? \" mr-orig__vital-item--last\" : \"\"}`}\n >\n <div\n className={`mr-orig__vital-row${srSomeSelected ? \" mr-orig__vital-row--selectable\" : \"\"}${isSelected ? \" mr-orig__vital-row--selected\" : \"\"}`}\n onClick={srSomeSelected ? () => toggleSrRow(row.key) : undefined}\n >\n <span\n className={`mr-sv__checkbox mr-cc-table__row-check${isSelected ? \" mr-sv__checkbox--checked\" : \"\"}`}\n role=\"checkbox\"\n aria-checked={isSelected}\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n toggleSrRow(row.key);\n }}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n toggleSrRow(row.key);\n }\n }}\n >\n {isSelected && <Check size={10} strokeWidth={3} />}\n </span>\n <div className=\"mr-orig__vital-info\">\n <span className=\"mr-orig__vital-name\">{row.name}</span>\n {row.refRange && (\n <span className=\"mr-orig__vital-ref\">\n Ref {row.refRange}\n </span>\n )}\n </div>\n {cell && (\n <div className=\"mr-orig__vital-value\">\n <span\n className={`mr-orig__vital-val${isOor ? \" mr-orig__vital-val--oor\" : \"\"}`}\n >\n {cell.value}\n </span>\n {cell.unit && (\n <span className=\"mr-orig__vital-unit\">{cell.unit}</span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Footer */}\n {srSomeSelected && (\n <div className=\"mr-cc-table__footer\">\n <span\n className={`mr-sv__checkbox mr-cc-table__footer-check${srAllSelected ? \" mr-sv__checkbox--checked\" : \"\"}`}\n role=\"checkbox\"\n aria-checked={srAllSelected}\n tabIndex={0}\n onClick={toggleSrAll}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n toggleSrAll();\n }\n }}\n >\n {srAllSelected && <Check size={10} strokeWidth={3} />}\n </span>\n <span className=\"mr-cc-table__footer-label\">Select all</span>\n <span className=\"mr-cc-table__footer-count\">\n {srSelected.size} of {filteredRows.length} selected\n </span>\n <button\n ref={srCopyBtnRef}\n type=\"button\"\n className=\"mr-cc-table__copy-note-btn\"\n disabled={!hasCopyToNote}\n onClick={handleSrCopyToNote}\n >\n Copy to note\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/OriginalRecordPanel-IUZUPXY2.js","../src/views/components/shared/OriginalRecordPanel.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/medical-records-ui/medical-records-ui/dist/OriginalRecordPanel-IUZUPXY2.js","sourcesContent":[null,"\"use client\";\n\nimport { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, ExternalLink, Check, File, LoaderCircle, Search } from \"lucide-react\";\nimport { useStore } from \"zustand\";\nimport { useSdk } from \"../../../connection/useSdk\";\nimport { useRecordPreview } from \"../../../connection/useRecordPreview\";\nimport { useRecordPanelTable } from \"../../hooks/care-panel/useRecordPanelTable\";\nimport { epochToDisplay } from \"../../../helpers/formatters\";\nimport { useSmartRecordsActions } from \"../../context/SmartRecordsActionsContext\";\nimport { IconButton, Typography } from \"widgets\";\nimport type { RecordItem } from \"../../../helpers\";\nimport type { PanelRow } from \"../../../helpers/vitalsPanel\";\nimport SmartSparkles from \"icons/SmartSparkles\";\n\nconst DocumentViewer = lazy(() =>\n import(\"../../RecordPreview/DocumentViewer\").then((m) => ({\n default: m.DocumentViewer,\n })),\n);\n\ninterface OriginalRecordPanelProps {\n recordId: string;\n caseId?: string;\n onBack: () => void;\n}\n\ntype SrTab = \"all\" | \"oor\" | \"none\";\n\nfunction buildVitalsText(rows: PanelRow[]): string {\n return rows\n .map((r) => {\n const cell = r.cells[0];\n const ref = cell?.refRange ? ` (Ref: ${cell.refRange})` : \"\";\n return `${r.name}: ${cell?.value ?? \"—\"} ${r.unit}${ref}`;\n })\n .join(\"\\n\");\n}\n\nexport function OriginalRecordPanel({\n recordId,\n caseId,\n onBack,\n}: OriginalRecordPanelProps) {\n const { store } = useSdk();\n const record = useStore(store, (s) => s.records.byId[recordId]);\n const recordsById = useStore(store, (s) => s.records.byId);\n const preview = useRecordPreview(recordId);\n const { openOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote } =\n useSmartRecordsActions();\n\n // Smart report vitals (only fetched when record.isSmart)\n const { status: vitalsStatus, table } = useRecordPanelTable(\n record?.isSmart ? recordId : null,\n );\n const [smartPanelOpen, setSmartPanelOpen] = useState(true);\n const [srSearch, setSrSearch] = useState(\"\");\n const [srTab, setSrTab] = useState<SrTab>(\"all\");\n const [srSelected, setSrSelected] = useState<Set<string>>(new Set());\n const srCopyBtnRef = useRef<HTMLButtonElement>(null);\n\n // Dropdown state\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!dropdownOpen) return;\n const handler = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setDropdownOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [dropdownOpen]);\n\n const caseRecords = useMemo<RecordItem[]>(() => {\n if (!caseId) return [];\n return Object.values(recordsById)\n .filter((r): r is RecordItem => r != null && r.cases.includes(caseId))\n .sort((a, b) => b.createdAtEpoch - a.createdAtEpoch);\n }, [recordsById, caseId]);\n\n const currentIndex = caseRecords.findIndex((r) => r.id === recordId);\n const total = caseRecords.length;\n\n const goTo = useCallback(\n (r: RecordItem) => {\n setDropdownOpen(false);\n openOriginal(r.id, \"smart\", undefined, caseId);\n },\n [openOriginal, caseId],\n );\n\n const showNavPicker = caseId && total > 0;\n\n // Smart report vitals filtering\n const allRows = table.rows;\n const oorRows = useMemo(\n () => allRows.filter((r) => r.latestStatus === \"high\" || r.latestStatus === \"low\"),\n [allRows],\n );\n const noInterpRows = useMemo(\n () => allRows.filter((r) => r.latestStatus === \"unknown\"),\n [allRows],\n );\n\n const baseRows = srTab === \"oor\" ? oorRows : srTab === \"none\" ? noInterpRows : allRows;\n\n const filteredRows = useMemo(() => {\n if (!srSearch) return baseRows;\n const q = srSearch.toLowerCase();\n return baseRows.filter((r) => r.name.toLowerCase().includes(q));\n }, [baseRows, srSearch]);\n\n const tabCounts = useMemo(() => {\n if (!srSearch) return { all: allRows.length, oor: oorRows.length, none: noInterpRows.length };\n const q = srSearch.toLowerCase();\n return {\n all: allRows.filter((r) => r.name.toLowerCase().includes(q)).length,\n oor: oorRows.filter((r) => r.name.toLowerCase().includes(q)).length,\n none: noInterpRows.filter((r) => r.name.toLowerCase().includes(q)).length,\n };\n }, [srSearch, allRows, oorRows, noInterpRows]);\n\n useEffect(() => {\n setSrSelected(new Set());\n }, [srTab, srSearch]);\n\n const srAllSelected =\n filteredRows.length > 0 && filteredRows.every((r) => srSelected.has(r.key));\n const srSomeSelected = srSelected.size > 0;\n\n const toggleSrRow = useCallback((key: string) => {\n setSrSelected((prev) => {\n const next = new Set(prev);\n next.has(key) ? next.delete(key) : next.add(key);\n return next;\n });\n }, []);\n\n const toggleSrAll = useCallback(() => {\n setSrSelected(\n srAllSelected ? new Set() : new Set(filteredRows.map((r) => r.key)),\n );\n }, [srAllSelected, filteredRows]);\n\n const handleSrCopyToNote = useCallback(() => {\n const selectedRows = filteredRows.filter((r) => srSelected.has(r.key));\n if (!selectedRows.length) return;\n const text = buildVitalsText(selectedRows);\n if (onCopyVitalsToNote) {\n void onCopyVitalsToNote(text);\n } else if (onCopyToNote) {\n const rect = srCopyBtnRef.current?.getBoundingClientRect();\n void onCopyToNote(\n text,\n rect ? { x: rect.left + rect.width / 2, y: rect.bottom } : undefined,\n );\n }\n }, [filteredRows, srSelected, onCopyVitalsToNote, onCopyToNote]);\n\n const isSmart = record?.isSmart ?? false;\n const hasPreview = preview.status === \"loaded\" && preview.files.length > 0;\n\n return (\n <div className=\"mr-sv__panel\">\n <div className=\"mr-sv__panel-header\">\n <IconButton\n icon={<ChevronLeft size={16} aria-hidden />}\n label=\"Back\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onBack}\n />\n\n {showNavPicker ? (\n <div className=\"mr-orig__nav-wrap\" ref={dropdownRef}>\n <div\n className={`mr-orig__nav-pill${dropdownOpen ? \" mr-orig__nav-pill--open\" : \"\"}`}\n role=\"button\"\n tabIndex={0}\n onClick={() => setDropdownOpen((v) => !v)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setDropdownOpen((v) => !v);\n }\n }}\n >\n <button\n type=\"button\"\n className=\"mr-orig__nav-chevron\"\n onClick={(e) => {\n e.stopPropagation();\n setDropdownOpen((v) => !v);\n }}\n aria-label=\"Show records\"\n >\n <ChevronLeft size={14} aria-hidden />\n </button>\n <div className=\"mr-orig__nav-text\">\n <span className=\"mr-orig__nav-title\">{record?.title ?? \"Record\"}</span>\n <span className=\"mr-orig__nav-counter\">\n {currentIndex + 1} of {total}\n </span>\n </div>\n <button\n type=\"button\"\n className=\"mr-orig__nav-chevron\"\n onClick={(e) => {\n e.stopPropagation();\n setDropdownOpen((v) => !v);\n }}\n aria-label=\"Show records\"\n >\n <ChevronRight size={14} aria-hidden />\n </button>\n </div>\n\n {dropdownOpen && (\n <div className=\"mr-orig__dropdown\">\n <div className=\"mr-orig__dropdown-eyebrow\">\n {total} RECORD{total !== 1 ? \"S\" : \"\"} FOUND IN THIS ENCOUNTER\n </div>\n <div className=\"mr-orig__dropdown-list\">\n {caseRecords.map((r) => {\n const isActive = r.id === recordId;\n return (\n <button\n key={r.id}\n type=\"button\"\n className={`mr-orig__dropdown-item${isActive ? \" mr-orig__dropdown-item--active\" : \"\"}`}\n onClick={() => goTo(r)}\n >\n <div className=\"mr-orig__dropdown-icon\">\n <File size={16} aria-hidden />\n {r.isSmart && (\n <SmartSparkles\n className=\"mr-orig__dropdown-smart-dot\"\n aria-label=\"Smart report\"\n />\n )}\n </div>\n <div className=\"mr-orig__dropdown-info\">\n <div className=\"mr-orig__dropdown-title-row\">\n <span className=\"mr-orig__dropdown-title\">{r.title}</span>\n {r.isSmart && (\n <span className=\"mr-orig__dropdown-smart-badge\">\n <SmartSparkles aria-hidden />\n Smart Report\n </span>\n )}\n </div>\n <div className=\"mr-orig__dropdown-meta\">\n <span>{epochToDisplay(r.createdAtEpoch)}</span>\n {r.isSmart && r.totalVitals > 0 && (\n <>\n <span className=\"mr-orig__dropdown-dot\">·</span>\n <span>{r.totalVitals} vitals</span>\n </>\n )}\n {r.isSmart && r.outOfRangeVitals > 0 && (\n <>\n <span className=\"mr-orig__dropdown-dot\">·</span>\n <span className=\"mr-orig__dropdown-oor\">\n {r.outOfRangeVitals} out of range\n </span>\n </>\n )}\n </div>\n </div>\n {isActive && (\n <Check\n size={14}\n className=\"mr-orig__dropdown-check\"\n aria-hidden\n />\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n ) : record ? (\n <div className=\"mr-sv__panel-info\">\n <Typography variant=\"label\" as=\"span\" className=\"mr-sv__panel-name\">\n {record.title}\n </Typography>\n <Typography variant=\"hint\" as=\"span\" className=\"mr-sv__panel-meta-text\">\n {epochToDisplay(record.createdAtEpoch)}\n </Typography>\n </div>\n ) : null}\n\n <div className=\"mr-orig__header-actions\">\n {isSmart && !smartPanelOpen && (\n <button\n type=\"button\"\n className=\"mr-orig__show-smart-btn\"\n onClick={() => setSmartPanelOpen(true)}\n >\n <SmartSparkles aria-hidden />\n Smart Report\n </button>\n )}\n {hasPreview && (\n <IconButton\n icon={<ExternalLink size={16} aria-hidden />}\n label=\"Open in new tab\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n window.open(preview.files[0].url, \"_blank\", \"noopener,noreferrer\")\n }\n />\n )}\n </div>\n </div>\n\n <div\n className=\"mr-sv__panel-body\"\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", overflow: \"hidden\" }}\n >\n {preview.status === \"loading\" && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n }}\n >\n <LoaderCircle size={44} className=\"mr-sv__loading-spinner\" aria-hidden />\n </div>\n )}\n {preview.status === \"error\" && (\n <Typography variant=\"muted\" className=\"mr-sv__panel-empty\">\n Failed to load document preview.\n </Typography>\n )}\n {preview.status === \"loaded\" && preview.files.length === 0 && (\n <Typography variant=\"muted\" className=\"mr-sv__panel-empty\">\n No preview available for this record.\n </Typography>\n )}\n\n {/* Non-smart: full-width PDF */}\n {hasPreview && !isSmart && (\n <div\n className=\"mr-record-preview__body\"\n style={{ flex: 1, display: \"flex\", overflow: \"hidden\" }}\n >\n <Suspense fallback={null}>\n <DocumentViewer\n files={preview.files}\n title={record?.title ?? \"\"}\n isHtml={preview.isHtml}\n />\n </Suspense>\n </div>\n )}\n\n {/* Smart: split view — PDF left, smart report panel right */}\n {hasPreview && isSmart && (\n <div className=\"mr-orig__split\">\n <div className=\"mr-orig__pdf-side\">\n <Suspense fallback={null}>\n <DocumentViewer\n files={preview.files}\n title={record?.title ?? \"\"}\n isHtml={preview.isHtml}\n />\n </Suspense>\n </div>\n\n {smartPanelOpen && (\n <div className=\"mr-orig__smart-side\">\n {/* Header */}\n <div className=\"mr-orig__smart-hdr\">\n <span className=\"mr-orig__smart-title\">Smart Report</span>\n <button\n type=\"button\"\n className=\"mr-orig__smart-collapse-btn\"\n aria-label=\"Collapse smart report panel\"\n onClick={() => setSmartPanelOpen(false)}\n >\n <ChevronRight size={16} aria-hidden />\n </button>\n </div>\n\n {/* Search */}\n <div className=\"mr-orig__smart-search\">\n <Search size={14} aria-hidden className=\"mr-orig__smart-search-icon\" />\n <input\n type=\"text\"\n className=\"mr-orig__smart-search-input\"\n placeholder=\"Search vitals\"\n value={srSearch}\n onChange={(e) => setSrSearch(e.target.value)}\n />\n </div>\n\n {/* Filter tabs */}\n <div className=\"mr-orig__smart-tabs-wrap\">\n <div className=\"mr-orig__smart-tabs\">\n {([\"all\", \"oor\", \"none\"] as SrTab[]).map((tab) => {\n const count =\n tab === \"all\"\n ? tabCounts.all\n : tab === \"oor\"\n ? tabCounts.oor\n : tabCounts.none;\n const label =\n tab === \"all\"\n ? \"All\"\n : tab === \"oor\"\n ? \"Out of range\"\n : \"No interpretation\";\n return (\n <button\n key={tab}\n type=\"button\"\n className={`mr-orig__smart-tab${srTab === tab ? \" mr-orig__smart-tab--active\" : \"\"}`}\n onClick={() => setSrTab(tab)}\n >\n {label} ({count})\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Vital list */}\n <div className=\"mr-orig__smart-list\">\n {vitalsStatus === \"loading\" && (\n <div className=\"mr-orig__smart-loading\">\n <LoaderCircle\n size={20}\n className=\"mr-sv__loading-spinner\"\n aria-hidden\n />\n </div>\n )}\n {vitalsStatus === \"loaded\" && filteredRows.length === 0 && (\n <Typography variant=\"muted\" className=\"mr-orig__smart-empty\">\n No vitals match.\n </Typography>\n )}\n {vitalsStatus === \"loaded\" &&\n filteredRows.map((row, idx) => {\n const cell = row.cells[0];\n const isOor =\n row.latestStatus === \"high\" || row.latestStatus === \"low\";\n const isSelected = srSelected.has(row.key);\n const isLast = idx === filteredRows.length - 1;\n return (\n <div\n key={row.key}\n className={`mr-orig__vital-item${isLast ? \" mr-orig__vital-item--last\" : \"\"}`}\n >\n <div\n className={`mr-orig__vital-row${srSomeSelected ? \" mr-orig__vital-row--selectable\" : \"\"}${isSelected ? \" mr-orig__vital-row--selected\" : \"\"}`}\n onClick={srSomeSelected ? () => toggleSrRow(row.key) : undefined}\n >\n <span\n className={`mr-sv__checkbox mr-cc-table__row-check${isSelected ? \" mr-sv__checkbox--checked\" : \"\"}`}\n role=\"checkbox\"\n aria-checked={isSelected}\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n toggleSrRow(row.key);\n }}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n toggleSrRow(row.key);\n }\n }}\n >\n {isSelected && <Check size={10} strokeWidth={3} />}\n </span>\n <div className=\"mr-orig__vital-info\">\n <span className=\"mr-orig__vital-name\">{row.name}</span>\n {row.refRange && (\n <span className=\"mr-orig__vital-ref\">\n Ref {row.refRange}\n </span>\n )}\n </div>\n {cell && (\n <div className=\"mr-orig__vital-value\">\n <span\n className={`mr-orig__vital-val${isOor ? \" mr-orig__vital-val--oor\" : \"\"}`}\n >\n {cell.value}\n </span>\n {cell.unit && (\n <span className=\"mr-orig__vital-unit\">{cell.unit}</span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Footer */}\n {srSomeSelected && (\n <div className=\"mr-cc-table__footer\">\n <span\n className={`mr-sv__checkbox mr-cc-table__footer-check${srAllSelected ? \" mr-sv__checkbox--checked\" : \"\"}`}\n role=\"checkbox\"\n aria-checked={srAllSelected}\n tabIndex={0}\n onClick={toggleSrAll}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n toggleSrAll();\n }\n }}\n >\n {srAllSelected && <Check size={10} strokeWidth={3} />}\n </span>\n <span className=\"mr-cc-table__footer-label\">Select all</span>\n <span className=\"mr-cc-table__footer-count\">\n {srSelected.size} of {filteredRows.length} selected\n </span>\n <button\n ref={srCopyBtnRef}\n type=\"button\"\n className=\"mr-cc-table__copy-note-btn\"\n disabled={!hasCopyToNote}\n onClick={handleSrCopyToNote}\n >\n Copy to note\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,9 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkESURVA6Bjs = require('./chunk-ESURVA6B.js');
5
+ require('./chunk-57BG7LVP.js');
6
+
7
+
8
+ exports.SmartUploadModal = _chunkESURVA6Bjs.SmartUploadModal;
9
+ //# sourceMappingURL=SmartUploadModal-DOEIOLQU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/SmartUploadModal-M3WQRFO4.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,6DAAC","file":"/home/runner/work/medical-records-ui/medical-records-ui/dist/SmartUploadModal-M3WQRFO4.js"}
1
+ {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/SmartUploadModal-DOEIOLQU.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,6DAAC","file":"/home/runner/work/medical-records-ui/medical-records-ui/dist/SmartUploadModal-DOEIOLQU.js"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import {
3
+ SmartUploadModal
4
+ } from "./chunk-3P36QOHC.mjs";
5
+ import "./chunk-4MEMDAB5.mjs";
6
+ export {
7
+ SmartUploadModal
8
+ };
9
+ //# sourceMappingURL=SmartUploadModal-SMDIOE3L.mjs.map
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import {
3
+ VitalHistoryPanel
4
+ } from "./chunk-SO5RWBVJ.mjs";
5
+ import "./chunk-HNRF345J.mjs";
6
+ import "./chunk-4MEMDAB5.mjs";
7
+ export {
8
+ VitalHistoryPanel
9
+ };
10
+ //# sourceMappingURL=VitalHistoryPanel-AQ6QVGCB.mjs.map
@@ -0,0 +1,10 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkLYPWE42Ajs = require('./chunk-LYPWE42A.js');
5
+ require('./chunk-TNTVD3TN.js');
6
+ require('./chunk-57BG7LVP.js');
7
+
8
+
9
+ exports.VitalHistoryPanel = _chunkLYPWE42Ajs.VitalHistoryPanel;
10
+ //# sourceMappingURL=VitalHistoryPanel-L4QTKZBC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/VitalHistoryPanel-22QMSV5Q.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,+DAAC","file":"/home/runner/work/medical-records-ui/medical-records-ui/dist/VitalHistoryPanel-22QMSV5Q.js"}
1
+ {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/VitalHistoryPanel-L4QTKZBC.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,+DAAC","file":"/home/runner/work/medical-records-ui/medical-records-ui/dist/VitalHistoryPanel-L4QTKZBC.js"}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  parseVitals
3
- } from "./chunk-V2S4XGEO.mjs";
3
+ } from "./chunk-HNRF345J.mjs";
4
4
  import {
5
5
  epochToDisplay,
6
6
  getCore,
7
7
  useSdk
8
- } from "./chunk-U3WP4DEG.mjs";
8
+ } from "./chunk-4MEMDAB5.mjs";
9
9
 
10
10
  // src/icons/SmartSparkles.tsx
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -155,4 +155,4 @@ export {
155
155
  SmartSparkles_default,
156
156
  useRecordPanelTable
157
157
  };
158
- //# sourceMappingURL=chunk-BIN5FHTM.mjs.map
158
+ //# sourceMappingURL=chunk-32VKLNCO.mjs.map
@@ -7,7 +7,7 @@ import {
7
7
  formatFileSize,
8
8
  todayISO,
9
9
  useSdk
10
- } from "./chunk-U3WP4DEG.mjs";
10
+ } from "./chunk-4MEMDAB5.mjs";
11
11
 
12
12
  // src/views/containers/smart-records/SmartUploadModal.tsx
13
13
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -237,4 +237,4 @@ function SmartUploadModal({ onUpload, onClose }) {
237
237
  export {
238
238
  SmartUploadModal
239
239
  };
240
- //# sourceMappingURL=chunk-LH2G6KKA.mjs.map
240
+ //# sourceMappingURL=chunk-3P36QOHC.mjs.map
@@ -354,7 +354,7 @@ function initWorkerClient(config, oid) {
354
354
  environment: config.environment,
355
355
  baseUrl: config.baseUrl,
356
356
  vaultBaseUrl: config.vaultBaseUrl,
357
- defaultHeaders: { client_id: "doc-web", ...config.defaultHeaders },
357
+ defaultHeaders: { ...config.defaultHeaders },
358
358
  onError: config.onError,
359
359
  onUnauthorized: config.onUnauthorized,
360
360
  onLog: stableOnLog,
@@ -2793,4 +2793,4 @@ export {
2793
2793
  EmptyState,
2794
2794
  TabLoadError
2795
2795
  };
2796
- //# sourceMappingURL=chunk-U3WP4DEG.mjs.map
2796
+ //# sourceMappingURL=chunk-4MEMDAB5.mjs.map