@3cr/viewer-browser 0.0.61 → 0.0.62

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 (54) hide show
  1. package/components.d.ts +1 -0
  2. package/coverage/.tmp/coverage-100.json +1 -0
  3. package/coverage/.tmp/coverage-101.json +1 -0
  4. package/coverage/.tmp/coverage-102.json +1 -0
  5. package/coverage/.tmp/coverage-103.json +1 -0
  6. package/coverage/.tmp/coverage-104.json +1 -0
  7. package/coverage/.tmp/coverage-105.json +1 -0
  8. package/coverage/.tmp/coverage-106.json +1 -0
  9. package/coverage/.tmp/coverage-107.json +1 -0
  10. package/coverage/.tmp/coverage-108.json +1 -0
  11. package/coverage/.tmp/coverage-109.json +1 -0
  12. package/coverage/.tmp/coverage-110.json +1 -0
  13. package/coverage/.tmp/coverage-98.json +1 -0
  14. package/coverage/.tmp/coverage-99.json +1 -0
  15. package/dist/Viewer3CR.js +11 -11
  16. package/dist/Viewer3CR.mjs +5524 -5403
  17. package/dist/Viewer3CR.umd.js +11 -11
  18. package/package.json +2 -1
  19. package/src/components/modal/DemoPatientModal.vue +59 -0
  20. package/src/components/modal/MftpWebGL3DRModal.vue +56 -9
  21. package/src/components/modal/__tests__/mftp-webgl-3dr-modal.spec.ts +37 -1
  22. package/coverage/3cr-viewer-browser/index.html +0 -116
  23. package/coverage/3cr-viewer-browser/index.ts.html +0 -211
  24. package/coverage/3cr-viewer-browser/src/App.vue.html +0 -313
  25. package/coverage/3cr-viewer-browser/src/components/WebGL3DR.vue.html +0 -442
  26. package/coverage/3cr-viewer-browser/src/components/icons/index.html +0 -116
  27. package/coverage/3cr-viewer-browser/src/components/icons/liver.vue.html +0 -148
  28. package/coverage/3cr-viewer-browser/src/components/index.html +0 -116
  29. package/coverage/3cr-viewer-browser/src/components/loading/LoadingSpinner.vue.html +0 -556
  30. package/coverage/3cr-viewer-browser/src/components/loading/index.html +0 -116
  31. package/coverage/3cr-viewer-browser/src/components/modal/MftpWebGL3DRModal.vue.html +0 -4126
  32. package/coverage/3cr-viewer-browser/src/components/modal/index.html +0 -116
  33. package/coverage/3cr-viewer-browser/src/components/selectors/ValueSelector.vue.html +0 -331
  34. package/coverage/3cr-viewer-browser/src/components/selectors/index.html +0 -116
  35. package/coverage/3cr-viewer-browser/src/components/sliders/DoubleSliderSelector.vue.html +0 -445
  36. package/coverage/3cr-viewer-browser/src/components/sliders/VerticalSliderSelector.vue.html +0 -349
  37. package/coverage/3cr-viewer-browser/src/components/sliders/index.html +0 -131
  38. package/coverage/3cr-viewer-browser/src/helpers/index.html +0 -146
  39. package/coverage/3cr-viewer-browser/src/helpers/layoutOverlayStyle.ts.html +0 -406
  40. package/coverage/3cr-viewer-browser/src/helpers/modelHelper.ts.html +0 -412
  41. package/coverage/3cr-viewer-browser/src/helpers/utils.ts.html +0 -133
  42. package/coverage/3cr-viewer-browser/src/index.html +0 -131
  43. package/coverage/3cr-viewer-browser/src/main.ts.html +0 -124
  44. package/coverage/3cr-viewer-browser/src/plugins/index.html +0 -131
  45. package/coverage/3cr-viewer-browser/src/plugins/index.ts.html +0 -130
  46. package/coverage/3cr-viewer-browser/src/plugins/vuetify.ts.html +0 -220
  47. package/coverage/base.css +0 -224
  48. package/coverage/block-navigation.js +0 -87
  49. package/coverage/favicon.png +0 -0
  50. package/coverage/index.html +0 -251
  51. package/coverage/prettify.css +0 -1
  52. package/coverage/prettify.js +0 -2
  53. package/coverage/sort-arrow-sprite.png +0 -0
  54. package/coverage/sorter.js +0 -196
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@3cr/viewer-browser",
3
- "version": "0.0.61",
3
+ "version": "0.0.62",
4
4
  "main": "./dist/Viewer3CR.umd.js",
5
5
  "module": "dist/Viewer3CR.umd.js",
6
6
  "homepage": "https://docs.3cr.singular.health",
@@ -14,6 +14,7 @@
14
14
  "deploy": "npm version --no-git-tag-version patch && npm run build && npm publish",
15
15
  "preview": "vite preview",
16
16
  "test": "vitest",
17
+ "test:ui": "vitest --ui",
17
18
  "compile:scripts": "tsc --project tsconfig.build-scripts.json",
18
19
  "deploy:playground": "npm run compile:scripts && node scripts/postPublish.js",
19
20
  "coverage": "vitest run --coverage"
@@ -0,0 +1,59 @@
1
+ <script setup lang="ts">
2
+ import { computed } from "vue";
3
+
4
+ export interface Props {
5
+ modal: boolean;
6
+ isModalOpen: boolean;
7
+ }
8
+
9
+ const emit = defineEmits<{
10
+ "update:modal": [value: boolean];
11
+ }>();
12
+
13
+ const props = withDefaults(defineProps<Props>(), {
14
+ modal: false,
15
+ isModalOpen: true,
16
+ });
17
+
18
+ const modalState = computed({
19
+ get() {
20
+ return props.modal;
21
+ },
22
+ set(value) {
23
+ emit("update:modal", value);
24
+ },
25
+ });
26
+ function openUrl(url: string) {
27
+ window.open(url, "_self");
28
+ }
29
+ </script>
30
+
31
+ <template>
32
+ <v-dialog v-model:model-value="modalState">
33
+ <v-card class="pa-1 ma-auto position-relative" max-width="450">
34
+ <v-card-title>Purchase 3Dicom Viewer</v-card-title>
35
+ <v-card-text> Thank you for trying 3Dicom Online Viewer! </v-card-text>
36
+ <v-card-text>
37
+ This instance of the Online Viewer is a Demo instance. If you would like
38
+ to see your scans in 3D, please choose a plan for 3DICOM
39
+ </v-card-text>
40
+ <v-card-actions>
41
+ <v-btn
42
+ color="error"
43
+ @click="modalState = false"
44
+ :disabled="!isModalOpen"
45
+ >
46
+ Continue with Viewer
47
+ </v-btn>
48
+ <v-spacer />
49
+ <v-btn
50
+ variant="tonal"
51
+ color="success"
52
+ @click="openUrl('https://3dicomviewer.com/pricing')"
53
+ >
54
+ Select a Plan
55
+ </v-btn>
56
+ </v-card-actions>
57
+ </v-card>
58
+ </v-dialog>
59
+ </template>
@@ -1,6 +1,7 @@
1
1
  <!-- /* c8 ignore start */ -->
2
2
  <template>
3
3
  <DemoModal v-model:modal="m_demo" />
4
+ <DemoPatientModal v-model:modal="m_demoPatient" :is-modal-open="value" />
4
5
  <v-dialog
5
6
  id="cr-viewer"
6
7
  class="pa-0 ma-0 overflow-y-auto overflow-x-hidden"
@@ -161,7 +162,9 @@
161
162
 
162
163
  <v-spacer />
163
164
  <div class="font-weight-bold">
164
- <span v-if="isDemo">[DEMO]&nbsp;</span>Not for Diagnostic Use
165
+ <span v-if="isDemo" class="text-capitalize"
166
+ >[3DICOM {{ demoType }} Demo]&nbsp;</span
167
+ >Not for Diagnostic Use
165
168
  </div>
166
169
  <v-spacer />
167
170
  <v-btn
@@ -693,6 +696,10 @@ import {
693
696
  LoadViewerPayload,
694
697
  } from "../../../index";
695
698
 
699
+ import { useNotification } from "@kyvg/vue3-notification";
700
+
701
+ const { notify } = useNotification();
702
+
696
703
  const emit = defineEmits<{
697
704
  instanceLoaded: [void];
698
705
  snap: [void];
@@ -715,8 +722,9 @@ const props = withDefaults(defineProps<Props>(), {
715
722
  });
716
723
  const isDemo = ref<boolean>(false);
717
724
  let m_demo = ref<boolean>(false);
725
+ let m_demoPatient = ref<boolean>(false);
718
726
 
719
- const demoOptions: LoadViewerOptions = {
727
+ const demoLicenceOptions: LoadViewerOptions = {
720
728
  OnClosePopup: () => Promise.resolve(),
721
729
  OnExitViewer: () => {
722
730
  m_demo.value = true;
@@ -747,11 +755,54 @@ const demoOptions: LoadViewerOptions = {
747
755
  },
748
756
  };
749
757
 
758
+ const demoPatientOptions: LoadViewerOptions = {
759
+ OnClosePopup: () => Promise.resolve(),
760
+ OnExitViewer: () => {
761
+ m_demoPatient.value = true;
762
+ },
763
+ OnLoadNewDicomSeries: () => {
764
+ m_demoPatient.value = true;
765
+ },
766
+ OnDownloadDicomSeries: () => {
767
+ m_demoPatient.value = true;
768
+ },
769
+ OnLoadSavedSession: () => {
770
+ m_demoPatient.value = true;
771
+ },
772
+ OnSaveSession: () => {
773
+ m_demoPatient.value = true;
774
+ },
775
+ OnSendTo3rdParty: () => {
776
+ m_demoPatient.value = true;
777
+ },
778
+ OnShareToMobile: () => {
779
+ m_demoPatient.value = true;
780
+ },
781
+ OnShare: () => {
782
+ m_demoPatient.value = true;
783
+ },
784
+ OnScreenshot: () => {
785
+ m_demoPatient.value = true;
786
+ },
787
+ };
788
+
789
+ const demoType = computed(() => {
790
+ const urlParams = new URLSearchParams(window.location.search);
791
+ return urlParams.get("demoType") || "licence";
792
+ });
793
+
750
794
  function executeOption(key: keyof LoadViewerOptions) {
751
795
  if (unref(isDemo)) {
752
- const functionToExecute = demoOptions[key];
753
- if (functionToExecute !== undefined) {
754
- functionToExecute();
796
+ if (unref(demoType) === "licence") {
797
+ const functionToExecute = demoLicenceOptions[key];
798
+ if (functionToExecute !== undefined) {
799
+ functionToExecute();
800
+ }
801
+ } else if (unref(demoType) === "patient") {
802
+ const functionToExecute = demoPatientOptions[key];
803
+ if (functionToExecute !== undefined) {
804
+ functionToExecute();
805
+ }
755
806
  }
756
807
  } else {
757
808
  const functionToExecute = unref(props.options)[key];
@@ -1175,10 +1226,6 @@ async function i_fileManagement(action: string, message: string) {
1175
1226
  await hoverOverCanvas(false);
1176
1227
  }
1177
1228
 
1178
- import { useNotification } from "@kyvg/vue3-notification";
1179
-
1180
- const { notify } = useNotification();
1181
-
1182
1229
  async function i_notifications(action: string, message: string) {
1183
1230
  const notification = JSON.parse(message) as NotificationPayload;
1184
1231
 
@@ -9,6 +9,8 @@ import {
9
9
  AnchorPoint,
10
10
  FileManagementActions,
11
11
  FrontEndInterfaces,
12
+ InteractivityActions,
13
+ NotificationPayload,
12
14
  PositionData,
13
15
  PresetsActions,
14
16
  ScanMovementActions,
@@ -29,6 +31,15 @@ vi.mock("@3cr/sdk-browser", async (importOriginal) => {
29
31
  registerOnPayloadHandler: vi.fn(),
30
32
  };
31
33
  });
34
+ vi.mock("@kyvg/vue3-notification", async (importOriginal) => {
35
+ const mod = (await importOriginal()) as object;
36
+ return {
37
+ ...mod,
38
+ useNotification: {
39
+ notify: vi.fn(),
40
+ },
41
+ };
42
+ });
32
43
 
33
44
  describe("MftpWebGL3DRModal.vue", () => {
34
45
  let wrapper = shallowMountVuetify(
@@ -292,6 +303,14 @@ describe("MftpWebGL3DRModal.vue", () => {
292
303
  wrapper.findComponent("#close-dialog-prompt");
293
304
  });
294
305
 
306
+ it("should closeModal", async () => {
307
+ wrapper.vm.closeModal();
308
+ wrapper.vm.alterValue(false);
309
+
310
+ await flushPromises();
311
+ wrapper.findComponent("#close-dialog-prompt");
312
+ });
313
+
295
314
  it("should handleOnPayload file_management", async () => {
296
315
  wrapper.vm.handleOnPayload(
297
316
  FrontEndInterfaces.file_management,
@@ -308,7 +327,24 @@ describe("MftpWebGL3DRModal.vue", () => {
308
327
  );
309
328
  });
310
329
  it("should handleOnPayload notifications", async () => {
311
- wrapper.vm.handleOnPayload(FrontEndInterfaces.notifications, "123", "123");
330
+ wrapper.vm.handleOnPayload(
331
+ FrontEndInterfaces.notifications,
332
+ "123",
333
+ JSON.stringify({
334
+ Action: InteractivityActions.in01,
335
+ Code: "S00000",
336
+ } as NotificationPayload)
337
+ );
338
+ });
339
+ it("should handleOnPayload notifications", async () => {
340
+ wrapper.vm.handleOnPayload(
341
+ FrontEndInterfaces.notifications,
342
+ "123",
343
+ JSON.stringify({
344
+ Action: InteractivityActions.in02,
345
+ Code: "S00000",
346
+ } as NotificationPayload)
347
+ );
312
348
  });
313
349
 
314
350
  it("should handleOnPayload scan_state", async () => {
@@ -1,116 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for 3cr-viewer-browser</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> 3cr-viewer-browser</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>42/42</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>3/3</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>2/2</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>42/42</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <div class="pad1">
66
- <table class="coverage-summary">
67
- <thead>
68
- <tr>
69
- <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
70
- <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
71
- <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
72
- <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
73
- <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
74
- <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
75
- <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
76
- <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
77
- <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
78
- <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
79
- </tr>
80
- </thead>
81
- <tbody><tr>
82
- <td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
83
- <td data-value="100" class="pic high">
84
- <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
- </td>
86
- <td data-value="100" class="pct high">100%</td>
87
- <td data-value="42" class="abs high">42/42</td>
88
- <td data-value="100" class="pct high">100%</td>
89
- <td data-value="3" class="abs high">3/3</td>
90
- <td data-value="100" class="pct high">100%</td>
91
- <td data-value="2" class="abs high">2/2</td>
92
- <td data-value="100" class="pct high">100%</td>
93
- <td data-value="42" class="abs high">42/42</td>
94
- </tr>
95
-
96
- </tbody>
97
- </table>
98
- </div>
99
- <div class='push'></div><!-- for sticky footer -->
100
- </div><!-- /wrapper -->
101
- <div class='footer quiet pad2 space-top1 center small'>
102
- Code coverage generated by
103
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2024-04-09T22:46:57.006Z
105
- </div>
106
- <script src="../prettify.js"></script>
107
- <script>
108
- window.onload = function () {
109
- prettyPrint();
110
- };
111
- </script>
112
- <script src="../sorter.js"></script>
113
- <script src="../block-navigation.js"></script>
114
- </body>
115
- </html>
116
-
@@ -1,211 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for 3cr-viewer-browser/index.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">3cr-viewer-browser</a> index.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>42/42</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>3/3</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>2/2</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>42/42</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
109
- <span class="cline-any cline-yes">1x</span>
110
- <span class="cline-any cline-yes">1x</span>
111
- <span class="cline-any cline-yes">1x</span>
112
- <span class="cline-any cline-yes">1x</span>
113
- <span class="cline-any cline-yes">1x</span>
114
- <span class="cline-any cline-yes">1x</span>
115
- <span class="cline-any cline-yes">1x</span>
116
- <span class="cline-any cline-yes">1x</span>
117
- <span class="cline-any cline-yes">1x</span>
118
- <span class="cline-any cline-yes">1x</span>
119
- <span class="cline-any cline-yes">1x</span>
120
- <span class="cline-any cline-yes">1x</span>
121
- <span class="cline-any cline-yes">1x</span>
122
- <span class="cline-any cline-yes">1x</span>
123
- <span class="cline-any cline-yes">1x</span>
124
- <span class="cline-any cline-yes">2x</span>
125
- <span class="cline-any cline-yes">2x</span>
126
- <span class="cline-any cline-yes">2x</span>
127
- <span class="cline-any cline-yes">2x</span>
128
- <span class="cline-any cline-yes">2x</span>
129
- <span class="cline-any cline-yes">2x</span>
130
- <span class="cline-any cline-yes">2x</span>
131
- <span class="cline-any cline-yes">2x</span>
132
- <span class="cline-any cline-yes">2x</span>
133
- <span class="cline-any cline-yes">2x</span>
134
- <span class="cline-any cline-yes">2x</span>
135
- <span class="cline-any cline-yes">2x</span>
136
- <span class="cline-any cline-yes">2x</span>
137
- <span class="cline-any cline-yes">2x</span>
138
- <span class="cline-any cline-yes">1x</span>
139
- <span class="cline-any cline-yes">1x</span>
140
- <span class="cline-any cline-yes">2x</span>
141
- <span class="cline-any cline-yes">2x</span>
142
- <span class="cline-any cline-yes">2x</span>
143
- <span class="cline-any cline-yes">2x</span>
144
- <span class="cline-any cline-yes">1x</span>
145
- <span class="cline-any cline-yes">1x</span>
146
- <span class="cline-any cline-yes">1x</span>
147
- <span class="cline-any cline-yes">1x</span>
148
- <span class="cline-any cline-yes">1x</span>
149
- <span class="cline-any cline-yes">1x</span>
150
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { registerVersion } from "@3cr/sdk-browser";
151
- import { ComponentPublicInstance, createApp } from "vue";
152
- import { registerPlugins } from "./src/plugins";
153
- import { App as BrowserViewer } from "./src/main";
154
- &nbsp;
155
- export interface LoadViewerPayload {
156
- Url: string;
157
- DecryptionKey: MftpDecryptionKey;
158
- }
159
- export interface MftpDecryptionKey {
160
- Key: string;
161
- Iv: string;
162
- }
163
- &nbsp;
164
- let mountedApp: ComponentPublicInstance | undefined = undefined;
165
- &nbsp;
166
- export async function registerViewer(version: string) {
167
- const newElement = document.createElement("div");
168
- &nbsp;
169
- newElement.style.width = "0";
170
- newElement.style.height = "0";
171
- &nbsp;
172
- document.body.appendChild(newElement);
173
- &nbsp;
174
- const app = createApp(BrowserViewer);
175
- registerPlugins(app);
176
- &nbsp;
177
- mountedApp = app.mount(newElement);
178
- await registerVersion(version);
179
- }
180
- &nbsp;
181
- // TODO: accept callbacks for each function we want the parent to handle
182
- export async function loadViewer(
183
- payload: LoadViewerPayload | undefined = undefined
184
- ): Promise&lt;void&gt; {
185
- if (!mountedApp) {
186
- throw new Error(
187
- "Please call `registerViewer(version: string, idSelector: string)` first"
188
- );
189
- }
190
- await (mountedApp as any).loadInstance(payload);
191
- }
192
- &nbsp;</pre></td></tr></table></pre>
193
-
194
- <div class='push'></div><!-- for sticky footer -->
195
- </div><!-- /wrapper -->
196
- <div class='footer quiet pad2 space-top1 center small'>
197
- Code coverage generated by
198
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
199
- at 2024-04-09T22:46:57.006Z
200
- </div>
201
- <script src="../prettify.js"></script>
202
- <script>
203
- window.onload = function () {
204
- prettyPrint();
205
- };
206
- </script>
207
- <script src="../sorter.js"></script>
208
- <script src="../block-navigation.js"></script>
209
- </body>
210
- </html>
211
-