@ohif/app 3.10.0-beta.96 → 3.10.0-beta.97

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 (25) hide show
  1. package/dist/{8549.bundle.1bbcee08ee6472d6446a.js → 8549.bundle.dc7cfa9212adde74a3b4.js} +186 -109
  2. package/dist/{app.bundle.e9f5af457f4194a0934c.js → app.bundle.3c547584536c3834042c.js} +4 -4
  3. package/dist/app.bundle.css +2 -2
  4. package/dist/index.html +1 -1
  5. package/dist/sw.js +1 -1
  6. package/package.json +18 -18
  7. /package/dist/{1919.bundle.be6cbb6f7e98c0b16b5f.js → 1919.bundle.416410614db71af2bbaa.js} +0 -0
  8. /package/dist/{213.bundle.1f75631e15f5d383be9a.js → 213.bundle.441e0d6e73a494100fd2.js} +0 -0
  9. /package/dist/{2424.bundle.dda561bbe813a602fe63.js → 2424.bundle.bd6b78524a738bafeee6.js} +0 -0
  10. /package/dist/{2825.bundle.a0c6804119addcd3368f.js → 2825.bundle.82bd4177050803b14d18.js} +0 -0
  11. /package/dist/{4834.bundle.549183aa6adfc5d70edc.js → 4834.bundle.3495dadf8a9d9f524ee5.js} +0 -0
  12. /package/dist/{5770.bundle.621e3877bfdb8b283df0.js → 5770.bundle.eb17fe0889624c94e231.js} +0 -0
  13. /package/dist/{6027.bundle.239483e3507ab832283c.js → 6027.bundle.8b09c7a6d7adfc05bffe.js} +0 -0
  14. /package/dist/{6201.bundle.49fa9ff71c95beff48cb.js → 6201.bundle.dc1dd81fc452af4d4528.js} +0 -0
  15. /package/dist/{6341.bundle.744d0468446e60e66829.js → 6341.bundle.d34a70374f356771c60f.js} +0 -0
  16. /package/dist/{6734.bundle.3d23d630b20cc655faa7.js → 6734.bundle.d1ccf477d5baa8156a26.js} +0 -0
  17. /package/dist/{7197.bundle.834785c57f4ab8cbeffa.js → 7197.bundle.503101515a367d14be57.js} +0 -0
  18. /package/dist/{7490.bundle.ec3c3e5423c0f20de17c.js → 7490.bundle.a95b28b1387ed7bb38b1.js} +0 -0
  19. /package/dist/{7955.bundle.9a2593ff6d588c8eb0ee.js → 7955.bundle.91ffc4eedb81f01af412.js} +0 -0
  20. /package/dist/{8008.bundle.8992f56d6ce1b3a2aea4.js → 8008.bundle.d386b21b516577bb0bb8.js} +0 -0
  21. /package/dist/{810.bundle.ba13670e59096891abfe.js → 810.bundle.3e17ce472e530d363899.js} +0 -0
  22. /package/dist/{8259.bundle.e0a882e6e514bd401f36.js → 8259.bundle.bcd66b6174d18f9c6604.js} +0 -0
  23. /package/dist/{8558.bundle.a384842e644ac95926e5.js → 8558.bundle.5a5c2e1574c55e76fa72.js} +0 -0
  24. /package/dist/{870.bundle.43b7002a43f4836428ff.js → 870.bundle.7a8a8e57556202361dc9.js} +0 -0
  25. /package/dist/{9551.bundle.cf5790560e99d2337ef6.js → 9551.bundle.6b4f8866c7100111a131.js} +0 -0
@@ -3074,8 +3074,8 @@ function ViewerHeader({
3074
3074
  hotkeyDefinitions,
3075
3075
  hotkeyDefaults
3076
3076
  } = hotkeysManager;
3077
- const versionNumber = "3.10.0-beta.96";
3078
- const commitHash = "d8a6e79df008139f7f2f45054b73baf8cd52fb40";
3077
+ const versionNumber = "3.10.0-beta.97";
3078
+ const commitHash = "0b5836ca1a908e152336752672b196f0d533f4f9";
3079
3079
  const menuOptions = [{
3080
3080
  title: t('Header:About'),
3081
3081
  icon: 'info',
@@ -6036,16 +6036,17 @@ ContextMenuController._getDefaultPosition = (canvasPoints, eventDetail, viewerEl
6036
6036
  // EXTERNAL MODULE: ../../../node_modules/moment/moment.js
6037
6037
  var moment = __webpack_require__(14867);
6038
6038
  var moment_default = /*#__PURE__*/__webpack_require__.n(moment);
6039
+ // EXTERNAL MODULE: ../../../node_modules/react-window/dist/index.esm.js
6040
+ var index_esm = __webpack_require__(28271);
6039
6041
  // EXTERNAL MODULE: ../../../node_modules/lodash.debounce/index.js
6040
6042
  var lodash_debounce = __webpack_require__(62051);
6041
6043
  var lodash_debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce);
6042
- // EXTERNAL MODULE: ../../../node_modules/react-window/dist/index.esm.js
6043
- var index_esm = __webpack_require__(28271);
6044
6044
  ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomTagBrowser/DicomTagTable.tsx
6045
6045
 
6046
6046
 
6047
6047
 
6048
6048
 
6049
+
6049
6050
  const lineHeightPx = 20;
6050
6051
  const lineHeightClassName = `leading-[${lineHeightPx}px]`;
6051
6052
  const rowVerticalPaddingPx = 10;
@@ -6057,6 +6058,45 @@ const rowStyle = {
6057
6058
  borderBottomWidth: `${rowBottomBorderPx}px`,
6058
6059
  ...rowVerticalPaddingStyle
6059
6060
  };
6061
+ const indentationPadding = 8;
6062
+ const RowComponent = ({
6063
+ row,
6064
+ style,
6065
+ keyPrefix,
6066
+ onToggle
6067
+ }) => {
6068
+ const handleToggle = (0,react.useCallback)(() => {
6069
+ onToggle(!row.areChildrenVisible);
6070
+ }, [row.areChildrenVisible, onToggle]);
6071
+ const hasChildren = row.children && row.children.length > 0;
6072
+ const isChildOrParent = hasChildren || row.depth > 0;
6073
+ const padding = indentationPadding * (1 + 2 * row.depth);
6074
+ return /*#__PURE__*/react.createElement("div", {
6075
+ style: {
6076
+ ...style,
6077
+ ...rowStyle
6078
+ },
6079
+ className: classnames_default()('hover:bg-secondary-main border-secondary-light flex w-full flex-row items-center break-all bg-black text-base transition duration-300', lineHeightClassName),
6080
+ key: keyPrefix
6081
+ }, isChildOrParent && /*#__PURE__*/react.createElement("div", {
6082
+ style: {
6083
+ paddingLeft: `${padding}px`,
6084
+ opacity: onToggle ? 1 : 0
6085
+ }
6086
+ }, row.areChildrenVisible ? /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.ChevronDown, {
6087
+ onClick: handleToggle
6088
+ }) : /*#__PURE__*/react.createElement(ui_next_src/* Icons */.FI.ChevronRight, {
6089
+ onClick: handleToggle
6090
+ })), /*#__PURE__*/react.createElement("div", {
6091
+ className: "w-4/24 px-3"
6092
+ }, row.tag), /*#__PURE__*/react.createElement("div", {
6093
+ className: "w-2/24 px-3"
6094
+ }, row.valueRepresentation), /*#__PURE__*/react.createElement("div", {
6095
+ className: "w-6/24 px-3"
6096
+ }, row.keyword), /*#__PURE__*/react.createElement("div", {
6097
+ className: "w-5/24 grow px-3"
6098
+ }, row.value));
6099
+ };
6060
6100
  function ColumnHeaders({
6061
6101
  tagRef,
6062
6102
  vrRef,
@@ -6105,6 +6145,7 @@ function DicomTagTable({
6105
6145
  const [vrHeaderElem, setVrHeaderElem] = (0,react.useState)(null);
6106
6146
  const [keywordHeaderElem, setKeywordHeaderElem] = (0,react.useState)(null);
6107
6147
  const [valueHeaderElem, setValueHeaderElem] = (0,react.useState)(null);
6148
+ const [internalRows, setInternalRows] = (0,react.useState)(rows);
6108
6149
 
6109
6150
  // Here the refs are inturn stored in state to trigger a render of the table.
6110
6151
  // This virtualized table does NOT render until the header is rendered because the header column widths are used to determine the row heights in the table.
@@ -6129,6 +6170,12 @@ function DicomTagTable({
6129
6170
  setValueHeaderElem(elem);
6130
6171
  }
6131
6172
  };
6173
+ (0,react.useEffect)(() => {
6174
+ setInternalRows(rows);
6175
+ }, [rows]);
6176
+ const visibleRows = (0,react.useMemo)(() => {
6177
+ return internalRows.filter(row => row.isVisible);
6178
+ }, [internalRows]);
6132
6179
 
6133
6180
  /**
6134
6181
  * When new rows are set, scroll to the top and reset the virtualization.
@@ -6152,50 +6199,72 @@ function DicomTagTable({
6152
6199
  window.removeEventListener('resize', debouncedResize);
6153
6200
  };
6154
6201
  }, []);
6155
- const Row = (0,react.useCallback)(({
6202
+ const getOneRowHeight = (0,react.useCallback)(row => {
6203
+ const headerWidths = [tagHeaderElem.offsetWidth, vrHeaderElem.offsetWidth, keywordHeaderElem.offsetWidth, valueHeaderElem.offsetWidth];
6204
+ const context = canvasRef.current.getContext('2d');
6205
+ context.font = getComputedStyle(canvasRef.current).font;
6206
+ const propertiesToCheck = ['tag', 'valueRepresentation', 'keyword', 'value'];
6207
+ return Object.entries(row).filter(([key]) => propertiesToCheck.includes(key)).map(([, colText], index) => {
6208
+ const colOneLineWidth = context.measureText(colText).width;
6209
+ const numLines = Math.ceil(colOneLineWidth / headerWidths[index]);
6210
+ return numLines * lineHeightPx + 2 * rowVerticalPaddingPx + rowBottomBorderPx;
6211
+ }).reduce((maxHeight, colHeight) => Math.max(maxHeight, colHeight), 0);
6212
+ }, [keywordHeaderElem, tagHeaderElem, valueHeaderElem, vrHeaderElem]);
6213
+
6214
+ /**
6215
+ * Get the item/row size. We use the header column widths to calculate the various row heights.
6216
+ * @param index the row index
6217
+ * @returns the row height
6218
+ */
6219
+ const getItemSize = (0,react.useCallback)(rows => index => {
6220
+ const row = rows[index];
6221
+ const height = getOneRowHeight(row);
6222
+ return height;
6223
+ }, [getOneRowHeight]);
6224
+ const onToggle = (0,react.useCallback)(sourceRow => {
6225
+ if (!sourceRow.children) {
6226
+ return undefined;
6227
+ }
6228
+ return areChildrenVisible => {
6229
+ const newInternalRows = internalRows.map(internalRow => {
6230
+ if (sourceRow.uid === internalRow.uid) {
6231
+ return {
6232
+ ...internalRow,
6233
+ areChildrenVisible
6234
+ };
6235
+ }
6236
+ if (sourceRow.children.includes(internalRow.uid)) {
6237
+ return {
6238
+ ...internalRow,
6239
+ isVisible: areChildrenVisible,
6240
+ areChildrenVisible
6241
+ };
6242
+ }
6243
+ return internalRow;
6244
+ });
6245
+ setInternalRows(newInternalRows);
6246
+ };
6247
+ }, [internalRows]);
6248
+ const getRowComponent = (0,react.useCallback)(({
6249
+ rows
6250
+ }) => function RowList({
6156
6251
  index,
6157
6252
  style
6158
- }) => {
6159
- const row = rows[index];
6160
- return /*#__PURE__*/react.createElement("div", {
6161
- style: {
6162
- ...style,
6163
- ...rowStyle
6164
- },
6165
- className: classnames_default()('hover:bg-secondary-main border-secondary-light flex w-full flex-row items-center break-all bg-black text-base transition duration-300', lineHeightClassName),
6166
- key: `DICOMTagRow-${index}`
6167
- }, /*#__PURE__*/react.createElement("div", {
6168
- className: "w-4/24 px-3"
6169
- }, row[0]), /*#__PURE__*/react.createElement("div", {
6170
- className: "w-2/24 px-3"
6171
- }, row[1]), /*#__PURE__*/react.createElement("div", {
6172
- className: "w-6/24 px-3"
6173
- }, row[2]), /*#__PURE__*/react.createElement("div", {
6174
- className: "w-5/24 grow px-3"
6175
- }, row[3]));
6176
- }, [rows]);
6253
+ }) {
6254
+ const row = (0,react.useMemo)(() => rows[index], [index]);
6255
+ return /*#__PURE__*/react.createElement(RowComponent, {
6256
+ style: style,
6257
+ row: row,
6258
+ keyPrefix: `DICOMTagRow-${index}`,
6259
+ onToggle: onToggle(row)
6260
+ });
6261
+ }, [onToggle]);
6177
6262
 
6178
6263
  /**
6179
6264
  * Whenever any one of the column headers is set, then the header is rendered.
6180
6265
  * Here we chose the tag header.
6181
6266
  */
6182
6267
  const isHeaderRendered = (0,react.useCallback)(() => tagHeaderElem !== null, [tagHeaderElem]);
6183
-
6184
- /**
6185
- * Get the item/row size. We use the header column widths to calculate the various row heights.
6186
- * @param index the row index
6187
- * @returns the row height
6188
- */
6189
- const getItemSize = (0,react.useCallback)(index => {
6190
- const headerWidths = [tagHeaderElem.offsetWidth, vrHeaderElem.offsetWidth, keywordHeaderElem.offsetWidth, valueHeaderElem.offsetWidth];
6191
- const context = canvasRef.current.getContext('2d');
6192
- context.font = getComputedStyle(canvasRef.current).font;
6193
- return rows[index].map((colText, index) => {
6194
- const colOneLineWidth = context.measureText(colText).width;
6195
- const numLines = Math.ceil(colOneLineWidth / headerWidths[index]);
6196
- return numLines * lineHeightPx + 2 * rowVerticalPaddingPx + rowBottomBorderPx;
6197
- }).reduce((maxHeight, colHeight) => Math.max(maxHeight, colHeight));
6198
- }, [rows, keywordHeaderElem, tagHeaderElem, valueHeaderElem, vrHeaderElem]);
6199
6268
  return /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("canvas", {
6200
6269
  style: {
6201
6270
  visibility: 'hidden',
@@ -6216,13 +6285,15 @@ function DicomTagTable({
6216
6285
  }, isHeaderRendered() && /*#__PURE__*/react.createElement(index_esm/* VariableSizeList */._m, {
6217
6286
  ref: listRef,
6218
6287
  height: 500,
6219
- itemCount: rows.length,
6220
- itemSize: getItemSize,
6288
+ itemCount: visibleRows.length,
6289
+ itemSize: getItemSize(visibleRows),
6221
6290
  width: '100%',
6222
6291
  className: "ohif-scrollbar"
6223
- }, Row)));
6292
+ }, getRowComponent({
6293
+ rows: visibleRows
6294
+ }))));
6224
6295
  }
6225
- /* harmony default export */ const DicomTagBrowser_DicomTagTable = (DicomTagTable);
6296
+ /* harmony default export */ const DicomTagBrowser_DicomTagTable = (/*#__PURE__*/react.memo(DicomTagTable));
6226
6297
  ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomTagBrowser/DicomTagBrowser.css
6227
6298
  // extracted by mini-css-extract-plugin
6228
6299
 
@@ -6235,7 +6306,8 @@ function DicomTagTable({
6235
6306
 
6236
6307
 
6237
6308
 
6238
-
6309
+ let rowCounter = 0;
6310
+ const generateRowId = () => `row_${++rowCounter}`;
6239
6311
  const {
6240
6312
  ImageSet: DicomTagBrowser_ImageSet
6241
6313
  } = src/* classes */.Ly;
@@ -6249,23 +6321,15 @@ const DicomTagBrowser = ({
6249
6321
  displaySets,
6250
6322
  displaySetInstanceUID
6251
6323
  }) => {
6252
- // The column indices that are to be excluded during a filter of the table.
6253
- // At present the column indices are:
6254
- // 0: DICOM tag
6255
- // 1: VR
6256
- // 2: Keyword
6257
- // 3: Value
6258
- const excludedColumnIndicesForFilter = new Set([1]);
6259
6324
  const [selectedDisplaySetInstanceUID, setSelectedDisplaySetInstanceUID] = (0,react.useState)(displaySetInstanceUID);
6260
6325
  const [instanceNumber, setInstanceNumber] = (0,react.useState)(1);
6326
+ const [shouldShowInstanceList, setShouldShowInstanceList] = (0,react.useState)(false);
6261
6327
  const [filterValue, setFilterValue] = (0,react.useState)('');
6262
6328
  const onSelectChange = value => {
6263
6329
  setSelectedDisplaySetInstanceUID(value.value);
6264
6330
  setInstanceNumber(1);
6265
6331
  };
6266
6332
  const activeDisplaySet = displaySets.find(ds => ds.displaySetInstanceUID === selectedDisplaySetInstanceUID);
6267
- const isImageStack = _isImageStack(activeDisplaySet);
6268
- const showInstanceList = isImageStack && activeDisplaySet.images.length > 1;
6269
6333
  const displaySetList = (0,react.useMemo)(() => {
6270
6334
  displaySets.sort((a, b) => a.SeriesNumber - b.SeriesNumber);
6271
6335
  return displaySets.map(displaySet => {
@@ -6289,42 +6353,42 @@ const DicomTagBrowser = ({
6289
6353
  };
6290
6354
  });
6291
6355
  }, [displaySets]);
6292
- const rows = (0,react.useMemo)(() => {
6293
- let metadata;
6356
+ const getMetadata = (0,react.useCallback)(isImageStack => {
6294
6357
  if (isImageStack) {
6295
- metadata = activeDisplaySet.images[instanceNumber - 1];
6296
- } else {
6297
- metadata = activeDisplaySet.instance || activeDisplaySet;
6358
+ return activeDisplaySet.images[instanceNumber - 1];
6298
6359
  }
6360
+ return activeDisplaySet.instance || activeDisplaySet;
6361
+ }, [activeDisplaySet, instanceNumber]);
6362
+ const rows = (0,react.useMemo)(() => {
6363
+ const isImageStack = activeDisplaySet instanceof DicomTagBrowser_ImageSet;
6364
+ const metadata = getMetadata(isImageStack);
6365
+ setShouldShowInstanceList(isImageStack && activeDisplaySet.images.length > 1);
6299
6366
  const tags = getSortedTags(metadata);
6300
- return getFormattedRowsFromTags(tags, metadata);
6301
- }, [instanceNumber, selectedDisplaySetInstanceUID]);
6367
+ const rows = getFormattedRowsFromTags({
6368
+ tags,
6369
+ metadata,
6370
+ depth: 0
6371
+ });
6372
+ return rows;
6373
+ }, [getMetadata, activeDisplaySet]);
6302
6374
  const filteredRows = (0,react.useMemo)(() => {
6303
6375
  if (!filterValue) {
6304
6376
  return rows;
6305
6377
  }
6378
+ const matchedRowIds = new Set();
6379
+ const propertiesToCheck = ['tag', 'valueRepresentation', 'keyword', 'value'];
6380
+ const setIsMatched = row => {
6381
+ const isDirectMatch = propertiesToCheck.some(propertyName => row[propertyName]?.toLowerCase().includes(filterValueLowerCase));
6382
+ if (!isDirectMatch) {
6383
+ return;
6384
+ }
6385
+ matchedRowIds.add(row.uid);
6386
+ [...(row.parents ?? []), ...(row.children ?? [])].forEach(uid => matchedRowIds.add(uid));
6387
+ };
6306
6388
  const filterValueLowerCase = filterValue.toLowerCase();
6307
- return rows.filter(row => {
6308
- return row.reduce((keepRow, col, colIndex) => {
6309
- if (keepRow) {
6310
- // We are already keeping the row, why do more work so return now.
6311
- return keepRow;
6312
- }
6313
- if (excludedColumnIndicesForFilter.has(colIndex)) {
6314
- return keepRow;
6315
- }
6316
- return keepRow || col.toLowerCase().includes(filterValueLowerCase);
6317
- }, false);
6318
- });
6389
+ rows.forEach(setIsMatched);
6390
+ return rows.filter(row => matchedRowIds.has(row.uid));
6319
6391
  }, [rows, filterValue]);
6320
- const debouncedSetFilterValue = (0,react.useMemo)(() => {
6321
- return lodash_debounce_default()(setFilterValue, 200);
6322
- }, []);
6323
- (0,react.useEffect)(() => {
6324
- return () => {
6325
- debouncedSetFilterValue?.cancel();
6326
- };
6327
- }, []);
6328
6392
  return /*#__PURE__*/react.createElement("div", {
6329
6393
  className: "dicom-tag-browser-content bg-muted"
6330
6394
  }, /*#__PURE__*/react.createElement("div", {
@@ -6347,17 +6411,17 @@ const DicomTagBrowser = ({
6347
6411
  }, item.label, /*#__PURE__*/react.createElement("span", {
6348
6412
  className: "text-muted-foreground ml-1 text-xs"
6349
6413
  }, item.description));
6350
- })))), showInstanceList && /*#__PURE__*/react.createElement("div", {
6414
+ })))), shouldShowInstanceList && /*#__PURE__*/react.createElement("div", {
6351
6415
  className: "mx-auto flex w-1/5 flex-col"
6352
6416
  }, /*#__PURE__*/react.createElement("span", {
6353
6417
  className: "text-muted-foreground flex h-6 items-center text-xs"
6354
- }, "Instance Number (", instanceNumber, " of ", activeDisplaySet.images.length, ")"), /*#__PURE__*/react.createElement(ui_next_src/* Slider */.Ap, {
6418
+ }, "Instance Number (", instanceNumber, " of ", activeDisplaySet?.images?.length, ")"), /*#__PURE__*/react.createElement(ui_next_src/* Slider */.Ap, {
6355
6419
  value: [instanceNumber],
6356
6420
  onValueChange: ([value]) => {
6357
6421
  setInstanceNumber(value);
6358
6422
  },
6359
6423
  min: 1,
6360
- max: activeDisplaySet.images.length,
6424
+ max: activeDisplaySet?.images?.length,
6361
6425
  step: 1,
6362
6426
  className: "pt-4"
6363
6427
  })), /*#__PURE__*/react.createElement("div", {
@@ -6371,19 +6435,35 @@ const DicomTagBrowser = ({
6371
6435
  rows: filteredRows
6372
6436
  }));
6373
6437
  };
6374
- function getFormattedRowsFromTags(tags, metadata) {
6438
+ function getFormattedRowsFromTags({
6439
+ tags,
6440
+ metadata,
6441
+ depth,
6442
+ parents
6443
+ }) {
6375
6444
  const rows = [];
6376
6445
  tags.forEach(tagInfo => {
6446
+ const uid = generateRowId();
6377
6447
  if (tagInfo.vr === 'SQ') {
6378
- rows.push([`${tagInfo.tagIndent}${tagInfo.tag}`, tagInfo.vr, tagInfo.keyword, '']);
6379
- const {
6380
- values
6381
- } = tagInfo;
6382
- values.forEach((item, index) => {
6383
- const formatedRowsFromTags = getFormattedRowsFromTags(item, metadata);
6384
- rows.push([`${item[0].tagIndent}(FFFE,E000)`, '', `Item #${index}`, '']);
6385
- rows.push(...formatedRowsFromTags);
6386
- });
6448
+ const children = tagInfo.values.flatMap(value => getFormattedRowsFromTags({
6449
+ tags: value,
6450
+ metadata,
6451
+ depth: depth + 1,
6452
+ parents: parents ? [...parents, uid] : [uid]
6453
+ }));
6454
+ const row = {
6455
+ uid,
6456
+ tag: tagInfo.tag,
6457
+ valueRepresentation: tagInfo.vr,
6458
+ keyword: tagInfo.keyword,
6459
+ value: '',
6460
+ depth,
6461
+ isVisible: true,
6462
+ areChildrenVisible: true,
6463
+ children: children.map(child => child.uid),
6464
+ parents
6465
+ };
6466
+ rows.push(row, ...children);
6387
6467
  } else {
6388
6468
  if (tagInfo.vr === 'xs') {
6389
6469
  try {
@@ -6391,10 +6471,20 @@ function getFormattedRowsFromTags(tags, metadata) {
6391
6471
  const originalTagInfo = metadata[tag];
6392
6472
  tagInfo.vr = originalTagInfo.vr;
6393
6473
  } catch (error) {
6394
- console.error(`Failed to parse value representation for tag '${tagInfo.keyword}'`);
6474
+ console.warn(`Failed to parse value representation for tag '${tagInfo.keyword}'`);
6395
6475
  }
6396
6476
  }
6397
- rows.push([`${tagInfo.tagIndent}${tagInfo.tag}`, tagInfo.vr, tagInfo.keyword, tagInfo.value]);
6477
+ const row = {
6478
+ uid,
6479
+ tag: tagInfo.tag,
6480
+ valueRepresentation: tagInfo.vr,
6481
+ keyword: tagInfo.keyword,
6482
+ value: tagInfo.value,
6483
+ depth,
6484
+ isVisible: true,
6485
+ parents
6486
+ };
6487
+ rows.push(row);
6398
6488
  }
6399
6489
  });
6400
6490
  return rows;
@@ -6410,13 +6500,6 @@ function getRows(metadata, depth = 0) {
6410
6500
  // Tag, Type, Value, Keyword
6411
6501
 
6412
6502
  const keywords = Object.keys(metadata);
6413
- let tagIndent = '';
6414
- for (let i = 0; i < depth; i++) {
6415
- tagIndent += '>';
6416
- }
6417
- if (depth > 0) {
6418
- tagIndent += ' '; // If indented, add a space after the indents.
6419
- }
6420
6503
  const rows = [];
6421
6504
  for (let i = 0; i < keywords.length; i++) {
6422
6505
  let keyword = keywords[i];
@@ -6432,7 +6515,6 @@ function getRows(metadata, depth = 0) {
6432
6515
 
6433
6516
  const sequence = {
6434
6517
  tag: tagInfo.tag,
6435
- tagIndent,
6436
6518
  vr: tagInfo.vr,
6437
6519
  keyword,
6438
6520
  values: []
@@ -6490,7 +6572,6 @@ function getRows(metadata, depth = 0) {
6490
6572
  if (tagInfo) {
6491
6573
  rows.push({
6492
6574
  tag: tagInfo.tag,
6493
- tagIndent,
6494
6575
  vr: tagInfo.vr,
6495
6576
  keyword,
6496
6577
  value
@@ -6502,7 +6583,6 @@ function getRows(metadata, depth = 0) {
6502
6583
  const tag = `(${keyword.substring(0, 4)},${keyword.substring(4, 8)})`;
6503
6584
  rows.push({
6504
6585
  tag,
6505
- tagIndent,
6506
6586
  vr: '',
6507
6587
  keyword: 'Private Tag',
6508
6588
  value
@@ -6512,9 +6592,6 @@ function getRows(metadata, depth = 0) {
6512
6592
  }
6513
6593
  return rows;
6514
6594
  }
6515
- function _isImageStack(displaySet) {
6516
- return displaySet instanceof DicomTagBrowser_ImageSet;
6517
- }
6518
6595
  function toArray(objectOrArray) {
6519
6596
  return Array.isArray(objectOrArray) ? objectOrArray : [objectOrArray];
6520
6597
  }
@@ -101832,8 +101832,8 @@ function WorkList({
101832
101832
  };
101833
101833
  });
101834
101834
  const hasStudies = numOfStudies > 0;
101835
- const versionNumber = "3.10.0-beta.96";
101836
- const commitHash = "d8a6e79df008139f7f2f45054b73baf8cd52fb40";
101835
+ const versionNumber = "3.10.0-beta.97";
101836
+ const commitHash = "0b5836ca1a908e152336752672b196f0d533f4f9";
101837
101837
  const menuOptions = [{
101838
101838
  title: t('Header:About'),
101839
101839
  icon: 'info',
@@ -121533,7 +121533,7 @@ const detectionOptions = {
121533
121533
  }
121534
121534
  });
121535
121535
  ;// CONCATENATED MODULE: ../../i18n/package.json
121536
- const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.10.0-beta.95"}');
121536
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"3.10.0-beta.96"}');
121537
121537
  ;// CONCATENATED MODULE: ../../i18n/src/utils.js
121538
121538
  const languagesMap = {
121539
121539
  ar: 'Arabic',
@@ -414227,7 +414227,7 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
414227
414227
  /******/ // This function allow to reference async chunks
414228
414228
  /******/ __webpack_require__.u = (chunkId) => {
414229
414229
  /******/ // return url for filenames based on template
414230
- /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"213":"1f75631e15f5d383be9a","572":"3f5527cde0d61e88a0fd","732":"6978ac30a1e36abf06db","810":"ba13670e59096891abfe","870":"43b7002a43f4836428ff","1919":"be6cbb6f7e98c0b16b5f","1927":"3b172968ee6878d78f9e","2424":"dda561bbe813a602fe63","2701":"641b8e4299d8370e861b","2825":"a0c6804119addcd3368f","3054":"6b0dbbdb168d711efad4","3334":"95de16b9f8539a9195e5","3584":"37f95e5799f2410313bc","4202":"add83801fbc8227d551b","4526":"11b8a5b32121744ae056","4533":"f66373fbe5a0c349b0a9","4759":"0d60078f58f5a56c0157","4834":"549183aa6adfc5d70edc","4991":"aa561005b9bff1f391af","5038":"63e0dcf0360ed9ab6525","5261":"5454fb98c87e3e21b419","5674":"05e639d0871778c8093a","5770":"621e3877bfdb8b283df0","6027":"239483e3507ab832283c","6201":"49fa9ff71c95beff48cb","6341":"744d0468446e60e66829","6734":"3d23d630b20cc655faa7","6896":"ca9b905abe733f279387","6939":"35a07bed912bc04c9d75","7159":"1761513105b61524f649","7197":"834785c57f4ab8cbeffa","7490":"ec3c3e5423c0f20de17c","7955":"9a2593ff6d588c8eb0ee","8008":"8992f56d6ce1b3a2aea4","8094":"5c44190a325ac23e3e5c","8228":"58198b11ccbdc65b468f","8259":"e0a882e6e514bd401f36","8402":"fc21a5ee7809ad1cf9b1","8549":"1bbcee08ee6472d6446a","8558":"a384842e644ac95926e5","9026":"9e6c0ebd714977ba67e5","9551":"cf5790560e99d2337ef6","9862":"a4ccc41bcff91a46d37e","9890":"10620379d01f950951bc"}[chunkId] + ".js";
414230
+ /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"213":"441e0d6e73a494100fd2","572":"3f5527cde0d61e88a0fd","732":"6978ac30a1e36abf06db","810":"3e17ce472e530d363899","870":"7a8a8e57556202361dc9","1919":"416410614db71af2bbaa","1927":"3b172968ee6878d78f9e","2424":"bd6b78524a738bafeee6","2701":"641b8e4299d8370e861b","2825":"82bd4177050803b14d18","3054":"6b0dbbdb168d711efad4","3334":"95de16b9f8539a9195e5","3584":"37f95e5799f2410313bc","4202":"add83801fbc8227d551b","4526":"11b8a5b32121744ae056","4533":"f66373fbe5a0c349b0a9","4759":"0d60078f58f5a56c0157","4834":"3495dadf8a9d9f524ee5","4991":"aa561005b9bff1f391af","5038":"63e0dcf0360ed9ab6525","5261":"5454fb98c87e3e21b419","5674":"05e639d0871778c8093a","5770":"eb17fe0889624c94e231","6027":"8b09c7a6d7adfc05bffe","6201":"dc1dd81fc452af4d4528","6341":"d34a70374f356771c60f","6734":"d1ccf477d5baa8156a26","6896":"ca9b905abe733f279387","6939":"35a07bed912bc04c9d75","7159":"1761513105b61524f649","7197":"503101515a367d14be57","7490":"a95b28b1387ed7bb38b1","7955":"91ffc4eedb81f01af412","8008":"d386b21b516577bb0bb8","8094":"5c44190a325ac23e3e5c","8228":"58198b11ccbdc65b468f","8259":"bcd66b6174d18f9c6604","8402":"fc21a5ee7809ad1cf9b1","8549":"dc7cfa9212adde74a3b4","8558":"5a5c2e1574c55e76fa72","9026":"9e6c0ebd714977ba67e5","9551":"6b4f8866c7100111a131","9862":"a4ccc41bcff91a46d37e","9890":"10620379d01f950951bc"}[chunkId] + ".js";
414231
414231
  /******/ };
414232
414232
  /******/ })();
414233
414233
  /******/