@eka-care/medical-records-ui 1.0.53 → 1.0.57

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.
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkWBIPQKCOjs = require('./chunk-WBIPQKCO.js');
5
+ var _chunkQYUEKKMVjs = require('./chunk-QYUEKKMV.js');
6
6
 
7
7
 
8
8
 
@@ -137,19 +137,21 @@ function OriginalRecordPanel({
137
137
  srAllSelected ? /* @__PURE__ */ new Set() : new Set(filteredRows.map((r) => r.key))
138
138
  );
139
139
  }, [srAllSelected, filteredRows]);
140
- const handleSrCopyToNote = _react.useCallback.call(void 0, () => {
140
+ const handleSrCopyToNote = _react.useCallback.call(void 0, async () => {
141
141
  const selectedRows = filteredRows.filter((r) => srSelected.has(r.key));
142
142
  if (!selectedRows.length) return;
143
143
  const text = buildVitalsText(selectedRows);
144
144
  if (onCopyVitalsToNote) {
145
- void onCopyVitalsToNote(text);
145
+ await onCopyVitalsToNote(text);
146
+ setSrSelected(/* @__PURE__ */ new Set());
146
147
  } else if (onCopyToNote) {
147
148
  const rect = _optionalChain([srCopyBtnRef, 'access', _4 => _4.current, 'optionalAccess', _5 => _5.getBoundingClientRect, 'call', _6 => _6()]);
148
- void onCopyToNote(
149
+ const result = await onCopyToNote(
149
150
  text,
150
151
  rect ? { x: rect.left + rect.width / 2, y: rect.bottom } : void 0,
151
- _chunkWBIPQKCOjs.toVitalNoteRows.call(void 0, selectedRows)
152
+ _chunkQYUEKKMVjs.toVitalNoteRows.call(void 0, selectedRows)
152
153
  );
154
+ if (result !== false) setSrSelected(/* @__PURE__ */ new Set());
153
155
  }
154
156
  }, [filteredRows, srSelected, onCopyVitalsToNote, onCopyToNote]);
155
157
  const htmlCopyBtnRef = _react.useRef.call(void 0, null);
@@ -187,122 +189,7 @@ function OriginalRecordPanel({
187
189
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft, { size: 16, "aria-hidden": true }),
188
190
  "Back"
189
191
  ] }),
190
- showNavPicker ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__nav-wrap", ref: dropdownRef, children: [
191
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
192
- "div",
193
- {
194
- className: `mr-orig__nav-pill${dropdownOpen ? " mr-orig__nav-pill--open" : ""}`,
195
- role: "button",
196
- tabIndex: 0,
197
- onClick: () => setDropdownOpen((v) => !v),
198
- onKeyDown: (e) => {
199
- if (e.key === "Enter" || e.key === " ") {
200
- e.preventDefault();
201
- setDropdownOpen((v) => !v);
202
- }
203
- },
204
- children: [
205
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
206
- "button",
207
- {
208
- type: "button",
209
- className: "mr-orig__nav-chevron",
210
- onClick: (e) => {
211
- e.stopPropagation();
212
- goPrev();
213
- },
214
- "aria-label": "Previous record",
215
- disabled: currentIndex <= 0,
216
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft, { size: 14, "aria-hidden": true })
217
- }
218
- ),
219
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__nav-text", children: [
220
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__nav-title", children: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _19 => _19.title]), () => ( "Record")) }),
221
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-orig__nav-counter", children: [
222
- currentIndex + 1,
223
- " of ",
224
- total
225
- ] })
226
- ] }),
227
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
228
- "button",
229
- {
230
- type: "button",
231
- className: "mr-orig__nav-chevron",
232
- onClick: (e) => {
233
- e.stopPropagation();
234
- goNext();
235
- },
236
- "aria-label": "Next record",
237
- disabled: currentIndex >= total - 1,
238
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, { size: 14, "aria-hidden": true })
239
- }
240
- )
241
- ]
242
- }
243
- ),
244
- dropdownOpen && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown", children: [
245
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-eyebrow", children: [
246
- total,
247
- " RECORD",
248
- total !== 1 ? "S" : "",
249
- " ",
250
- isUngrouped ? "WITH NO CARE CONTEXT" : "FOUND IN THIS ENCOUNTER"
251
- ] }),
252
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mr-orig__dropdown-list", children: caseRecords.map((r) => {
253
- const isActive = r.id === recordId;
254
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
255
- "button",
256
- {
257
- type: "button",
258
- className: `mr-orig__dropdown-item${isActive ? " mr-orig__dropdown-item--active" : ""}`,
259
- onClick: () => goTo(r),
260
- children: [
261
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-icon", children: [
262
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.File, { size: 16, "aria-hidden": true }),
263
- r.isSmart && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
264
- _chunkWBIPQKCOjs.SmartSparkles_default,
265
- {
266
- className: "mr-orig__dropdown-smart-dot",
267
- "aria-label": "Smart report"
268
- }
269
- )
270
- ] }),
271
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-info", children: [
272
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-title-row", children: [
273
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__dropdown-title", children: r.title }),
274
- r.isSmart && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-orig__dropdown-smart-badge", children: [
275
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWBIPQKCOjs.SmartSparkles_default, { "aria-hidden": true }),
276
- "Smart Report"
277
- ] }),
278
- _optionalChain([r, 'access', _20 => _20.fileType, 'optionalAccess', _21 => _21.toUpperCase, 'call', _22 => _22()]) === "HTML" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-tag-chip mr-tag-chip--html", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-tag-chip__label", children: "HTML" }) })
279
- ] }),
280
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-meta", children: [
281
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunkQGGLSO4Wjs.epochToDisplay.call(void 0, r.createdAtEpoch) }),
282
- r.isSmart && r.totalVitals > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
283
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__dropdown-dot", children: "\xB7" }),
284
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
285
- r.totalVitals,
286
- " vitals"
287
- ] })
288
- ] })
289
- ] })
290
- ] }),
291
- isActive && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
292
- _lucidereact.Check,
293
- {
294
- size: 14,
295
- className: "mr-orig__dropdown-check",
296
- "aria-hidden": true
297
- }
298
- )
299
- ]
300
- },
301
- r.id
302
- );
303
- }) })
304
- ] })
305
- ] }) : record ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel-info", children: [
192
+ record ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel-info", children: [
306
193
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQGGLSO4Wjs.Typography, { variant: "label", as: "span", className: "mr-sv__panel-name", children: record.title }),
307
194
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQGGLSO4Wjs.Typography, { variant: "hint", as: "span", className: "mr-sv__panel-meta-text", children: _chunkQGGLSO4Wjs.epochToDisplay.call(void 0, record.createdAtEpoch) })
308
195
  ] }) : null,
@@ -362,7 +249,7 @@ function OriginalRecordPanel({
362
249
  DocumentViewer,
363
250
  {
364
251
  files: preview.files,
365
- title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _23 => _23.title]), () => ( "")),
252
+ title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _19 => _19.title]), () => ( "")),
366
253
  isHtml: preview.isHtml
367
254
  }
368
255
  ) })
@@ -373,7 +260,7 @@ function OriginalRecordPanel({
373
260
  DocumentViewer,
374
261
  {
375
262
  files: preview.files,
376
- title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _24 => _24.title]), () => ( "")),
263
+ title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _20 => _20.title]), () => ( "")),
377
264
  isHtml: preview.isHtml
378
265
  }
379
266
  ) }) }),
@@ -381,7 +268,7 @@ function OriginalRecordPanel({
381
268
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__smart-hdr", children: [
382
269
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-orig__smart-title-row", children: [
383
270
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__smart-title", children: "Smart Report" }),
384
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWBIPQKCOjs.SmartSparkles_default, { className: "mr-orig__smart-title-icon", "aria-hidden": true })
271
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQYUEKKMVjs.SmartSparkles_default, { className: "mr-orig__smart-title-icon", "aria-hidden": true })
385
272
  ] }),
386
273
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
387
274
  "button",
@@ -558,7 +445,7 @@ function OriginalRecordPanel({
558
445
  "aria-label": "Expand smart report panel",
559
446
  "aria-expanded": false,
560
447
  onClick: () => setSmartPanelOpen(true),
561
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__smart-collapsed-icon-wrap", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWBIPQKCOjs.SmartSparkles_default, { className: "mr-orig__smart-collapsed-icon", "aria-hidden": true }) })
448
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__smart-collapsed-icon-wrap", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQYUEKKMVjs.SmartSparkles_default, { className: "mr-orig__smart-collapsed-icon", "aria-hidden": true }) })
562
449
  }
563
450
  ) }) })
564
451
  ] })
@@ -571,7 +458,7 @@ function VitalReadingsExpanded({ vitalName, ekaId }) {
571
458
  const { data: trendData, status } = _chunkSTQYPHI3js.useParameterTrend.call(void 0, ekaId);
572
459
  const readings = _react.useMemo.call(void 0, () => {
573
460
  const trend = trendData;
574
- if (!_optionalChain([trend, 'optionalAccess', _25 => _25.vitals_info, 'optionalAccess', _26 => _26.length])) return [];
461
+ if (!_optionalChain([trend, 'optionalAccess', _21 => _21.vitals_info, 'optionalAccess', _22 => _22.length])) return [];
575
462
  return [...trend.vitals_info].sort((a, b) => (_nullishCoalesce(b.date, () => ( 0))) - (_nullishCoalesce(a.date, () => ( 0)))).slice(0, 3).map((info) => {
576
463
  const dr = (_nullishCoalesce(info.display_result, () => ( ""))).toLowerCase();
577
464
  const isOor = dr.includes("high") || dr.includes("above") || dr.includes("abnormal_high") || dr.includes("low") || dr.includes("below") || dr.includes("abnormal_low");
@@ -602,4 +489,4 @@ function VitalReadingsExpanded({ vitalName, ekaId }) {
602
489
 
603
490
 
604
491
  exports.OriginalRecordPanel = OriginalRecordPanel;
605
- //# sourceMappingURL=OriginalRecordPanel-XL2MQSOS.js.map
492
+ //# sourceMappingURL=OriginalRecordPanel-DCGRXQST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/OriginalRecordPanel-DCGRXQST.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-DCGRXQST.js","sourcesContent":[null,"\"use client\";\n\nimport { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, ChevronDown, ExternalLink, Check, File, LoaderCircle } 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 { useParameterTrend } from \"../../hooks/care-panel/useParameterTrend\";\nimport { epochToDisplay } from \"../../../helpers/formatters\";\nimport type { ParameterTrendResponse } from \"@eka-care/medical-records-ts-sdk\";\nimport { useSmartRecordsActions } from \"../../context/SmartRecordsActionsContext\";\nimport { IconButton, Typography, SearchInput, Tooltip } from \"widgets\";\nimport type { RecordItem } from \"../../../helpers\";\nimport type { PanelRow } from \"../../../helpers/vitalsPanel\";\nimport { toVitalNoteRows } 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 { replaceOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote, onToast } =\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 [expandedVital, setExpandedVital] = useState<string | null>(null);\n const toggleExpand = useCallback((key: string) => {\n setExpandedVital((prev) => (prev === key ? null : key));\n }, []);\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(\n (r): r is RecordItem =>\n r != null &&\n (caseId === \"__ungrouped__\" ? r.cases.length === 0 : r.cases.includes(caseId)),\n )\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 const isUngrouped = caseId === \"__ungrouped__\";\n\n const goTo = useCallback(\n (r: RecordItem) => {\n setDropdownOpen(false);\n replaceOriginal(r.id, caseId);\n },\n [replaceOriginal, caseId],\n );\n\n const goPrev = useCallback(() => {\n if (currentIndex > 0) goTo(caseRecords[currentIndex - 1]);\n }, [currentIndex, caseRecords, goTo]);\n\n const goNext = useCallback(() => {\n if (currentIndex < total - 1) goTo(caseRecords[currentIndex + 1]);\n }, [currentIndex, total, caseRecords, goTo]);\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 useEffect(() => {\n if (srTab === \"oor\" && oorRows.length === 0) setSrTab(\"all\");\n if (srTab === \"none\" && noInterpRows.length === 0) setSrTab(\"all\");\n }, [srTab, oorRows.length, noInterpRows.length]);\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(async () => {\n const selectedRows = filteredRows.filter((r) => srSelected.has(r.key));\n if (!selectedRows.length) return;\n const text = buildVitalsText(selectedRows);\n if (onCopyVitalsToNote) {\n await onCopyVitalsToNote(text);\n setSrSelected(new Set());\n } else if (onCopyToNote) {\n const rect = srCopyBtnRef.current?.getBoundingClientRect();\n const result = await onCopyToNote(\n text,\n rect ? { x: rect.left + rect.width / 2, y: rect.bottom } : undefined,\n toVitalNoteRows(selectedRows),\n );\n if (result !== false) setSrSelected(new Set());\n }\n }, [filteredRows, srSelected, onCopyVitalsToNote, onCopyToNote]);\n\n const htmlCopyBtnRef = useRef<HTMLButtonElement>(null);\n const [isHtmlCopying, setIsHtmlCopying] = useState(false);\n\n const handleHtmlCopyToNote = useCallback(async () => {\n const url = preview.files[0]?.url;\n if (!url) return;\n setIsHtmlCopying(true);\n try {\n const res = await fetch(url);\n const html = await res.text();\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n const text = doc.body.textContent?.trim() ?? \"\";\n if (!text) return;\n if (onCopyVitalsToNote) {\n void onCopyVitalsToNote(text);\n } else if (onCopyToNote) {\n const rect = htmlCopyBtnRef.current?.getBoundingClientRect();\n void onCopyToNote(\n text,\n rect ? { x: rect.left, y: rect.bottom } : undefined,\n );\n }\n } catch {\n onToast?.(\"Failed to copy document text\", \"error\");\n } finally {\n setIsHtmlCopying(false);\n }\n }, [preview.files, onCopyVitalsToNote, onCopyToNote, onToast]);\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 <button type=\"button\" className=\"mr-sv__back-btn\" onClick={onBack}>\n <ChevronLeft size={16} aria-hidden />\n Back\n </button>\n\n {/* Prev/next record carousel + dropdown — temporarily disabled, will re-enable later.\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) => { e.stopPropagation(); goPrev(); }}\n aria-label=\"Previous record\"\n disabled={currentIndex <= 0}\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) => { e.stopPropagation(); goNext(); }}\n aria-label=\"Next record\"\n disabled={currentIndex >= total - 1}\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\" : \"\"}{\" \"}\n {isUngrouped ? \"WITH NO CARE CONTEXT\" : \"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 {r.fileType?.toUpperCase() === \"HTML\" && (\n <span className=\"mr-tag-chip mr-tag-chip--html\">\n <span className=\"mr-tag-chip__label\">HTML</span>\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 </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 */}\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\n <div className=\"mr-orig__header-actions\">\n {preview.isHtml && hasCopyToNote && (\n <button\n ref={htmlCopyBtnRef}\n type=\"button\"\n className=\"mr-orig__html-copy-btn\"\n onClick={handleHtmlCopyToNote}\n disabled={isHtmlCopying}\n >\n {isHtmlCopying && <LoaderCircle size={12} className=\"mr-sv__loading-spinner\" aria-hidden />}\n Copy to note\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-row\">\n <span className=\"mr-orig__smart-title\">Smart Report</span>\n <SmartSparkles className=\"mr-orig__smart-title-icon\" aria-hidden />\n </span>\n <button\n type=\"button\"\n className=\"mr-sv__sidebar-collapse-btn mr-orig__smart-expanded-btn\"\n aria-label=\"Collapse smart report panel\"\n aria-expanded={true}\n onClick={() => setSmartPanelOpen(false)}\n >\n <ChevronRight size={14} aria-hidden />\n </button>\n </div>\n\n {/* Search */}\n <SearchInput\n className=\"mr-orig__smart-search\"\n iconSize={16}\n placeholder=\"Search vitals\"\n value={srSearch}\n onChange={setSrSearch}\n />\n\n {/* Filter tabs — only when at least one sub-category has data */}\n {(oorRows.length > 0 || noInterpRows.length > 0) && (\n <div className=\"mr-orig__smart-tabs-wrap\">\n <div className=\"mr-orig__smart-tabs\">\n {([\"all\", \"oor\", \"none\"] as SrTab[]).map((tab) => {\n if (tab === \"oor\" && oorRows.length === 0) return null;\n if (tab === \"none\" && noInterpRows.length === 0) return null;\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\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 mr-orig__vital-row--selectable${isSelected ? \" mr-orig__vital-row--selected\" : \"\"}`}\n onClick={() => toggleSrRow(row.key)}\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 {row.ekaId && (\n <button\n type=\"button\"\n className={`mr-orig__vital-expand-btn${expandedVital === row.key ? \" mr-orig__vital-expand-btn--open\" : \"\"}`}\n onClick={(e) => { e.stopPropagation(); toggleExpand(row.key); }}\n aria-label={expandedVital === row.key ? \"Collapse readings\" : \"Show latest readings\"}\n >\n <ChevronDown size={13} aria-hidden />\n </button>\n )}\n </div>\n {expandedVital === row.key && row.ekaId && (\n <VitalReadingsExpanded vitalName={row.name} ekaId={row.ekaId} />\n )}\n </div>\n );\n })}\n </div>\n\n {/* Footer */}\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\" onClick={toggleSrAll}>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={!srSomeSelected || !hasCopyToNote}\n onClick={handleSrCopyToNote}\n >\n Copy to note\n </button>\n </div>\n </div>\n ) : (\n <div className=\"mr-orig__smart-side mr-orig__smart-side--collapsed\">\n <Tooltip content=\"Show smart report\">\n <button\n type=\"button\"\n className=\"mr-sv__sidebar-collapse-btn mr-orig__smart-collapsed-btn\"\n aria-label=\"Expand smart report panel\"\n aria-expanded={false}\n onClick={() => setSmartPanelOpen(true)}\n >\n <span className=\"mr-orig__smart-collapsed-icon-wrap\">\n <SmartSparkles className=\"mr-orig__smart-collapsed-icon\" aria-hidden />\n </span>\n </button>\n </Tooltip>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction VitalReadingsExpanded({ vitalName, ekaId }: { vitalName: string; ekaId: string }) {\n const { data: trendData, status } = useParameterTrend(ekaId);\n\n const readings = useMemo(() => {\n const trend = trendData as ParameterTrendResponse | null;\n if (!trend?.vitals_info?.length) return [];\n return [...trend.vitals_info]\n .sort((a, b) => (b.date ?? 0) - (a.date ?? 0))\n .slice(0, 3)\n .map((info) => {\n const dr = (info.display_result ?? \"\").toLowerCase();\n const isOor = dr.includes(\"high\") || dr.includes(\"above\") || dr.includes(\"abnormal_high\") ||\n dr.includes(\"low\") || dr.includes(\"below\") || dr.includes(\"abnormal_low\");\n return {\n value: info.val != null ? String(info.val) : ((info as any).val_string ?? \"—\"),\n date: (info.display_time || \"\").replace(/['‘’]/g, \" \"),\n isOor,\n };\n });\n }, [trendData]);\n\n if (status === \"loading\") {\n return (\n <div className=\"mr-orig__vital-readings mr-orig__vital-readings--loading\">\n <LoaderCircle size={16} className=\"mr-sv__loading-spinner\" aria-hidden />\n </div>\n );\n }\n\n if (status === \"error\" || !readings.length) {\n return (\n <div className=\"mr-orig__vital-readings\">\n <Typography variant=\"muted\" className=\"mr-orig__vital-readings-empty\">\n No readings available\n </Typography>\n </div>\n );\n }\n\n return (\n <div className=\"mr-orig__vital-readings\">\n <div className=\"mr-orig__vital-readings-title\">\n LATEST READINGS FOR {vitalName.toUpperCase()}\n </div>\n <div className=\"mr-orig__vital-readings-grid\">\n {readings.map((r, i) => (\n <div key={i} className=\"mr-orig__vital-reading-item\">\n <span className={`mr-orig__vital-reading-value${r.isOor ? \" mr-orig__vital-reading-value--oor\" : \"\"}`}>{r.value}</span>\n <span className=\"mr-orig__vital-reading-date\">{r.date}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  SmartSparkles_default,
4
4
  toVitalNoteRows
5
- } from "./chunk-B577FXQQ.mjs";
5
+ } from "./chunk-22QQK3VR.mjs";
6
6
  import {
7
7
  useParameterTrend,
8
8
  useRecordPanelTable,
@@ -20,9 +20,9 @@ import {
20
20
 
21
21
  // src/views/components/shared/OriginalRecordPanel.tsx
22
22
  import { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
23
- import { ChevronLeft, ChevronRight, ChevronDown, ExternalLink, Check, File, LoaderCircle } from "lucide-react";
23
+ import { ChevronLeft, ChevronRight, ChevronDown, ExternalLink, Check, LoaderCircle } from "lucide-react";
24
24
  import { useStore } from "zustand";
25
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
25
+ import { jsx, jsxs } from "react/jsx-runtime";
26
26
  var DocumentViewer = lazy(
27
27
  () => import("./DocumentViewer-5AXKL75U.mjs").then((m) => ({
28
28
  default: m.DocumentViewer
@@ -137,19 +137,21 @@ function OriginalRecordPanel({
137
137
  srAllSelected ? /* @__PURE__ */ new Set() : new Set(filteredRows.map((r) => r.key))
138
138
  );
139
139
  }, [srAllSelected, filteredRows]);
140
- const handleSrCopyToNote = useCallback(() => {
140
+ const handleSrCopyToNote = useCallback(async () => {
141
141
  const selectedRows = filteredRows.filter((r) => srSelected.has(r.key));
142
142
  if (!selectedRows.length) return;
143
143
  const text = buildVitalsText(selectedRows);
144
144
  if (onCopyVitalsToNote) {
145
- void onCopyVitalsToNote(text);
145
+ await onCopyVitalsToNote(text);
146
+ setSrSelected(/* @__PURE__ */ new Set());
146
147
  } else if (onCopyToNote) {
147
148
  const rect = srCopyBtnRef.current?.getBoundingClientRect();
148
- void onCopyToNote(
149
+ const result = await onCopyToNote(
149
150
  text,
150
151
  rect ? { x: rect.left + rect.width / 2, y: rect.bottom } : void 0,
151
152
  toVitalNoteRows(selectedRows)
152
153
  );
154
+ if (result !== false) setSrSelected(/* @__PURE__ */ new Set());
153
155
  }
154
156
  }, [filteredRows, srSelected, onCopyVitalsToNote, onCopyToNote]);
155
157
  const htmlCopyBtnRef = useRef(null);
@@ -187,122 +189,7 @@ function OriginalRecordPanel({
187
189
  /* @__PURE__ */ jsx(ChevronLeft, { size: 16, "aria-hidden": true }),
188
190
  "Back"
189
191
  ] }),
190
- showNavPicker ? /* @__PURE__ */ jsxs("div", { className: "mr-orig__nav-wrap", ref: dropdownRef, children: [
191
- /* @__PURE__ */ jsxs(
192
- "div",
193
- {
194
- className: `mr-orig__nav-pill${dropdownOpen ? " mr-orig__nav-pill--open" : ""}`,
195
- role: "button",
196
- tabIndex: 0,
197
- onClick: () => setDropdownOpen((v) => !v),
198
- onKeyDown: (e) => {
199
- if (e.key === "Enter" || e.key === " ") {
200
- e.preventDefault();
201
- setDropdownOpen((v) => !v);
202
- }
203
- },
204
- children: [
205
- /* @__PURE__ */ jsx(
206
- "button",
207
- {
208
- type: "button",
209
- className: "mr-orig__nav-chevron",
210
- onClick: (e) => {
211
- e.stopPropagation();
212
- goPrev();
213
- },
214
- "aria-label": "Previous record",
215
- disabled: currentIndex <= 0,
216
- children: /* @__PURE__ */ jsx(ChevronLeft, { size: 14, "aria-hidden": true })
217
- }
218
- ),
219
- /* @__PURE__ */ jsxs("div", { className: "mr-orig__nav-text", children: [
220
- /* @__PURE__ */ jsx("span", { className: "mr-orig__nav-title", children: record?.title ?? "Record" }),
221
- /* @__PURE__ */ jsxs("span", { className: "mr-orig__nav-counter", children: [
222
- currentIndex + 1,
223
- " of ",
224
- total
225
- ] })
226
- ] }),
227
- /* @__PURE__ */ jsx(
228
- "button",
229
- {
230
- type: "button",
231
- className: "mr-orig__nav-chevron",
232
- onClick: (e) => {
233
- e.stopPropagation();
234
- goNext();
235
- },
236
- "aria-label": "Next record",
237
- disabled: currentIndex >= total - 1,
238
- children: /* @__PURE__ */ jsx(ChevronRight, { size: 14, "aria-hidden": true })
239
- }
240
- )
241
- ]
242
- }
243
- ),
244
- dropdownOpen && /* @__PURE__ */ jsxs("div", { className: "mr-orig__dropdown", children: [
245
- /* @__PURE__ */ jsxs("div", { className: "mr-orig__dropdown-eyebrow", children: [
246
- total,
247
- " RECORD",
248
- total !== 1 ? "S" : "",
249
- " ",
250
- isUngrouped ? "WITH NO CARE CONTEXT" : "FOUND IN THIS ENCOUNTER"
251
- ] }),
252
- /* @__PURE__ */ jsx("div", { className: "mr-orig__dropdown-list", children: caseRecords.map((r) => {
253
- const isActive = r.id === recordId;
254
- return /* @__PURE__ */ jsxs(
255
- "button",
256
- {
257
- type: "button",
258
- className: `mr-orig__dropdown-item${isActive ? " mr-orig__dropdown-item--active" : ""}`,
259
- onClick: () => goTo(r),
260
- children: [
261
- /* @__PURE__ */ jsxs("div", { className: "mr-orig__dropdown-icon", children: [
262
- /* @__PURE__ */ jsx(File, { size: 16, "aria-hidden": true }),
263
- r.isSmart && /* @__PURE__ */ jsx(
264
- SmartSparkles_default,
265
- {
266
- className: "mr-orig__dropdown-smart-dot",
267
- "aria-label": "Smart report"
268
- }
269
- )
270
- ] }),
271
- /* @__PURE__ */ jsxs("div", { className: "mr-orig__dropdown-info", children: [
272
- /* @__PURE__ */ jsxs("div", { className: "mr-orig__dropdown-title-row", children: [
273
- /* @__PURE__ */ jsx("span", { className: "mr-orig__dropdown-title", children: r.title }),
274
- r.isSmart && /* @__PURE__ */ jsxs("span", { className: "mr-orig__dropdown-smart-badge", children: [
275
- /* @__PURE__ */ jsx(SmartSparkles_default, { "aria-hidden": true }),
276
- "Smart Report"
277
- ] }),
278
- r.fileType?.toUpperCase() === "HTML" && /* @__PURE__ */ jsx("span", { className: "mr-tag-chip mr-tag-chip--html", children: /* @__PURE__ */ jsx("span", { className: "mr-tag-chip__label", children: "HTML" }) })
279
- ] }),
280
- /* @__PURE__ */ jsxs("div", { className: "mr-orig__dropdown-meta", children: [
281
- /* @__PURE__ */ jsx("span", { children: epochToDisplay(r.createdAtEpoch) }),
282
- r.isSmart && r.totalVitals > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
283
- /* @__PURE__ */ jsx("span", { className: "mr-orig__dropdown-dot", children: "\xB7" }),
284
- /* @__PURE__ */ jsxs("span", { children: [
285
- r.totalVitals,
286
- " vitals"
287
- ] })
288
- ] })
289
- ] })
290
- ] }),
291
- isActive && /* @__PURE__ */ jsx(
292
- Check,
293
- {
294
- size: 14,
295
- className: "mr-orig__dropdown-check",
296
- "aria-hidden": true
297
- }
298
- )
299
- ]
300
- },
301
- r.id
302
- );
303
- }) })
304
- ] })
305
- ] }) : record ? /* @__PURE__ */ jsxs("div", { className: "mr-sv__panel-info", children: [
192
+ record ? /* @__PURE__ */ jsxs("div", { className: "mr-sv__panel-info", children: [
306
193
  /* @__PURE__ */ jsx(Typography, { variant: "label", as: "span", className: "mr-sv__panel-name", children: record.title }),
307
194
  /* @__PURE__ */ jsx(Typography, { variant: "hint", as: "span", className: "mr-sv__panel-meta-text", children: epochToDisplay(record.createdAtEpoch) })
308
195
  ] }) : null,
@@ -602,4 +489,4 @@ function VitalReadingsExpanded({ vitalName, ekaId }) {
602
489
  export {
603
490
  OriginalRecordPanel
604
491
  };
605
- //# sourceMappingURL=OriginalRecordPanel-E7DNIMJQ.mjs.map
492
+ //# sourceMappingURL=OriginalRecordPanel-NGLSSJLE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/views/components/shared/OriginalRecordPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ChevronLeft, ChevronRight, ChevronDown, ExternalLink, Check, File, LoaderCircle } 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 { useParameterTrend } from \"../../hooks/care-panel/useParameterTrend\";\nimport { epochToDisplay } from \"../../../helpers/formatters\";\nimport type { ParameterTrendResponse } from \"@eka-care/medical-records-ts-sdk\";\nimport { useSmartRecordsActions } from \"../../context/SmartRecordsActionsContext\";\nimport { IconButton, Typography, SearchInput, Tooltip } from \"widgets\";\nimport type { RecordItem } from \"../../../helpers\";\nimport type { PanelRow } from \"../../../helpers/vitalsPanel\";\nimport { toVitalNoteRows } 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 { replaceOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote, onToast } =\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 [expandedVital, setExpandedVital] = useState<string | null>(null);\n const toggleExpand = useCallback((key: string) => {\n setExpandedVital((prev) => (prev === key ? null : key));\n }, []);\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(\n (r): r is RecordItem =>\n r != null &&\n (caseId === \"__ungrouped__\" ? r.cases.length === 0 : r.cases.includes(caseId)),\n )\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 const isUngrouped = caseId === \"__ungrouped__\";\n\n const goTo = useCallback(\n (r: RecordItem) => {\n setDropdownOpen(false);\n replaceOriginal(r.id, caseId);\n },\n [replaceOriginal, caseId],\n );\n\n const goPrev = useCallback(() => {\n if (currentIndex > 0) goTo(caseRecords[currentIndex - 1]);\n }, [currentIndex, caseRecords, goTo]);\n\n const goNext = useCallback(() => {\n if (currentIndex < total - 1) goTo(caseRecords[currentIndex + 1]);\n }, [currentIndex, total, caseRecords, goTo]);\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 useEffect(() => {\n if (srTab === \"oor\" && oorRows.length === 0) setSrTab(\"all\");\n if (srTab === \"none\" && noInterpRows.length === 0) setSrTab(\"all\");\n }, [srTab, oorRows.length, noInterpRows.length]);\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(async () => {\n const selectedRows = filteredRows.filter((r) => srSelected.has(r.key));\n if (!selectedRows.length) return;\n const text = buildVitalsText(selectedRows);\n if (onCopyVitalsToNote) {\n await onCopyVitalsToNote(text);\n setSrSelected(new Set());\n } else if (onCopyToNote) {\n const rect = srCopyBtnRef.current?.getBoundingClientRect();\n const result = await onCopyToNote(\n text,\n rect ? { x: rect.left + rect.width / 2, y: rect.bottom } : undefined,\n toVitalNoteRows(selectedRows),\n );\n if (result !== false) setSrSelected(new Set());\n }\n }, [filteredRows, srSelected, onCopyVitalsToNote, onCopyToNote]);\n\n const htmlCopyBtnRef = useRef<HTMLButtonElement>(null);\n const [isHtmlCopying, setIsHtmlCopying] = useState(false);\n\n const handleHtmlCopyToNote = useCallback(async () => {\n const url = preview.files[0]?.url;\n if (!url) return;\n setIsHtmlCopying(true);\n try {\n const res = await fetch(url);\n const html = await res.text();\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n const text = doc.body.textContent?.trim() ?? \"\";\n if (!text) return;\n if (onCopyVitalsToNote) {\n void onCopyVitalsToNote(text);\n } else if (onCopyToNote) {\n const rect = htmlCopyBtnRef.current?.getBoundingClientRect();\n void onCopyToNote(\n text,\n rect ? { x: rect.left, y: rect.bottom } : undefined,\n );\n }\n } catch {\n onToast?.(\"Failed to copy document text\", \"error\");\n } finally {\n setIsHtmlCopying(false);\n }\n }, [preview.files, onCopyVitalsToNote, onCopyToNote, onToast]);\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 <button type=\"button\" className=\"mr-sv__back-btn\" onClick={onBack}>\n <ChevronLeft size={16} aria-hidden />\n Back\n </button>\n\n {/* Prev/next record carousel + dropdown — temporarily disabled, will re-enable later.\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) => { e.stopPropagation(); goPrev(); }}\n aria-label=\"Previous record\"\n disabled={currentIndex <= 0}\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) => { e.stopPropagation(); goNext(); }}\n aria-label=\"Next record\"\n disabled={currentIndex >= total - 1}\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\" : \"\"}{\" \"}\n {isUngrouped ? \"WITH NO CARE CONTEXT\" : \"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 {r.fileType?.toUpperCase() === \"HTML\" && (\n <span className=\"mr-tag-chip mr-tag-chip--html\">\n <span className=\"mr-tag-chip__label\">HTML</span>\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 </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 */}\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\n <div className=\"mr-orig__header-actions\">\n {preview.isHtml && hasCopyToNote && (\n <button\n ref={htmlCopyBtnRef}\n type=\"button\"\n className=\"mr-orig__html-copy-btn\"\n onClick={handleHtmlCopyToNote}\n disabled={isHtmlCopying}\n >\n {isHtmlCopying && <LoaderCircle size={12} className=\"mr-sv__loading-spinner\" aria-hidden />}\n Copy to note\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-row\">\n <span className=\"mr-orig__smart-title\">Smart Report</span>\n <SmartSparkles className=\"mr-orig__smart-title-icon\" aria-hidden />\n </span>\n <button\n type=\"button\"\n className=\"mr-sv__sidebar-collapse-btn mr-orig__smart-expanded-btn\"\n aria-label=\"Collapse smart report panel\"\n aria-expanded={true}\n onClick={() => setSmartPanelOpen(false)}\n >\n <ChevronRight size={14} aria-hidden />\n </button>\n </div>\n\n {/* Search */}\n <SearchInput\n className=\"mr-orig__smart-search\"\n iconSize={16}\n placeholder=\"Search vitals\"\n value={srSearch}\n onChange={setSrSearch}\n />\n\n {/* Filter tabs — only when at least one sub-category has data */}\n {(oorRows.length > 0 || noInterpRows.length > 0) && (\n <div className=\"mr-orig__smart-tabs-wrap\">\n <div className=\"mr-orig__smart-tabs\">\n {([\"all\", \"oor\", \"none\"] as SrTab[]).map((tab) => {\n if (tab === \"oor\" && oorRows.length === 0) return null;\n if (tab === \"none\" && noInterpRows.length === 0) return null;\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\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 mr-orig__vital-row--selectable${isSelected ? \" mr-orig__vital-row--selected\" : \"\"}`}\n onClick={() => toggleSrRow(row.key)}\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 {row.ekaId && (\n <button\n type=\"button\"\n className={`mr-orig__vital-expand-btn${expandedVital === row.key ? \" mr-orig__vital-expand-btn--open\" : \"\"}`}\n onClick={(e) => { e.stopPropagation(); toggleExpand(row.key); }}\n aria-label={expandedVital === row.key ? \"Collapse readings\" : \"Show latest readings\"}\n >\n <ChevronDown size={13} aria-hidden />\n </button>\n )}\n </div>\n {expandedVital === row.key && row.ekaId && (\n <VitalReadingsExpanded vitalName={row.name} ekaId={row.ekaId} />\n )}\n </div>\n );\n })}\n </div>\n\n {/* Footer */}\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\" onClick={toggleSrAll}>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={!srSomeSelected || !hasCopyToNote}\n onClick={handleSrCopyToNote}\n >\n Copy to note\n </button>\n </div>\n </div>\n ) : (\n <div className=\"mr-orig__smart-side mr-orig__smart-side--collapsed\">\n <Tooltip content=\"Show smart report\">\n <button\n type=\"button\"\n className=\"mr-sv__sidebar-collapse-btn mr-orig__smart-collapsed-btn\"\n aria-label=\"Expand smart report panel\"\n aria-expanded={false}\n onClick={() => setSmartPanelOpen(true)}\n >\n <span className=\"mr-orig__smart-collapsed-icon-wrap\">\n <SmartSparkles className=\"mr-orig__smart-collapsed-icon\" aria-hidden />\n </span>\n </button>\n </Tooltip>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction VitalReadingsExpanded({ vitalName, ekaId }: { vitalName: string; ekaId: string }) {\n const { data: trendData, status } = useParameterTrend(ekaId);\n\n const readings = useMemo(() => {\n const trend = trendData as ParameterTrendResponse | null;\n if (!trend?.vitals_info?.length) return [];\n return [...trend.vitals_info]\n .sort((a, b) => (b.date ?? 0) - (a.date ?? 0))\n .slice(0, 3)\n .map((info) => {\n const dr = (info.display_result ?? \"\").toLowerCase();\n const isOor = dr.includes(\"high\") || dr.includes(\"above\") || dr.includes(\"abnormal_high\") ||\n dr.includes(\"low\") || dr.includes(\"below\") || dr.includes(\"abnormal_low\");\n return {\n value: info.val != null ? String(info.val) : ((info as any).val_string ?? \"—\"),\n date: (info.display_time || \"\").replace(/['‘’]/g, \" \"),\n isOor,\n };\n });\n }, [trendData]);\n\n if (status === \"loading\") {\n return (\n <div className=\"mr-orig__vital-readings mr-orig__vital-readings--loading\">\n <LoaderCircle size={16} className=\"mr-sv__loading-spinner\" aria-hidden />\n </div>\n );\n }\n\n if (status === \"error\" || !readings.length) {\n return (\n <div className=\"mr-orig__vital-readings\">\n <Typography variant=\"muted\" className=\"mr-orig__vital-readings-empty\">\n No readings available\n </Typography>\n </div>\n );\n }\n\n return (\n <div className=\"mr-orig__vital-readings\">\n <div className=\"mr-orig__vital-readings-title\">\n LATEST READINGS FOR {vitalName.toUpperCase()}\n </div>\n <div className=\"mr-orig__vital-readings-grid\">\n {readings.map((r, i) => (\n <div key={i} className=\"mr-orig__vital-reading-item\">\n <span className={`mr-orig__vital-reading-value${r.isOor ? \" mr-orig__vital-reading-value--oor\" : \"\"}`}>{r.value}</span>\n <span className=\"mr-orig__vital-reading-date\">{r.date}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  VitalHistoryPanel
4
- } from "./chunk-IIAX5R33.mjs";
4
+ } from "./chunk-5TPILQYM.mjs";
5
5
  import "./chunk-7AO6M347.mjs";
6
6
  import "./chunk-NZNI6YJ5.mjs";
7
7
  export {
8
8
  VitalHistoryPanel
9
9
  };
10
- //# sourceMappingURL=VitalHistoryPanel-76GSKJPJ.mjs.map
10
+ //# sourceMappingURL=VitalHistoryPanel-FT5VMJ37.mjs.map
@@ -0,0 +1,10 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkKTHLLAAGjs = require('./chunk-KTHLLAAG.js');
5
+ require('./chunk-STQYPHI3.js');
6
+ require('./chunk-QGGLSO4W.js');
7
+
8
+
9
+ exports.VitalHistoryPanel = _chunkKTHLLAAGjs.VitalHistoryPanel;
10
+ //# sourceMappingURL=VitalHistoryPanel-VQQ27P6Q.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/VitalHistoryPanel-7GT3GZEJ.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-7GT3GZEJ.js"}
1
+ {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/VitalHistoryPanel-VQQ27P6Q.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-VQQ27P6Q.js"}
@@ -51,7 +51,7 @@ function toVitalNoteRowsAllReadings(rows) {
51
51
  return { name: r.name, value: readings[0]?.value ?? "\u2014", unit: r.unit, refRange: r.refRange, readings };
52
52
  });
53
53
  }
54
- var READING_COLUMNS = ["Latest", "Previous", "Older"];
54
+ var READING_COLUMNS = ["Reading", "Trend Value 1", "Trend Value 2", "Trend Value 3"];
55
55
  function statusFromLog(log) {
56
56
  const label = (log.display_result ?? "").toLowerCase();
57
57
  if (label.includes("high") || label.includes("above")) return "high";
@@ -93,4 +93,4 @@ export {
93
93
  toVitalNoteRowsAllReadings,
94
94
  latestTrendCells
95
95
  };
96
- //# sourceMappingURL=chunk-B577FXQQ.mjs.map
96
+ //# sourceMappingURL=chunk-22QQK3VR.mjs.map