diff --git a/components.d.ts b/components.d.ts
index 73fec6aa..49f7da0a 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -57,6 +57,7 @@ declare module '@vue/runtime-core' {
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']
+ ColorWheel: typeof import('./src/tools/color-wheel/color-wheel.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']
diff --git a/package.json b/package.json
index 5e0b78b4..3a11cb76 100644
--- a/package.json
+++ b/package.json
@@ -124,6 +124,7 @@
"vanilla-jsoneditor": "^0.23.8",
"vite-plugin-node-polyfills": "^0.22.0",
"vue": "^3.3.4",
+ "vue-color-wheel": "^0.1.1",
"vue-i18n": "^9.9.1",
"vue-router": "^4.1.6",
"vue-shadow-dom": "^4.2.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7380d973..0e4fb686 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -272,6 +272,9 @@ importers:
vue:
specifier: ^3.3.4
version: 3.3.4
+ vue-color-wheel:
+ specifier: ^0.1.1
+ version: 0.1.1
vue-i18n:
specifier: ^9.9.1
version: 9.9.1(vue@3.3.4)
@@ -1229,6 +1232,9 @@ packages:
resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
engines: {node: '>=6.9.0'}
+ '@cfcs/core@0.0.6':
+ resolution: {integrity: sha512-FxfJMwoLB8MEMConeXUCqtMGqxdtePQxRBOiGip9ULcYYam3WfCgoY6xdnMaSkYvRvmosp5iuG+TiPofm65+Pw==}
+
'@codemirror/autocomplete@6.18.1':
resolution: {integrity: sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==}
peerDependencies:
@@ -1277,6 +1283,21 @@ packages:
peerDependencies:
vue: ^3.0.11
+ '@daybrush/utils@1.13.0':
+ resolution: {integrity: sha512-ALK12C6SQNNHw1enXK+UO8bdyQ+jaWNQ1Af7Z3FNxeAwjYhQT7do+TRE4RASAJ3ObaS2+TJ7TXR3oz2Gzbw0PQ==}
+
+ '@egjs/agent@2.4.4':
+ resolution: {integrity: sha512-cvAPSlUILhBBOakn2krdPnOGv5hAZq92f1YHxYcfu0p7uarix2C6Ia3AVizpS1SGRZGiEkIS5E+IVTLg1I2Iog==}
+
+ '@egjs/children-differ@1.0.1':
+ resolution: {integrity: sha512-DRvyqMf+CPCOzAopQKHtW+X8iN6Hy6SFol+/7zCUiE5y4P/OB8JP8FtU4NxtZwtafvSL4faD5KoQYPj3JHzPFQ==}
+
+ '@egjs/component@3.0.5':
+ resolution: {integrity: sha512-cLcGizTrrUNA2EYE3MBmEDt2tQv1joVP1Q3oDisZ5nw0MZDx2kcgEXM+/kZpfa/PAkFvYVhRUZwytIQWoN3V/w==}
+
+ '@egjs/list-differ@1.0.1':
+ resolution: {integrity: sha512-OTFTDQcWS+1ZREOdCWuk5hCBgYO4OsD30lXcOCyVOAjXMhgL5rBRDnt/otb6Nz8CzU0L/igdcaQBDLWc4t9gvg==}
+
'@emotion/hash@0.8.0':
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
@@ -1837,6 +1858,15 @@ packages:
'@rushstack/eslint-patch@1.2.0':
resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
+ '@scena/dragscroll@1.4.0':
+ resolution: {integrity: sha512-3O8daaZD9VXA9CP3dra6xcgt/qrm0mg0xJCwiX6druCteQ9FFsXffkF8PrqxY4Z4VJ58fFKEa0RlKqbsi/XnRA==}
+
+ '@scena/event-emitter@1.0.5':
+ resolution: {integrity: sha512-AzY4OTb0+7ynefmWFQ6hxDdk0CySAq/D4efljfhtRHCOP7MBF9zUfhKG3TJiroVjASqVgkRJFdenS8ArZo6Olg==}
+
+ '@scena/matrix@1.1.1':
+ resolution: {integrity: sha512-JVKBhN0tm2Srl+Yt+Ywqu0oLgLcdemDQlD1OxmN9jaCTwaFPZ7tY8n6dhVgMEaR9qcR7r+kAlMXnSfNyYdE+Vg==}
+
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
@@ -3127,6 +3157,17 @@ packages:
crelt@1.0.6:
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+ croact-css-styled@1.1.9:
+ resolution: {integrity: sha512-G7yvRiVJ3Eoj0ov2h2xR4312hpOzATay2dGS9clK8yJQothjH1sBXIyvOeRP5wBKD9mPcKcoUXPCPsl0tQog4w==}
+
+ croact-moveable@0.9.0:
+ resolution: {integrity: sha512-fc3bieV6CdqqZFtzsSLi9KmvUMFW3oakUfhPCls1BxKjOfUfn8rktteGED2341A/Qghy8tI3Hm6SdocIc68IKg==}
+ peerDependencies:
+ croact: ^1.0.4
+
+ croact@1.0.4:
+ resolution: {integrity: sha512-9GhvyzTY/IVUrMQ2iz/mzgZ8+NcjczmIo/t4FkC1CU0CEcau6v6VsEih4jkTa4ZmRgYTF0qXEZLObCzdDFplpw==}
+
cron-validator@1.3.1:
resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==}
@@ -3155,6 +3196,12 @@ packages:
css-select@5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ css-styled@1.0.8:
+ resolution: {integrity: sha512-tCpP7kLRI8dI95rCh3Syl7I+v7PP+2JYOzWkl0bUEoSbJM+u8ITbutjlQVf0NC2/g4ULROJPi16sfwDIO8/84g==}
+
+ css-to-mat@1.1.1:
+ resolution: {integrity: sha512-kvpxFYZb27jRd2vium35G7q5XZ2WJ9rWjDUMNT36M3Hc41qCrLXFM5iEKMGXcrPsKfXEN+8l/riB4QzwwwiEyQ==}
+
css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
@@ -3790,6 +3837,9 @@ packages:
fraction.js@4.2.0:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
+ framework-utils@1.1.0:
+ resolution: {integrity: sha512-KAfqli5PwpFJ8o3psRNs8svpMGyCSAe8nmGcjQ0zZBWN2H6dZDnq+ABp3N3hdUmFeMrLtjOCTXD4yplUJIWceg==}
+
from@0.1.7:
resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
@@ -3859,6 +3909,9 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
+ gesto@1.19.4:
+ resolution: {integrity: sha512-hfr/0dWwh0Bnbb88s3QVJd1ZRJeOWcgHPPwmiH6NnafDYvhTsxg+SLYu+q/oPNh9JS3V+nlr6fNs8kvPAtcRDQ==}
+
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -3949,6 +4002,9 @@ packages:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
engines: {node: '>=6.0'}
+ gsap@3.12.5:
+ resolution: {integrity: sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==}
+
gzip-size@6.0.0:
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
engines: {node: '>=10'}
@@ -4520,6 +4576,12 @@ packages:
jwt-decode@3.1.2:
resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==}
+ keycode@2.2.1:
+ resolution: {integrity: sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==}
+
+ keycon@1.4.0:
+ resolution: {integrity: sha512-p1NAIxiRMH3jYfTeXRs2uWbVJ1WpEjpi8ktzUyBJsX7/wn2qu2VRXktneBLNtKNxJmlUYxRi9gOJt1DuthXR7A==}
+
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
@@ -4799,6 +4861,9 @@ packages:
moo@0.5.2:
resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==}
+ moveable@0.53.0:
+ resolution: {integrity: sha512-71jS9zIoQzMhnNvduhg4tUEdm23+fO/40FN7muVMbZvVwbTku2MIxxLhnU4qFvxI4oVxn75l79SbtgjuA+s7Pw==}
+
mrmime@1.0.1:
resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
engines: {node: '>=10'}
@@ -5003,6 +5068,9 @@ packages:
oui-data@1.0.10:
resolution: {integrity: sha512-PPrr40z5/MPStTTGJ0QtSD9KtaGHmnexBQWANWLWQOZZwbNMf/VyG/Uh29LwxExd51p3S323oM3kHbjRqmBiLg==}
+ overlap-area@1.1.0:
+ resolution: {integrity: sha512-3dlJgJCaVeXH0/eZjYVJvQiLVVrPO4U1ZGqlATtx6QGO3b5eNM6+JgUKa7oStBTdYuGTk7gVoABCW6Tp+dhRdw==}
+
p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
@@ -5361,9 +5429,18 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
+ react-css-styled@1.1.9:
+ resolution: {integrity: sha512-M7fJZ3IWFaIHcZEkoFOnkjdiUFmwd8d+gTh2bpqMOcnxy/0Gsykw4dsL4QBiKsxcGow6tETUa4NAUcmJF+/nfw==}
+
react-is@18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
+ react-moveable@0.56.0:
+ resolution: {integrity: sha512-FmJNmIOsOA36mdxbrc/huiE4wuXSRlmon/o+/OrfNhSiYYYL0AV5oObtPluEhb2Yr/7EfYWBHTxF5aWAvjg1SA==}
+
+ react-selecto@1.26.3:
+ resolution: {integrity: sha512-Ubik7kWSnZyQEBNro+1k38hZaI1tJarE+5aD/qsqCOA1uUBSjgKVBy3EWRzGIbdmVex7DcxznFZLec/6KZNvwQ==}
+
read-pkg-up@7.0.1:
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
engines: {node: '>=8'}
@@ -5545,6 +5622,9 @@ packages:
seemly@0.3.6:
resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==}
+ selecto@1.26.3:
+ resolution: {integrity: sha512-gZHgqMy5uyB6/2YDjv3Qqaf7bd2hTDOpPdxXlrez4R3/L0GiEWDCFaUfrflomgqdb3SxHF2IXY0Jw0EamZi7cw==}
+
semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
@@ -6338,6 +6418,9 @@ packages:
peerDependencies:
vue: ^3.0.0
+ vue-color-wheel@0.1.1:
+ resolution: {integrity: sha512-FOZztY9puZM+cVWMd9JdOMDHQKCeOoD8qUeJOeSxw4FheOXuuaKpr9Kep2qSX2gTiLEpTgwiFaUkRQnSCVInAQ==}
+
vue-demi@0.13.11:
resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
engines: {node: '>=12'}
@@ -6391,6 +6474,9 @@ packages:
vue-shadow-dom@4.2.0:
resolution: {integrity: sha512-lguI064rT2HT/dxqSmXtz860KOvCq+W3nU1jMqroTmX3K1H46q22BMR4emh/Ld3ozy35XJKOaNGcr6mkJ/t/yg==}
+ vue-sonner@1.2.5:
+ resolution: {integrity: sha512-dAFCdq2cYxEwvW4gHuJhySCXklmxOWzjl5QwkNL9IIdkqyvSkdu+YnAbnJBdIAH/zo1bhXTuGG+m0Two4AX/KA==}
+
vue-template-compiler@2.7.14:
resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
@@ -7713,6 +7799,10 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
+ '@cfcs/core@0.0.6':
+ dependencies:
+ '@egjs/component': 3.0.5
+
'@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)':
dependencies:
'@codemirror/language': 6.10.3
@@ -7788,6 +7878,18 @@ snapshots:
dependencies:
vue: 3.3.4
+ '@daybrush/utils@1.13.0': {}
+
+ '@egjs/agent@2.4.4': {}
+
+ '@egjs/children-differ@1.0.1':
+ dependencies:
+ '@egjs/list-differ': 1.0.1
+
+ '@egjs/component@3.0.5': {}
+
+ '@egjs/list-differ@1.0.1': {}
+
'@emotion/hash@0.8.0': {}
'@esbuild/android-arm64@0.18.20':
@@ -8343,6 +8445,19 @@ snapshots:
'@rushstack/eslint-patch@1.2.0': {}
+ '@scena/dragscroll@1.4.0':
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@scena/event-emitter': 1.0.5
+
+ '@scena/event-emitter@1.0.5':
+ dependencies:
+ '@daybrush/utils': 1.13.0
+
+ '@scena/matrix@1.1.1':
+ dependencies:
+ '@daybrush/utils': 1.13.0
+
'@sinclair/typebox@0.27.8': {}
'@sindresorhus/slugify@2.2.1':
@@ -9954,6 +10069,35 @@ snapshots:
crelt@1.0.6: {}
+ croact-css-styled@1.1.9:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ css-styled: 1.0.8
+ framework-utils: 1.1.0
+
+ croact-moveable@0.9.0(croact@1.0.4):
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@egjs/agent': 2.4.4
+ '@egjs/children-differ': 1.0.1
+ '@egjs/list-differ': 1.0.1
+ '@scena/dragscroll': 1.4.0
+ '@scena/event-emitter': 1.0.5
+ '@scena/matrix': 1.1.1
+ croact: 1.0.4
+ croact-css-styled: 1.1.9
+ css-to-mat: 1.1.1
+ framework-utils: 1.1.0
+ gesto: 1.19.4
+ overlap-area: 1.1.0
+ react-css-styled: 1.1.9
+ react-moveable: 0.56.0
+
+ croact@1.0.4:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@egjs/list-differ': 1.0.1
+
cron-validator@1.3.1: {}
cronstrue@2.26.0: {}
@@ -9996,6 +10140,15 @@ snapshots:
domutils: 3.1.0
nth-check: 2.1.1
+ css-styled@1.0.8:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+
+ css-to-mat@1.1.1:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@scena/matrix': 1.1.1
+
css-tree@2.2.1:
dependencies:
mdn-data: 2.0.28
@@ -10749,6 +10902,8 @@ snapshots:
fraction.js@4.2.0: {}
+ framework-utils@1.1.0: {}
+
from@0.1.7: {}
front-matter@4.0.2:
@@ -10824,6 +10979,11 @@ snapshots:
gensync@1.0.0-beta.2: {}
+ gesto@1.19.4:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@scena/event-emitter': 1.0.5
+
get-caller-file@2.0.5: {}
get-func-name@2.0.0: {}
@@ -10926,6 +11086,8 @@ snapshots:
section-matter: 1.0.0
strip-bom-string: 1.0.0
+ gsap@3.12.5: {}
+
gzip-size@6.0.0:
dependencies:
duplexer: 0.1.2
@@ -11463,6 +11625,15 @@ snapshots:
jwt-decode@3.1.2: {}
+ keycode@2.2.1: {}
+
+ keycon@1.4.0:
+ dependencies:
+ '@cfcs/core': 0.0.6
+ '@daybrush/utils': 1.13.0
+ '@scena/event-emitter': 1.0.5
+ keycode: 2.2.1
+
kind-of@6.0.3: {}
kolorist@1.8.0: {}
@@ -11756,6 +11927,14 @@ snapshots:
moo@0.5.2: {}
+ moveable@0.53.0:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@scena/event-emitter': 1.0.5
+ croact: 1.0.4
+ croact-moveable: 0.9.0(croact@1.0.4)
+ react-moveable: 0.56.0
+
mrmime@1.0.1: {}
ms@2.1.2: {}
@@ -12004,6 +12183,10 @@ snapshots:
oui-data@1.0.10: {}
+ overlap-area@1.1.0:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+
p-limit@2.3.0:
dependencies:
p-try: 2.2.0
@@ -12424,8 +12607,33 @@ snapshots:
minimist: 1.2.8
strip-json-comments: 2.0.1
+ react-css-styled@1.1.9:
+ dependencies:
+ css-styled: 1.0.8
+ framework-utils: 1.1.0
+
react-is@18.2.0: {}
+ react-moveable@0.56.0:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@egjs/agent': 2.4.4
+ '@egjs/children-differ': 1.0.1
+ '@egjs/list-differ': 1.0.1
+ '@scena/dragscroll': 1.4.0
+ '@scena/event-emitter': 1.0.5
+ '@scena/matrix': 1.1.1
+ css-to-mat: 1.1.1
+ framework-utils: 1.1.0
+ gesto: 1.19.4
+ overlap-area: 1.1.0
+ react-css-styled: 1.1.9
+ react-selecto: 1.26.3
+
+ react-selecto@1.26.3:
+ dependencies:
+ selecto: 1.26.3
+
read-pkg-up@7.0.1:
dependencies:
find-up: 4.1.0
@@ -12617,6 +12825,19 @@ snapshots:
seemly@0.3.6: {}
+ selecto@1.26.3:
+ dependencies:
+ '@daybrush/utils': 1.13.0
+ '@egjs/children-differ': 1.0.1
+ '@scena/dragscroll': 1.4.0
+ '@scena/event-emitter': 1.0.5
+ css-styled: 1.0.8
+ css-to-mat: 1.1.1
+ framework-utils: 1.1.0
+ gesto: 1.19.4
+ keycon: 1.4.0
+ overlap-area: 1.1.0
+
semver@5.7.2: {}
semver@6.3.1: {}
@@ -13579,6 +13800,13 @@ snapshots:
evtd: 0.2.4
vue: 3.3.4
+ vue-color-wheel@0.1.1:
+ dependencies:
+ colord: 2.9.3
+ gsap: 3.12.5
+ moveable: 0.53.0
+ vue-sonner: 1.2.5
+
vue-demi@0.13.11(vue@3.3.4):
dependencies:
vue: 3.3.4
@@ -13618,6 +13846,8 @@ snapshots:
vue-shadow-dom@4.2.0: {}
+ vue-sonner@1.2.5: {}
+
vue-template-compiler@2.7.14:
dependencies:
de-indent: 1.0.2
diff --git a/src/tools/color-wheel/color-wheel.vue b/src/tools/color-wheel/color-wheel.vue
new file mode 100644
index 00000000..930b617d
--- /dev/null
+++ b/src/tools/color-wheel/color-wheel.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tools/color-wheel/index.ts b/src/tools/color-wheel/index.ts
new file mode 100644
index 00000000..6548c119
--- /dev/null
+++ b/src/tools/color-wheel/index.ts
@@ -0,0 +1,12 @@
+import { ColorPicker } from '@vicons/tabler';
+import { defineTool } from '../tool';
+
+export const tool = defineTool({
+ name: 'Color Wheel',
+ path: '/color-wheel',
+ description: 'Choose a color palette/theme using a wheel and mode',
+ keywords: ['color', 'wheel', 'palette', 'theme'],
+ component: () => import('./color-wheel.vue'),
+ icon: ColorPicker,
+ createdAt: new Date('2024-08-15'),
+});
diff --git a/src/tools/index.ts b/src/tools/index.ts
index f45cb940..0f807965 100644
--- a/src/tools/index.ts
+++ b/src/tools/index.ts
@@ -14,6 +14,7 @@ import { tool as peerShare } from './peer-share';
import { tool as macAddressConverter } from './mac-address-converter';
import { tool as jsUnobfuscator } from './js-unobfuscator';
import { tool as extractTextFromHtml } from './extract-text-from-html';
+import { tool as colorWheel } from './color-wheel';
import { tool as asciiTextDrawer } from './ascii-text-drawer';
import { tool as textToUnicode } from './text-to-unicode';
@@ -183,6 +184,7 @@ export const toolsByCategory: ToolCategory[] = [
apiTester,
jsUnobfuscator,
imageToCss,
+ colorWheel,
],
},
{