aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--components.d.ts4
-rw-r--r--package.json3
-rw-r--r--pnpm-lock.yaml380
-rw-r--r--src/components/SearchBar.vue109
-rw-r--r--src/components/SearchBarItem.vue48
-rw-r--r--src/layouts/base.layout.vue8
-rw-r--r--src/modules/command-palette/command-palette.store.ts68
-rw-r--r--src/modules/command-palette/command-palette.types.ts13
-rw-r--r--src/modules/command-palette/command-palette.vue137
-rw-r--r--src/modules/command-palette/components/command-palette-option.vue36
-rw-r--r--src/pages/About.vue4
-rw-r--r--src/ui/c-input-text/c-input-text.vue42
-rw-r--r--src/ui/c-modal/c-modal.demo.vue15
-rw-r--r--src/ui/c-modal/c-modal.theme.ts11
-rw-r--r--src/ui/c-modal/c-modal.vue74
-rw-r--r--src/ui/theme/themes.ts2
-rw-r--r--unocss.config.ts6
18 files changed, 576 insertions, 386 deletions
diff --git a/README.md b/README.md
index 1d17dce..e7ed357 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Useful tools for developer and people working in IT. [Have a look !](https://it-
Please check the [issues](https://github.com/CorentinTh/it-tools/issues) to see if some feature listed to be implemented.
-You have an idea of a tool? Submit a [feature request](https://github.com/CorentinTh/it-tools/issues/new?assignees=corentinth&labels=&template=feature_request.md&title=)!
+You have an idea of a tool? Submit a [feature request](https://github.com/CorentinTh/it-tools/issues/new/choose)!
## Self host
diff --git a/components.d.ts b/components.d.ts
index 12d9ad4..cd3160f 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -33,9 +33,13 @@ declare module '@vue/runtime-core' {
'CInputText.demo': typeof import('./src/ui/c-input-text/c-input-text.demo.vue')['default']
CLink: typeof import('./src/ui/c-link/c-link.vue')['default']
'CLink.demo': typeof import('./src/ui/c-link/c-link.demo.vue')['default']
+ CModal: typeof import('./src/ui/c-modal/c-modal.vue')['default']
+ 'CModal.demo': typeof import('./src/ui/c-modal/c-modal.demo.vue')['default']
CollapsibleToolMenu: typeof import('./src/components/CollapsibleToolMenu.vue')['default']
ColorConverter: typeof import('./src/tools/color-converter/color-converter.vue')['default']
ColoredCard: typeof import('./src/components/ColoredCard.vue')['default']
+ CommandPalette: typeof import('./src/modules/command-palette/command-palette.vue')['default']
+ CommandPaletteOption: typeof import('./src/modules/command-palette/components/command-palette-option.vue')['default']
CrontabGenerator: typeof import('./src/tools/crontab-generator/crontab-generator.vue')['default']
DateTimeConverter: typeof import('./src/tools/date-time-converter/date-time-converter.vue')['default']
DemoWrapper: typeof import('./src/ui/demo/demo-wrapper.vue')['default']
diff --git a/package.json b/package.json
index fe9ab40..5c28639 100644
--- a/package.json
+++ b/package.json
@@ -74,7 +74,7 @@
"ts-pattern": "^4.2.2",
"ua-parser-js": "^1.0.35",
"uuid": "^8.3.2",
- "vue": "^3.2.47",
+ "vue": "^3.3.4",
"vue-i18n": "^9.2.2",
"vue-router": "^4.1.6",
"xml-formatter": "^3.3.2",
@@ -105,6 +105,7 @@
"@vitejs/plugin-vue-jsx": "^1.3.10",
"@vue/compiler-sfc": "^3.2.47",
"@vue/runtime-core": "^3.2.47",
+ "@vue/runtime-dom": "^3.3.4",
"@vue/test-utils": "^2.3.2",
"@vue/tsconfig": "^0.1.3",
"c8": "^7.13.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f2374d6..5f7c7dd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,7 +22,7 @@ dependencies:
version: 2.0.3(@tiptap/pm@2.0.3)
'@tiptap/vue-3':
specifier: ^2.0.3
- version: 2.0.3(@tiptap/core@2.0.3)(@tiptap/pm@2.0.3)(vue@3.2.47)
+ version: 2.0.3(@tiptap/core@2.0.3)(@tiptap/pm@2.0.3)(vue@3.3.4)
'@vicons/material':
specifier: ^0.12.0
version: 0.12.0
@@ -31,13 +31,13 @@ dependencies:
version: 0.12.0
'@vueuse/core':
specifier: ^10.1.2
- version: 10.1.2(vue@3.2.47)
+ version: 10.1.2(vue@3.3.4)
'@vueuse/head':
specifier: ^0.7.13
- version: 0.7.13(vue@3.2.47)
+ version: 0.7.13(vue@3.3.4)
'@vueuse/router':
specifier: ^9.13.0
- version: 9.13.0(vue-router@4.1.6)(vue@3.2.47)
+ version: 9.13.0(vue-router@4.1.6)(vue@3.3.4)
bcryptjs:
specifier: ^2.4.3
version: 2.4.3
@@ -94,7 +94,7 @@ dependencies:
version: 2.1.35
naive-ui:
specifier: ^2.34.3
- version: 2.34.3(vue@3.2.47)
+ version: 2.34.3(vue@3.3.4)
netmask:
specifier: ^2.0.2
version: 2.0.2
@@ -106,7 +106,7 @@ dependencies:
version: 12.0.52
pinia:
specifier: ^2.0.34
- version: 2.0.34(typescript@4.5.5)(vue@3.2.47)
+ version: 2.0.34(typescript@4.5.5)(vue@3.3.4)
plausible-tracker:
specifier: ^0.3.8
version: 0.3.8
@@ -129,14 +129,14 @@ dependencies:
specifier: ^8.3.2
version: 8.3.2
vue:
- specifier: ^3.2.47
- version: 3.2.47
+ specifier: ^3.3.4
+ version: 3.3.4
vue-i18n:
specifier: ^9.2.2
- version: 9.2.2(vue@3.2.47)
+ version: 9.2.2(vue@3.3.4)
vue-router:
specifier: ^4.1.6
- version: 4.1.6(vue@3.2.47)
+ version: 4.1.6(vue@3.3.4)
xml-formatter:
specifier: ^3.3.2
version: 3.3.2
@@ -207,7 +207,7 @@ devDependencies:
version: 0.50.8(eslint@8.38.0)(typescript@4.5.5)
'@vitejs/plugin-vue':
specifier: ^2.3.4
- version: 2.3.4(vite@2.9.15)(vue@3.2.47)
+ version: 2.3.4(vite@2.9.15)(vue@3.3.4)
'@vitejs/plugin-vue-jsx':
specifier: ^1.3.10
version: 1.3.10
@@ -217,9 +217,12 @@ devDependencies:
'@vue/runtime-core':
specifier: ^3.2.47
version: 3.2.47
+ '@vue/runtime-dom':
+ specifier: ^3.3.4
+ version: 3.3.4
'@vue/test-utils':
specifier: ^2.3.2
- version: 2.3.2(vue@3.2.47)
+ version: 2.3.2(vue@3.3.4)
'@vue/tsconfig':
specifier: ^0.1.3
version: 0.1.3(@types/node@16.18.23)
@@ -258,7 +261,7 @@ devDependencies:
version: 0.16.1(@vue/compiler-sfc@3.2.47)
unplugin-vue-components:
specifier: ^0.24.1
- version: 0.24.1(rollup@2.79.1)(vue@3.2.47)
+ version: 0.24.1(rollup@2.79.1)(vue@3.3.4)
vite:
specifier: ^2.9.15
version: 2.9.15(less@4.1.3)
@@ -448,7 +451,7 @@ packages:
'@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4)
'@babel/helper-module-transforms': 7.21.2
'@babel/helpers': 7.21.0
- '@babel/parser': 7.21.4
+ '@babel/parser': 7.22.5
'@babel/template': 7.20.7
'@babel/traverse': 7.21.4
'@babel/types': 7.21.4
@@ -487,7 +490,7 @@ packages:
resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
jsesc: 2.5.2
@@ -506,7 +509,7 @@ packages:
resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-annotate-as-pure@7.22.5:
@@ -631,7 +634,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.20.7
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-function-name@7.22.5:
@@ -645,7 +648,7 @@ packages:
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-hoist-variables@7.22.5:
@@ -658,7 +661,7 @@ packages:
resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-member-expression-to-functions@7.22.5:
@@ -672,7 +675,7 @@ packages:
resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-module-imports@7.22.5:
@@ -692,7 +695,7 @@ packages:
'@babel/helper-validator-identifier': 7.19.1
'@babel/template': 7.20.7
'@babel/traverse': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
transitivePeerDependencies:
- supports-color
dev: true
@@ -716,7 +719,7 @@ packages:
resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-optimise-call-expression@7.22.5:
@@ -759,7 +762,7 @@ packages:
'@babel/helper-optimise-call-expression': 7.18.6
'@babel/template': 7.20.7
'@babel/traverse': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
transitivePeerDependencies:
- supports-color
dev: true
@@ -782,7 +785,7 @@ packages:
resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-simple-access@7.22.5:
@@ -795,7 +798,7 @@ packages:
resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-skip-transparent-expression-wrappers@7.22.5:
@@ -809,7 +812,7 @@ packages:
resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/@babel/helper-split-export-declaration@7.22.5:
@@ -821,6 +824,7 @@ packages:
/@babel/helper-string-parser@7.19.4:
resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
engines: {node: '>=6.9.0'}
+ dev: true
/@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
@@ -829,6 +833,7 @@ packages:
/@babel/helper-validator-identifier@7.19.1:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
+ dev: true
/@babel/helper-validator-identifier@7.22.5:
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
@@ -861,7 +866,7 @@ packages:
dependencies:
'@babel/template': 7.20.7
'@babel/traverse': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
transitivePeerDependencies:
- supports-color
dev: true
@@ -896,14 +901,13 @@ packages:
/@babel/parser@7.21.4:
resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==}
engines: {node: '>=6.0.0'}
- hasBin: true
dependencies:
'@babel/types': 7.21.4
+ dev: true
/@babel/parser@7.22.5:
resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==}
engines: {node: '>=6.0.0'}
- hasBin: true
dependencies:
'@babel/types': 7.22.5
@@ -1852,8 +1856,8 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
- '@babel/parser': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/parser': 7.22.5
+ '@babel/types': 7.22.5
dev: true
/@babel/template@7.22.5:
@@ -1874,8 +1878,8 @@ packages:
'@babel/helper-function-name': 7.21.0
'@babel/helper-hoist-variables': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
- '@babel/parser': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/parser': 7.22.5
+ '@babel/types': 7.22.5
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
@@ -1906,6 +1910,7 @@ packages:
'@babel/helper-string-parser': 7.19.4
'@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
+ dev: true
/@babel/types@7.22.5:
resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
@@ -1927,12 +1932,12 @@ packages:
css-render: 0.15.12
dev: false
- /@css-render/vue3-ssr@0.15.12(vue@3.2.47):
+ /@css-render/vue3-ssr@0.15.12(vue@3.3.4):
resolution: {integrity: sha512-AQLGhhaE0F+rwybRCkKUdzBdTEM/5PZBYy+fSYe1T9z9+yxMuV/k7ZRqa4M69X+EI1W8pa4kc9Iq2VjQkZx4rg==}
peerDependencies:
vue: ^3.0.11
dependencies:
- vue: 3.2.47
+ vue: 3.3.4
dev: false
/@emmetio/abbreviation@2.3.1:
@@ -2075,7 +2080,7 @@ packages:
magic-string: 0.30.0
mlly: 1.2.0
source-map: 0.6.1
- vue-i18n: 9.2.2(vue@3.2.47)
+ vue-i18n: 9.2.2(vue@3.3.4)
yaml-eslint-parser: 0.3.2
dev: true
@@ -2145,7 +2150,7 @@ packages:
picocolors: 1.0.0
source-map: 0.6.1
unplugin: 1.3.1
- vue-i18n: 9.2.2(vue@3.2.47)
+ vue-i18n: 9.2.2(vue@3.3.4)
transitivePeerDependencies:
- rollup
- supports-color
@@ -2297,7 +2302,6 @@ packages:
/@playwright/test@1.32.3:
resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==}
engines: {node: '>=14'}
- hasBin: true
dependencies:
'@types/node': 16.18.23
playwright-core: 1.32.3
@@ -2704,7 +2708,7 @@ packages:
- '@tiptap/pm'
dev: false
- /@tiptap/vue-3@2.0.3(@tiptap/core@2.0.3)(@tiptap/pm@2.0.3)(vue@3.2.47):
+ /@tiptap/vue-3@2.0.3(@tiptap/core@2.0.3)(@tiptap/pm@2.0.3)(vue@3.3.4):
resolution: {integrity: sha512-2CtNUzt+e7sgvIjxPOyBwoiRcuCHNeJzW+XGxNK2uCWlAKp/Yw3boJ51d51UuIbj9RitGHJ5GpCdLJoL7SDiQA==}
peerDependencies:
'@tiptap/core': ^2.0.0
@@ -2715,7 +2719,7 @@ packages:
'@tiptap/extension-bubble-menu': 2.0.3(@tiptap/core@2.0.3)(@tiptap/pm@2.0.3)
'@tiptap/extension-floating-menu': 2.0.3(@tiptap/core@2.0.3)(@tiptap/pm@2.0.3)
'@tiptap/pm': 2.0.3(@tiptap/core@2.0.3)
- vue: 3.2.47
+ vue: 3.3.4
dev: false
/@tootallnate/once@1.1.2:
@@ -3155,7 +3159,6 @@ packages:
/@unocss/cli@0.50.8(rollup@2.79.1):
resolution: {integrity: sha512-LBLt8oxGQSfTubOreXs8L7cxHvuYt4wA1MZ45jf4GT/C4moS8cqL7QFX66+MN/cNwvojqXSXQ2HtRJ1IZojfgA==}
engines: {node: '>=14'}
- hasBin: true
dependencies:
'@ampproject/remapping': 2.2.1
'@rollup/pluginutils': 5.0.2(rollup@2.79.1)
@@ -3371,7 +3374,7 @@ packages:
- supports-color
dev: true
- /@vitejs/plugin-vue@2.3.4(vite@2.9.15)(vue@3.2.47):
+ /@vitejs/plugin-vue@2.3.4(vite@2.9.15)(vue@3.3.4):
resolution: {integrity: sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==}
engines: {node: '>=12.0.0'}
peerDependencies:
@@ -3379,7 +3382,7 @@ packages:
vue: ^3.2.25
dependencies:
vite: 2.9.15(less@4.1.3)
- vue: 3.2.47
+ vue: 3.3.4
dev: true
/@volar/code-gen@0.31.4:
@@ -3391,7 +3394,6 @@ packages:
/@volar/html2pug@0.31.4:
resolution: {integrity: sha512-+whoP4C34kbCIRyoojZE6luqs7Ep/0YDBD9yEWu82G1ECLIFoujtkZXHbAHiQH8MIs/GwjUmozd85pUGAVQf1w==}
- deprecated: 'WARNING: This project has been renamed to @johnsoncodehk/html2pug. Install using @johnsoncodehk/html2pug instead.'
dependencies:
domelementtype: 2.3.0
domhandler: 4.3.1
@@ -3428,9 +3430,9 @@ packages:
'@volar/code-gen': 0.31.4
'@volar/shared': 0.31.4
'@volar/source-map': 0.31.4
- '@vue/compiler-core': 3.2.47
- '@vue/compiler-dom': 3.2.47
- '@vue/shared': 3.2.47
+ '@vue/compiler-core': 3.3.4
+ '@vue/compiler-dom': 3.3.4
+ '@vue/shared': 3.3.4
upath: 2.0.1
dev: true
@@ -3468,10 +3470,11 @@ packages:
/@vue/compiler-core@3.2.47:
resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
dependencies:
- '@babel/parser': 7.21.4
+ '@babel/parser': 7.22.5
'@vue/shared': 3.2.47
estree-walker: 2.0.2
source-map: 0.6.1
+ dev: true
/@vue/compiler-core@3.3.4:
resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
@@ -3480,22 +3483,19 @@ packages:
'@vue/shared': 3.3.4
estree-walker: 2.0.2
source-map-js: 1.0.2
- dev: true
- optional: true
/@vue/compiler-dom@3.2.47:
resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
dependencies:
'@vue/compiler-core': 3.2.47
'@vue/shared': 3.2.47
+ dev: true
/@vue/compiler-dom@3.3.4:
resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
dependencies:
'@vue/compiler-core': 3.3.4
'@vue/shared': 3.3.4
- dev: true
- optional: true
/@vue/compiler-sfc@3.2.47:
resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
@@ -3510,20 +3510,34 @@ packages:
magic-string: 0.25.9
postcss: 8.4.21
source-map: 0.6.1
+ dev: true
+
+ /@vue/compiler-sfc@3.3.4:
+ resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
+ dependencies:
+ '@babel/parser': 7.22.5
+ '@vue/compiler-core': 3.3.4
+ '@vue/compiler-dom': 3.3.4
+ '@vue/compiler-ssr': 3.3.4
+ '@vue/reactivity-transform': 3.3.4
+ '@vue/shared': 3.3.4
+ estree-walker: 2.0.2
+ magic-string: 0.30.0
+ postcss: 8.4.24
+ source-map-js: 1.0.2
/@vue/compiler-ssr@3.2.47:
resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
dependencies:
'@vue/compiler-dom': 3.2.47
'@vue/shared': 3.2.47
+ dev: true
/@vue/compiler-ssr@3.3.4:
resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
dependencies:
'@vue/compiler-dom': 3.3.4
'@vue/shared': 3.3.4
- dev: true
- optional: true
/@vue/devtools-api@6.5.0:
resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
@@ -3531,68 +3545,79 @@ packages:
/@vue/reactivity-transform@3.2.47:
resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
dependencies:
- '@babel/parser': 7.21.4
+ '@babel/parser': 7.22.5
'@vue/compiler-core': 3.2.47
'@vue/shared': 3.2.47
estree-walker: 2.0.2
magic-string: 0.25.9
+ dev: true
+
+ /@vue/reactivity-transform@3.3.4:
+ resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
+ dependencies:
+ '@babel/parser': 7.22.5
+ '@vue/compiler-core': 3.3.4
+ '@vue/shared': 3.3.4
+ estree-walker: 2.0.2
+ magic-string: 0.30.0
/@vue/reactivity@3.2.47:
resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
dependencies:
'@vue/shared': 3.2.47
+ dev: true
+
+ /@vue/reactivity@3.3.4:
+ resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
+ dependencies:
+ '@vue/shared': 3.3.4
/@vue/runtime-core@3.2.47:
resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
dependencies:
'@vue/reactivity': 3.2.47
'@vue/shared': 3.2.47
+ dev: true
- /@vue/runtime-dom@3.2.47:
- resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
+ /@vue/runtime-core@3.3.4:
+ resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
dependencies:
- '@vue/runtime-core': 3.2.47
- '@vue/shared': 3.2.47
- csstype: 2.6.21
+ '@vue/reactivity': 3.3.4
+ '@vue/shared': 3.3.4
- /@vue/server-renderer@3.2.47(vue@3.2.47):
- resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
- peerDependencies:
- vue: 3.2.47
+ /@vue/runtime-dom@3.3.4:
+ resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
dependencies:
- '@vue/compiler-ssr': 3.2.47
- '@vue/shared': 3.2.47
- vue: 3.2.47
+ '@vue/runtime-core': 3.3.4
+ '@vue/shared': 3.3.4
+ csstype: 3.1.2
- /@vue/server-renderer@3.3.4(vue@3.2.47):
+ /@vue/server-renderer@3.3.4(vue@3.3.4):
resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
peerDependencies:
vue: 3.3.4
dependencies:
'@vue/compiler-ssr': 3.3.4
'@vue/shared': 3.3.4
- vue: 3.2.47
- dev: true
- optional: true
+ vue: 3.3.4
/@vue/shared@3.2.47:
resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
+ dev: true
/@vue/shared@3.3.4:
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
- dev: true
- optional: true
- /@vue/test-utils@2.3.2(vue@3.2.47):
+ /@vue/test-utils@2.3.2(vue@3.3.4):
resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==}
peerDependencies:
vue: ^3.0.1
dependencies:
js-beautify: 1.14.6
- vue: 3.2.47
+ vue: 3.3.4
optionalDependencies:
'@vue/compiler-dom': 3.3.4
- '@vue/server-renderer': 3.3.4(vue@3.2.47)
+ '@vue/server-renderer': 3.3.4(vue@3.3.4)
dev: true
/@vue/tsconfig@0.1.3(@types/node@16.18.23):
@@ -3606,24 +3631,24 @@ packages:
'@types/node': 16.18.23
dev: true
- /@vueuse/core@10.1.2(vue@3.2.47):
+ /@vueuse/core@10.1.2(vue@3.3.4):
resolution: {integrity: sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==}
dependencies:
'@types/web-bluetooth': 0.0.17
'@vueuse/metadata': 10.1.2
- '@vueuse/shared': 10.1.2(vue@3.2.47)
- vue-demi: 0.14.1(vue@3.2.47)
+ '@vueuse/shared': 10.1.2(vue@3.3.4)
+ vue-demi: 0.14.1(vue@3.3.4)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- /@vueuse/head@0.7.13(vue@3.2.47):
+ /@vueuse/head@0.7.13(vue@3.3.4):
resolution: {integrity: sha512-VHSla/0uOAUii/mz+NWLFKMrMbz/lQoYxEcpS/ri7drepYjdB5QdbTnD2KdOX8EmQM/b07qpjKanr7erGrd3XA==}
peerDependencies:
vue: '>=2.7 || >=3'
dependencies:
- '@zhead/schema-vue': 0.7.4(vue@3.2.47)
- vue: 3.2.47
+ '@zhead/schema-vue': 0.7.4(vue@3.3.4)
+ vue: 3.3.4
transitivePeerDependencies:
- '@vue/composition-api'
dev: false
@@ -3631,44 +3656,44 @@ packages:
/@vueuse/metadata@10.1.2:
resolution: {integrity: sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==}
- /@vueuse/router@9.13.0(vue-router@4.1.6)(vue@3.2.47):
+ /@vueuse/router@9.13.0(vue-router@4.1.6)(vue@3.3.4):
resolution: {integrity: sha512-lcL6auSUGMGZMdDzZJb02QDe909AChzMXoxqFS3gL2E8mHmIx0SrNor+33UkqvvBPi18vXpDq/R7tPd9fxWwTg==}
peerDependencies:
vue-router: '>=4.0.0-rc.1'
dependencies:
- '@vueuse/shared': 9.13.0(vue@3.2.47)
- vue-demi: 0.13.11(vue@3.2.47)
- vue-router: 4.1.6(vue@3.2.47)
+ '@vueuse/shared': 9.13.0(vue@3.3.4)
+ vue-demi: 0.13.11(vue@3.3.4)
+ vue-router: 4.1.6(vue@3.3.4)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
- /@vueuse/shared@10.1.2(vue@3.2.47):
+ /@vueuse/shared@10.1.2(vue@3.3.4):
resolution: {integrity: sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==}
dependencies:
- vue-demi: 0.14.1(vue@3.2.47)
+ vue-demi: 0.14.1(vue@3.3.4)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- /@vueuse/shared@9.13.0(vue@3.2.47):
+ /@vueuse/shared@9.13.0(vue@3.3.4):
resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
dependencies:
- vue-demi: 0.14.1(vue@3.2.47)
+ vue-demi: 0.14.1(vue@3.3.4)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
- /@zhead/schema-vue@0.7.4(vue@3.2.47):
+ /@zhead/schema-vue@0.7.4(vue@3.3.4):
resolution: {integrity: sha512-Q7wPUly3ZWbPYQ5SEJBUuD6Mw3wiUfPMPquGfqsR2KF6sxQKRF8oaHnRLuu2uxpjuXjkzpBlZBPu1JgQX+Lf6Q==}
peerDependencies:
vue: '>=2.7 || >=3'
dependencies:
- '@vueuse/shared': 9.13.0(vue@3.2.47)
+ '@vueuse/shared': 9.13.0(vue@3.3.4)
'@zhead/schema': 0.7.4
- vue: 3.2.47
+ vue: 3.3.4
transitivePeerDependencies:
- '@vue/composition-api'
dev: false
@@ -3716,13 +3741,11 @@ packages:
/acorn@7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'}
- hasBin: true
dev: true
/acorn@8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
engines: {node: '>=0.4.0'}
- hasBin: true
dev: true
/acorn@8.9.0:
@@ -3940,7 +3963,7 @@ packages:
resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
engines: {node: '>= 10.0.0'}
dependencies:
- '@babel/types': 7.21.4
+ '@babel/types': 7.22.5
dev: true
/balanced-match@1.0.2:
@@ -3989,7 +4012,6 @@ packages:
/browserslist@4.21.5:
resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
dependencies:
caniuse-lite: 1.0.30001478
electron-to-chromium: 1.4.360
@@ -4000,7 +4022,6 @@ packages:
/browserslist@4.21.9:
resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
dependencies:
caniuse-lite: 1.0.30001504
electron-to-chromium: 1.4.433
@@ -4025,7 +4046,6 @@ packages:
/c8@7.13.0:
resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==}
engines: {node: '>=10.12.0'}
- hasBin: true
dependencies:
'@bcoe/v8-coverage': 0.2.3
'@istanbuljs/schema': 0.1.3
@@ -4277,7 +4297,6 @@ packages:
/composerize-ts@0.6.2:
resolution: {integrity: sha512-8tw5p/FBxg77ubjVftaXA+pknWbkUgbZ4rbZZs2yFUsj2yvO38IvtfpGLfaJ9mGFj324lFEr/OU9xULrKSF9Ag==}
- hasBin: true
dependencies:
commander: 10.0.0
deepmerge-ts: 5.1.0
@@ -4316,8 +4335,8 @@ packages:
/constantinople@4.0.1:
resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
dependencies:
- '@babel/parser': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/parser': 7.22.5
+ '@babel/types': 7.22.5
dev: true
/convert-source-map@1.9.0:
@@ -4356,7 +4375,6 @@ packages:
/cronstrue@2.26.0:
resolution: {integrity: sha512-M1VdV3hpBAsd1Zzvqcvf63wgDpcwCuS4WiNEVFpJ0s33MGO2sVDTfswYq0EPypCmESrCzmgL8h68DTzJuSDbVA==}
- hasBin: true
dev: false
/cross-spawn@7.0.3:
@@ -4418,7 +4436,6 @@ packages:
/cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
- hasBin: true
dev: true
/csso@4.2.0:
@@ -4443,13 +4460,13 @@ packages:
cssom: 0.3.8
dev: true
- /csstype@2.6.21:
- resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
-
/csstype@3.0.11:
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
dev: false
+ /csstype@3.1.2:
+ resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
+
/currency-symbol-map@2.2.0:
resolution: {integrity: sha512-fPZJ3jqM68+AAgqQ7UaGbgHL/39rp6l7GyqS2k1HJPu/kpS8D07x/+Uup6a9tCUKIlOFcRrDCf1qxSt8jnI5BA==}
dev: false
@@ -4670,7 +4687,6 @@ packages:
/editorconfig@0.15.3:
resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==}
- hasBin: true
dependencies:
commander: 2.20.3
lru-cache: 4.1.5
@@ -4726,7 +4742,6 @@ packages:
/errno@0.1.8:
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
- hasBin: true
requiresBuild: true
dependencies:
prr: 1.0.1
@@ -4986,7 +5001,6 @@ packages:
/esbuild@0.14.54:
resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
engines: {node: '>=12'}
- hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/linux-loong64': 0.14.54
@@ -5035,7 +5049,6 @@ packages:
/escodegen@2.0.0:
resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
engines: {node: '>=6.0'}
- hasBin: true
dependencies:
esprima: 4.0.1
estraverse: 5.3.0
@@ -5345,7 +5358,6 @@ packages:
/eslint@8.38.0:
resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- hasBin: true
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0)
'@eslint-community/regexpp': 4.5.0
@@ -5412,7 +5424,6 @@ packages:
/esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
- hasBin: true
dev: true
/esquery@1.5.0:
@@ -6017,7 +6028,6 @@ packages:
/image-size@0.5.5:
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
engines: {node: '>=0.10.0'}
- hasBin: true
requiresBuild: true
dev: true
optional: true
@@ -6154,7 +6164,6 @@ packages:
/is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
- hasBin: true
dev: true
/is-expression@4.0.0:
@@ -6370,7 +6379,6 @@ packages:
/jiti@1.18.2:
resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==}
- hasBin: true
dev: true
/joi@17.9.1:
@@ -6386,7 +6394,6 @@ packages:
/js-beautify@1.14.6:
resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==}
engines: {node: '>=10'}
- hasBin: true
dependencies:
config-chain: 1.1.13
editorconfig: 0.15.3
@@ -6411,7 +6418,6 @@ packages:
/js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
- hasBin: true
dependencies:
argparse: 1.0.10
esprima: 4.0.1
@@ -6419,7 +6425,6 @@ packages:
/js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
dependencies:
argparse: 2.0.1
dev: true
@@ -6472,18 +6477,15 @@ packages:
/jsesc@0.5.0:
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
- hasBin: true
dev: true
/jsesc@2.5.2:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
- hasBin: true
/jsesc@3.0.2:
resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
engines: {node: '>=6'}
- hasBin: true
dev: true
/json-parse-even-better-errors@2.3.1:
@@ -6514,7 +6516,6 @@ packages:
/json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
- hasBin: true
dependencies:
minimist: 1.2.8
dev: true
@@ -6522,7 +6523,6 @@ packages:
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
- hasBin: true
/jsonc-eslint-parser@1.4.1:
resolution: {integrity: sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg==}
@@ -6598,7 +6598,6 @@ packages:
/less@4.1.3:
resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==}
engines: {node: '>=6'}
- hasBin: true
dependencies:
copy-anything: 2.0.6
parse-node-version: 1.0.1
@@ -6728,13 +6727,13 @@ packages:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
sourcemap-codec: 1.4.8
+ dev: true
/magic-string@0.30.0:
resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
- dev: true
/make-dir@2.1.0:
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
@@ -6763,7 +6762,6 @@ packages:
/markdown-it@12.3.2:
resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==}
- hasBin: true
dependencies:
argparse: 2.0.1
entities: 2.1.0
@@ -6774,7 +6772,6 @@ packages:
/markdown-it@13.0.1:
resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==}
- hasBin: true
dependencies:
argparse: 2.0.1
entities: 3.0.1
@@ -6786,7 +6783,6 @@ packages:
/mathjs@10.6.4:
resolution: {integrity: sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==}
engines: {node: '>= 14'}
- hasBin: true
dependencies:
'@babel/runtime': 7.21.0
complex.js: 2.1.1
@@ -6865,7 +6861,6 @@ packages:
/mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
- hasBin: true
requiresBuild: true
dev: true
optional: true
@@ -6922,13 +6917,13 @@ packages:
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- /naive-ui@2.34.3(vue@3.2.47):
+ /naive-ui@2.34.3(vue@3.3.4):
resolution: {integrity: sha512-fUMr0dzb/iGsOTWgoblPVobY5X5dihQ1eam5dA+H74oyLYAvgX4pL96xQFPBLIYqvyRFBAsN85kHN5pLqdtpxA==}
peerDependencies:
vue: ^3.0.0
dependencies:
'@css-render/plugin-bem': 0.15.12(css-render@0.15.12)
- '@css-render/vue3-ssr': 0.15.12(vue@3.2.47)
+ '@css-render/vue3-ssr': 0.15.12(vue@3.3.4)
'@types/katex': 0.14.0
'@types/lodash': 4.14.192
'@types/lodash-es': 4.17.7
@@ -6942,16 +6937,15 @@ packages:
lodash-es: 4.17.21
seemly: 0.3.6
treemate: 0.3.11
- vdirs: 0.1.8(vue@3.2.47)
- vooks: 0.2.12(vue@3.2.47)
- vue: 3.2.47
- vueuc: 0.4.51(vue@3.2.47)
+ vdirs: 0.1.8(vue@3.3.4)
+ vooks: 0.2.12(vue@3.3.4)
+ vue: 3.3.4
+ vueuc: 0.4.51(vue@3.3.4)
dev: false
/nanoid@3.3.6:
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
/natural-compare-lite@1.4.0:
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
@@ -6964,7 +6958,6 @@ packages:
/needle@3.2.0:
resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==}
engines: {node: '>= 4.4.x'}
- hasBin: true
requiresBuild: true
dependencies:
debug: 3.2.7
@@ -7032,7 +7025,6 @@ packages:
/nopt@6.0.0:
resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
- hasBin: true
dependencies:
abbrev: 1.1.1
dev: true
@@ -7174,7 +7166,6 @@ packages:
/oui@12.0.52:
resolution: {integrity: sha512-LqU1oQeGUpMrJ1ZUi7bQKrADD6CMkEe0wpviX/stOZTw4kzEy+yKXVprtVO5O6G4+S6XiTb6BOx6p8fh2o5vyw==}
- hasBin: true
dependencies:
char-spinner: 1.0.1
country-data: 0.0.31
@@ -7331,7 +7322,7 @@ packages:
dev: true
optional: true
- /pinia@2.0.34(typescript@4.5.5)(vue@3.2.47):
+ /pinia@2.0.34(typescript@4.5.5)(vue@3.3.4):
resolution: {integrity: sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==}
peerDependencies:
'@vue/composition-api': ^1.4.0
@@ -7345,8 +7336,8 @@ packages:
dependencies:
'@vue/devtools-api': 6.5.0
typescript: 4.5.5
- vue: 3.2.47
- vue-demi: 0.13.11(vue@3.2.47)
+ vue: 3.3.4
+ vue-demi: 0.13.11(vue@3.3.4)
dev: false
/pkg-types@1.0.2:
@@ -7365,7 +7356,6 @@ packages:
/playwright-core@1.32.3:
resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==}
engines: {node: '>=14'}
- hasBin: true
dev: true
/pluralize@8.0.0:
@@ -7393,6 +7383,7 @@ packages:
nanoid: 3.3.6
picocolors: 1.0.0
source-map-js: 1.0.2
+ dev: true
/postcss@8.4.24:
resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==}
@@ -7401,7 +7392,6 @@ packages:
nanoid: 3.3.6
picocolors: 1.0.0
source-map-js: 1.0.2
- dev: true
/prelude-ls@1.1.2:
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
@@ -7416,7 +7406,6 @@ packages:
/prettier@2.8.7:
resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==}
engines: {node: '>=10.13.0'}
- hasBin: true
dev: true
/pretty-bytes@5.6.0:
@@ -7592,7 +7581,6 @@ packages:
/ps-tree@1.2.0:
resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==}
engines: {node: '>= 0.10'}
- hasBin: true
dependencies:
event-stream: 3.3.4
dev: true
@@ -7704,7 +7692,6 @@ packages:
/qrcode@1.5.1:
resolution: {integrity: sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==}
engines: {node: '>=10.13.0'}
- hasBin: true
dependencies:
dijkstrajs: 1.0.2
encode-utf8: 1.0.3
@@ -7778,7 +7765,6 @@ packages:
/regexp-tree@0.1.27:
resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
- hasBin: true
dev: true
/regexp.prototype.flags@1.4.3:
@@ -7813,7 +7799,6 @@ packages:
/regjsparser@0.10.0:
resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==}
- hasBin: true
dependencies:
jsesc: 0.5.0
dev: true
@@ -7849,7 +7834,6 @@ packages:
/resolve@1.22.2:
resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
- hasBin: true
dependencies:
is-core-module: 2.12.0
path-parse: 1.0.7
@@ -7863,7 +7847,6 @@ packages:
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- hasBin: true
dependencies:
glob: 7.2.3
dev: true
@@ -7884,7 +7867,6 @@ packages:
/rollup@2.77.3:
resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==}
engines: {node: '>=10.0.0'}
- hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
@@ -7892,7 +7874,6 @@ packages:
/rollup@2.79.1:
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
engines: {node: '>=10.0.0'}
- hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
@@ -7968,17 +7949,14 @@ packages:
/semver@5.7.1:
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
- hasBin: true
dev: true
/semver@6.3.0:
resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
- hasBin: true
/semver@7.4.0:
resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==}
engines: {node: '>=10'}
- hasBin: true
dependencies:
lru-cache: 6.0.0
dev: true
@@ -7986,7 +7964,6 @@ packages:
/semver@7.5.1:
resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==}
engines: {node: '>=10'}
- hasBin: true
dependencies:
lru-cache: 6.0.0
dev: true
@@ -8095,7 +8072,7 @@ packages:
/sourcemap-codec@1.4.8:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
- deprecated: Please use @jridgewell/sourcemap-codec instead
+ dev: true
/spdx-correct@3.2.0:
resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
@@ -8134,20 +8111,17 @@ packages:
/sql-formatter@8.2.0:
resolution: {integrity: sha512-5hQOSOk8jfhPkNgUmpm+9Fn2aaLWcf4vKL/dIvUN5q9rsamKHSyN/gL79xpkETNOyL+Zv5BMQfA7z9Rmz/DJJg==}
- hasBin: true
dependencies:
argparse: 2.0.1
dev: false
/stable@0.1.8:
resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
- deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
dev: true
/start-server-and-test@1.15.4:
resolution: {integrity: sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==}
engines: {node: '>=6'}
- hasBin: true
dependencies:
arg: 5.0.2
bluebird: 3.7.2
@@ -8291,7 +8265,6 @@ packages:
/svgo@2.8.0:
resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
engines: {node: '>=10.13.0'}
- hasBin: true
dependencies:
'@trysound/sax': 0.2.0
commander: 7.2.0
@@ -8529,7 +8502,6 @@ packages:
/typescript@4.5.5:
resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==}
engines: {node: '>=4.2.0'}
- hasBin: true
/ua-parser-js@1.0.35:
resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==}
@@ -8676,7 +8648,7 @@ packages:
dependencies:
'@antfu/utils': 0.7.2
'@rollup/pluginutils': 5.0.2(rollup@2.79.1)
- '@vueuse/core': 10.1.2(vue@3.2.47)
+ '@vueuse/core': 10.1.2(vue@3.3.4)
local-pkg: 0.4.3
magic-string: 0.30.0
minimatch: 7.4.6
@@ -8715,7 +8687,7 @@ packages:
- supports-color
dev: true
- /unplugin-vue-components@0.24.1(rollup@2.79.1)(vue@3.2.47):
+ /unplugin-vue-components@0.24.1(rollup@2.79.1)(vue@3.3.4):
resolution: {integrity: sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==}
engines: {node: '>=14'}
peerDependencies:
@@ -8738,7 +8710,7 @@ packages:
minimatch: 7.4.6
resolve: 1.22.2
unplugin: 1.3.1
- vue: 3.2.47
+ vue: 3.3.4
transitivePeerDependencies:
- rollup
- supports-color
@@ -8765,7 +8737,6 @@ packages:
/update-browserslist-db@1.0.10(browserslist@4.21.5):
resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
- hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
@@ -8776,7 +8747,6 @@ packages:
/update-browserslist-db@1.0.11(browserslist@4.21.9):
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
- hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
@@ -8815,7 +8785,6 @@ packages:
/uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
- hasBin: true
dev: false
/v8-to-istanbul@9.1.0:
@@ -8834,13 +8803,13 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
- /vdirs@0.1.8(vue@3.2.47):
+ /vdirs@0.1.8(vue@3.3.4):
resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
peerDependencies:
vue: ^3.0.11
dependencies:
evtd: 0.2.4
- vue: 3.2.47
+ vue: 3.3.4
dev: false
/vite-plugin-md@0.12.4(vite@2.9.15):
@@ -8885,7 +8854,6 @@ packages:
/vite@2.9.15(less@4.1.3):
resolution: {integrity: sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==}
engines: {node: '>=12.2.0'}
- hasBin: true
peerDependencies:
less: '*'
sass: '*'
@@ -8910,7 +8878,6 @@ packages:
/vitest@0.13.1(c8@7.13.0)(jsdom@19.0.0)(less@4.1.3):
resolution: {integrity: sha512-CfSBf7YFw/i8HumSUQRtZKs0aV91DC9WU8nAgIJAlawKHaFuPHQohDwOTPIFgrxySiuFYUa0Yohf9gDFfBwjxA==}
engines: {node: '>=v14.16.0'}
- hasBin: true
peerDependencies:
'@vitest/ui': '*'
c8: '*'
@@ -8948,13 +8915,13 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /vooks@0.2.12(vue@3.2.47):
+ /vooks@0.2.12(vue@3.3.4):
resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
peerDependencies:
vue: ^3.0.0
dependencies:
evtd: 0.2.4
- vue: 3.2.47
+ vue: 3.3.4
dev: false
/vscode-css-languageservice@5.4.2:
@@ -9011,7 +8978,6 @@ packages:
/vscode-pug-languageservice@0.31.4:
resolution: {integrity: sha512-StQWV+v1v+an/pGKNPg4YkODFyKeYpUEzaSAoXIUsIoh7O4Nuv6zjd1M/fPxaMSD6Kk+OH/JGE36hbXsKXOz5A==}
- deprecated: 'WARNING: This project has been renamed to @volar/pug-language-service. Install using @volar/pug-language-service instead.'
dependencies:
'@volar/code-gen': 0.31.4
'@volar/shared': 0.31.4
@@ -9025,7 +8991,6 @@ packages:
/vscode-typescript-languageservice@0.31.4:
resolution: {integrity: sha512-nsnRPEfg9t3oDlwzm3WTAv0p83vceqCuxvRo/+N7hXbmtaO7WMGCMvJx0xyIuUDS4NgaEK31oMR9FnX9JNcEQQ==}
- deprecated: 'WARNING: This project has been renamed to @volar/typescript-language-service. Install using @volar/typescript-language-service instead.'
dependencies:
'@volar/shared': 0.31.4
semver: 7.4.0
@@ -9045,7 +9010,6 @@ packages:
/vscode-vue-languageservice@0.31.4:
resolution: {integrity: sha512-Pyvtj5iokBilGDH8KY6bocJh8NcIGoFmUksPOOZKBb+4usEHTBtWw/uoH4hjxWwLszMRQuStkXLMaSKtBIv3gQ==}
- deprecated: 'WARNING: This project has been renamed to @volar/vue-language-service. Install using @volar/vue-language-service instead.'
dependencies:
'@volar/code-gen': 0.31.4
'@volar/html2pug': 0.31.4
@@ -9054,8 +9018,8 @@ packages:
'@volar/transforms': 0.31.4
'@volar/vue-code-gen': 0.31.4
'@vscode/emmet-helper': 2.8.6
- '@vue/reactivity': 3.2.47
- '@vue/shared': 3.2.47
+ '@vue/reactivity': 3.3.4
+ '@vue/shared': 3.3.4
upath: 2.0.1
vscode-css-languageservice: 5.4.2
vscode-html-languageservice: 4.2.5
@@ -9066,10 +9030,9 @@ packages:
vscode-typescript-languageservice: 0.31.4
dev: true
- /vue-demi@0.13.11(vue@3.2.47):
+ /vue-demi@0.13.11(vue@3.3.4):
resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
engines: {node: '>=12'}
- hasBin: true
requiresBuild: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
@@ -9078,13 +9041,12 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.2.47
+ vue: 3.3.4
dev: false
- /vue-demi@0.14.1(vue@3.2.47):
+ /vue-demi@0.14.1(vue@3.3.4):
resolution: {integrity: sha512-rt+yuCtXvscYot9SQQj3WKZJVSriPNqVkpVBNEHPzSgBv7QIYzsS410VqVgvx8f9AAPgjg+XPKvmV3vOqqkJQQ==}
engines: {node: '>=12'}
- hasBin: true
requiresBuild: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
@@ -9093,7 +9055,7 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.2.47
+ vue: 3.3.4
/vue-eslint-parser@9.3.0(eslint@8.38.0):
resolution: {integrity: sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ==}
@@ -9113,7 +9075,7 @@ packages:
- supports-color
dev: true
- /vue-i18n@9.2.2(vue@3.2.47):
+ /vue-i18n@9.2.2(vue@3.3.4):
resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==}
engines: {node: '>= 14'}
peerDependencies:
@@ -9123,20 +9085,19 @@ packages:
'@intlify/shared': 9.2.2
'@intlify/vue-devtools': 9.2.2
'@vue/devtools-api': 6.5.0
- vue: 3.2.47
+ vue: 3.3.4
- /vue-router@4.1.6(vue@3.2.47):
+ /vue-router@4.1.6(vue@3.3.4):
resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
peerDependencies:
vue: ^3.2.0
dependencies:
'@vue/devtools-api': 6.5.0
- vue: 3.2.47
+ vue: 3.3.4
dev: false
/vue-tsc@0.31.4(typescript@4.5.5):
resolution: {integrity: sha512-8RnKGmQRo/0rbXkyZmKCOdT62fNWyEaMdS/BDAPE+saGNAniUZsjpOSOjAiLwsQc5qgeI9/mY1W3o4tX7H/7MA==}
- hasBin: true
peerDependencies:
typescript: '*'
dependencies:
@@ -9145,33 +9106,32 @@ packages:
vscode-vue-languageservice: 0.31.4
dev: true
- /vue@3.2.47:
- resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
+ /vue@3.3.4:
+ resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
dependencies:
- '@vue/compiler-dom': 3.2.47
- '@vue/compiler-sfc': 3.2.47
- '@vue/runtime-dom': 3.2.47
- '@vue/server-renderer': 3.2.47(vue@3.2.47)
- '@vue/shared': 3.2.47
+ '@vue/compiler-dom': 3.3.4
+ '@vue/compiler-sfc': 3.3.4
+ '@vue/runtime-dom': 3.3.4
+ '@vue/server-renderer': 3.3.4(vue@3.3.4)
+ '@vue/shared': 3.3.4
- /vueuc@0.4.51(vue@3.2.47):
+ /vueuc@0.4.51(vue@3.3.4):
resolution: {integrity: sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==}
peerDependencies:
vue: ^3.0.11
dependencies:
- '@css-render/vue3-ssr': 0.15.12(vue@3.2.47)
+ '@css-render/vue3-ssr': 0.15.12(vue@3.3.4)
'@juggle/resize-observer': 3.4.0
css-render: 0.15.12
evtd: 0.2.4
seemly: 0.3.6
- vdirs: 0.1.8(vue@3.2.47)
- vooks: 0.2.12(vue@3.2.47)
- vue: 3.2.47
+ vdirs: 0.1.8(vue@3.3.4)
+ vooks: 0.2.12(vue@3.3.4)
+ vue: 3.3.4
dev: false
/w3c-hr-time@1.0.2:
resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==}
- deprecated: Use your platform's native performance.now() and performance.timeOrigin.
dependencies:
browser-process-hrtime: 1.0.0
dev: true
@@ -9190,7 +9150,6 @@ packages:
/wait-on@7.0.1(debug@4.3.4):
resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==}
engines: {node: '>=12.0.0'}
- hasBin: true
dependencies:
axios: 0.27.2(debug@4.3.4)
joi: 17.9.1
@@ -9230,7 +9189,6 @@ packages:
/webpod@0.0.2:
resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==}
- hasBin: true
dev: true
/whatwg-encoding@2.0.0:
@@ -9305,7 +9263,6 @@ packages:
/which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
- hasBin: true
dependencies:
isexe: 2.0.0
dev: true
@@ -9313,7 +9270,6 @@ packages:
/which@3.0.0:
resolution: {integrity: sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- hasBin: true
dependencies:
isexe: 2.0.0
dev: true
@@ -9322,8 +9278,8 @@ packages:
resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}
engines: {node: '>= 10.0.0'}
dependencies:
- '@babel/parser': 7.21.4
- '@babel/types': 7.21.4
+ '@babel/parser': 7.22.5
+ '@babel/types': 7.22.5
assert-never: 1.2.1
babel-walk: 3.0.0-canary-5
dev: true
@@ -9593,7 +9549,6 @@ packages:
/yamljs@0.3.0:
resolution: {integrity: sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==}
- hasBin: true
dependencies:
argparse: 1.0.10
glob: 7.2.3
@@ -9650,7 +9605,6 @@ packages:
/zx@7.2.1:
resolution: {integrity: sha512-TgKwppaMLMNAXHhlhbBh7rMoOSx3/9qqnkv8frmhVlSomEuWkDijh/BCmYntkoS7ZQyemApAUyEi24jIrrS+hA==}
engines: {node: '>= 16.0.0'}
- hasBin: true
dependencies:
'@types/fs-extra': 11.0.1
'@types/minimist': 1.2.2
diff --git a/src/components/SearchBar.vue b/src/components/SearchBar.vue
deleted file mode 100644
index 6da0f36..0000000
--- a/src/components/SearchBar.vue
+++ /dev/null
@@ -1,109 +0,0 @@
-<script lang="ts" setup>
-import { SearchRound } from '@vicons/material';
-import { useMagicKeys, whenever } from '@vueuse/core';
-import { NInput } from 'naive-ui';
-import { useRouter } from 'vue-router';
-import SearchBarItem from './SearchBarItem.vue';
-import type { Tool } from '@/tools/tools.types';
-import { tools } from '@/tools';
-import { useTracker } from '@/modules/tracker/tracker.services';
-import { useFuzzySearch } from '@/composable/fuzzySearch';
-
-const toolToOption = (tool: Tool) => ({ label: tool.name, value: tool.path, tool });
-
-const router = useRouter();
-const { tracker } = useTracker();
-
-const queryString = ref('');
-const inputEl = ref<HTMLElement>();
-const displayDropDown = ref(true);
-const isMac = computed(() => window.navigator.userAgent.toLowerCase().includes('mac'));
-
-const { searchResult } = useFuzzySearch({
- search: queryString,
- data: tools,
- options: { keys: [{ name: 'name', weight: 2 }, 'description', 'keywords'] },
-});
-
-const options = computed(() => {
- if (queryString.value === '') {
- return tools.map(toolToOption);
- }
-
- return searchResult.value.map(toolToOption);
-});
-
-const keys = useMagicKeys({
- passive: false,
- onEventFired(e) {
- if (e.ctrlKey && e.key === 'k' && e.type === 'keydown') {
- e.preventDefault();
- }
-
- if (e.metaKey && e.key === 'k' && e.type === 'keydown') {
- e.preventDefault();
- }
- },
-});
-
-whenever(keys.ctrl_k, claimFocus);
-whenever(keys.meta_k, claimFocus);
-whenever(keys.escape, releaseFocus);
-
-function renderOption({ tool }: { tool: Tool }) {
- return h(SearchBarItem, { tool });
-}
-
-function onSelect(path: string) {
- router.push(path);
- queryString.value = '';
-}
-
-function claimFocus() {
- displayDropDown.value = true;
-
- inputEl.value?.focus();
-}
-
-function releaseFocus() {
- displayDropDown.value = false;
-}
-
-function onFocus() {
- tracker.trackEvent({ eventName: 'Search-bar focused' });
- displayDropDown.value = true;
-}
-</script>
-
-<template>
- <div class="search-bar">
- <n-auto-complete
- v-model:value="queryString"
- :options="options"
- :on-select="(value: string | number) => onSelect(String(value))"
- :render-label="renderOption"
- default-value="aa"
- :get-show="() => displayDropDown"
- :on-focus="onFocus"
- @update:value="() => (displayDropDown = true)"
- >
- <template #default="{ handleInput, handleBlur, handleFocus, value: slotValue }">
- <NInput
- ref="inputEl"
- round
- clearable
- :placeholder="`Search a tool (use ${isMac ? 'Cmd' : 'Ctrl'} + K to focus)`"
- :value="slotValue"
- :input-props="{ autocomplete: 'disabled' }"
- @input="handleInput"
- @focus="handleFocus"
- @blur="handleBlur"
- >
- <template #prefix>
- <n-icon :component="SearchRound" />
- </template>
- </NInput>
- </template>
- </n-auto-complete>
- </div>
-</template>
diff --git a/src/components/SearchBarItem.vue b/src/components/SearchBarItem.vue
deleted file mode 100644
index 541695e..0000000
--- a/src/components/SearchBarItem.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<script lang="ts" setup>
-import type { Tool } from '@/tools/tools.types';
-
-const props = defineProps<{ tool: Tool }>();
-const { tool } = toRefs(props);
-</script>
-
-<template>
- <div class="search-bar-item">
- <n-icon class="icon" :component="tool.icon" />
-
- <div>
- <div class="name">
- {{ tool.name }}
- </div>
- <div class="description">
- {{ tool.description }}
- </div>
- </div>
- </div>
-</template>
-
-<style lang="less" scoped>
-.search-bar-item {
- padding: 10px;
- display: flex;
- flex-direction: row;
- align-items: center;
-
- .icon {
- font-size: 30px;
- margin-right: 10px;
- opacity: 0.7;
- }
-
- .name {
- font-weight: bold;
- font-size: 15px;
- line-height: 1;
- margin-bottom: 5px;
- }
-
- .description {
- opacity: 0.7;
- line-height: 1;
- }
-}
-</style>
diff --git a/src/layouts/base.layout.vue b/src/layouts/base.layout.vue
index ec1d5fe..36edd77 100644
--- a/src/layouts/base.layout.vue
+++ b/src/layouts/base.layout.vue
@@ -3,7 +3,7 @@ import { NIcon, useThemeVars } from 'naive-ui';
import { RouterLink } from 'vue-router';
import { Heart, Home2, Menu2 } from '@vicons/tabler';
-import SearchBar from '../components/SearchBar.vue';
+
import HeroGradient from '../assets/hero-gradient.svg?component';
import MenuLayout from '../components/MenuLayout.vue';
import NavbarButtons from '../components/NavbarButtons.vue';
@@ -104,7 +104,7 @@ const tools = computed<ToolCategory[]>(() => [
Home
</n-tooltip>
- <SearchBar />
+ <command-palette mx-2 />
<NavbarButtons v-if="!styleStore.isSmallScreen" />
@@ -218,10 +218,6 @@ const tools = computed<ToolCategory[]>(() => [
justify-content: center;
flex-direction: row;
- & > *:not(:last-child) {
- margin-right: 5px;
- }
-
.search-bar {
// width: 100%;
flex-grow: 1;
diff --git a/src/modules/command-palette/command-palette.store.ts b/src/modules/command-palette/command-palette.store.ts
new file mode 100644
index 0000000..f215388
--- /dev/null
+++ b/src/modules/command-palette/command-palette.store.ts
@@ -0,0 +1,68 @@
+import { defineStore } from 'pinia';
+import _ from 'lodash';
+import type { PaletteOption } from './command-palette.types';
+import { useToolStore } from '@/tools/tools.store';
+import { useFuzzySearch } from '@/composable/fuzzySearch';
+import { useStyleStore } from '@/stores/style.store';
+
+import SunIcon from '~icons/mdi/white-balance-sunny';
+import GithubIcon from '~icons/mdi/github';
+import BugIcon from '~icons/mdi/bug-outline';
+
+export const useCommandPaletteStore = defineStore('command-palette', () => {
+ const toolStore = useToolStore();
+ const styleStore = useStyleStore();
+ const searchPrompt = ref('');
+
+ const toolsOptions = toolStore.tools.map(tool => ({
+ ...tool,
+ to: tool.path,
+ toolCategory: tool.category,
+ category: 'Tools',
+ }));
+
+ const searchOptions: PaletteOption[] = [
+ ...toolsOptions,
+ {
+ name: 'Toggle dark mode',
+ description: 'Toggle dark mode on or off.',
+ action: () => styleStore.toggleDark(),
+ icon: SunIcon,
+ category: 'Actions',
+ keywords: ['dark', 'theme', 'toggle', 'mode', 'light', 'system'],
+ },
+ {
+ name: 'Github repository',
+ href: 'https://github.com/CorentinTh/it-tools',
+ category: 'External',
+ description: 'View the source code of it-tools on Github.',
+ keywords: ['github', 'repo', 'repository', 'source', 'code'],
+ icon: GithubIcon,
+ },
+ {
+ name: 'Report a bug or an issue',
+ description: 'Report a bug or an issue to help improve it-tools.',
+ href: 'https://github.com/CorentinTh/it-tools/issues/new/choose',
+ category: 'Actions',
+ keywords: ['report', 'issue', 'bug', 'problem', 'error'],
+ icon: BugIcon,
+ },
+ ];
+
+ const { searchResult } = useFuzzySearch({
+ search: searchPrompt,
+ data: searchOptions,
+ options: {
+ keys: [{ name: 'name', weight: 2 }, 'description', 'keywords', 'category'],
+ threshold: 0.3,
+ },
+ });
+
+ const filteredSearchResult = computed(() =>
+ _.chain(searchResult.value).groupBy('category').mapValues(categoryOptions => _.take(categoryOptions, 5)).value());
+
+ return {
+ filteredSearchResult,
+ searchPrompt,
+ };
+});
diff --git a/src/modules/command-palette/command-palette.types.ts b/src/modules/command-palette/command-palette.types.ts
new file mode 100644
index 0000000..0b072a7
--- /dev/null
+++ b/src/modules/command-palette/command-palette.types.ts
@@ -0,0 +1,13 @@
+import type { Component } from 'vue';
+import type { RouteLocationRaw } from 'vue-router';
+
+export interface PaletteOption {
+ name: string
+ description?: string
+ icon?: Component
+ action?: () => void
+ to?: RouteLocationRaw
+ category: string
+ keywords?: string[]
+ href?: string
+}
diff --git a/src/modules/command-palette/command-palette.vue b/src/modules/command-palette/command-palette.vue
new file mode 100644
index 0000000..bd431a0
--- /dev/null
+++ b/src/modules/command-palette/command-palette.vue
@@ -0,0 +1,137 @@
+<script setup lang="ts">
+import { storeToRefs } from 'pinia';
+import _ from 'lodash';
+import { useCommandPaletteStore } from './command-palette.store';
+import type { PaletteOption } from './command-palette.types';
+
+const isModalOpen = ref(false);
+const inputRef = ref();
+const router = useRouter();
+const isMac = computed(() => window.navigator.userAgent.toLowerCase().includes('mac'));
+
+const commandPaletteStore = useCommandPaletteStore();
+const { searchPrompt, filteredSearchResult } = storeToRefs(commandPaletteStore);
+
+const keys = useMagicKeys({
+ passive: false,
+ onEventFired(e) {
+ if (e.ctrlKey && e.key === 'k' && e.type === 'keydown') {
+ e.preventDefault();
+ }
+
+ if (e.metaKey && e.key === 'k' && e.type === 'keydown') {
+ e.preventDefault();
+ }
+ },
+});
+
+whenever(isModalOpen, () => inputRef.value?.focus());
+
+whenever(keys.ctrl_k, open);
+whenever(keys.meta_k, open);
+whenever(keys.escape, close);
+
+function open() {
+ return isModalOpen.value = true;
+}
+
+function close() {
+ isModalOpen.value = false;
+}
+
+const selectedOptionIndex = ref(0);
+
+function handleKeydown(event: KeyboardEvent) {
+ const { key } = event;
+ const isEnterPressed = key === 'Enter';
+ const isArrowUpOrDown = ['ArrowUp', 'ArrowDown'].includes(key);
+ const isArrowDown = key === 'ArrowDown';
+
+ if (isArrowUpOrDown) {
+ const increment = isArrowDown ? 1 : -1;
+ const maxIndex = Math.max(_.chain(filteredSearchResult.value).values().flatten().size().value() - 1, 0);
+
+ selectedOptionIndex.value = Math.min(Math.max(selectedOptionIndex.value + increment, 0), maxIndex);
+
+ return;
+ }
+
+ if (isEnterPressed) {
+ const option = _.chain(filteredSearchResult.value)
+ .values()
+ .flatten()
+ .nth(selectedOptionIndex.value)
+ .value();
+
+ activateOption(option);
+ }
+}
+
+function getOptionIndex(option: PaletteOption) {
+ return _.chain(filteredSearchResult.value)
+ .values()
+ .flatten()
+ .findIndex(o => o === option)
+ .value();
+}
+
+function activateOption(option: PaletteOption) {
+ if (option.action) {
+ option.action();
+ return;
+ }
+
+ if (option.to) {
+ router.push(option.to);
+ close();
+ }
+
+ if (option.href) {
+ window.open(option.href, '_blank');
+ close();
+ }
+}
+</script>
+
+<template>
+ <div flex-1>
+ <c-button w-full important:justify-start @click="isModalOpen = true">
+ <span flex items-center gap-3 op-40>
+
+ <icon-mdi-search />
+ Search...
+
+ <span hidden flex-1 border border-current border-op-40 rounded border-solid px-5px py-3px sm:inline>
+ {{ isMac ? 'Cmd' : 'Ctrl' }}&nbsp;+&nbsp;K
+ </span>
+ </span>
+ </c-button>
+
+ <c-modal v-model:open="isModalOpen" class="palette-modal" shadow-xl important:max-w-650px important:pa-12px @keydown="handleKeydown">
+ <c-input-text ref="inputRef" v-model:value="searchPrompt" raw-text placeholder="Type to search a tool or a command..." autofocus clearable />
+
+ <div v-for="(options, category) in filteredSearchResult" :key="category">
+ <div ml-3 mt-3 text-sm font-bold text-primary op-60>
+ {{ category }}
+ </div>
+ <command-palette-option v-for="option in options" :key="option.name" :option="option" :selected="selectedOptionIndex === getOptionIndex(option)" @activated="activateOption" />
+ </div>
+ </c-modal>
+ </div>
+</template>
+
+<style scoped lang="less">
+.c-input-text {
+ font-size: 18px;
+
+ ::v-deep(.input-wrapper) {
+ padding: 4px;
+ padding-left: 18px;
+ }
+}
+
+.c-modal--overlay {
+ align-items: flex-start !important;
+ padding-top: 80px;
+}
+</style>
diff --git a/src/modules/command-palette/components/command-palette-option.vue b/src/modules/command-palette/components/command-palette-option.vue
new file mode 100644
index 0000000..9192bc0
--- /dev/null
+++ b/src/modules/command-palette/components/command-palette-option.vue
@@ -0,0 +1,36 @@
+<script setup lang="ts">
+import type { PaletteOption } from '../command-palette.types';
+
+const props = withDefaults(defineProps<{ option: PaletteOption; selected?: boolean }>(), {
+ selected: false,
+});
+const emit = defineEmits(['activated']);
+const { option } = toRefs(props);
+
+const { selected } = toRefs(props);
+</script>
+
+<template>
+ <div
+ role="option"
+ :aria-selected="selected"
+ :class="{
+ 'text-white': selected,
+ 'bg-primary': selected,
+ }"
+ w-full flex cursor-pointer items-center overflow-hidden rounded pa-3 transition hover:bg-primary hover:text-white
+ @click="() => emit('activated', option)"
+ >
+ <component :is="option.icon" v-if="option.icon" mr-3 h-30px w-30px shrink-0 op-50 />
+
+ <div flex-1 overflow-hidden>
+ <div truncate font-bold lh-tight op-90>
+ {{ option.name }}
+ </div>
+
+ <div v-if="option.description" truncate lh-tight op-60>
+ {{ option.description }}
+ </div>
+ </div>
+ </div>
+</template>
diff --git a/src/pages/About.vue b/src/pages/About.vue
index cbf8964..0a3dd3b 100644
--- a/src/pages/About.vue
+++ b/src/pages/About.vue
@@ -46,7 +46,7 @@ const { tracker } = useTracker();
If you need a tool that is currently not present here, and you think can be relevant, you are welcome to submit a
feature request in the
<c-link
- href="https://github.com/CorentinTh/it-tools/issues/new?assignees=CorentinTh&labels=enhancement&template=feature_request.md&title=%5BFEAT%5D%20My%20feature"
+ href="https://github.com/CorentinTh/it-tools/issues/new/choose"
rel="noopener"
target="_blank"
>
@@ -57,7 +57,7 @@ const { tracker } = useTracker();
<n-p>
And if you found a bug, or something broken that doesn't work as expected, please fill a bug report in the
<c-link
- href="https://github.com/CorentinTh/it-tools/issues/new?assignees=CorentinTh&labels=bug&template=bug_report.md&title=%5BBUG%5D%20My%20bug"
+ href="https://github.com/CorentinTh/it-tools/issues/new/choose"
rel="noopener"
target="_blank"
>
diff --git a/src/ui/c-input-text/c-input-text.vue b/src/ui/c-input-text/c-input-text.vue
index 513834d..b89d1e4 100644
--- a/src/ui/c-input-text/c-input-text.vue
+++ b/src/ui/c-input-text/c-input-text.vue
@@ -29,6 +29,7 @@ const props = withDefaults(
multiline?: boolean
rows?: number | string
autosize?: boolean
+ autofocus?: boolean
}>(),
{
value: '',
@@ -54,13 +55,14 @@ const props = withDefaults(
multiline: false,
rows: 3,
autosize: false,
+ autofocus: false,
},
);
const emit = defineEmits(['update:value']);
const value = useVModel(props, 'value', emit);
const showPassword = ref(false);
-const { id, placeholder, label, validationRules, labelPosition, labelWidth, labelAlign, autosize, readonly, disabled, clearable, type, multiline, rows, rawText } = toRefs(props);
+const { id, placeholder, label, validationRules, labelPosition, labelWidth, labelAlign, autosize, readonly, disabled, clearable, type, multiline, rows, rawText, autofocus } = toRefs(props);
const validation
= props.validation
@@ -74,12 +76,9 @@ const theme = useTheme();
const appTheme = useAppTheme();
const textareaRef = ref<HTMLTextAreaElement>();
+const inputRef = ref<HTMLInputElement>();
const inputWrapperRef = ref<HTMLElement>();
-defineExpose({
- inputWrapperRef,
-});
-
watch(
value,
() => {
@@ -107,6 +106,38 @@ const htmlInputType = computed(() => {
return 'text';
});
+
+function focus() {
+ if (textareaRef.value) {
+ textareaRef.value.focus();
+ }
+
+ if (inputRef.value) {
+ inputRef.value.focus();
+ }
+}
+
+function blur() {
+ if (textareaRef.value) {
+ textareaRef.value.blur?.();
+ }
+
+ if (inputRef.value) {
+ inputRef.value.blur?.();
+ }
+}
+
+onMounted(() => {
+ if (autofocus.value) {
+ focus();
+ }
+});
+
+defineExpose({
+ inputWrapperRef,
+ focus,
+ blur,
+});
</script>
<template>
@@ -140,6 +171,7 @@ const htmlInputType = computed(() => {
<input
v-else
:id="id"
+ ref="inputRef"
v-model="value"
:type="htmlInputType"
class="input"
diff --git a/src/ui/c-modal/c-modal.demo.vue b/src/ui/c-modal/c-modal.demo.vue
new file mode 100644
index 0000000..c4349f6
--- /dev/null
+++ b/src/ui/c-modal/c-modal.demo.vue
@@ -0,0 +1,15 @@
+<script lang="ts" setup>
+const modal1 = ref();
+</script>
+
+<template>
+ <div>
+ <c-button @click="() => modal1?.open()">
+ Open Modal
+ </c-button>
+
+ <c-modal ref="modal1">
+ Content
+ </c-modal>
+ </div>
+</template>
diff --git a/src/ui/c-modal/c-modal.theme.ts b/src/ui/c-modal/c-modal.theme.ts
new file mode 100644
index 0000000..0681417
--- /dev/null
+++ b/src/ui/c-modal/c-modal.theme.ts
@@ -0,0 +1,11 @@
+import { defineThemes } from '../theme/theme.models';
+import { appThemes } from '../theme/themes';
+
+export const { useTheme } = defineThemes({
+ dark: {
+ background: appThemes.dark.background,
+ },
+ light: {
+ background: appThemes.light.background,
+ },
+});
diff --git a/src/ui/c-modal/c-modal.vue b/src/ui/c-modal/c-modal.vue
new file mode 100644
index 0000000..af92f01
--- /dev/null
+++ b/src/ui/c-modal/c-modal.vue
@@ -0,0 +1,74 @@
+<script setup lang="ts">
+import { useTheme } from './c-modal.theme';
+
+const props = withDefaults(defineProps<{ open?: boolean; centered?: boolean }>(), {
+ open: false,
+ centered: true,
+});
+const emit = defineEmits(['update:open']);
+const isOpen = useVModel(props, 'open', emit, { passive: true });
+
+const { centered } = toRefs(props);
+
+function close() {
+ isOpen.value = false;
+}
+
+function open() {
+ isOpen.value = true;
+}
+
+function toggle() {
+ isOpen.value = !isOpen.value;
+}
+
+defineExpose({
+ close,
+ open,
+ toggle,
+ isOpen,
+});
+
+defineOptions({
+ inheritAttrs: false,
+});
+
+const theme = useTheme();
+const modal = ref();
+
+onClickOutside(modal, () => {
+ if (isOpen.value) {
+ close();
+ }
+});
+</script>
+
+<template>
+ <transition>
+ <div v-if="isOpen" class="c-modal--overlay" fixed left-0 top-0 z-10 h-full w-full flex justify-center px-2 :class="{ 'items-center': centered }">
+ <div ref="modal" class="c-modal--container" v-bind="$attrs" max-w-xl w-full flex-grow rounded-md pa-24px>
+ <slot />
+ </div>
+ </div>
+ </transition>
+</template>
+
+<style scoped lang="less">
+.c-modal--overlay {
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.c-modal--container {
+ background-color: v-bind('theme.background');
+}
+
+.v-enter-active,
+.v-leave-active {
+ transition: opacity 0.3s ease-in-out;
+}
+
+.v-enter-from,
+.v-leave-to {
+ opacity: 0;
+}
+</style>
diff --git a/src/ui/theme/themes.ts b/src/ui/theme/themes.ts
index 81d7ddf..2c330b0 100644
--- a/src/ui/theme/themes.ts
+++ b/src/ui/theme/themes.ts
@@ -2,6 +2,7 @@ import { defineThemes } from './theme.models';
export const { themes: appThemes, useTheme: useAppTheme } = defineThemes({
light: {
+ background: '#ffffff',
text: {
baseColor: '#333639',
mutedColor: '#767c82',
@@ -37,6 +38,7 @@ export const { themes: appThemes, useTheme: useAppTheme } = defineThemes({
},
},
dark: {
+ background: '#1e1e1e',
text: {
baseColor: '#ffffffd1',
mutedColor: '#ffffff80',
diff --git a/unocss.config.ts b/unocss.config.ts
index 3890ad1..06a9215 100644
--- a/unocss.config.ts
+++ b/unocss.config.ts
@@ -10,5 +10,9 @@ import {
export default defineConfig({
presets: [presetUno(), presetAttributify(), presetTypography()],
transformers: [transformerDirectives(), transformerVariantGroup()],
- safelist: 'prose prose-sm m-auto text-left'.split(' '),
+ theme: {
+ colors: {
+ primary: '#1ea54c',
+ },
+ },
});