@3cr/viewer-browser 0.0.1

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 (49) hide show
  1. package/.browserslistrc +4 -0
  2. package/.editorconfig +5 -0
  3. package/.idea/git_toolbox_prj.xml +15 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/.idea/workspace.xml +183 -0
  6. package/.vite/deps/_metadata.json +8 -0
  7. package/.vite/deps/package.json +3 -0
  8. package/README.md +81 -0
  9. package/components.d.ts +19 -0
  10. package/dist/3cr-viewer-browser.mjs +18644 -0
  11. package/dist/3cr-viewer-browser.umd.js +18 -0
  12. package/dist/style.css +5 -0
  13. package/index.html +24 -0
  14. package/index.ts +37 -0
  15. package/package.json +41 -0
  16. package/src/App.vue +40 -0
  17. package/src/assets/images/MainBackdrop.svg +48 -0
  18. package/src/assets/images/dark/3DICOM.png +0 -0
  19. package/src/assets/images/dark/3dicom-logo.svg +1 -0
  20. package/src/assets/images/dark/Singular-Health-Disc-Mono.svg +9 -0
  21. package/src/assets/images/dark/Singular-Health-Trademark-mono.svg +23 -0
  22. package/src/assets/images/light/3DICOM.png +0 -0
  23. package/src/assets/images/light/3dicom-logo.svg +1 -0
  24. package/src/assets/images/light/Singular-Health-Disc-Mono.svg +9 -0
  25. package/src/assets/images/light/Singular-Health-Trademark-mono.svg +23 -0
  26. package/src/assets/logo.png +0 -0
  27. package/src/assets/logo.svg +6 -0
  28. package/src/components/DoubleSliderSelector.vue +112 -0
  29. package/src/components/ExpansionHeaderMiniMenu.vue +19 -0
  30. package/src/components/HelloWorld.vue +157 -0
  31. package/src/components/LoadingSpinner.vue +157 -0
  32. package/src/components/MftpWebGL3DRModal.vue +995 -0
  33. package/src/components/README.md +35 -0
  34. package/src/components/SliderSelector.vue +101 -0
  35. package/src/components/VerticalSliderSelector.vue +83 -0
  36. package/src/components/WebGL3DR.vue +107 -0
  37. package/src/helpers/layoutOverlayStyle.ts +86 -0
  38. package/src/helpers/modelHelper.ts +109 -0
  39. package/src/helpers/models.ts +69 -0
  40. package/src/helpers/utils.ts +16 -0
  41. package/src/main.ts +23 -0
  42. package/src/plugins/README.md +3 -0
  43. package/src/plugins/index.ts +15 -0
  44. package/src/plugins/vuetify.ts +27 -0
  45. package/src/types/window.shim.ts +24 -0
  46. package/src/vite-env.d.ts +7 -0
  47. package/tsconfig.json +34 -0
  48. package/tsconfig.node.json +9 -0
  49. package/vite.config.mts +74 -0
package/index.html ADDED
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <!--<head>-->
5
+ <!-- <meta charset="UTF-8" />-->
6
+ <!-- <link rel="icon" href="/favicon.ico" />-->
7
+ <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0" />-->
8
+ <!-- <title>Welcome to Vuetify 3</title>-->
9
+ <!--</head>-->
10
+
11
+ <body>
12
+ <div id="app"></div>
13
+ <script type="module">
14
+ import { createApp } from 'vue';
15
+ import {App as BrowserViewer} from './src/main.ts';
16
+ import {registerPlugins} from "./src/plugins";
17
+
18
+ const app = createApp(BrowserViewer)
19
+ registerPlugins(app)
20
+ app.mount('#app');
21
+ </script>
22
+ </body>
23
+
24
+ </html>
package/index.ts ADDED
@@ -0,0 +1,37 @@
1
+ import {registerVersion} from "@3cr/sdk-browser";
2
+ import {createApp} from "vue";
3
+ import {registerPlugins} from "@/plugins";
4
+ import {App as BrowserViewer} from './src/main';
5
+
6
+ let idSelectorLocal = ''
7
+
8
+ export interface LoadViewerPayload {
9
+ Url: string;
10
+ DecryptionKey: MftpDecryptionKey;
11
+ }
12
+ export interface MftpDecryptionKey {
13
+ Key: string;
14
+ Iv: string;
15
+ }
16
+
17
+ export async function registerViewer(version: string, idSelector: string) {
18
+ idSelectorLocal = idSelector;
19
+ const app = createApp(BrowserViewer)
20
+ registerPlugins(app)
21
+
22
+ app.mount(idSelector);
23
+ await registerVersion(version);
24
+ }
25
+
26
+ export async function loadViewer(payload: LoadViewerPayload) {
27
+ const el = document.getElementById(idSelectorLocal) as any
28
+ await el?._instance.exposed.instanceLoaded(
29
+ {
30
+ Url:"https://webgl-3dr.singular.health/test_scans/8bdddee1-e581-485d-827d-6aa12eef2fc8/Head+Axial+Axial.3vxl",
31
+ DecryptionKey:{
32
+ Iv:"x856FgjpYDsRhIa3BFj5cg==",
33
+ Key:"OWjSMiL/ewUV1V6fGybhKcTyiysTPsIMp2DjdVoOUGI="
34
+ }
35
+ }
36
+ )
37
+ }
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@3cr/viewer-browser",
3
+ "version": "0.0.1",
4
+ "main": "./dist/3cr-viewer-browser.common.js",
5
+ "module": "dist/3cr-viewer-browser.umd.js",
6
+ "homepage": "https://docs.3cr.singular.health",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+ssh://git@bitbucket.org:medvr/3cr-viewer-browser.git"
10
+ },
11
+ "scripts": {
12
+ "dev": "vite",
13
+ "build": "vue-tsc --noEmit && vite build",
14
+ "preview": "vite preview",
15
+ "test": "vitest",
16
+ "coverage": "vitest run --coverage"
17
+ },
18
+ "dependencies": {
19
+ "@3cr/sdk-browser": "^1.0.13",
20
+ "@3cr/types-ts": "^1.0.3",
21
+ "@mdi/font": "6.2.95",
22
+ "roboto-fontface": "*",
23
+ "vue": "^3.4.21",
24
+ "vuetify": "^3.5.8"
25
+ },
26
+ "devDependencies": {
27
+ "@babel/types": "^7.24.0",
28
+ "@types/node": "^20.11.25",
29
+ "@vitejs/plugin-vue": "^5.0.4",
30
+ "@vue/test-utils": "^2.4.1",
31
+ "material-design-icons-iconfont": "^6.7.0",
32
+ "sass": "^1.71.1",
33
+ "typescript": "^5.4.2",
34
+ "unplugin-fonts": "^1.1.1",
35
+ "unplugin-vue-components": "^0.26.0",
36
+ "vite": "^5.1.5",
37
+ "vite-plugin-vuetify": "^2.0.3",
38
+ "vitest": "^1.4.0",
39
+ "vue-tsc": "^2.0.6"
40
+ }
41
+ }
package/src/App.vue ADDED
@@ -0,0 +1,40 @@
1
+ <template>
2
+ <v-app>
3
+ <v-main>
4
+ <MftpWebGL3DRModal ref="mftpWebGL3DRModal" @instanceLoaded="instanceLoaded" />
5
+ </v-main>
6
+ </v-app>
7
+ </template>
8
+
9
+ <script setup lang="ts">
10
+ import { registerVersion } from '@3cr/sdk-browser';
11
+
12
+ import MftpWebGL3DRModal from "@/components/MftpWebGL3DRModal.vue";
13
+ import {nextTick, onMounted, ref, unref} from "vue";
14
+
15
+ const mftpWebGL3DRModal = ref<typeof MftpWebGL3DRModal | null>(null)
16
+ onMounted(async () => {
17
+ await registerVersion('1.0.0_234');
18
+ await nextTick()
19
+ setTimeout(async () => {
20
+ unref(mftpWebGL3DRModal)?.alterValue(true)
21
+ await instanceLoaded({})
22
+ }, 1000)
23
+ })
24
+ defineExpose({
25
+ instanceLoaded
26
+ })
27
+
28
+ async function instanceLoaded(payload: any) {
29
+ await unref(mftpWebGL3DRModal)?.load({
30
+ Url:"https://webgl-3dr.singular.health/test_scans/8bdddee1-e581-485d-827d-6aa12eef2fc8/Head+Axial+Axial.3vxl",
31
+ DecryptionKey:{
32
+ Iv:"x856FgjpYDsRhIa3BFj5cg==",
33
+ Key:"OWjSMiL/ewUV1V6fGybhKcTyiysTPsIMp2DjdVoOUGI="
34
+ }
35
+ })
36
+ }
37
+ setTimeout(() => {
38
+ console.log(mftpWebGL3DRModal?.value)
39
+ }, 1000)
40
+ </script>
@@ -0,0 +1,48 @@
1
+ <svg width="992" height="560" viewBox="15 7 992 560" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="15" y="1" width="992" height="567" fill="url(#paint0_linear_504_579)"/>
3
+ <g filter="url(#filter0_i_504_579)">
4
+ <path d="M567.029 291.5C574.21 421.339 748.15 561 825.931 561H12L12.0001 0C153.713 0 580.363 0 580.363 0C684.258 142 560.918 181 567.029 291.5Z" fill="#1B2E43" fill-opacity="0.9"/>
5
+ </g>
6
+ <g filter="url(#filter1_i_504_579)">
7
+ <path d="M435.911 260.5C462.579 433.5 652.034 561 729.815 561H12L12.0001 0C233.678 0 409.954 92.1126 435.911 260.5Z" fill="#1B2E43" fill-opacity="0.9"/>
8
+ </g>
9
+ <g filter="url(#filter2_i_504_579)">
10
+ <circle cx="46" cy="521" r="93" fill="#1B2E43" fill-opacity="0.3"/>
11
+ </g>
12
+ <defs>
13
+ <filter id="filter0_i_504_579" x="12" y="0" width="858.931" height="606" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
14
+ <feFlood flood-opacity="0" result="BackgroundImageFix"/>
15
+ <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
16
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
17
+ <feOffset dx="45" dy="45"/>
18
+ <feGaussianBlur stdDeviation="50"/>
19
+ <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
20
+ <feColorMatrix type="matrix" values="0 0 0 0 0.653125 0 0 0 0 0.761642 0 0 0 0 0.916667 0 0 0 0.15 0"/>
21
+ <feBlend mode="normal" in2="shape" result="effect1_innerShadow_504_579"/>
22
+ </filter>
23
+ <filter id="filter1_i_504_579" x="12" y="0" width="762.815" height="606" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
24
+ <feFlood flood-opacity="0" result="BackgroundImageFix"/>
25
+ <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
26
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
27
+ <feOffset dx="45" dy="45"/>
28
+ <feGaussianBlur stdDeviation="50"/>
29
+ <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
30
+ <feColorMatrix type="matrix" values="0 0 0 0 0.653125 0 0 0 0 0.761642 0 0 0 0 0.916667 0 0 0 0.25 0"/>
31
+ <feBlend mode="normal" in2="shape" result="effect1_innerShadow_504_579"/>
32
+ </filter>
33
+ <filter id="filter2_i_504_579" x="-47" y="428" width="231" height="231" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
34
+ <feFlood flood-opacity="0" result="BackgroundImageFix"/>
35
+ <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
36
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
37
+ <feOffset dx="45" dy="45"/>
38
+ <feGaussianBlur stdDeviation="50"/>
39
+ <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
40
+ <feColorMatrix type="matrix" values="0 0 0 0 0.653125 0 0 0 0 0.761642 0 0 0 0 0.916667 0 0 0 0.15 0"/>
41
+ <feBlend mode="normal" in2="shape" result="effect1_innerShadow_504_579"/>
42
+ </filter>
43
+ <linearGradient id="paint0_linear_504_579" x1="1251.04" y1="696.83" x2="21.486" y2="-10.2783" gradientUnits="userSpaceOnUse">
44
+ <stop stop-color="#0E141D"/>
45
+ <stop offset="1" stop-color="#23405E"/>
46
+ </linearGradient>
47
+ </defs>
48
+ </svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" width="100%" height="100%" viewBox="0 0 150 46" version="1.1" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path fill="#FFFFFF" d="M13.982,11.87c-0,-2.007 -0.331,-3.363 -0.992,-4.068c-0.662,-0.704 -1.547,-1.056 -2.656,-1.056c-1.109,-0 -1.994,0.331 -2.656,0.992c-0.661,0.662 -0.991,1.804 -0.991,3.427l-0,2.882l-6.655,0l-0,-2.434c-0,-3.629 0.885,-6.415 2.655,-8.358c1.771,-1.943 4.384,-2.914 7.839,-2.914c3.456,-0 6.068,0.971 7.839,2.914c1.77,1.943 2.655,4.729 2.655,8.358l0,1.153c0,4.782 -1.642,7.857 -4.927,9.223c1.792,0.769 3.061,1.954 3.808,3.555c0.746,1.601 1.119,3.554 1.119,5.86l0,3.523c0,3.629 -0.885,6.415 -2.655,8.358c-1.771,1.943 -4.383,2.914 -7.839,2.914c-3.455,0 -6.068,-0.971 -7.839,-2.914c-1.77,-1.943 -2.655,-4.729 -2.655,-8.358l-0,-3.715l6.655,0l-0,4.163c-0,1.623 0.33,2.765 0.991,3.427c0.662,0.662 1.547,0.992 2.656,0.992c1.109,0 1.994,-0.341 2.656,-1.024c0.661,-0.683 0.992,-2.028 0.992,-4.035l-0,-3.523c-0,-2.092 -0.363,-3.565 -1.088,-4.419c-0.726,-0.854 -1.899,-1.281 -3.52,-1.281l-2.367,-0l-0,-6.405l2.751,-0c1.323,-0 2.357,-0.342 3.104,-1.025c0.746,-0.683 1.12,-1.921 1.12,-3.715l-0,-2.497Z" style="fill-rule:nonzero;"></path><path fill="#FFFFFF" d="M27.036,0.853l11.134,0c3.541,0 6.175,0.94 7.903,2.818c1.727,1.879 2.591,4.633 2.591,8.263l0,22.673c0,3.629 -0.864,6.383 -2.591,8.262c-1.728,1.879 -4.362,2.818 -7.903,2.818l-11.134,-0l-0,-44.834Zm7.038,6.405l0,32.024l3.968,0c1.109,0 1.984,-0.32 2.623,-0.961c0.64,-0.64 0.96,-1.772 0.96,-3.394l0,-23.314c0,-1.622 -0.32,-2.754 -0.96,-3.394c-0.639,-0.641 -1.514,-0.961 -2.623,-0.961l-3.968,0Z" style="fill-rule:nonzero;"></path><rect fill="#FFFFFF" x="54.423" y="0.853" width="7.039" height="44.834" style="fill-rule:nonzero;"></rect><path fill="#FFFFFF" d="M88.274,28.97l0,5.957c0,3.629 -0.885,6.415 -2.655,8.358c-1.771,1.943 -4.384,2.914 -7.839,2.914c-3.456,0 -6.069,-0.971 -7.839,-2.914c-1.77,-1.943 -2.656,-4.729 -2.656,-8.358l0,-23.314c0,-3.629 0.886,-6.415 2.656,-8.358c1.77,-1.943 4.383,-2.914 7.839,-2.914c3.455,-0 6.068,0.971 7.839,2.914c1.77,1.943 2.655,4.729 2.655,8.358l0,4.356l-6.655,-0l0,-4.804c0,-1.623 -0.33,-2.765 -0.992,-3.427c-0.661,-0.661 -1.546,-0.992 -2.655,-0.992c-1.109,-0 -1.995,0.331 -2.656,0.992c-0.661,0.662 -0.992,1.804 -0.992,3.427l0,24.21c0,1.623 0.331,2.754 0.992,3.395c0.661,0.64 1.547,0.96 2.656,0.96c1.109,0 1.994,-0.32 2.655,-0.96c0.662,-0.641 0.992,-1.772 0.992,-3.395l0,-6.405l6.655,0Z" style="fill-rule:nonzero;"></path><path fill="#FFFFFF" d="M100.304,35.375c0,1.623 0.331,2.765 0.992,3.427c0.661,0.662 1.547,0.992 2.656,0.992c1.109,0 1.994,-0.33 2.655,-0.992c0.662,-0.662 0.992,-1.804 0.992,-3.427l0,-24.21c0,-1.623 -0.33,-2.765 -0.992,-3.427c-0.661,-0.661 -1.546,-0.992 -2.655,-0.992c-1.109,-0 -1.995,0.331 -2.656,0.992c-0.661,0.662 -0.992,1.804 -0.992,3.427l0,24.21Zm-7.039,-23.762c0,-3.629 0.918,-6.415 2.752,-8.358c1.834,-1.943 4.479,-2.914 7.935,-2.914c3.455,-0 6.1,0.971 7.935,2.914c1.834,1.943 2.751,4.729 2.751,8.358l0,23.314c0,3.629 -0.917,6.415 -2.751,8.358c-1.835,1.943 -4.48,2.914 -7.935,2.914c-3.456,0 -6.101,-0.971 -7.935,-2.914c-1.834,-1.943 -2.752,-4.729 -2.752,-8.358l0,-23.314Z" style="fill-rule:nonzero;"></path><path fill="#FFFFFF" d="M135.371,32.685l4.799,-31.832l9.791,0l-0,44.834l-6.655,-0l-0,-32.152l-4.863,32.152l-6.655,-0l-5.248,-31.704l0,31.704l-6.143,-0l0,-44.834l9.791,0l5.183,31.832Z" style="fill-rule:nonzero;"></path></svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg id="Layer_2" data-name="Layer 2" viewBox="0 0 357.373 379.448" xmlns="http://www.w3.org/2000/svg">
3
+ <defs>
4
+ <style>.cls-1{fill:#fff;}.cls-2{fill:#fff;}</style>
5
+ </defs>
6
+ <title>Singular Health Trademark_4824</title>
7
+ <path class="cls-1" d="M 102.524 256.011 C 120.346 249.63 134.779 236.229 142.462 218.927 C 147.925 207.345 151.83 195.09 154.079 182.483 L 175.163 72.262 C 175.625 70.065 178.291 69.192 179.963 70.689 C 180.425 71.104 180.743 71.655 180.87 72.262 L 201.963 182.483 C 204.212 195.092 208.121 207.346 213.59 218.927 C 221.269 236.228 235.698 249.63 253.518 256.011 L 313.269 277.922 C 330.871 251.395 340.239 220.257 340.193 188.421 C 340.193 98.857 267.589 26.244 178.026 26.244 C 88.462 26.244 15.876 98.857 15.876 188.421 C 15.815 220.292 25.19 251.468 42.818 278.02 L 102.524 256.011 Z"/>
8
+ <path class="cls-2" d="M 239.047 292.482 C 213.199 280.615 198.381 261.807 193.59 235.709 C 193.59 235.709 192.799 233.176 189.146 204.501 L 179.315 129.666 C 179.173 128.698 178.036 128.245 177.269 128.852 C 177.014 129.053 176.846 129.345 176.799 129.666 L 167.021 204.501 C 163.324 233.176 162.577 235.709 162.577 235.709 C 157.777 261.807 142.959 280.615 117.12 292.482 L 73.822 312.686 C 134.126 363.265 222.044 363.232 282.309 312.606 L 239.047 292.482 Z"/>
9
+ </svg>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg id="Layer_2" data-name="Layer 2" viewBox="0 0 1337.96 369.14" xmlns="http://www.w3.org/2000/svg">
3
+ <defs>
4
+ <style>.disk{fill:#7db1ce;}.singular{fill:#bbbbbb;}.health{fill:#FFFFFF;}</style>
5
+ </defs>
6
+ <title>Singular Health Trademark_4824</title>
7
+ <path class="disk" d="M1173.48,366.24a77.89,77.89,0,0,0,44.93-41.72,163.35,163.35,0,0,0,13.07-41l23.72-124a3.28,3.28,0,0,1,6.42,0l23.73,124a163.12,163.12,0,0,0,13.08,41,77.87,77.87,0,0,0,44.92,41.72l67.22,24.65a181.63,181.63,0,0,0,30.29-100.69c0-100.76-81.68-182.45-182.44-182.45S1076,189.44,1076,290.2A181.61,181.61,0,0,0,1106.31,391Z" transform="translate(-102.9 -103.5)"/>
8
+ <path class="disk" d="M1327.07,407.27c-29.08-13.35-45.75-34.51-51.14-63.87,0,0-.89-2.85-5-35.11l-11.06-84.19a1.43,1.43,0,0,0-2.83,0l-11,84.19c-4.16,32.26-5,35.11-5,35.11-5.4,29.36-22.07,50.52-51.14,63.87L1141.19,430a182.41,182.41,0,0,0,234.55-.09Z" transform="translate(-102.9 -103.5)"/>
9
+ <path class="singular" d="M144.08,270.37a23.72,23.72,0,0,0,7,7.69,29.78,29.78,0,0,0,9.83,4.42,46.24,46.24,0,0,0,11.54,1.42,43.66,43.66,0,0,0,9-1,30.66,30.66,0,0,0,8.55-3.14,19.37,19.37,0,0,0,6.41-5.7,15,15,0,0,0,2.57-9q0-9.1-12.12-13.68t-33.77-9.12q-8.84-2-17.24-4.7a58.65,58.65,0,0,1-15-7.12,34.57,34.57,0,0,1-10.55-11.12q-4-6.69-4-16.39,0-14.24,5.56-23.37a41,41,0,0,1,14.68-14.39,64.41,64.41,0,0,1,20.52-7.41,126.9,126.9,0,0,1,23.37-2.14,117.44,117.44,0,0,1,23.22,2.28,61.75,61.75,0,0,1,20.1,7.7A46.2,46.2,0,0,1,228.44,180q5.85,9,7,22.66H197q-.85-11.69-8.83-15.82a40.51,40.51,0,0,0-18.81-4.13,68.45,68.45,0,0,0-7.41.43,24.48,24.48,0,0,0-7.27,1.85,15,15,0,0,0-5.56,4.13,10.93,10.93,0,0,0-2.28,7.27,11.09,11.09,0,0,0,4,8.83,30.71,30.71,0,0,0,10.4,5.56,129.29,129.29,0,0,0,14.68,3.85q8.26,1.71,16.82,3.7a174.75,174.75,0,0,1,17.24,4.85,56.93,56.93,0,0,1,15,7.55,36.67,36.67,0,0,1,10.55,11.69q4,7,4,17.24,0,14.54-5.85,24.37a46.71,46.71,0,0,1-15.24,15.81,62.46,62.46,0,0,1-21.52,8.41,125.86,125.86,0,0,1-24.65,2.42,122,122,0,0,1-25.08-2.56,66.2,66.2,0,0,1-21.81-8.55,48.75,48.75,0,0,1-15.67-15.82q-6.13-9.83-6.7-24.65h38.48A22.27,22.27,0,0,0,144.08,270.37Z" transform="translate(-102.9 -103.5)"/>
10
+ <path class="singular" d="M290.14,159.64V307H249.67V159.64Z" transform="translate(-102.9 -103.5)"/>
11
+ <path class="singular" d="M346,159.64v20.52h.86q7.69-12.82,19.95-18.66a57.6,57.6,0,0,1,25.08-5.85q16.25,0,26.64,4.42a39.49,39.49,0,0,1,16.39,12.26,47.48,47.48,0,0,1,8.41,19.09,119.16,119.16,0,0,1,2.42,24.94V307H405.28V223.77q0-18.24-5.7-27.22t-20.23-9q-16.55,0-23.94,9.84T348,229.75V307H307.53V159.64Z" transform="translate(-102.9 -103.5)"/>
12
+ <path class="singular" d="M597.81,317.82a49.79,49.79,0,0,1-10.4,21.23q-8,9.84-23.08,16.67t-40.47,6.84a94.43,94.43,0,0,1-22.09-2.7,70.19,70.19,0,0,1-20.52-8.41,50.26,50.26,0,0,1-15.39-14.68q-6.14-9-7-21.52h40.18q2.85,11.4,11.12,15.82a39.79,39.79,0,0,0,19.09,4.42q17.1,0,24.94-10.26t7.55-25.94V279.91h-.57a40,40,0,0,1-18.67,17.25,60.51,60.51,0,0,1-25.5,5.55q-16.54,0-28.5-5.84a54,54,0,0,1-19.67-16,66.65,66.65,0,0,1-11.26-23.65A112.39,112.39,0,0,1,454,228.61a92.06,92.06,0,0,1,4.13-27.5,71.91,71.91,0,0,1,12.12-23.37,58.51,58.51,0,0,1,19.8-16.1q11.84-6,27.22-6,14.54,0,25.51,5.42t18.38,18.24h.57V159.64h38.48V297.58A98.33,98.33,0,0,1,597.81,317.82Zm-55.43-49a31.6,31.6,0,0,0,10.83-9.12,40.25,40.25,0,0,0,6.41-13,53.53,53.53,0,0,0,2.14-15.25,83.65,83.65,0,0,0-1.71-17.24,43.11,43.11,0,0,0-5.7-14.39,29.67,29.67,0,0,0-10.54-10q-6.57-3.69-16.53-3.7a29.67,29.67,0,0,0-14.68,3.42,30.81,30.81,0,0,0-10.26,9.26,39.09,39.09,0,0,0-6,13.4A66.4,66.4,0,0,0,494.5,228a80,80,0,0,0,1.57,15.82A42.72,42.72,0,0,0,501.48,258a31.69,31.69,0,0,0,10.12,10.26q6.27,4,15.68,4A32.17,32.17,0,0,0,542.38,268.8Z" transform="translate(-102.9 -103.5)"/>
13
+ <path class="singular" d="M714.25,307V286.47h-.85q-7.7,12.82-19.95,18.52a58.88,58.88,0,0,1-25.08,5.7q-16.25,0-26.65-4.27a38.39,38.39,0,0,1-16.39-12.11,47.37,47.37,0,0,1-8.4-19.1,118.39,118.39,0,0,1-2.43-24.94V159.64H655v83.22q0,18.25,5.7,27.22t20.24,9q16.53,0,23.94-9.83t7.41-32.35V159.64h40.47V307Z" transform="translate(-102.9 -103.5)"/>
14
+ <path class="singular" d="M810.58,103.5V307H770.11V103.5Z" transform="translate(-102.9 -103.5)"/>
15
+ <path class="singular" d="M823.42,205q.86-14.25,7.12-23.66a48.5,48.5,0,0,1,16-15.1,69.42,69.42,0,0,1,21.81-8.12,123.47,123.47,0,0,1,24.36-2.43,166,166,0,0,1,22.52,1.57,69,69,0,0,1,20.8,6.13A41,41,0,0,1,951.38,176q6,8.13,6,21.52v76.66a153.93,153.93,0,0,0,1.14,19.1q1.14,9.12,4,13.68h-41a57.35,57.35,0,0,1-1.85-7,60,60,0,0,1-1-7.27,52.63,52.63,0,0,1-22.8,14,91.51,91.51,0,0,1-26.79,4,72.42,72.42,0,0,1-19.67-2.56,45,45,0,0,1-16-8,37.08,37.08,0,0,1-10.68-13.68q-3.86-8.27-3.85-19.67,0-12.53,4.42-20.66a37,37,0,0,1,11.4-13,51.07,51.07,0,0,1,16-7.26,168.77,168.77,0,0,1,18.09-3.85q9.12-1.42,18-2.28a107.86,107.86,0,0,0,15.67-2.57,27.39,27.39,0,0,0,10.83-5q4-3.28,3.71-9.55,0-6.56-2.14-10.4a15.73,15.73,0,0,0-5.7-6,22.64,22.64,0,0,0-8.26-2.85,68.4,68.4,0,0,0-10.12-.71q-12,0-18.81,5.13t-8,17.1Zm93.48,29.92a18.12,18.12,0,0,1-6.41,3.57,66.91,66.91,0,0,1-8.27,2.13c-3,.57-6,1-9.26,1.43s-6.46.85-9.69,1.42a75.22,75.22,0,0,0-9,2.28,26.77,26.77,0,0,0-7.69,3.85,18.31,18.31,0,0,0-5.28,6.13,19.72,19.72,0,0,0-2,9.4,19,19,0,0,0,2,9.12,15.29,15.29,0,0,0,5.42,5.85,23,23,0,0,0,8,3,50.88,50.88,0,0,0,9.4.85q12,0,18.53-4a26.63,26.63,0,0,0,9.69-9.54,30.67,30.67,0,0,0,3.85-11.26,78.34,78.34,0,0,0,.71-9.12Z" transform="translate(-102.9 -103.5)"/>
16
+ <path class="singular" d="M1008.4,159.64V187h.57a49.86,49.86,0,0,1,7.7-12.68,50.37,50.37,0,0,1,11.11-10,54.54,54.54,0,0,1,13.4-6.42,48.63,48.63,0,0,1,14.82-2.28,31.55,31.55,0,0,1,8.83,1.43V194.7q-2.85-.57-6.84-1a73.54,73.54,0,0,0-7.69-.43q-11.11,0-18.81,3.71a32.58,32.58,0,0,0-12.4,10.12,40.6,40.6,0,0,0-6.7,15,81.47,81.47,0,0,0-2,18.52V307H969.93V159.64Z" transform="translate(-102.9 -103.5)"/>
17
+ <path class="health" d="M637.28,330.1v40h.47a25.64,25.64,0,0,1,10.76-10.22,29.06,29.06,0,0,1,12.79-3.19q8.9,0,14.59,2.41a21.77,21.77,0,0,1,9,6.71,26.14,26.14,0,0,1,4.6,10.45,65.29,65.29,0,0,1,1.33,13.65V439.5H668.63V394q0-10-3.12-14.9t-11.07-4.91q-9.06,0-13.11,5.38t-4.05,17.7V439.5H615.13V330.1Z" transform="translate(-102.9 -103.5)"/>
18
+ <path class="health" d="M724.8,420.16q5,4.83,14.36,4.83a19.7,19.7,0,0,0,11.54-3.35q4.83-3.36,5.93-7.1h19.5q-4.68,14.5-14.35,20.75t-23.4,6.24a46.18,46.18,0,0,1-17.16-3,35.68,35.68,0,0,1-13-8.66,38.92,38.92,0,0,1-8.19-13.42,49,49,0,0,1-2.89-17.16,47,47,0,0,1,3-16.85,39,39,0,0,1,21.45-22.46,41.81,41.81,0,0,1,16.77-3.27,38.4,38.4,0,0,1,17.94,4,35.79,35.79,0,0,1,12.55,10.69,43.91,43.91,0,0,1,7.1,15.29,56.7,56.7,0,0,1,1.56,17.94H719.34Q719.82,415.32,724.8,420.16Zm25-42.44q-4-4.37-12.09-4.36a19.35,19.35,0,0,0-8.81,1.79,16.89,16.89,0,0,0-5.62,4.45,16.35,16.35,0,0,0-3,5.61,26.11,26.11,0,0,0-1,5.31h36Q753.82,382.09,749.84,377.72Z" transform="translate(-102.9 -103.5)"/>
19
+ <path class="health" d="M781.74,383.65a25.66,25.66,0,0,1,3.9-12.94,26.48,26.48,0,0,1,8.74-8.27A38.14,38.14,0,0,1,806.31,358a68.18,68.18,0,0,1,13.34-1.32,90.85,90.85,0,0,1,12.33.85,37.78,37.78,0,0,1,11.38,3.36,22.42,22.42,0,0,1,8.43,6.94q3.27,4.44,3.27,11.78v42a83.36,83.36,0,0,0,.63,10.45,18.78,18.78,0,0,0,2.18,7.49H835.41a31.14,31.14,0,0,1-1-3.82,32.57,32.57,0,0,1-.54-4,28.85,28.85,0,0,1-12.48,7.64,50,50,0,0,1-14.67,2.19,39.83,39.83,0,0,1-10.76-1.4,24.86,24.86,0,0,1-8.74-4.37,20.47,20.47,0,0,1-5.85-7.49,25.39,25.39,0,0,1-2.1-10.77,23.46,23.46,0,0,1,2.42-11.31,20.28,20.28,0,0,1,6.23-7.09,27.83,27.83,0,0,1,8.74-4,94.46,94.46,0,0,1,9.91-2.11c3.32-.52,6.6-.93,9.83-1.25a59.6,59.6,0,0,0,8.58-1.4,14.81,14.81,0,0,0,5.92-2.73,6,6,0,0,0,2-5.23,11.73,11.73,0,0,0-1.17-5.69,8.64,8.64,0,0,0-3.12-3.28,12.28,12.28,0,0,0-4.52-1.55,37.1,37.1,0,0,0-5.54-.4q-6.55,0-10.3,2.81t-4.36,9.36ZM832.91,400a9.83,9.83,0,0,1-3.51,2,35,35,0,0,1-4.52,1.17c-1.62.31-3.31.58-5.07.78s-3.54.47-5.31.78a39.68,39.68,0,0,0-4.91,1.25,14.33,14.33,0,0,0-4.21,2.11,10,10,0,0,0-2.89,3.35,10.77,10.77,0,0,0-1.09,5.15,10.37,10.37,0,0,0,1.09,5,8.41,8.41,0,0,0,3,3.2,12.6,12.6,0,0,0,4.36,1.64,28.11,28.11,0,0,0,5.15.46q6.56,0,10.14-2.18a14.69,14.69,0,0,0,5.31-5.22,16.82,16.82,0,0,0,2.1-6.17,42.27,42.27,0,0,0,.39-5Z" transform="translate(-102.9 -103.5)"/>
20
+ <path class="health" d="M885.62,329.82V439.5H863.47V329.82Z" transform="translate(-102.9 -103.5)"/>
21
+ <path class="health" d="M938.31,358.85v14.82H925.49V413.6c0,3.75.62,6.24,1.87,7.49s1.53,1.56,4.37,1.87a17.71,17.71,0,0,0,3.59-.15,29.56,29.56,0,0,0,3.27-.47V439.5a54.29,54.29,0,0,1-6.24.63c-2.29.1-1.4.15-3.59.15a64.45,64.45,0,0,1-9.75-.7,23,23,0,0,1-8.11-2.73,14.46,14.46,0,0,1-5.54-5.77,20.67,20.67,0,0,1-2-9.83V373.67H891.62V358.85h11.72V336.37h22.15v22.48Z" transform="translate(-102.9 -103.5)"/>
22
+ <path class="health" d="M966.51,329.82v40.26H967a25.72,25.72,0,0,1,10.77-10.22,29,29,0,0,1,12.79-3.19q8.9,0,14.58,2.41a21.64,21.64,0,0,1,9,6.71,26,26,0,0,1,4.61,10.45,65.32,65.32,0,0,1,1.32,13.65V439.5H997.87V394q0-10-3.12-14.9t-11.08-4.91q-9,0-13.1,5.38t-4.06,17.7V439.5H944.36V329.82Z" transform="translate(-102.9 -103.5)"/>
23
+ </svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:serif="http://www.serif.com/" width="100%" height="100%" viewBox="0 0 150 46" version="1.1" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M13.982,11.87c-0,-2.007 -0.331,-3.363 -0.992,-4.068c-0.662,-0.704 -1.547,-1.056 -2.656,-1.056c-1.109,-0 -1.994,0.331 -2.656,0.992c-0.661,0.662 -0.991,1.804 -0.991,3.427l-0,2.882l-6.655,0l-0,-2.434c-0,-3.629 0.885,-6.415 2.655,-8.358c1.771,-1.943 4.384,-2.914 7.839,-2.914c3.456,-0 6.068,0.971 7.839,2.914c1.77,1.943 2.655,4.729 2.655,8.358l0,1.153c0,4.782 -1.642,7.857 -4.927,9.223c1.792,0.769 3.061,1.954 3.808,3.555c0.746,1.601 1.119,3.554 1.119,5.86l0,3.523c0,3.629 -0.885,6.415 -2.655,8.358c-1.771,1.943 -4.383,2.914 -7.839,2.914c-3.455,0 -6.068,-0.971 -7.839,-2.914c-1.77,-1.943 -2.655,-4.729 -2.655,-8.358l-0,-3.715l6.655,0l-0,4.163c-0,1.623 0.33,2.765 0.991,3.427c0.662,0.662 1.547,0.992 2.656,0.992c1.109,0 1.994,-0.341 2.656,-1.024c0.661,-0.683 0.992,-2.028 0.992,-4.035l-0,-3.523c-0,-2.092 -0.363,-3.565 -1.088,-4.419c-0.726,-0.854 -1.899,-1.281 -3.52,-1.281l-2.367,-0l-0,-6.405l2.751,-0c1.323,-0 2.357,-0.342 3.104,-1.025c0.746,-0.683 1.12,-1.921 1.12,-3.715l-0,-2.497Z" style="fill-rule:nonzero;"></path><path d="M27.036,0.853l11.134,0c3.541,0 6.175,0.94 7.903,2.818c1.727,1.879 2.591,4.633 2.591,8.263l0,22.673c0,3.629 -0.864,6.383 -2.591,8.262c-1.728,1.879 -4.362,2.818 -7.903,2.818l-11.134,-0l-0,-44.834Zm7.038,6.405l0,32.024l3.968,0c1.109,0 1.984,-0.32 2.623,-0.961c0.64,-0.64 0.96,-1.772 0.96,-3.394l0,-23.314c0,-1.622 -0.32,-2.754 -0.96,-3.394c-0.639,-0.641 -1.514,-0.961 -2.623,-0.961l-3.968,0Z" style="fill-rule:nonzero;"></path><rect x="54.423" y="0.853" width="7.039" height="44.834" style="fill-rule:nonzero;"></rect><path d="M88.274,28.97l0,5.957c0,3.629 -0.885,6.415 -2.655,8.358c-1.771,1.943 -4.384,2.914 -7.839,2.914c-3.456,0 -6.069,-0.971 -7.839,-2.914c-1.77,-1.943 -2.656,-4.729 -2.656,-8.358l0,-23.314c0,-3.629 0.886,-6.415 2.656,-8.358c1.77,-1.943 4.383,-2.914 7.839,-2.914c3.455,-0 6.068,0.971 7.839,2.914c1.77,1.943 2.655,4.729 2.655,8.358l0,4.356l-6.655,-0l0,-4.804c0,-1.623 -0.33,-2.765 -0.992,-3.427c-0.661,-0.661 -1.546,-0.992 -2.655,-0.992c-1.109,-0 -1.995,0.331 -2.656,0.992c-0.661,0.662 -0.992,1.804 -0.992,3.427l0,24.21c0,1.623 0.331,2.754 0.992,3.395c0.661,0.64 1.547,0.96 2.656,0.96c1.109,0 1.994,-0.32 2.655,-0.96c0.662,-0.641 0.992,-1.772 0.992,-3.395l0,-6.405l6.655,0Z" style="fill-rule:nonzero;"></path><path d="M100.304,35.375c0,1.623 0.331,2.765 0.992,3.427c0.661,0.662 1.547,0.992 2.656,0.992c1.109,0 1.994,-0.33 2.655,-0.992c0.662,-0.662 0.992,-1.804 0.992,-3.427l0,-24.21c0,-1.623 -0.33,-2.765 -0.992,-3.427c-0.661,-0.661 -1.546,-0.992 -2.655,-0.992c-1.109,-0 -1.995,0.331 -2.656,0.992c-0.661,0.662 -0.992,1.804 -0.992,3.427l0,24.21Zm-7.039,-23.762c0,-3.629 0.918,-6.415 2.752,-8.358c1.834,-1.943 4.479,-2.914 7.935,-2.914c3.455,-0 6.1,0.971 7.935,2.914c1.834,1.943 2.751,4.729 2.751,8.358l0,23.314c0,3.629 -0.917,6.415 -2.751,8.358c-1.835,1.943 -4.48,2.914 -7.935,2.914c-3.456,0 -6.101,-0.971 -7.935,-2.914c-1.834,-1.943 -2.752,-4.729 -2.752,-8.358l0,-23.314Z" style="fill-rule:nonzero;"></path><path d="M135.371,32.685l4.799,-31.832l9.791,0l-0,44.834l-6.655,-0l-0,-32.152l-4.863,32.152l-6.655,-0l-5.248,-31.704l0,31.704l-6.143,-0l0,-44.834l9.791,0l5.183,31.832Z" style="fill-rule:nonzero;"></path></svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg id="Layer_2" data-name="Layer 2" viewBox="0 0 357.373 379.448" xmlns="http://www.w3.org/2000/svg">
3
+ <defs>
4
+ <style>.cls-1{fill:#5D8DC3;}.cls-2{fill:#5D8DC3;}</style>
5
+ </defs>
6
+ <title>Singular Health Trademark_4824</title>
7
+ <path class="cls-1" d="M 102.524 256.011 C 120.346 249.63 134.779 236.229 142.462 218.927 C 147.925 207.345 151.83 195.09 154.079 182.483 L 175.163 72.262 C 175.625 70.065 178.291 69.192 179.963 70.689 C 180.425 71.104 180.743 71.655 180.87 72.262 L 201.963 182.483 C 204.212 195.092 208.121 207.346 213.59 218.927 C 221.269 236.228 235.698 249.63 253.518 256.011 L 313.269 277.922 C 330.871 251.395 340.239 220.257 340.193 188.421 C 340.193 98.857 267.589 26.244 178.026 26.244 C 88.462 26.244 15.876 98.857 15.876 188.421 C 15.815 220.292 25.19 251.468 42.818 278.02 L 102.524 256.011 Z" style="fill: #344454;"/>
8
+ <path class="cls-1" d="M 239.047 292.482 C 213.199 280.615 198.381 261.807 193.59 235.709 C 193.59 235.709 192.799 233.176 189.146 204.501 L 179.315 129.666 C 179.173 128.698 178.036 128.245 177.269 128.852 C 177.014 129.053 176.846 129.345 176.799 129.666 L 167.021 204.501 C 163.324 233.176 162.577 235.709 162.577 235.709 C 157.777 261.807 142.959 280.615 117.12 292.482 L 73.822 312.686 C 134.126 363.265 222.044 363.232 282.309 312.606 L 239.047 292.482 Z" style="fill: #344454;"/>
9
+ </svg>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg id="Layer_2" data-name="Layer 2" viewBox="0 0 1337.96 369.14" xmlns="http://www.w3.org/2000/svg">
3
+ <defs>
4
+ <style>.disk{fill:#466d99;}.singular{fill:#000000;}.health{fill:#444444;}</style>
5
+ </defs>
6
+ <title>Singular Health Trademark_4824</title>
7
+ <path class="disk" d="M1173.48,366.24a77.89,77.89,0,0,0,44.93-41.72,163.35,163.35,0,0,0,13.07-41l23.72-124a3.28,3.28,0,0,1,6.42,0l23.73,124a163.12,163.12,0,0,0,13.08,41,77.87,77.87,0,0,0,44.92,41.72l67.22,24.65a181.63,181.63,0,0,0,30.29-100.69c0-100.76-81.68-182.45-182.44-182.45S1076,189.44,1076,290.2A181.61,181.61,0,0,0,1106.31,391Z" transform="translate(-102.9 -103.5)"/>
8
+ <path class="disk" d="M1327.07,407.27c-29.08-13.35-45.75-34.51-51.14-63.87,0,0-.89-2.85-5-35.11l-11.06-84.19a1.43,1.43,0,0,0-2.83,0l-11,84.19c-4.16,32.26-5,35.11-5,35.11-5.4,29.36-22.07,50.52-51.14,63.87L1141.19,430a182.41,182.41,0,0,0,234.55-.09Z" transform="translate(-102.9 -103.5)" />
9
+ <path class="singular" d="M144.08,270.37a23.72,23.72,0,0,0,7,7.69,29.78,29.78,0,0,0,9.83,4.42,46.24,46.24,0,0,0,11.54,1.42,43.66,43.66,0,0,0,9-1,30.66,30.66,0,0,0,8.55-3.14,19.37,19.37,0,0,0,6.41-5.7,15,15,0,0,0,2.57-9q0-9.1-12.12-13.68t-33.77-9.12q-8.84-2-17.24-4.7a58.65,58.65,0,0,1-15-7.12,34.57,34.57,0,0,1-10.55-11.12q-4-6.69-4-16.39,0-14.24,5.56-23.37a41,41,0,0,1,14.68-14.39,64.41,64.41,0,0,1,20.52-7.41,126.9,126.9,0,0,1,23.37-2.14,117.44,117.44,0,0,1,23.22,2.28,61.75,61.75,0,0,1,20.1,7.7A46.2,46.2,0,0,1,228.44,180q5.85,9,7,22.66H197q-.85-11.69-8.83-15.82a40.51,40.51,0,0,0-18.81-4.13,68.45,68.45,0,0,0-7.41.43,24.48,24.48,0,0,0-7.27,1.85,15,15,0,0,0-5.56,4.13,10.93,10.93,0,0,0-2.28,7.27,11.09,11.09,0,0,0,4,8.83,30.71,30.71,0,0,0,10.4,5.56,129.29,129.29,0,0,0,14.68,3.85q8.26,1.71,16.82,3.7a174.75,174.75,0,0,1,17.24,4.85,56.93,56.93,0,0,1,15,7.55,36.67,36.67,0,0,1,10.55,11.69q4,7,4,17.24,0,14.54-5.85,24.37a46.71,46.71,0,0,1-15.24,15.81,62.46,62.46,0,0,1-21.52,8.41,125.86,125.86,0,0,1-24.65,2.42,122,122,0,0,1-25.08-2.56,66.2,66.2,0,0,1-21.81-8.55,48.75,48.75,0,0,1-15.67-15.82q-6.13-9.83-6.7-24.65h38.48A22.27,22.27,0,0,0,144.08,270.37Z" transform="translate(-102.9 -103.5)"/>
10
+ <path class="singular" d="M290.14,159.64V307H249.67V159.64Z" transform="translate(-102.9 -103.5)"/>
11
+ <path class="singular" d="M346,159.64v20.52h.86q7.69-12.82,19.95-18.66a57.6,57.6,0,0,1,25.08-5.85q16.25,0,26.64,4.42a39.49,39.49,0,0,1,16.39,12.26,47.48,47.48,0,0,1,8.41,19.09,119.16,119.16,0,0,1,2.42,24.94V307H405.28V223.77q0-18.24-5.7-27.22t-20.23-9q-16.55,0-23.94,9.84T348,229.75V307H307.53V159.64Z" transform="translate(-102.9 -103.5)"/>
12
+ <path class="singular" d="M597.81,317.82a49.79,49.79,0,0,1-10.4,21.23q-8,9.84-23.08,16.67t-40.47,6.84a94.43,94.43,0,0,1-22.09-2.7,70.19,70.19,0,0,1-20.52-8.41,50.26,50.26,0,0,1-15.39-14.68q-6.14-9-7-21.52h40.18q2.85,11.4,11.12,15.82a39.79,39.79,0,0,0,19.09,4.42q17.1,0,24.94-10.26t7.55-25.94V279.91h-.57a40,40,0,0,1-18.67,17.25,60.51,60.51,0,0,1-25.5,5.55q-16.54,0-28.5-5.84a54,54,0,0,1-19.67-16,66.65,66.65,0,0,1-11.26-23.65A112.39,112.39,0,0,1,454,228.61a92.06,92.06,0,0,1,4.13-27.5,71.91,71.91,0,0,1,12.12-23.37,58.51,58.51,0,0,1,19.8-16.1q11.84-6,27.22-6,14.54,0,25.51,5.42t18.38,18.24h.57V159.64h38.48V297.58A98.33,98.33,0,0,1,597.81,317.82Zm-55.43-49a31.6,31.6,0,0,0,10.83-9.12,40.25,40.25,0,0,0,6.41-13,53.53,53.53,0,0,0,2.14-15.25,83.65,83.65,0,0,0-1.71-17.24,43.11,43.11,0,0,0-5.7-14.39,29.67,29.67,0,0,0-10.54-10q-6.57-3.69-16.53-3.7a29.67,29.67,0,0,0-14.68,3.42,30.81,30.81,0,0,0-10.26,9.26,39.09,39.09,0,0,0-6,13.4A66.4,66.4,0,0,0,494.5,228a80,80,0,0,0,1.57,15.82A42.72,42.72,0,0,0,501.48,258a31.69,31.69,0,0,0,10.12,10.26q6.27,4,15.68,4A32.17,32.17,0,0,0,542.38,268.8Z" transform="translate(-102.9 -103.5)"/>
13
+ <path class="singular" d="M714.25,307V286.47h-.85q-7.7,12.82-19.95,18.52a58.88,58.88,0,0,1-25.08,5.7q-16.25,0-26.65-4.27a38.39,38.39,0,0,1-16.39-12.11,47.37,47.37,0,0,1-8.4-19.1,118.39,118.39,0,0,1-2.43-24.94V159.64H655v83.22q0,18.25,5.7,27.22t20.24,9q16.53,0,23.94-9.83t7.41-32.35V159.64h40.47V307Z" transform="translate(-102.9 -103.5)"/>
14
+ <path class="singular" d="M810.58,103.5V307H770.11V103.5Z" transform="translate(-102.9 -103.5)"/>
15
+ <path class="singular" d="M823.42,205q.86-14.25,7.12-23.66a48.5,48.5,0,0,1,16-15.1,69.42,69.42,0,0,1,21.81-8.12,123.47,123.47,0,0,1,24.36-2.43,166,166,0,0,1,22.52,1.57,69,69,0,0,1,20.8,6.13A41,41,0,0,1,951.38,176q6,8.13,6,21.52v76.66a153.93,153.93,0,0,0,1.14,19.1q1.14,9.12,4,13.68h-41a57.35,57.35,0,0,1-1.85-7,60,60,0,0,1-1-7.27,52.63,52.63,0,0,1-22.8,14,91.51,91.51,0,0,1-26.79,4,72.42,72.42,0,0,1-19.67-2.56,45,45,0,0,1-16-8,37.08,37.08,0,0,1-10.68-13.68q-3.86-8.27-3.85-19.67,0-12.53,4.42-20.66a37,37,0,0,1,11.4-13,51.07,51.07,0,0,1,16-7.26,168.77,168.77,0,0,1,18.09-3.85q9.12-1.42,18-2.28a107.86,107.86,0,0,0,15.67-2.57,27.39,27.39,0,0,0,10.83-5q4-3.28,3.71-9.55,0-6.56-2.14-10.4a15.73,15.73,0,0,0-5.7-6,22.64,22.64,0,0,0-8.26-2.85,68.4,68.4,0,0,0-10.12-.71q-12,0-18.81,5.13t-8,17.1Zm93.48,29.92a18.12,18.12,0,0,1-6.41,3.57,66.91,66.91,0,0,1-8.27,2.13c-3,.57-6,1-9.26,1.43s-6.46.85-9.69,1.42a75.22,75.22,0,0,0-9,2.28,26.77,26.77,0,0,0-7.69,3.85,18.31,18.31,0,0,0-5.28,6.13,19.72,19.72,0,0,0-2,9.4,19,19,0,0,0,2,9.12,15.29,15.29,0,0,0,5.42,5.85,23,23,0,0,0,8,3,50.88,50.88,0,0,0,9.4.85q12,0,18.53-4a26.63,26.63,0,0,0,9.69-9.54,30.67,30.67,0,0,0,3.85-11.26,78.34,78.34,0,0,0,.71-9.12Z" transform="translate(-102.9 -103.5)"/>
16
+ <path class="singular" d="M1008.4,159.64V187h.57a49.86,49.86,0,0,1,7.7-12.68,50.37,50.37,0,0,1,11.11-10,54.54,54.54,0,0,1,13.4-6.42,48.63,48.63,0,0,1,14.82-2.28,31.55,31.55,0,0,1,8.83,1.43V194.7q-2.85-.57-6.84-1a73.54,73.54,0,0,0-7.69-.43q-11.11,0-18.81,3.71a32.58,32.58,0,0,0-12.4,10.12,40.6,40.6,0,0,0-6.7,15,81.47,81.47,0,0,0-2,18.52V307H969.93V159.64Z" transform="translate(-102.9 -103.5)"/>
17
+ <path class="health" d="M637.28,330.1v40h.47a25.64,25.64,0,0,1,10.76-10.22,29.06,29.06,0,0,1,12.79-3.19q8.9,0,14.59,2.41a21.77,21.77,0,0,1,9,6.71,26.14,26.14,0,0,1,4.6,10.45,65.29,65.29,0,0,1,1.33,13.65V439.5H668.63V394q0-10-3.12-14.9t-11.07-4.91q-9.06,0-13.11,5.38t-4.05,17.7V439.5H615.13V330.1Z" transform="translate(-102.9 -103.5)"/>
18
+ <path class="health" d="M724.8,420.16q5,4.83,14.36,4.83a19.7,19.7,0,0,0,11.54-3.35q4.83-3.36,5.93-7.1h19.5q-4.68,14.5-14.35,20.75t-23.4,6.24a46.18,46.18,0,0,1-17.16-3,35.68,35.68,0,0,1-13-8.66,38.92,38.92,0,0,1-8.19-13.42,49,49,0,0,1-2.89-17.16,47,47,0,0,1,3-16.85,39,39,0,0,1,21.45-22.46,41.81,41.81,0,0,1,16.77-3.27,38.4,38.4,0,0,1,17.94,4,35.79,35.79,0,0,1,12.55,10.69,43.91,43.91,0,0,1,7.1,15.29,56.7,56.7,0,0,1,1.56,17.94H719.34Q719.82,415.32,724.8,420.16Zm25-42.44q-4-4.37-12.09-4.36a19.35,19.35,0,0,0-8.81,1.79,16.89,16.89,0,0,0-5.62,4.45,16.35,16.35,0,0,0-3,5.61,26.11,26.11,0,0,0-1,5.31h36Q753.82,382.09,749.84,377.72Z" transform="translate(-102.9 -103.5)"/>
19
+ <path class="health" d="M781.74,383.65a25.66,25.66,0,0,1,3.9-12.94,26.48,26.48,0,0,1,8.74-8.27A38.14,38.14,0,0,1,806.31,358a68.18,68.18,0,0,1,13.34-1.32,90.85,90.85,0,0,1,12.33.85,37.78,37.78,0,0,1,11.38,3.36,22.42,22.42,0,0,1,8.43,6.94q3.27,4.44,3.27,11.78v42a83.36,83.36,0,0,0,.63,10.45,18.78,18.78,0,0,0,2.18,7.49H835.41a31.14,31.14,0,0,1-1-3.82,32.57,32.57,0,0,1-.54-4,28.85,28.85,0,0,1-12.48,7.64,50,50,0,0,1-14.67,2.19,39.83,39.83,0,0,1-10.76-1.4,24.86,24.86,0,0,1-8.74-4.37,20.47,20.47,0,0,1-5.85-7.49,25.39,25.39,0,0,1-2.1-10.77,23.46,23.46,0,0,1,2.42-11.31,20.28,20.28,0,0,1,6.23-7.09,27.83,27.83,0,0,1,8.74-4,94.46,94.46,0,0,1,9.91-2.11c3.32-.52,6.6-.93,9.83-1.25a59.6,59.6,0,0,0,8.58-1.4,14.81,14.81,0,0,0,5.92-2.73,6,6,0,0,0,2-5.23,11.73,11.73,0,0,0-1.17-5.69,8.64,8.64,0,0,0-3.12-3.28,12.28,12.28,0,0,0-4.52-1.55,37.1,37.1,0,0,0-5.54-.4q-6.55,0-10.3,2.81t-4.36,9.36ZM832.91,400a9.83,9.83,0,0,1-3.51,2,35,35,0,0,1-4.52,1.17c-1.62.31-3.31.58-5.07.78s-3.54.47-5.31.78a39.68,39.68,0,0,0-4.91,1.25,14.33,14.33,0,0,0-4.21,2.11,10,10,0,0,0-2.89,3.35,10.77,10.77,0,0,0-1.09,5.15,10.37,10.37,0,0,0,1.09,5,8.41,8.41,0,0,0,3,3.2,12.6,12.6,0,0,0,4.36,1.64,28.11,28.11,0,0,0,5.15.46q6.56,0,10.14-2.18a14.69,14.69,0,0,0,5.31-5.22,16.82,16.82,0,0,0,2.1-6.17,42.27,42.27,0,0,0,.39-5Z" transform="translate(-102.9 -103.5)"/>
20
+ <path class="health" d="M885.62,329.82V439.5H863.47V329.82Z" transform="translate(-102.9 -103.5)"/>
21
+ <path class="health" d="M938.31,358.85v14.82H925.49V413.6c0,3.75.62,6.24,1.87,7.49s1.53,1.56,4.37,1.87a17.71,17.71,0,0,0,3.59-.15,29.56,29.56,0,0,0,3.27-.47V439.5a54.29,54.29,0,0,1-6.24.63c-2.29.1-1.4.15-3.59.15a64.45,64.45,0,0,1-9.75-.7,23,23,0,0,1-8.11-2.73,14.46,14.46,0,0,1-5.54-5.77,20.67,20.67,0,0,1-2-9.83V373.67H891.62V358.85h11.72V336.37h22.15v22.48Z" transform="translate(-102.9 -103.5)"/>
22
+ <path class="health" d="M966.51,329.82v40.26H967a25.72,25.72,0,0,1,10.77-10.22,29,29,0,0,1,12.79-3.19q8.9,0,14.58,2.41a21.64,21.64,0,0,1,9,6.71,26,26,0,0,1,4.61,10.45,65.32,65.32,0,0,1,1.32,13.65V439.5H997.87V394q0-10-3.12-14.9t-11.08-4.91q-9,0-13.1,5.38t-4.06,17.7V439.5H944.36V329.82Z" transform="translate(-102.9 -103.5)"/>
23
+ </svg>
Binary file
@@ -0,0 +1,6 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M261.126 140.65L164.624 307.732L256.001 466L377.028 256.5L498.001 47H315.192L261.126 140.65Z" fill="#1697F6"/>
3
+ <path d="M135.027 256.5L141.365 267.518L231.64 111.178L268.731 47H256H14L135.027 256.5Z" fill="#AEDDFF"/>
4
+ <path d="M315.191 47C360.935 197.446 256 466 256 466L164.624 307.732L315.191 47Z" fill="#1867C0"/>
5
+ <path d="M268.731 47C76.0026 47 141.366 267.518 141.366 267.518L268.731 47Z" fill="#7BC6FF"/>
6
+ </svg>
@@ -0,0 +1,112 @@
1
+ <script setup lang="ts">
2
+ import {computed, defineEmits, ref, unref, watch} from 'vue';
3
+
4
+ export interface Props {
5
+ value: Array<number>;
6
+ loading: boolean;
7
+ label: string;
8
+ lower: number;
9
+ upper: number;
10
+ min: number;
11
+ max: number;
12
+ }
13
+
14
+ const props = withDefaults(defineProps<Props>(), {
15
+ value: () => ([0, 0]),
16
+ loading: false,
17
+ label: "Test",
18
+ lower: 0,
19
+ upper: 100,
20
+ min: -99999,
21
+ max: 99999,
22
+ });
23
+
24
+ const emit = defineEmits<{
25
+ input: [Array<number>];
26
+ }>();
27
+ const prevValue = ref<Array<number>>([])
28
+ const showThumb = ref<"always" | boolean>(false)
29
+ const showThumbTimeout = ref<number>(0)
30
+ const sliderValue = computed({
31
+ get() {
32
+ return props.value
33
+ },
34
+ set(value: Array<number>) {
35
+ emit('input', value);
36
+ }
37
+ })
38
+
39
+ watch(sliderValue, async (currentValue: Array<number>) => {
40
+ if (JSON.stringify(unref(prevValue)) !== JSON.stringify(currentValue)) {
41
+ clearTimeout(unref(showThumbTimeout));
42
+ showThumb.value = 'always';
43
+ showThumbTimeout.value = setTimeout(() => {
44
+ showThumb.value = true;
45
+ }, 1000);
46
+ }
47
+ prevValue.value = currentValue;
48
+ }, {deep: true})
49
+
50
+
51
+ </script>
52
+
53
+ <template>
54
+ <div class="double-slider-selector">
55
+ <v-card-subtitle class="pb-0 pt-1 text-caption">{{ label }}</v-card-subtitle>
56
+ <v-card-actions class="px-2 pb-0">
57
+ <v-text-field
58
+ v-model="sliderValue[0]"
59
+ outlined
60
+ dense
61
+ class="mt-0 pt-0"
62
+ hide-details
63
+ type="number"
64
+ style="width: 44px"
65
+ ></v-text-field>
66
+ <v-spacer />
67
+ <v-text-field
68
+ v-model="sliderValue[1]"
69
+ outlined
70
+ dense
71
+ class="mt-0 pt-0"
72
+ hide-details
73
+ type="number"
74
+ style="width: 44px"
75
+ ></v-text-field>
76
+ </v-card-actions>
77
+
78
+ <v-range-slider
79
+ v-model="sliderValue"
80
+ :loading="loading"
81
+ :thumb-label="showThumb"
82
+ :min="min"
83
+ hide-details
84
+ :max="max"
85
+ class="align-center px-2"
86
+ >
87
+ </v-range-slider>
88
+ </div>
89
+ </template>
90
+
91
+ <style>
92
+ .double-slider-selector
93
+ .v-text-field.v-text-field--enclosed:not(.v-text-field--rounded)
94
+ > .v-input__control
95
+ > .v-input__slot,
96
+ .double-slider-selector .v-text-field.v-text-field--enclosed .v-text-field__details {
97
+ padding: 0px 8px !important;
98
+ }
99
+
100
+ .double-slider-selector
101
+ .v-text-field--outlined.v-input--dense.v-text-field--outlined
102
+ > .v-input__control
103
+ > .v-input__slot {
104
+ min-height: 32px !important;
105
+ }
106
+
107
+ .double-slider-selector .v-slider__thumb-label {
108
+ color: black;
109
+ width: 40px !important;
110
+ height: 40px !important;
111
+ }
112
+ </style>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <v-expansion-panel-title class="font-weight-bold transparent">
3
+ <span
4
+ ><v-icon small>{{ props.miniMenu.icon }}</v-icon
5
+ >&nbsp;&nbsp;{{ props.miniMenu.text }}</span
6
+ >
7
+ <v-spacer />
8
+ </v-expansion-panel-title>
9
+ </template>
10
+ <script setup lang="ts">
11
+
12
+ export interface Props {
13
+ miniMenu: { icon: string; text: string };
14
+ }
15
+
16
+ const props = withDefaults(defineProps<Props>(), {
17
+ miniMenu: () => ({ icon: '', text: '' }),
18
+ });
19
+ </script>
@@ -0,0 +1,157 @@
1
+ <template>
2
+ <v-container class="fill-height">
3
+ <v-responsive
4
+ class="align-centerfill-height mx-auto"
5
+ max-width="900"
6
+ >
7
+ <v-img
8
+ class="mb-4"
9
+ height="150"
10
+ src="@/assets/logo.png"
11
+ />
12
+
13
+ <div class="text-center">
14
+ <div class="text-body-2 font-weight-light mb-n1">Welcome to</div>
15
+
16
+ <h1 class="text-h2 font-weight-bold">Vuetify</h1>
17
+ </div>
18
+
19
+ <div class="py-4" />
20
+
21
+ <v-row>
22
+ <v-col cols="12">
23
+ <v-card
24
+ class="py-4"
25
+ color="surface-variant"
26
+ image="https://cdn.vuetifyjs.com/docs/images/one/create/feature.png"
27
+ prepend-icon="mdi-rocket-launch-outline"
28
+ rounded="lg"
29
+ variant="outlined"
30
+ >
31
+ <template #image>
32
+ <v-img position="top right" />
33
+ </template>
34
+
35
+ <template #title>
36
+ <h2 class="text-h5 font-weight-bold">Get started</h2>
37
+ </template>
38
+
39
+ <template #subtitle>
40
+ <div class="text-subtitle-1">
41
+ Replace this page by removing <v-kbd>{{ `<HelloWorld />` }}</v-kbd> in <v-kbd>pages/index.vue</v-kbd>.
42
+ </div>
43
+ </template>
44
+
45
+ <v-overlay
46
+ opacity=".12"
47
+ scrim="primary"
48
+ contained
49
+ model-value
50
+ persistent
51
+ />
52
+ </v-card>
53
+ </v-col>
54
+
55
+ <v-col cols="6">
56
+ <v-card
57
+ append-icon="mdi-open-in-new"
58
+ class="py-4"
59
+ color="surface-variant"
60
+ href="https://vuetifyjs.com/"
61
+ prepend-icon="mdi-text-box-outline"
62
+ rel="noopener noreferrer"
63
+ rounded="lg"
64
+ subtitle="Learn about all things Vuetify in our documentation."
65
+ target="_blank"
66
+ title="Documentation"
67
+ variant="text"
68
+ >
69
+ <v-overlay
70
+ opacity=".06"
71
+ scrim="primary"
72
+ contained
73
+ model-value
74
+ persistent
75
+ />
76
+ </v-card>
77
+ </v-col>
78
+
79
+ <v-col cols="6">
80
+ <v-card
81
+ append-icon="mdi-open-in-new"
82
+ class="py-4"
83
+ color="surface-variant"
84
+ href="https://vuetifyjs.com/introduction/why-vuetify/#feature-guides"
85
+ prepend-icon="mdi-star-circle-outline"
86
+ rel="noopener noreferrer"
87
+ rounded="lg"
88
+ subtitle="Explore available framework Features."
89
+ target="_blank"
90
+ title="Features"
91
+ variant="text"
92
+ >
93
+ <v-overlay
94
+ opacity=".06"
95
+ scrim="primary"
96
+ contained
97
+ model-value
98
+ persistent
99
+ />
100
+ </v-card>
101
+ </v-col>
102
+
103
+ <v-col cols="6">
104
+ <v-card
105
+ append-icon="mdi-open-in-new"
106
+ class="py-4"
107
+ color="surface-variant"
108
+ href="https://vuetifyjs.com/components/all"
109
+ prepend-icon="mdi-widgets-outline"
110
+ rel="noopener noreferrer"
111
+ rounded="lg"
112
+ subtitle="Discover components in the API Explorer."
113
+ target="_blank"
114
+ title="Components"
115
+ variant="text"
116
+ >
117
+ <v-overlay
118
+ opacity=".06"
119
+ scrim="primary"
120
+ contained
121
+ model-value
122
+ persistent
123
+ />
124
+ </v-card>
125
+ </v-col>
126
+
127
+ <v-col cols="6">
128
+ <v-card
129
+ append-icon="mdi-open-in-new"
130
+ class="py-4"
131
+ color="surface-variant"
132
+ href="https://discord.vuetifyjs.com"
133
+ prepend-icon="mdi-account-group-outline"
134
+ rel="noopener noreferrer"
135
+ rounded="lg"
136
+ subtitle="Connect with Vuetify developers."
137
+ target="_blank"
138
+ title="Community"
139
+ variant="text"
140
+ >
141
+ <v-overlay
142
+ opacity=".06"
143
+ scrim="primary"
144
+ contained
145
+ model-value
146
+ persistent
147
+ />
148
+ </v-card>
149
+ </v-col>
150
+ </v-row>
151
+ </v-responsive>
152
+ </v-container>
153
+ </template>
154
+
155
+ <script setup lang="ts">
156
+ //
157
+ </script>