@eka-care/medical-records-ui 1.0.39 → 1.0.43

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 (62) hide show
  1. package/dist/{OriginalRecordPanel-PVNAZ5CR.js → OriginalRecordPanel-UHNIWIT3.js} +63 -61
  2. package/dist/OriginalRecordPanel-UHNIWIT3.js.map +1 -0
  3. package/dist/{OriginalRecordPanel-W6FNO7U2.mjs → OriginalRecordPanel-XU6ZYBPB.mjs} +45 -43
  4. package/dist/OriginalRecordPanel-XU6ZYBPB.mjs.map +1 -0
  5. package/dist/SmartUploadModal-4NFBULTI.js +9 -0
  6. package/dist/{SmartUploadModal-DOEIOLQU.js.map → SmartUploadModal-4NFBULTI.js.map} +1 -1
  7. package/dist/SmartUploadModal-II4GAIZO.mjs +9 -0
  8. package/dist/VitalHistoryPanel-2ZH4QOAP.mjs +10 -0
  9. package/dist/VitalHistoryPanel-VNSNMPBP.js +10 -0
  10. package/dist/{VitalHistoryPanel-WKBIR2RD.js.map → VitalHistoryPanel-VNSNMPBP.js.map} +1 -1
  11. package/dist/{chunk-LUH7D3K7.mjs → chunk-2QLZBSDH.mjs} +123 -11
  12. package/dist/chunk-2QLZBSDH.mjs.map +1 -0
  13. package/dist/chunk-A6OYP7CY.mjs +40 -0
  14. package/dist/chunk-A6OYP7CY.mjs.map +1 -0
  15. package/dist/{chunk-VBMKRSTX.js → chunk-APAMRQEM.js} +57 -83
  16. package/dist/chunk-APAMRQEM.js.map +1 -0
  17. package/dist/{chunk-ESURVA6B.js → chunk-BUBHVTFB.js} +21 -21
  18. package/dist/{chunk-ESURVA6B.js.map → chunk-BUBHVTFB.js.map} +1 -1
  19. package/dist/{chunk-5TQ6OPAQ.mjs → chunk-GDGLQD4W.mjs} +47 -73
  20. package/dist/chunk-GDGLQD4W.mjs.map +1 -0
  21. package/dist/{chunk-4MEMDAB5.mjs → chunk-KFSHL25P.mjs} +7 -3
  22. package/dist/chunk-KFSHL25P.mjs.map +1 -0
  23. package/dist/chunk-LV7EI4MZ.js +40 -0
  24. package/dist/chunk-LV7EI4MZ.js.map +1 -0
  25. package/dist/{chunk-YT6OD4YU.js → chunk-OIN3TV63.js} +128 -16
  26. package/dist/chunk-OIN3TV63.js.map +1 -0
  27. package/dist/{chunk-57BG7LVP.js → chunk-P7LLGYUQ.js} +7 -3
  28. package/dist/chunk-P7LLGYUQ.js.map +1 -0
  29. package/dist/{chunk-3P36QOHC.mjs → chunk-RXQLS6QF.mjs} +2 -2
  30. package/dist/index.css +94 -41
  31. package/dist/index.css.map +1 -1
  32. package/dist/index.js +178 -172
  33. package/dist/index.js.map +1 -1
  34. package/dist/index.mjs +86 -80
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/styles.css +94 -41
  37. package/dist/styles.css.map +1 -1
  38. package/dist/{widgets-KNUDQAKD.mjs → widgets-4KYAUU6R.mjs} +2 -2
  39. package/dist/widgets-WAYNWNMG.js +43 -0
  40. package/dist/{widgets-DYR6LERQ.js.map → widgets-WAYNWNMG.js.map} +1 -1
  41. package/package.json +4 -1
  42. package/dist/OriginalRecordPanel-PVNAZ5CR.js.map +0 -1
  43. package/dist/OriginalRecordPanel-W6FNO7U2.mjs.map +0 -1
  44. package/dist/SmartUploadModal-DOEIOLQU.js +0 -9
  45. package/dist/SmartUploadModal-SMDIOE3L.mjs +0 -9
  46. package/dist/VitalHistoryPanel-WI44AXJU.mjs +0 -10
  47. package/dist/VitalHistoryPanel-WKBIR2RD.js +0 -10
  48. package/dist/chunk-4MEMDAB5.mjs.map +0 -1
  49. package/dist/chunk-57BG7LVP.js.map +0 -1
  50. package/dist/chunk-5TQ6OPAQ.mjs.map +0 -1
  51. package/dist/chunk-GKREOUK2.js +0 -158
  52. package/dist/chunk-GKREOUK2.js.map +0 -1
  53. package/dist/chunk-LUH7D3K7.mjs.map +0 -1
  54. package/dist/chunk-MRQMRFWX.mjs +0 -158
  55. package/dist/chunk-MRQMRFWX.mjs.map +0 -1
  56. package/dist/chunk-VBMKRSTX.js.map +0 -1
  57. package/dist/chunk-YT6OD4YU.js.map +0 -1
  58. package/dist/widgets-DYR6LERQ.js +0 -43
  59. /package/dist/{SmartUploadModal-SMDIOE3L.mjs.map → SmartUploadModal-II4GAIZO.mjs.map} +0 -0
  60. /package/dist/{VitalHistoryPanel-WI44AXJU.mjs.map → VitalHistoryPanel-2ZH4QOAP.mjs.map} +0 -0
  61. /package/dist/{chunk-3P36QOHC.mjs.map → chunk-RXQLS6QF.mjs.map} +0 -0
  62. /package/dist/{widgets-KNUDQAKD.mjs.map → widgets-4KYAUU6R.mjs.map} +0 -0
@@ -1,20 +1,21 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
+ var _chunkLV7EI4MZjs = require('./chunk-LV7EI4MZ.js');
4
5
 
5
- var _chunkGKREOUK2js = require('./chunk-GKREOUK2.js');
6
6
 
7
7
 
8
8
 
9
9
 
10
- var _chunkYT6OD4YUjs = require('./chunk-YT6OD4YU.js');
10
+ var _chunkOIN3TV63js = require('./chunk-OIN3TV63.js');
11
11
 
12
12
 
13
13
 
14
14
 
15
15
 
16
16
 
17
- var _chunk57BG7LVPjs = require('./chunk-57BG7LVP.js');
17
+
18
+ var _chunkP7LLGYUQjs = require('./chunk-P7LLGYUQ.js');
18
19
 
19
20
  // src/views/components/shared/OriginalRecordPanel.tsx
20
21
  var _react = require('react');
@@ -38,12 +39,12 @@ function OriginalRecordPanel({
38
39
  caseId,
39
40
  onBack
40
41
  }) {
41
- const { store } = _chunk57BG7LVPjs.useSdk.call(void 0, );
42
+ const { store } = _chunkP7LLGYUQjs.useSdk.call(void 0, );
42
43
  const record = _zustand.useStore.call(void 0, store, (s) => s.records.byId[recordId]);
43
44
  const recordsById = _zustand.useStore.call(void 0, store, (s) => s.records.byId);
44
- const preview = _chunkYT6OD4YUjs.useRecordPreview.call(void 0, recordId);
45
- const { replaceOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote } = _chunkYT6OD4YUjs.useSmartRecordsActions.call(void 0, );
46
- const { status: vitalsStatus, table } = _chunkGKREOUK2js.useRecordPanelTable.call(void 0,
45
+ const preview = _chunkOIN3TV63js.useRecordPreview.call(void 0, recordId);
46
+ const { replaceOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote, onToast } = _chunkOIN3TV63js.useSmartRecordsActions.call(void 0, );
47
+ const { status: vitalsStatus, table } = _chunkOIN3TV63js.useRecordPanelTable.call(void 0,
47
48
  _optionalChain([record, 'optionalAccess', _3 => _3.isSmart]) ? recordId : null
48
49
  );
49
50
  const [smartPanelOpen, setSmartPanelOpen] = _react.useState.call(void 0, true);
@@ -69,10 +70,13 @@ function OriginalRecordPanel({
69
70
  }, [dropdownOpen]);
70
71
  const caseRecords = _react.useMemo.call(void 0, () => {
71
72
  if (!caseId) return [];
72
- return Object.values(recordsById).filter((r) => r != null && r.cases.includes(caseId)).sort((a, b) => b.createdAtEpoch - a.createdAtEpoch);
73
+ return Object.values(recordsById).filter(
74
+ (r) => r != null && (caseId === "__ungrouped__" ? r.cases.length === 0 : r.cases.includes(caseId))
75
+ ).sort((a, b) => b.createdAtEpoch - a.createdAtEpoch);
73
76
  }, [recordsById, caseId]);
74
77
  const currentIndex = caseRecords.findIndex((r) => r.id === recordId);
75
78
  const total = caseRecords.length;
79
+ const isUngrouped = caseId === "__ungrouped__";
76
80
  const goTo = _react.useCallback.call(void 0,
77
81
  (r) => {
78
82
  setDropdownOpen(false);
@@ -167,24 +171,20 @@ function OriginalRecordPanel({
167
171
  rect ? { x: rect.left, y: rect.bottom } : void 0
168
172
  );
169
173
  }
174
+ } catch (e2) {
175
+ _optionalChain([onToast, 'optionalCall', _17 => _17("Failed to copy document text", "error")]);
170
176
  } finally {
171
177
  setIsHtmlCopying(false);
172
178
  }
173
- }, [preview.files, onCopyVitalsToNote, onCopyToNote]);
174
- const isSmart = _nullishCoalesce(_optionalChain([record, 'optionalAccess', _17 => _17.isSmart]), () => ( false));
179
+ }, [preview.files, onCopyVitalsToNote, onCopyToNote, onToast]);
180
+ const isSmart = _nullishCoalesce(_optionalChain([record, 'optionalAccess', _18 => _18.isSmart]), () => ( false));
175
181
  const hasPreview = preview.status === "loaded" && preview.files.length > 0;
176
182
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel", children: [
177
183
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel-header", children: [
178
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
179
- _chunk57BG7LVPjs.IconButton,
180
- {
181
- icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft, { size: 16, "aria-hidden": true }),
182
- label: "Back",
183
- variant: "ghost",
184
- size: "sm",
185
- onClick: onBack
186
- }
187
- ),
184
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "button", { type: "button", className: "mr-sv__back-btn", onClick: onBack, children: [
185
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronLeft, { size: 16, "aria-hidden": true }),
186
+ "Back"
187
+ ] }),
188
188
  showNavPicker ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__nav-wrap", ref: dropdownRef, children: [
189
189
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
190
190
  "div",
@@ -215,7 +215,7 @@ function OriginalRecordPanel({
215
215
  }
216
216
  ),
217
217
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__nav-text", children: [
218
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__nav-title", children: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _18 => _18.title]), () => ( "Record")) }),
218
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__nav-title", children: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _19 => _19.title]), () => ( "Record")) }),
219
219
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-orig__nav-counter", children: [
220
220
  currentIndex + 1,
221
221
  " of ",
@@ -244,7 +244,8 @@ function OriginalRecordPanel({
244
244
  total,
245
245
  " RECORD",
246
246
  total !== 1 ? "S" : "",
247
- " FOUND IN THIS ENCOUNTER"
247
+ " ",
248
+ isUngrouped ? "WITH NO CARE CONTEXT" : "FOUND IN THIS ENCOUNTER"
248
249
  ] }),
249
250
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mr-orig__dropdown-list", children: caseRecords.map((r) => {
250
251
  const isActive = r.id === recordId;
@@ -258,7 +259,7 @@ function OriginalRecordPanel({
258
259
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-icon", children: [
259
260
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.File, { size: 16, "aria-hidden": true }),
260
261
  r.isSmart && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
261
- _chunkGKREOUK2js.SmartSparkles_default,
262
+ _chunkLV7EI4MZjs.SmartSparkles_default,
262
263
  {
263
264
  className: "mr-orig__dropdown-smart-dot",
264
265
  "aria-label": "Smart report"
@@ -269,12 +270,13 @@ function OriginalRecordPanel({
269
270
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-title-row", children: [
270
271
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__dropdown-title", children: r.title }),
271
272
  r.isSmart && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-orig__dropdown-smart-badge", children: [
272
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGKREOUK2js.SmartSparkles_default, { "aria-hidden": true }),
273
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLV7EI4MZjs.SmartSparkles_default, { "aria-hidden": true }),
273
274
  "Smart Report"
274
- ] })
275
+ ] }),
276
+ _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" }) })
275
277
  ] }),
276
278
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__dropdown-meta", children: [
277
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunk57BG7LVPjs.epochToDisplay.call(void 0, r.createdAtEpoch) }),
279
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunkP7LLGYUQjs.epochToDisplay.call(void 0, r.createdAtEpoch) }),
278
280
  r.isSmart && r.totalVitals > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
279
281
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__dropdown-dot", children: "\xB7" }),
280
282
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
@@ -306,22 +308,10 @@ function OriginalRecordPanel({
306
308
  }) })
307
309
  ] })
308
310
  ] }) : record ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-sv__panel-info", children: [
309
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "label", as: "span", className: "mr-sv__panel-name", children: record.title }),
310
- /* @__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) })
311
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkP7LLGYUQjs.Typography, { variant: "label", as: "span", className: "mr-sv__panel-name", children: record.title }),
312
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkP7LLGYUQjs.Typography, { variant: "hint", as: "span", className: "mr-sv__panel-meta-text", children: _chunkP7LLGYUQjs.epochToDisplay.call(void 0, record.createdAtEpoch) })
311
313
  ] }) : null,
312
314
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__header-actions", children: [
313
- isSmart && !smartPanelOpen && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
314
- "button",
315
- {
316
- type: "button",
317
- className: "mr-orig__show-smart-btn",
318
- onClick: () => setSmartPanelOpen(true),
319
- children: [
320
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGKREOUK2js.SmartSparkles_default, { "aria-hidden": true }),
321
- "Smart Report"
322
- ]
323
- }
324
- ),
325
315
  preview.isHtml && hasCopyToNote && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
326
316
  "button",
327
317
  {
@@ -337,7 +327,7 @@ function OriginalRecordPanel({
337
327
  }
338
328
  ),
339
329
  hasPreview && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
340
- _chunk57BG7LVPjs.IconButton,
330
+ _chunkP7LLGYUQjs.IconButton,
341
331
  {
342
332
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { size: 16, "aria-hidden": true }),
343
333
  label: "Open in new tab",
@@ -366,8 +356,8 @@ function OriginalRecordPanel({
366
356
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { size: 44, className: "mr-sv__loading-spinner", "aria-hidden": true })
367
357
  }
368
358
  ),
369
- preview.status === "error" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "muted", className: "mr-sv__panel-empty", children: "Failed to load document preview." }),
370
- 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." }),
359
+ preview.status === "error" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkP7LLGYUQjs.Typography, { variant: "muted", className: "mr-sv__panel-empty", children: "Failed to load document preview." }),
360
+ preview.status === "loaded" && preview.files.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkP7LLGYUQjs.Typography, { variant: "muted", className: "mr-sv__panel-empty", children: "No preview available for this record." }),
371
361
  hasPreview && !isSmart && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
372
362
  "div",
373
363
  {
@@ -377,7 +367,7 @@ function OriginalRecordPanel({
377
367
  DocumentViewer,
378
368
  {
379
369
  files: preview.files,
380
- title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _19 => _19.title]), () => ( "")),
370
+ title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _23 => _23.title]), () => ( "")),
381
371
  isHtml: preview.isHtml
382
372
  }
383
373
  ) })
@@ -388,26 +378,30 @@ function OriginalRecordPanel({
388
378
  DocumentViewer,
389
379
  {
390
380
  files: preview.files,
391
- title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _20 => _20.title]), () => ( "")),
381
+ title: _nullishCoalesce(_optionalChain([record, 'optionalAccess', _24 => _24.title]), () => ( "")),
392
382
  isHtml: preview.isHtml
393
383
  }
394
384
  ) }) }),
395
- smartPanelOpen && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__smart-side", children: [
385
+ smartPanelOpen ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__smart-side", children: [
396
386
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__smart-hdr", children: [
397
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__smart-title", children: "Smart Report" }),
387
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-orig__smart-title-row", children: [
388
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__smart-title", children: "Smart Report" }),
389
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLV7EI4MZjs.SmartSparkles_default, { className: "mr-orig__smart-title-icon", "aria-hidden": true })
390
+ ] }),
398
391
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
399
392
  "button",
400
393
  {
401
394
  type: "button",
402
- className: "mr-orig__smart-collapse-btn",
395
+ className: "mr-sv__sidebar-collapse-btn mr-orig__smart-expanded-btn",
403
396
  "aria-label": "Collapse smart report panel",
397
+ "aria-expanded": true,
404
398
  onClick: () => setSmartPanelOpen(false),
405
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, { size: 16, "aria-hidden": true })
399
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, { size: 14, "aria-hidden": true })
406
400
  }
407
401
  )
408
402
  ] }),
409
403
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
410
- _chunk57BG7LVPjs.SearchInput_default,
404
+ _chunkP7LLGYUQjs.SearchInput_default,
411
405
  {
412
406
  className: "mr-orig__smart-search",
413
407
  iconSize: 16,
@@ -446,7 +440,7 @@ function OriginalRecordPanel({
446
440
  "aria-hidden": true
447
441
  }
448
442
  ) }),
449
- vitalsStatus === "loaded" && filteredRows.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "muted", className: "mr-orig__smart-empty", children: "No vitals match." }),
443
+ vitalsStatus === "loaded" && filteredRows.length === 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkP7LLGYUQjs.Typography, { variant: "muted", className: "mr-orig__smart-empty", children: "No vitals match." }),
450
444
  vitalsStatus === "loaded" && filteredRows.map((row, idx) => {
451
445
  const cell = row.cells[0];
452
446
  const isOor = row.latestStatus === "high" || row.latestStatus === "low";
@@ -542,7 +536,7 @@ function OriginalRecordPanel({
542
536
  children: srAllSelected && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { size: 10, strokeWidth: 3 })
543
537
  }
544
538
  ),
545
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-cc-table__footer-label", children: "Select all" }),
539
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-cc-table__footer-label", onClick: toggleSrAll, children: "Select all" }),
546
540
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "mr-cc-table__footer-count", children: [
547
541
  srSelected.size,
548
542
  " of ",
@@ -561,7 +555,17 @@ function OriginalRecordPanel({
561
555
  }
562
556
  )
563
557
  ] })
564
- ] })
558
+ ] }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mr-orig__smart-side mr-orig__smart-side--collapsed", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkP7LLGYUQjs.Tooltip, { content: "Show smart report", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
559
+ "button",
560
+ {
561
+ type: "button",
562
+ className: "mr-sv__sidebar-collapse-btn mr-orig__smart-collapsed-btn",
563
+ "aria-label": "Expand smart report panel",
564
+ "aria-expanded": false,
565
+ onClick: () => setSmartPanelOpen(true),
566
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "mr-orig__smart-collapsed-icon-wrap", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLV7EI4MZjs.SmartSparkles_default, { className: "mr-orig__smart-collapsed-icon", "aria-hidden": true }) })
567
+ }
568
+ ) }) })
565
569
  ] })
566
570
  ]
567
571
  }
@@ -569,27 +573,25 @@ function OriginalRecordPanel({
569
573
  ] });
570
574
  }
571
575
  function VitalReadingsExpanded({ vitalName, ekaId }) {
572
- const { store } = _chunk57BG7LVPjs.useSdk.call(void 0, );
573
- const recordsById = _zustand.useStore.call(void 0, store, (s) => s.records.byId);
574
- const { data: trendData, status } = _chunkYT6OD4YUjs.useParameterTrend.call(void 0, ekaId);
576
+ const { data: trendData, status } = _chunkOIN3TV63js.useParameterTrend.call(void 0, ekaId);
575
577
  const readings = _react.useMemo.call(void 0, () => {
576
578
  const trend = trendData;
577
- if (!_optionalChain([trend, 'optionalAccess', _21 => _21.vitals_info, 'optionalAccess', _22 => _22.length])) return [];
579
+ if (!_optionalChain([trend, 'optionalAccess', _25 => _25.vitals_info, 'optionalAccess', _26 => _26.length])) return [];
578
580
  return [...trend.vitals_info].sort((a, b) => (_nullishCoalesce(b.date, () => ( 0))) - (_nullishCoalesce(a.date, () => ( 0)))).slice(0, 3).map((info) => {
579
581
  const dr = (_nullishCoalesce(info.display_result, () => ( ""))).toLowerCase();
580
582
  const isOor = dr.includes("high") || dr.includes("above") || dr.includes("abnormal_high") || dr.includes("low") || dr.includes("below") || dr.includes("abnormal_low");
581
583
  return {
582
584
  value: info.val != null ? String(info.val) : _nullishCoalesce(info.val_string, () => ( "\u2014")),
583
- date: _chunk57BG7LVPjs.epochToDisplay.call(void 0, _nullishCoalesce(_optionalChain([recordsById, 'access', _23 => _23[info.document_id], 'optionalAccess', _24 => _24.createdAtEpoch]), () => ( 0))),
585
+ date: info.display_time || "",
584
586
  isOor
585
587
  };
586
588
  });
587
- }, [trendData, recordsById]);
589
+ }, [trendData]);
588
590
  if (status === "loading") {
589
591
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mr-orig__vital-readings mr-orig__vital-readings--loading", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { size: 16, className: "mr-sv__loading-spinner", "aria-hidden": true }) });
590
592
  }
591
593
  if (status === "error" || !readings.length) {
592
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mr-orig__vital-readings", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk57BG7LVPjs.Typography, { variant: "muted", className: "mr-orig__vital-readings-empty", children: "No readings available" }) });
594
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mr-orig__vital-readings", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkP7LLGYUQjs.Typography, { variant: "muted", className: "mr-orig__vital-readings-empty", children: "No readings available" }) });
593
595
  }
594
596
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__vital-readings", children: [
595
597
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mr-orig__vital-readings-title", children: [
@@ -605,4 +607,4 @@ function VitalReadingsExpanded({ vitalName, ekaId }) {
605
607
 
606
608
 
607
609
  exports.OriginalRecordPanel = OriginalRecordPanel;
608
- //# sourceMappingURL=OriginalRecordPanel-PVNAZ5CR.js.map
610
+ //# sourceMappingURL=OriginalRecordPanel-UHNIWIT3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/medical-records-ui/medical-records-ui/dist/OriginalRecordPanel-UHNIWIT3.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-UHNIWIT3.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 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(() => {\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 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 {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 {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 {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 || \"\",\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"]}
@@ -1,20 +1,21 @@
1
1
  "use client";
2
2
  import {
3
- SmartSparkles_default,
4
- useRecordPanelTable
5
- } from "./chunk-MRQMRFWX.mjs";
3
+ SmartSparkles_default
4
+ } from "./chunk-A6OYP7CY.mjs";
6
5
  import {
7
6
  useParameterTrend,
7
+ useRecordPanelTable,
8
8
  useRecordPreview,
9
9
  useSmartRecordsActions
10
- } from "./chunk-LUH7D3K7.mjs";
10
+ } from "./chunk-2QLZBSDH.mjs";
11
11
  import {
12
12
  IconButton,
13
13
  SearchInput_default,
14
+ Tooltip,
14
15
  Typography,
15
16
  epochToDisplay,
16
17
  useSdk
17
- } from "./chunk-4MEMDAB5.mjs";
18
+ } from "./chunk-KFSHL25P.mjs";
18
19
 
19
20
  // src/views/components/shared/OriginalRecordPanel.tsx
20
21
  import { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -42,7 +43,7 @@ function OriginalRecordPanel({
42
43
  const record = useStore(store, (s) => s.records.byId[recordId]);
43
44
  const recordsById = useStore(store, (s) => s.records.byId);
44
45
  const preview = useRecordPreview(recordId);
45
- const { replaceOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote } = useSmartRecordsActions();
46
+ const { replaceOriginal, onCopyToNote, onCopyVitalsToNote, hasCopyToNote, onToast } = useSmartRecordsActions();
46
47
  const { status: vitalsStatus, table } = useRecordPanelTable(
47
48
  record?.isSmart ? recordId : null
48
49
  );
@@ -69,10 +70,13 @@ function OriginalRecordPanel({
69
70
  }, [dropdownOpen]);
70
71
  const caseRecords = useMemo(() => {
71
72
  if (!caseId) return [];
72
- return Object.values(recordsById).filter((r) => r != null && r.cases.includes(caseId)).sort((a, b) => b.createdAtEpoch - a.createdAtEpoch);
73
+ return Object.values(recordsById).filter(
74
+ (r) => r != null && (caseId === "__ungrouped__" ? r.cases.length === 0 : r.cases.includes(caseId))
75
+ ).sort((a, b) => b.createdAtEpoch - a.createdAtEpoch);
73
76
  }, [recordsById, caseId]);
74
77
  const currentIndex = caseRecords.findIndex((r) => r.id === recordId);
75
78
  const total = caseRecords.length;
79
+ const isUngrouped = caseId === "__ungrouped__";
76
80
  const goTo = useCallback(
77
81
  (r) => {
78
82
  setDropdownOpen(false);
@@ -167,24 +171,20 @@ function OriginalRecordPanel({
167
171
  rect ? { x: rect.left, y: rect.bottom } : void 0
168
172
  );
169
173
  }
174
+ } catch {
175
+ onToast?.("Failed to copy document text", "error");
170
176
  } finally {
171
177
  setIsHtmlCopying(false);
172
178
  }
173
- }, [preview.files, onCopyVitalsToNote, onCopyToNote]);
179
+ }, [preview.files, onCopyVitalsToNote, onCopyToNote, onToast]);
174
180
  const isSmart = record?.isSmart ?? false;
175
181
  const hasPreview = preview.status === "loaded" && preview.files.length > 0;
176
182
  return /* @__PURE__ */ jsxs("div", { className: "mr-sv__panel", children: [
177
183
  /* @__PURE__ */ jsxs("div", { className: "mr-sv__panel-header", children: [
178
- /* @__PURE__ */ jsx(
179
- IconButton,
180
- {
181
- icon: /* @__PURE__ */ jsx(ChevronLeft, { size: 16, "aria-hidden": true }),
182
- label: "Back",
183
- variant: "ghost",
184
- size: "sm",
185
- onClick: onBack
186
- }
187
- ),
184
+ /* @__PURE__ */ jsxs("button", { type: "button", className: "mr-sv__back-btn", onClick: onBack, children: [
185
+ /* @__PURE__ */ jsx(ChevronLeft, { size: 16, "aria-hidden": true }),
186
+ "Back"
187
+ ] }),
188
188
  showNavPicker ? /* @__PURE__ */ jsxs("div", { className: "mr-orig__nav-wrap", ref: dropdownRef, children: [
189
189
  /* @__PURE__ */ jsxs(
190
190
  "div",
@@ -244,7 +244,8 @@ function OriginalRecordPanel({
244
244
  total,
245
245
  " RECORD",
246
246
  total !== 1 ? "S" : "",
247
- " FOUND IN THIS ENCOUNTER"
247
+ " ",
248
+ isUngrouped ? "WITH NO CARE CONTEXT" : "FOUND IN THIS ENCOUNTER"
248
249
  ] }),
249
250
  /* @__PURE__ */ jsx("div", { className: "mr-orig__dropdown-list", children: caseRecords.map((r) => {
250
251
  const isActive = r.id === recordId;
@@ -271,7 +272,8 @@ function OriginalRecordPanel({
271
272
  r.isSmart && /* @__PURE__ */ jsxs("span", { className: "mr-orig__dropdown-smart-badge", children: [
272
273
  /* @__PURE__ */ jsx(SmartSparkles_default, { "aria-hidden": true }),
273
274
  "Smart Report"
274
- ] })
275
+ ] }),
276
+ 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" }) })
275
277
  ] }),
276
278
  /* @__PURE__ */ jsxs("div", { className: "mr-orig__dropdown-meta", children: [
277
279
  /* @__PURE__ */ jsx("span", { children: epochToDisplay(r.createdAtEpoch) }),
@@ -310,18 +312,6 @@ function OriginalRecordPanel({
310
312
  /* @__PURE__ */ jsx(Typography, { variant: "hint", as: "span", className: "mr-sv__panel-meta-text", children: epochToDisplay(record.createdAtEpoch) })
311
313
  ] }) : null,
312
314
  /* @__PURE__ */ jsxs("div", { className: "mr-orig__header-actions", children: [
313
- isSmart && !smartPanelOpen && /* @__PURE__ */ jsxs(
314
- "button",
315
- {
316
- type: "button",
317
- className: "mr-orig__show-smart-btn",
318
- onClick: () => setSmartPanelOpen(true),
319
- children: [
320
- /* @__PURE__ */ jsx(SmartSparkles_default, { "aria-hidden": true }),
321
- "Smart Report"
322
- ]
323
- }
324
- ),
325
315
  preview.isHtml && hasCopyToNote && /* @__PURE__ */ jsxs(
326
316
  "button",
327
317
  {
@@ -392,17 +382,21 @@ function OriginalRecordPanel({
392
382
  isHtml: preview.isHtml
393
383
  }
394
384
  ) }) }),
395
- smartPanelOpen && /* @__PURE__ */ jsxs("div", { className: "mr-orig__smart-side", children: [
385
+ smartPanelOpen ? /* @__PURE__ */ jsxs("div", { className: "mr-orig__smart-side", children: [
396
386
  /* @__PURE__ */ jsxs("div", { className: "mr-orig__smart-hdr", children: [
397
- /* @__PURE__ */ jsx("span", { className: "mr-orig__smart-title", children: "Smart Report" }),
387
+ /* @__PURE__ */ jsxs("span", { className: "mr-orig__smart-title-row", children: [
388
+ /* @__PURE__ */ jsx("span", { className: "mr-orig__smart-title", children: "Smart Report" }),
389
+ /* @__PURE__ */ jsx(SmartSparkles_default, { className: "mr-orig__smart-title-icon", "aria-hidden": true })
390
+ ] }),
398
391
  /* @__PURE__ */ jsx(
399
392
  "button",
400
393
  {
401
394
  type: "button",
402
- className: "mr-orig__smart-collapse-btn",
395
+ className: "mr-sv__sidebar-collapse-btn mr-orig__smart-expanded-btn",
403
396
  "aria-label": "Collapse smart report panel",
397
+ "aria-expanded": true,
404
398
  onClick: () => setSmartPanelOpen(false),
405
- children: /* @__PURE__ */ jsx(ChevronRight, { size: 16, "aria-hidden": true })
399
+ children: /* @__PURE__ */ jsx(ChevronRight, { size: 14, "aria-hidden": true })
406
400
  }
407
401
  )
408
402
  ] }),
@@ -542,7 +536,7 @@ function OriginalRecordPanel({
542
536
  children: srAllSelected && /* @__PURE__ */ jsx(Check, { size: 10, strokeWidth: 3 })
543
537
  }
544
538
  ),
545
- /* @__PURE__ */ jsx("span", { className: "mr-cc-table__footer-label", children: "Select all" }),
539
+ /* @__PURE__ */ jsx("span", { className: "mr-cc-table__footer-label", onClick: toggleSrAll, children: "Select all" }),
546
540
  /* @__PURE__ */ jsxs("span", { className: "mr-cc-table__footer-count", children: [
547
541
  srSelected.size,
548
542
  " of ",
@@ -561,7 +555,17 @@ function OriginalRecordPanel({
561
555
  }
562
556
  )
563
557
  ] })
564
- ] })
558
+ ] }) : /* @__PURE__ */ jsx("div", { className: "mr-orig__smart-side mr-orig__smart-side--collapsed", children: /* @__PURE__ */ jsx(Tooltip, { content: "Show smart report", children: /* @__PURE__ */ jsx(
559
+ "button",
560
+ {
561
+ type: "button",
562
+ className: "mr-sv__sidebar-collapse-btn mr-orig__smart-collapsed-btn",
563
+ "aria-label": "Expand smart report panel",
564
+ "aria-expanded": false,
565
+ onClick: () => setSmartPanelOpen(true),
566
+ children: /* @__PURE__ */ jsx("span", { className: "mr-orig__smart-collapsed-icon-wrap", children: /* @__PURE__ */ jsx(SmartSparkles_default, { className: "mr-orig__smart-collapsed-icon", "aria-hidden": true }) })
567
+ }
568
+ ) }) })
565
569
  ] })
566
570
  ]
567
571
  }
@@ -569,8 +573,6 @@ function OriginalRecordPanel({
569
573
  ] });
570
574
  }
571
575
  function VitalReadingsExpanded({ vitalName, ekaId }) {
572
- const { store } = useSdk();
573
- const recordsById = useStore(store, (s) => s.records.byId);
574
576
  const { data: trendData, status } = useParameterTrend(ekaId);
575
577
  const readings = useMemo(() => {
576
578
  const trend = trendData;
@@ -580,11 +582,11 @@ function VitalReadingsExpanded({ vitalName, ekaId }) {
580
582
  const isOor = dr.includes("high") || dr.includes("above") || dr.includes("abnormal_high") || dr.includes("low") || dr.includes("below") || dr.includes("abnormal_low");
581
583
  return {
582
584
  value: info.val != null ? String(info.val) : info.val_string ?? "\u2014",
583
- date: epochToDisplay(recordsById[info.document_id]?.createdAtEpoch ?? 0),
585
+ date: info.display_time || "",
584
586
  isOor
585
587
  };
586
588
  });
587
- }, [trendData, recordsById]);
589
+ }, [trendData]);
588
590
  if (status === "loading") {
589
591
  return /* @__PURE__ */ jsx("div", { className: "mr-orig__vital-readings mr-orig__vital-readings--loading", children: /* @__PURE__ */ jsx(LoaderCircle, { size: 16, className: "mr-sv__loading-spinner", "aria-hidden": true }) });
590
592
  }
@@ -605,4 +607,4 @@ function VitalReadingsExpanded({ vitalName, ekaId }) {
605
607
  export {
606
608
  OriginalRecordPanel
607
609
  };
608
- //# sourceMappingURL=OriginalRecordPanel-W6FNO7U2.mjs.map
610
+ //# sourceMappingURL=OriginalRecordPanel-XU6ZYBPB.mjs.map