@ohif/app 3.13.4 → 3.13.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{100.bundle.93620cd5a7d73cec.js → 100.bundle.1c5ef7d0e0ea4583.js} +2 -2
- package/dist/1602.css +1 -1
- package/dist/{2493.bundle.ed36d3c811332bff.js → 2493.bundle.b6d776952823b290.js} +16 -3
- package/dist/{3500.bundle.09b3e7f32c325d2b.js → 3500.bundle.7eafa2e253d6ebf9.js} +2 -2
- package/dist/3760.css +1 -1
- package/dist/3833.css +1 -1
- package/dist/5189.css +2 -2
- package/dist/5910.css +1 -1
- package/dist/6214.css +1 -1
- package/dist/{7248.bundle.faa6438cca2ceaf8.js → 7248.bundle.e96ca656fdb25c7d.js} +2 -2
- package/dist/{7463.bundle.40668aa8d083d077.js → 7463.bundle.bc592adfcd96a763.js} +67 -27
- package/dist/{7499.bundle.88867ec1d3ed6f9d.js → 7499.bundle.57679cd343fae834.js} +2 -2
- package/dist/{781.bundle.9aeca4c33ef2ed2d.js → 781.bundle.40af085bb7abd069.js} +2 -2
- package/dist/781.css +1 -1
- package/dist/8423.css +1 -1
- package/dist/8492.css +1 -1
- package/dist/{8832.bundle.d9101f1c00db8753.js → 8832.bundle.21b7afcf9ad88fee.js} +2 -2
- package/dist/8832.css +1 -1
- package/dist/{89.bundle.d74d60cd3a177268.js → 89.bundle.0c0b32304742d0d3.js} +7 -7
- package/dist/9363.bundle.8b90310748978ac8.js +454 -0
- package/dist/{9415.bundle.06ab071cc84660b6.js → 9415.bundle.dc8266561c966fdc.js} +2 -2
- package/dist/9415.css +1 -1
- package/dist/976.css +1 -1
- package/dist/{app.bundle.895ee92d1f12cf80.js → app.bundle.2e2def80f8090a74.js} +43 -22
- package/dist/app.bundle.css +8 -8
- package/dist/{compute.bundle.609c93f9819406cd.js → compute.bundle.910086331888fd1b.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/{polySeg.bundle.75141812aebb86a0.js → polySeg.bundle.0e906840b3becd72.js} +1 -1
- package/dist/sw.js +1 -1
- package/package.json +6 -6
- package/dist/9116.bundle.7a5b2dc22505d4a0.js +0 -146
- /package/dist/{1180.bundle.bdab97766a233ec7.js → 1180.bundle.12ff4a7091b814b0.js} +0 -0
- /package/dist/{1483.bundle.59969cc3c412ca3e.js → 1483.bundle.d61e4b3b75394193.js} +0 -0
- /package/dist/{1602.bundle.776866c0ae47e2bc.js → 1602.bundle.ce71ed9405418551.js} +0 -0
- /package/dist/{2779.bundle.848cf438813c9e1a.js → 2779.bundle.590547b8c00fb118.js} +0 -0
- /package/dist/{3760.bundle.fbc299e8e62a6dd2.js → 3760.bundle.049908339d53018a.js} +0 -0
- /package/dist/{4556.bundle.93158ba1b65ea809.js → 4556.bundle.f47dd30a2808e074.js} +0 -0
- /package/dist/{4683.bundle.8688b43b36f34429.js → 4683.bundle.124370a390087ca2.js} +0 -0
- /package/dist/{5696.bundle.5ea29e0a81aae060.js → 5696.bundle.8212bd837256341d.js} +0 -0
- /package/dist/{6749.bundle.39d8f2c68cff280a.js → 6749.bundle.903e779c064193ad.js} +0 -0
- /package/dist/{8423.bundle.a1ac56b9812386f7.js → 8423.bundle.a73bb02540af284b.js} +0 -0
- /package/dist/{8492.bundle.72bb70110ea19e02.js → 8492.bundle.80935f39a3863f1f.js} +0 -0
- /package/dist/{9290.bundle.014b7808ead74b80.js → 9290.bundle.9f40c51f5da6c0d4.js} +0 -0
- /package/dist/{9437.bundle.cb34ec039a3367e8.js → 9437.bundle.8880cc3f5874eb8c.js} +0 -0
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(globalThis["rspackChunk"] = globalThis["rspackChunk"] || []).push([[9363], {
|
|
3
|
+
42446(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
4
|
+
|
|
5
|
+
// EXPORTS
|
|
6
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
7
|
+
"default": () => (/* binding */ dicom_pdf_src)
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
// EXTERNAL MODULE: ../../../node_modules/react/index.js
|
|
11
|
+
var react = __webpack_require__(86326);
|
|
12
|
+
;// CONCATENATED MODULE: ../../../extensions/dicom-pdf/package.json
|
|
13
|
+
var package_namespaceObject = JSON.parse('{"UU":"@ohif/extension-dicom-pdf"}')
|
|
14
|
+
;// CONCATENATED MODULE: ../../../extensions/dicom-pdf/src/id.js
|
|
15
|
+
|
|
16
|
+
const id = package_namespaceObject.UU;
|
|
17
|
+
const SOPClassHandlerId = `${id}.sopClassHandlerModule.dicom-pdf`;
|
|
18
|
+
|
|
19
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 75 modules
|
|
20
|
+
var src = __webpack_require__(50679);
|
|
21
|
+
// EXTERNAL MODULE: ../../i18n/src/index.js + 302 modules
|
|
22
|
+
var i18n_src = __webpack_require__(42204);
|
|
23
|
+
;// CONCATENATED MODULE: ../../../extensions/dicom-pdf/src/utils/displayableDocumentTypes.ts
|
|
24
|
+
/**
|
|
25
|
+
* The set of encapsulated-document MIME types this extension is willing to put
|
|
26
|
+
* in front of a user, and how each one is embedded.
|
|
27
|
+
*
|
|
28
|
+
* MIMETypeOfEncapsulatedDocument is supplied by whoever produced the instance,
|
|
29
|
+
* so it is treated here as a claim to be checked rather than an instruction to
|
|
30
|
+
* be followed. A type that is not on this list is not rendered at all.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* How a document is embedded in the viewport.
|
|
35
|
+
*
|
|
36
|
+
* 'object' - <object>. The browsers' built-in PDF viewers refuse to run inside
|
|
37
|
+
* a sandboxed browsing context: in Chrome a PDF renders under no sandbox at
|
|
38
|
+
* all and under none of the token combinations, including the fully
|
|
39
|
+
* permissive `allow-scripts allow-same-origin`. PDFs therefore cannot be
|
|
40
|
+
* sandboxed, and their safety rests entirely on the type guarantee that
|
|
41
|
+
* loadDisplayableDocument applies (canonical Blob type + signature check).
|
|
42
|
+
*
|
|
43
|
+
* 'iframe' - <iframe sandbox>. Markup types render correctly inside a sandbox,
|
|
44
|
+
* so they get one. The default is the empty sandbox: no tokens, scripts
|
|
45
|
+
* inert, opaque origin, no access to the viewer's storage or DOM.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Real files do not always put their magic number at byte 0, and readers that
|
|
50
|
+
* accept them anyway are the reason such files exist in the wild.
|
|
51
|
+
*
|
|
52
|
+
* PDF: ISO 32000-1 requires "%PDF-" at the start of the file, but Adobe's own
|
|
53
|
+
* implementation note relaxes this to anywhere within the first 1024 bytes, and
|
|
54
|
+
* every mainstream reader follows suit. Producers that write a UTF-8 BOM, or
|
|
55
|
+
* that prepend junk before the header, therefore produce files that open
|
|
56
|
+
* everywhere except here. Matching the 1024-byte allowance keeps the check
|
|
57
|
+
* doing its actual job - catching a payload that is not a PDF at all, which is
|
|
58
|
+
* how a document declared as PDF but containing markup gets rejected - without
|
|
59
|
+
* failing valid documents over leading bytes the renderer will skip anyway.
|
|
60
|
+
*/
|
|
61
|
+
const PDF_SIGNATURE_SEARCH_LIMIT = 1024;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Canonical entries, keyed by canonical MIME type. Exported so downstream
|
|
65
|
+
* deployments can extend the list; adding an entry means asserting both that
|
|
66
|
+
* the browser renders that type inline and that the chosen strategy contains it.
|
|
67
|
+
*/
|
|
68
|
+
const DISPLAYABLE_DOCUMENT_TYPES = {
|
|
69
|
+
'application/pdf': {
|
|
70
|
+
mimeType: 'application/pdf',
|
|
71
|
+
strategy: 'object',
|
|
72
|
+
signature: [0x25, 0x50, 0x44, 0x46, 0x2d],
|
|
73
|
+
// "%PDF-"
|
|
74
|
+
signatureSearchLimit: PDF_SIGNATURE_SEARCH_LIMIT
|
|
75
|
+
},
|
|
76
|
+
'text/html': {
|
|
77
|
+
mimeType: 'text/html',
|
|
78
|
+
strategy: 'iframe',
|
|
79
|
+
sandbox: ''
|
|
80
|
+
},
|
|
81
|
+
'application/xhtml+xml': {
|
|
82
|
+
mimeType: 'application/xhtml+xml',
|
|
83
|
+
strategy: 'iframe',
|
|
84
|
+
sandbox: ''
|
|
85
|
+
},
|
|
86
|
+
'text/xml': {
|
|
87
|
+
mimeType: 'text/xml',
|
|
88
|
+
strategy: 'iframe',
|
|
89
|
+
sandbox: ''
|
|
90
|
+
},
|
|
91
|
+
'application/xml': {
|
|
92
|
+
mimeType: 'application/xml',
|
|
93
|
+
strategy: 'iframe',
|
|
94
|
+
sandbox: ''
|
|
95
|
+
},
|
|
96
|
+
'text/plain': {
|
|
97
|
+
mimeType: 'text/plain',
|
|
98
|
+
strategy: 'iframe',
|
|
99
|
+
sandbox: ''
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Non-standard spellings seen in real instances, folded onto their canonical
|
|
105
|
+
* entry. Accepting an alias is safe because the canonical entry decides both
|
|
106
|
+
* the Blob type and the signature the payload has to satisfy.
|
|
107
|
+
*/
|
|
108
|
+
const DOCUMENT_MIME_TYPE_ALIASES = {
|
|
109
|
+
'application/html': 'text/html',
|
|
110
|
+
'application/x-pdf': 'application/pdf',
|
|
111
|
+
'application/acrobat': 'application/pdf',
|
|
112
|
+
'text/pdf': 'application/pdf',
|
|
113
|
+
'application/xhtml': 'application/xhtml+xml'
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Lower-cases and strips any parameters (`text/html; charset=utf-8`).
|
|
118
|
+
*/
|
|
119
|
+
function normalizeDocumentMimeType(rawMimeType) {
|
|
120
|
+
if (typeof rawMimeType !== 'string') {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
const normalized = rawMimeType.split(';')[0].trim().toLowerCase();
|
|
124
|
+
return normalized || undefined;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Resolves a declared MIME type to its allowlist entry, or undefined when the
|
|
129
|
+
* type is not one this extension will display.
|
|
130
|
+
*/
|
|
131
|
+
function getDisplayableDocumentType(rawMimeType) {
|
|
132
|
+
const normalized = normalizeDocumentMimeType(rawMimeType);
|
|
133
|
+
if (!normalized) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
const canonical = DOCUMENT_MIME_TYPE_ALIASES[normalized] ?? normalized;
|
|
137
|
+
return DISPLAYABLE_DOCUMENT_TYPES[canonical];
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Checks a payload against its type's magic number, allowing the signature to
|
|
142
|
+
* start anywhere within `signatureSearchLimit` bytes of the payload. Types that
|
|
143
|
+
* have no reliable signature pass, since for those the sandbox rather than the
|
|
144
|
+
* content check is what contains the document.
|
|
145
|
+
*/
|
|
146
|
+
function matchesDocumentSignature(documentType, payload) {
|
|
147
|
+
const {
|
|
148
|
+
signature,
|
|
149
|
+
signatureSearchLimit = 0
|
|
150
|
+
} = documentType;
|
|
151
|
+
if (!signature?.length) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
if (payload.byteLength < signature.length) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Only the window the signature could still start in needs reading, and it is
|
|
159
|
+
// bounded, so an oversized document costs the same as a small one.
|
|
160
|
+
const lastStart = Math.min(signatureSearchLimit, payload.byteLength - signature.length);
|
|
161
|
+
const head = new Uint8Array(payload, 0, lastStart + signature.length);
|
|
162
|
+
for (let start = 0; start <= lastStart; start++) {
|
|
163
|
+
if (signature.every((byte, index) => head[start + index] === byte)) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
;// CONCATENATED MODULE: ../../../extensions/dicom-pdf/src/utils/loadDisplayableDocument.ts
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Resolves an encapsulated document into something safe to embed.
|
|
173
|
+
*
|
|
174
|
+
* The payload comes from the instance the same way every other bulkdata value
|
|
175
|
+
* does: inline content when the metadata carries it, otherwise the data
|
|
176
|
+
* source's own `retrieveBulkData`, which the data source binds onto the value
|
|
177
|
+
* and which caches the resolved buffer on `value.Value`. This is the path the
|
|
178
|
+
* video display sets take, so authentication, bulkdata URI resolution and
|
|
179
|
+
* caching all behave identically here.
|
|
180
|
+
*
|
|
181
|
+
* The bytes are then wrapped in a Blob whose type comes from the allowlist
|
|
182
|
+
* rather than from the instance. That is the type guarantee: after this point
|
|
183
|
+
* neither MIMETypeOfEncapsulatedDocument nor the origin server's Content-Type
|
|
184
|
+
* has any say in how the browser interprets the payload, so a document cannot
|
|
185
|
+
* be steered into being parsed as something it is not.
|
|
186
|
+
*/
|
|
187
|
+
async function loadDisplayableDocument({
|
|
188
|
+
instance,
|
|
189
|
+
mimeType,
|
|
190
|
+
tag = 'EncapsulatedDocument'
|
|
191
|
+
}, {
|
|
192
|
+
signal
|
|
193
|
+
} = {}) {
|
|
194
|
+
const documentType = getDisplayableDocumentType(mimeType);
|
|
195
|
+
if (!documentType) {
|
|
196
|
+
return {
|
|
197
|
+
ok: false,
|
|
198
|
+
reason: 'unsupported-type',
|
|
199
|
+
mimeType
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const value = instance?.[tag];
|
|
203
|
+
if (!value) {
|
|
204
|
+
return {
|
|
205
|
+
ok: false,
|
|
206
|
+
reason: 'retrieve-failed'
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
if (signal?.aborted) {
|
|
210
|
+
return {
|
|
211
|
+
ok: false,
|
|
212
|
+
reason: 'aborted'
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
let payload;
|
|
216
|
+
try {
|
|
217
|
+
payload = await readDocumentBytes(value, documentType.mimeType);
|
|
218
|
+
} catch (error) {
|
|
219
|
+
console.warn('Failed to retrieve encapsulated document', error);
|
|
220
|
+
return {
|
|
221
|
+
ok: false,
|
|
222
|
+
reason: 'retrieve-failed'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
if (!payload?.byteLength) {
|
|
226
|
+
return {
|
|
227
|
+
ok: false,
|
|
228
|
+
reason: 'retrieve-failed'
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (signal?.aborted) {
|
|
232
|
+
return {
|
|
233
|
+
ok: false,
|
|
234
|
+
reason: 'aborted'
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
if (!matchesDocumentSignature(documentType, payload)) {
|
|
238
|
+
return {
|
|
239
|
+
ok: false,
|
|
240
|
+
reason: 'signature-mismatch',
|
|
241
|
+
mimeType: documentType.mimeType
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
const objectUrl = URL.createObjectURL(new Blob([payload], {
|
|
245
|
+
type: documentType.mimeType
|
|
246
|
+
}));
|
|
247
|
+
if (signal?.aborted) {
|
|
248
|
+
URL.revokeObjectURL(objectUrl);
|
|
249
|
+
return {
|
|
250
|
+
ok: false,
|
|
251
|
+
reason: 'aborted'
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
return {
|
|
255
|
+
ok: true,
|
|
256
|
+
url: objectUrl,
|
|
257
|
+
documentType,
|
|
258
|
+
revoke: createRevokeOnce(objectUrl)
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Reads the document bytes off a naturalized bulkdata value, preferring
|
|
264
|
+
* whatever is already in hand. Mirrors the resolution order in
|
|
265
|
+
* `resolveBulkDataTags`, which is how the rest of the app reads bulkdata.
|
|
266
|
+
*/
|
|
267
|
+
async function readDocumentBytes(value, mimeType) {
|
|
268
|
+
// Inline content delivered as base64 in the metadata.
|
|
269
|
+
if (value.InlineBinary) {
|
|
270
|
+
return base64ToArrayBuffer(value.InlineBinary);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Inline content that the parser already decoded, e.g. `[ArrayBuffer]`.
|
|
274
|
+
if (Array.isArray(value)) {
|
|
275
|
+
return toArrayBuffer(value[0]);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// retrieveBulkData caches the resolved buffer here, so prefer it over
|
|
279
|
+
// re-requesting the payload.
|
|
280
|
+
if (value.Value) {
|
|
281
|
+
return toArrayBuffer(Array.isArray(value.Value) ? value.Value[0] : value.Value);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Otherwise ask the data source, exactly as any other bulkdata value does.
|
|
285
|
+
if (typeof value.retrieveBulkData === 'function') {
|
|
286
|
+
const retrieved = await value.retrieveBulkData({
|
|
287
|
+
mediaType: mimeType
|
|
288
|
+
});
|
|
289
|
+
return toArrayBuffer(retrieved);
|
|
290
|
+
}
|
|
291
|
+
return undefined;
|
|
292
|
+
}
|
|
293
|
+
function toArrayBuffer(raw) {
|
|
294
|
+
// Check views first: ArrayBuffer.isView is realm-agnostic.
|
|
295
|
+
if (ArrayBuffer.isView(raw)) {
|
|
296
|
+
const view = raw;
|
|
297
|
+
return view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// `instanceof ArrayBuffer` is realm-specific, so fall back to a tag check so
|
|
301
|
+
// that buffers created in another realm (workers, tests) are still handled.
|
|
302
|
+
if (raw instanceof ArrayBuffer || Object.prototype.toString.call(raw) === '[object ArrayBuffer]') {
|
|
303
|
+
return raw;
|
|
304
|
+
}
|
|
305
|
+
return undefined;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Decodes base64 inline content to bytes. `utils.b64toBlob` produces a Blob,
|
|
310
|
+
* but the signature check needs the bytes before a Blob is created - and the
|
|
311
|
+
* Blob has to be built from the allowlist type, not from a declared one.
|
|
312
|
+
*/
|
|
313
|
+
function base64ToArrayBuffer(base64) {
|
|
314
|
+
const binary = atob(base64);
|
|
315
|
+
const bytes = new Uint8Array(binary.length);
|
|
316
|
+
for (let i = 0; i < binary.length; i++) {
|
|
317
|
+
bytes[i] = binary.charCodeAt(i);
|
|
318
|
+
}
|
|
319
|
+
return bytes.buffer;
|
|
320
|
+
}
|
|
321
|
+
function createRevokeOnce(objectUrl) {
|
|
322
|
+
let revoked = false;
|
|
323
|
+
return () => {
|
|
324
|
+
if (revoked) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
URL.revokeObjectURL(objectUrl);
|
|
328
|
+
revoked = true;
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
;// CONCATENATED MODULE: ../../../extensions/dicom-pdf/src/getSopClassHandlerModule.js
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
const SOP_CLASS_UIDS = {
|
|
338
|
+
ENCAPSULATED_PDF: '1.2.840.10008.5.1.4.1.1.104.1'
|
|
339
|
+
};
|
|
340
|
+
const sopClassUids = Object.values(SOP_CLASS_UIDS);
|
|
341
|
+
const _getDisplaySetsFromSeries = (instances, servicesManager, extensionManager) => {
|
|
342
|
+
return instances.map(instance => {
|
|
343
|
+
const {
|
|
344
|
+
Modality,
|
|
345
|
+
SOPInstanceUID
|
|
346
|
+
} = instance;
|
|
347
|
+
const {
|
|
348
|
+
SeriesDescription = 'PDF',
|
|
349
|
+
MIMETypeOfEncapsulatedDocument
|
|
350
|
+
} = instance;
|
|
351
|
+
const {
|
|
352
|
+
SeriesNumber,
|
|
353
|
+
SeriesDate,
|
|
354
|
+
SeriesInstanceUID,
|
|
355
|
+
StudyInstanceUID,
|
|
356
|
+
SOPClassUID
|
|
357
|
+
} = instance;
|
|
358
|
+
// The declared type is only a claim. It is resolved against the displayable
|
|
359
|
+
// type allowlist, and the payload is re-wrapped in a Blob of the canonical
|
|
360
|
+
// type, so the instance cannot steer how the browser parses the document.
|
|
361
|
+
const mimeType = normalizeDocumentMimeType(MIMETypeOfEncapsulatedDocument) || 'application/pdf';
|
|
362
|
+
const documentParams = {
|
|
363
|
+
instance,
|
|
364
|
+
tag: 'EncapsulatedDocument',
|
|
365
|
+
mimeType
|
|
366
|
+
};
|
|
367
|
+
const getDocument = options => loadDisplayableDocument(documentParams, options);
|
|
368
|
+
const displaySet = {
|
|
369
|
+
//plugin: id,
|
|
370
|
+
Modality,
|
|
371
|
+
displaySetInstanceUID: src/* .utils.guid */.Wp.guid(),
|
|
372
|
+
SeriesDescription,
|
|
373
|
+
SeriesNumber,
|
|
374
|
+
SeriesDate,
|
|
375
|
+
SOPInstanceUID,
|
|
376
|
+
SeriesInstanceUID,
|
|
377
|
+
StudyInstanceUID,
|
|
378
|
+
SOPClassHandlerId: SOPClassHandlerId,
|
|
379
|
+
SOPClassUID,
|
|
380
|
+
referencedImages: null,
|
|
381
|
+
measurements: null,
|
|
382
|
+
getDocument,
|
|
383
|
+
mimeType,
|
|
384
|
+
instances: [instance],
|
|
385
|
+
thumbnailSrc: null,
|
|
386
|
+
isDerivedDisplaySet: true,
|
|
387
|
+
isLoaded: false,
|
|
388
|
+
sopClassUids,
|
|
389
|
+
numImageFrames: 0,
|
|
390
|
+
numInstances: 1,
|
|
391
|
+
instance,
|
|
392
|
+
supportsWindowLevel: true,
|
|
393
|
+
label: SeriesDescription || `${i18n_src/* ["default"].t */.A.t('Series')} ${SeriesNumber} - ${i18n_src/* ["default"].t */.A.t(Modality)}`
|
|
394
|
+
};
|
|
395
|
+
return displaySet;
|
|
396
|
+
});
|
|
397
|
+
};
|
|
398
|
+
function getSopClassHandlerModule(params) {
|
|
399
|
+
const {
|
|
400
|
+
servicesManager,
|
|
401
|
+
extensionManager
|
|
402
|
+
} = params;
|
|
403
|
+
const getDisplaySetsFromSeries = instances => {
|
|
404
|
+
return _getDisplaySetsFromSeries(instances, servicesManager, extensionManager);
|
|
405
|
+
};
|
|
406
|
+
return [{
|
|
407
|
+
name: 'dicom-pdf',
|
|
408
|
+
sopClassUids,
|
|
409
|
+
getDisplaySetsFromSeries
|
|
410
|
+
}];
|
|
411
|
+
}
|
|
412
|
+
;// CONCATENATED MODULE: ../../../extensions/dicom-pdf/src/index.tsx
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
const Component = /*#__PURE__*/react.lazy(() => {
|
|
417
|
+
return __webpack_require__.e(/* import() */ 7463).then(__webpack_require__.bind(__webpack_require__, 55738));
|
|
418
|
+
});
|
|
419
|
+
const OHIFCornerstonePdfViewport = props => {
|
|
420
|
+
return /*#__PURE__*/react.createElement(react.Suspense, {
|
|
421
|
+
fallback: /*#__PURE__*/react.createElement("div", null, "Loading...")
|
|
422
|
+
}, /*#__PURE__*/react.createElement(Component, props));
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
*
|
|
427
|
+
*/
|
|
428
|
+
const dicomPDFExtension = {
|
|
429
|
+
/**
|
|
430
|
+
* Only required property. Should be a unique value across all extensions.
|
|
431
|
+
*/
|
|
432
|
+
id: id,
|
|
433
|
+
/**
|
|
434
|
+
*
|
|
435
|
+
*
|
|
436
|
+
* @param {object} [configuration={}]
|
|
437
|
+
* @param {object|array} [configuration.csToolsConfig] - Passed directly to `initCornerstoneTools`
|
|
438
|
+
*/
|
|
439
|
+
getViewportModule() {
|
|
440
|
+
const ExtendedOHIFCornerstonePdfViewport = props => {
|
|
441
|
+
return /*#__PURE__*/react.createElement(OHIFCornerstonePdfViewport, props);
|
|
442
|
+
};
|
|
443
|
+
return [{
|
|
444
|
+
name: 'dicom-pdf',
|
|
445
|
+
component: ExtendedOHIFCornerstonePdfViewport
|
|
446
|
+
}];
|
|
447
|
+
},
|
|
448
|
+
getSopClassHandlerModule: getSopClassHandlerModule
|
|
449
|
+
};
|
|
450
|
+
/* export default */ const dicom_pdf_src = (dicomPDFExtension);
|
|
451
|
+
|
|
452
|
+
},
|
|
453
|
+
|
|
454
|
+
}]);
|
|
@@ -19,8 +19,8 @@ const SOPClassHandlerId = `${id}.sopClassHandlerModule.${SOPClassHandlerName}`;
|
|
|
19
19
|
var react = __webpack_require__(86326);
|
|
20
20
|
// EXTERNAL MODULE: ../../core/src/index.ts + 75 modules
|
|
21
21
|
var src = __webpack_require__(50679);
|
|
22
|
-
// EXTERNAL MODULE: ../../i18n/src/index.js +
|
|
23
|
-
var i18n_src = __webpack_require__(
|
|
22
|
+
// EXTERNAL MODULE: ../../i18n/src/index.js + 302 modules
|
|
23
|
+
var i18n_src = __webpack_require__(42204);
|
|
24
24
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
|
|
25
25
|
var esm = __webpack_require__(88479);
|
|
26
26
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/esm/index.js + 83 modules
|
package/dist/9415.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
.dicom-tag-browser-table{margin-left:auto;margin-right:auto}.dicom-tag-browser-table-wrapper{overflow-x:scroll}.dicom-tag-browser-table tr{color:hsl(var(--foreground));padding-left:10px;padding-right:10px;white-space:nowrap}.stick{overflow:clip;position:sticky}.dicom-tag-browser-content{overflow:hidden}.dicom-tag-browser-instance-range .range{height:20px}.dicom-tag-browser-instance-range{padding:20px 0}.dicom-tag-browser-table td.dicom-tag-browser-table-center{text-align:center}.dicom-tag-browser-table th{padding-left:10px;padding-right:10px;text-align:center}.dicom-tag-browser-table th.dicom-tag-browser-table-left{text-align:left}
|
|
2
|
-
.chrome-picker{background
|
|
2
|
+
.chrome-picker{background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}
|
package/dist/976.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
.dicom-tag-browser-table{margin-left:auto;margin-right:auto}.dicom-tag-browser-table-wrapper{overflow-x:scroll}.dicom-tag-browser-table tr{color:hsl(var(--foreground));padding-left:10px;padding-right:10px;white-space:nowrap}.stick{overflow:clip;position:sticky}.dicom-tag-browser-content{overflow:hidden}.dicom-tag-browser-instance-range .range{height:20px}.dicom-tag-browser-instance-range{padding:20px 0}.dicom-tag-browser-table td.dicom-tag-browser-table-center{text-align:center}.dicom-tag-browser-table th{padding-left:10px;padding-right:10px;text-align:center}.dicom-tag-browser-table th.dicom-tag-browser-table-left{text-align:left}
|
|
2
|
-
.chrome-picker{background
|
|
2
|
+
.chrome-picker{background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}
|