diff --git a/.gitignore b/.gitignore
index f748de4..741905c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,6 @@ stats.html
# Misc
.DS_Store
+
+# Varlet Iconx
+virtual.icons.css
diff --git a/README.md b/README.md
index cb96904..713dddc 100644
--- a/README.md
+++ b/README.md
@@ -80,6 +80,7 @@ An mobile web apps template based on the Vue 3 ecosystem.
- [Varlet](https://github.com/varletjs/varlet) - Material design mobile component library developed based on Vue3
- [`@varlet/touch-emulator`](https://github.com/varletjs/varlet/tree/dev/packages/varlet-touch-emulator) - Simulate mobile touch events on the desktop
- [`@varlet/preset-unocss`](https://github.com/varletjs/varlet/tree/dev/packages/varlet-preset-unocss) - CSS atomic framework presets
+ - [`@varlet/unplugin-icon-builder`](https://github.com/varletjs/varlet-iconx) - A collection of tools that provide icon solutions for varlet
### Plugins
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 9df5c83..b4ef8dc 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -80,6 +80,7 @@ An mobile web apps template based on the Vue 3 ecosystem.
- [Varlet](https://github.com/varletjs/varlet) - 基于 Vue3 开发的 Material 风格移动端组件库
- [`@varlet/touch-emulator`](https://github.com/varletjs/varlet/tree/dev/packages/varlet-touch-emulator) - 在桌面端上模拟移动端 touch 事件
- [`@varlet/preset-unocss`](https://github.com/varletjs/varlet/tree/dev/packages/varlet-preset-unocss) - 原子化 CSS 支持
+ - [`@varlet/unplugin-icon-builder`](https://github.com/varletjs/varlet-iconx) - 为 Varlet 提供图标解决方案的工具集合
### 插件
diff --git a/build/vite/index.ts b/build/vite/index.ts
index 676ab41..bc18289 100644
--- a/build/vite/index.ts
+++ b/build/vite/index.ts
@@ -14,6 +14,7 @@ import Sitemap from 'vite-plugin-sitemap'
import VueDevTools from 'vite-plugin-vue-devtools'
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
import { VarletImportResolver } from '@varlet/import-resolver'
+import icon from '@varlet/unplugin-icon-builder/vite'
import { createViteVConsole } from './vconsole'
export function createVitePlugins() {
@@ -77,6 +78,9 @@ export function createVitePlugins() {
targets: ['defaults', 'not IE 11'],
}),
+ // https://varlet.pages.dev/#/zh-CN/icon
+ icon({ dir: 'src/assets/icons', onDemand: true }),
+
// https://github.com/antfu/unocss
// see uno.config.ts for config
UnoCSS(),
diff --git a/package.json b/package.json
index 40e07c3..b70687c 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "vue3-varlet-mobile",
"type": "module",
"version": "1.0.0",
- "packageManager": "pnpm@9.1.2",
+ "packageManager": "pnpm@9.1.3",
"description": "Vue + Vite H5 Starter Template",
"license": "MIT",
"scripts": {
@@ -46,6 +46,7 @@
"@unocss/preset-rem-to-px": "0.60.3",
"@varlet/import-resolver": "^3.2.10",
"@varlet/preset-unocss": "^3.2.10",
+ "@varlet/unplugin-icon-builder": "^0.2.27",
"@vitejs/plugin-legacy": "^5.4.0",
"@vitejs/plugin-vue": "^5.0.4",
"autoprefixer": "^10.4.19",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f994c28..eb70690 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -90,6 +90,9 @@ importers:
'@varlet/preset-unocss':
specifier: ^3.2.10
version: 3.2.10(unocss@0.60.3(postcss@8.4.38)(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(terser@5.31.0)))
+ '@varlet/unplugin-icon-builder':
+ specifier: ^0.2.27
+ version: 0.2.27(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))
'@vitejs/plugin-legacy':
specifier: ^5.4.0
version: 5.4.0(terser@5.31.0)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(terser@5.31.0))
@@ -1535,6 +1538,15 @@ packages:
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
+ '@varlet/axle@0.7.1':
+ resolution: {integrity: sha512-9WSIagplJPNJBBsurUYWGyNthX+wkRsoKQCEbe1fnCx904O6hq/5ymPIS6X6T4VTYsBsnGAAt05///RxO2R3TQ==}
+ peerDependencies:
+ vue: ^3.2.0
+
+ '@varlet/icon-builder@0.2.27':
+ resolution: {integrity: sha512-fTgsx8fTq5kHmdQnIcfwO5GvTOubKLUwkixuRxJEBN/kkPOxwp0vNUrwZ+V5TUk4rEt8qn3wp3/pGLWlqi5t2Q==}
+ hasBin: true
+
'@varlet/icons@3.2.10':
resolution: {integrity: sha512-xpYs+M5yRcFZkM8F54mYaVH4R+z9wnVXTuFi/1uyGsJ6eaUphDdgofvxV8tCIh1IGfQ617di3MQ5gTrrHXP0dQ==}
@@ -1546,9 +1558,15 @@ packages:
peerDependencies:
unocss: ^0.58.5
+ '@varlet/shared@2.20.3':
+ resolution: {integrity: sha512-MgLDRYfrGgKqu8Vg2kfRVRGRZE2d8CH0f75vph5h4AG+Clm+A7FgUZLaVTriMWuS6wXrrrceSgX5kNmb/lFShQ==}
+
'@varlet/shared@3.2.10':
resolution: {integrity: sha512-RBYOTRSNUtde34X+rk35Ujr7XDpnP74ci+brg4DIvLgHdgu47vPHgaHfFmg7WEIBRnB/Ppc44b5lVNNjKX8cwA==}
+ '@varlet/shared@3.2.11-alpha.1716133168406':
+ resolution: {integrity: sha512-tE7sALvgVocEm8Yk0W424tdbstxoWWp0UR5Ne8Kn5WvilndhdxOONkYsUoVMyeq2/kAX+2nKTnrYx90wsE365Q==}
+
'@varlet/touch-emulator@3.2.10':
resolution: {integrity: sha512-vEOkk48trTa1AlCvMMKRhVPmuq8QIUMfyd9UBiEqR+vO2KmG8LJkkQlYbpR5ebKQwvOJwFc2b/TDGa/A4uBAKg==}
@@ -1557,11 +1575,26 @@ packages:
peerDependencies:
vue: ^3.2.0
+ '@varlet/unplugin-icon-builder@0.2.27':
+ resolution: {integrity: sha512-w82NBWG7dPlJRaPhe0SD/qZRQs91nG8GeuuHT9SdzpSeGiO7tp4aG9YFgXbLyKlRzLXCtf71jGK9F81sWeIYIg==}
+ peerDependencies:
+ rollup: ^3
+ vite: '>=3'
+ webpack: ^4 || ^5
+ peerDependenciesMeta:
+ vite:
+ optional: true
+ webpack:
+ optional: true
+
'@varlet/use@3.2.10':
resolution: {integrity: sha512-vQejt+kMSgGfsAJQDRa0zZtwj1F0YWNVyQR2cx+8qiqZM5V9xF82F6QWtlT3rGmMNvyqgE4fGebWdVaQm1M6vw==}
peerDependencies:
vue: ^3.2.0
+ '@varlet/webfont@0.0.9':
+ resolution: {integrity: sha512-CIDVrfyzKC20D/ig4lQKXGcKwRlvtgzi/Hzb7YkOBMx4EwwHlGcRRAVBzzDNkFBFtSNUa+IwScvLim8UlcoipQ==}
+
'@vitejs/plugin-legacy@5.4.0':
resolution: {integrity: sha512-Z7o44IbOIir/appjqtVzxnmLeGD8DjWGNm48lfPWZn4hxjzUjTkMX7BDwncpauWAQ/0VIz6uPeMHl3Za0Rw7wA==}
engines: {node: ^18.0.0 || >=20.0.0}
@@ -1685,6 +1718,10 @@ packages:
'@vueuse/shared@10.9.0':
resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==}
+ '@xmldom/xmldom@0.7.13':
+ resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==}
+ engines: {node: '>=10.0.0'}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -1950,6 +1987,10 @@ packages:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
commander@12.1.0:
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
engines: {node: '>=18'}
@@ -1957,6 +1998,10 @@ packages:
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
comment-parser@1.4.1:
resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
engines: {node: '>= 12.0.0'}
@@ -1998,6 +2043,9 @@ packages:
core-js@3.37.1:
resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==}
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
cors@2.8.5:
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
engines: {node: '>= 0.10'}
@@ -2011,6 +2059,9 @@ packages:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
+ crypto-js@4.2.0:
+ resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
+
crypto-random-string@2.0.0:
resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
engines: {node: '>=8'}
@@ -2027,6 +2078,9 @@ packages:
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ cubic2quad@1.2.1:
+ resolution: {integrity: sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==}
+
data-view-buffer@1.0.1:
resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
engines: {node: '>= 0.4'}
@@ -2560,6 +2614,9 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
+ geometry-interfaces@1.1.4:
+ resolution: {integrity: sha512-qD6OdkT6NcES9l4Xx3auTpwraQruU7dARbQPVO71MKvkGYw5/z/oIiGymuFXrRaEQa5Y67EIojUpaLeGEa5hGA==}
+
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -2603,6 +2660,7 @@ packages:
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
@@ -2751,6 +2809,7 @@ packages:
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -2895,6 +2954,9 @@ packages:
resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
engines: {node: '>=16'}
+ isarray@0.0.1:
+ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
+
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -3081,6 +3143,9 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ microbuffer@1.0.0:
+ resolution: {integrity: sha512-O/SUXauVN4x6RaEJFqSPcXNtLFL+QzJHKZlyDVYFwcDDRVca3Fa/37QXXC+4zAGGa4YhHrHxKXuuHvLDIQECtA==}
+
micromark@2.11.4:
resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
@@ -3178,6 +3243,9 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ neatequal@1.0.0:
+ resolution: {integrity: sha512-sVt5awO4a4w24QmAthdrCPiVRW3naB8FGLdyadin01BH+6BzNPEBwGrpwCczQvPlULS6uXTItTe1PJ5P0kYm7A==}
+
needle@3.3.1:
resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
engines: {node: '>= 4.4.x'}
@@ -3478,6 +3546,13 @@ packages:
resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
engines: {node: '>=8'}
+ readable-stream@1.1.14:
+ resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@@ -3730,6 +3805,12 @@ packages:
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
engines: {node: '>= 0.4'}
+ string_decoder@0.10.31:
+ resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
stringify-object@3.3.0:
resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
engines: {node: '>=4'}
@@ -3776,9 +3857,25 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ svg-pathdata@6.0.3:
+ resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==}
+ engines: {node: '>=12.0.0'}
+
svg-tags@1.0.0:
resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+ svg2ttf@6.0.3:
+ resolution: {integrity: sha512-CgqMyZrbOPpc+WqH7aga4JWkDPso23EgypLsbQ6gN3uoPWwwiLjXvzgrwGADBExvCRJrWFzAeK1bSoSpE7ixSQ==}
+ hasBin: true
+
+ svgicons2svgfont@10.0.6:
+ resolution: {integrity: sha512-fUgQEVg3XwTbOHvlXahHGqCet5Wvfo1bV4DCvbSRvjsOCPCRunYbG4dUJCPegps37BMph3eOrfoobhH5AWuC6A==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
+ svgpath@2.6.0:
+ resolution: {integrity: sha512-OIWR6bKzXvdXYyO4DK/UWa1VA1JeKq8E+0ug2DG98Y/vOmMpfZNj+TIG988HjfYSqtcy/hFOtZq/n/j5GSESNg==}
+
synckit@0.6.2:
resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==}
engines: {node: '>=12.20'}
@@ -4039,6 +4136,11 @@ packages:
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ varstream@0.3.2:
+ resolution: {integrity: sha512-OpR3Usr9dGZZbDttlTxdviGdxiURI0prX68+DuaN/JfIDbK9ZOmREKM6PgmelsejMnhgjXmEEEgf+E4NbsSqMg==}
+ engines: {node: '>=0.10.*'}
+ hasBin: true
+
vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -4305,6 +4407,14 @@ packages:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
+ xml2js@0.4.23:
+ resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==}
+ engines: {node: '>=4.0.0'}
+
+ xmlbuilder@11.0.1:
+ resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
+ engines: {node: '>=4.0'}
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -5895,6 +6005,32 @@ snapshots:
transitivePeerDependencies:
- rollup
+ '@varlet/axle@0.7.1(vue@3.4.27(typescript@5.4.5))':
+ dependencies:
+ '@varlet/shared': 2.20.3
+ axios: 1.7.2
+ crypto-js: 4.2.0
+ lodash: 4.17.21
+ minimatch: 9.0.4
+ qs: 6.12.1
+ vue: 3.4.27(typescript@5.4.5)
+ transitivePeerDependencies:
+ - debug
+
+ '@varlet/icon-builder@0.2.27(vue@3.4.27(typescript@5.4.5))':
+ dependencies:
+ '@varlet/axle': 0.7.1(vue@3.4.27(typescript@5.4.5))
+ '@varlet/shared': 3.2.10
+ '@varlet/webfont': 0.0.9
+ chokidar: 3.6.0
+ commander: 11.1.0
+ fs-extra: 11.2.0
+ picocolors: 1.0.1
+ unconfig: 0.3.13
+ transitivePeerDependencies:
+ - debug
+ - vue
+
'@varlet/icons@3.2.10': {}
'@varlet/import-resolver@3.2.10':
@@ -5905,8 +6041,12 @@ snapshots:
dependencies:
unocss: 0.60.3(postcss@8.4.38)(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(terser@5.31.0))
+ '@varlet/shared@2.20.3': {}
+
'@varlet/shared@3.2.10': {}
+ '@varlet/shared@3.2.11-alpha.1716133168406': {}
+
'@varlet/touch-emulator@3.2.10': {}
'@varlet/ui@3.2.10(vue@3.4.27(typescript@5.4.5))':
@@ -5919,11 +6059,36 @@ snapshots:
decimal.js: 10.4.3
vue: 3.4.27(typescript@5.4.5)
+ '@varlet/unplugin-icon-builder@0.2.27(rollup@4.18.0)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))':
+ dependencies:
+ '@varlet/icon-builder': 0.2.27(vue@3.4.27(typescript@5.4.5))
+ '@varlet/shared': 3.2.11-alpha.1716133168406
+ chokidar: 3.6.0
+ fast-glob: 3.3.2
+ fs-extra: 11.2.0
+ rollup: 4.18.0
+ unplugin: 1.10.1
+ optionalDependencies:
+ vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(terser@5.31.0)
+ transitivePeerDependencies:
+ - debug
+ - vue
+
'@varlet/use@3.2.10(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@varlet/shared': 3.2.10
vue: 3.4.27(typescript@5.4.5)
+ '@varlet/webfont@0.0.9':
+ dependencies:
+ '@varlet/shared': 3.2.10
+ fs-extra: 11.2.0
+ globby: 11.1.0
+ p-limit: 3.1.0
+ svg2ttf: 6.0.3
+ svgicons2svgfont: 10.0.6
+ xml2js: 0.4.23
+
'@vitejs/plugin-legacy@5.4.0(terser@5.31.0)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(terser@5.31.0))':
dependencies:
'@babel/core': 7.24.5
@@ -6139,6 +6304,8 @@ snapshots:
- '@vue/composition-api'
- vue
+ '@xmldom/xmldom@0.7.13': {}
+
acorn-jsx@5.3.2(acorn@8.11.3):
dependencies:
acorn: 8.11.3
@@ -6442,10 +6609,14 @@ snapshots:
dependencies:
delayed-stream: 1.0.0
+ commander@11.1.0: {}
+
commander@12.1.0: {}
commander@2.20.3: {}
+ commander@7.2.0: {}
+
comment-parser@1.4.1: {}
common-tags@1.8.2: {}
@@ -6477,6 +6648,8 @@ snapshots:
core-js@3.37.1: {}
+ core-util-is@1.0.3: {}
+
cors@2.8.5:
dependencies:
object-assign: 4.1.1
@@ -6492,6 +6665,8 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
+ crypto-js@4.2.0: {}
+
crypto-random-string@2.0.0: {}
css-tree@2.3.1:
@@ -6503,6 +6678,8 @@ snapshots:
csstype@3.1.3: {}
+ cubic2quad@1.2.1: {}
+
data-view-buffer@1.0.1:
dependencies:
call-bind: 1.0.7
@@ -7200,6 +7377,8 @@ snapshots:
gensync@1.0.0-beta.2: {}
+ geometry-interfaces@1.1.4: {}
+
get-caller-file@2.0.5: {}
get-func-name@2.0.2: {}
@@ -7504,6 +7683,8 @@ snapshots:
dependencies:
is-inside-container: 1.0.0
+ isarray@0.0.1: {}
+
isarray@2.0.5: {}
isexe@2.0.0: {}
@@ -7674,6 +7855,8 @@ snapshots:
merge2@1.4.1: {}
+ microbuffer@1.0.0: {}
+
micromark@2.11.4:
dependencies:
debug: 4.3.4
@@ -7755,6 +7938,10 @@ snapshots:
natural-compare@1.4.0: {}
+ neatequal@1.0.0:
+ dependencies:
+ varstream: 0.3.2
+
needle@3.3.1:
dependencies:
iconv-lite: 0.6.3
@@ -8040,6 +8227,19 @@ snapshots:
parse-json: 5.2.0
type-fest: 0.6.0
+ readable-stream@1.1.14:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 0.0.1
+ string_decoder: 0.10.31
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
@@ -8160,8 +8360,7 @@ snapshots:
safer-buffer@2.1.2: {}
- sax@1.3.0:
- optional: true
+ sax@1.3.0: {}
scslre@0.3.0:
dependencies:
@@ -8316,6 +8515,12 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.0.0
+ string_decoder@0.10.31: {}
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
stringify-object@3.3.0:
dependencies:
get-own-enumerable-property-symbols: 3.0.2
@@ -8356,8 +8561,31 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ svg-pathdata@6.0.3: {}
+
svg-tags@1.0.0: {}
+ svg2ttf@6.0.3:
+ dependencies:
+ '@xmldom/xmldom': 0.7.13
+ argparse: 2.0.1
+ cubic2quad: 1.2.1
+ lodash: 4.17.21
+ microbuffer: 1.0.0
+ svgpath: 2.6.0
+
+ svgicons2svgfont@10.0.6:
+ dependencies:
+ commander: 7.2.0
+ geometry-interfaces: 1.1.4
+ glob: 7.2.3
+ neatequal: 1.0.0
+ readable-stream: 3.6.2
+ sax: 1.3.0
+ svg-pathdata: 6.0.3
+
+ svgpath@2.6.0: {}
+
synckit@0.6.2:
dependencies:
tslib: 2.6.2
@@ -8669,6 +8897,10 @@ snapshots:
spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
+ varstream@0.3.2:
+ dependencies:
+ readable-stream: 1.1.14
+
vary@1.1.2: {}
vconsole@3.15.1:
@@ -9046,6 +9278,13 @@ snapshots:
xml-name-validator@4.0.0: {}
+ xml2js@0.4.23:
+ dependencies:
+ sax: 1.3.0
+ xmlbuilder: 11.0.1
+
+ xmlbuilder@11.0.1: {}
+
y18n@5.0.8: {}
yallist@3.1.1: {}
diff --git a/src/assets/icons/border-radius.svg b/src/assets/icons/border-radius.svg
new file mode 100644
index 0000000..7faf0a5
--- /dev/null
+++ b/src/assets/icons/border-radius.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/env.d.ts b/src/env.d.ts
index 058e692..f8411d1 100644
--- a/src/env.d.ts
+++ b/src/env.d.ts
@@ -1,5 +1,7 @@
///
+declare module 'virtual-icons' {}
+
declare module '*.vue' {
import type { DefineComponent } from 'vue'
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index 9c0f174..615390f 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -13,7 +13,8 @@
"echartsDemo": "📊 Echarts Demo",
"persistPiniaState": "🍍 Persistent Pinia state",
"unocssExample": "🎨 Unocss example",
- "keepAlive": "🧡 KeepAlive Demo"
+ "keepAlive": "🧡 KeepAlive Demo",
+ "iconx": "🎉 Iconx example"
},
"mock": {
"fromAsyncData": "Data from asynchronous requests",
diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json
index 6fe61f0..33d0266 100644
--- a/src/locales/zh-CN.json
+++ b/src/locales/zh-CN.json
@@ -13,7 +13,8 @@
"persistPiniaState": "🍍 持久化 Pinia 状态",
"404Demo": "🙅 404页 演示",
"unocssExample": "🎨 Unocss 示例",
- "keepAlive": "🧡 KeepAlive 演示"
+ "keepAlive": "🧡 KeepAlive 演示",
+ "iconx": "🎉 Iconx 示例"
},
"mock": {
"fromAsyncData": "来自异步请求的数据",
diff --git a/src/main.ts b/src/main.ts
index d129648..de4aadb 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -3,10 +3,12 @@ import { createHead } from '@unhead/vue'
import App from '@/App.vue'
import router from '@/router'
import pinia from '@/stores'
-import 'virtual:uno.css'
-import '@/styles/app.less'
import { i18n } from '@/utils/i18n'
+import '@/styles/app.less'
+import 'virtual:uno.css'
+import 'virtual-icons'
+
// Varlet Desktop adaptation
import '@varlet/touch-emulator'
diff --git a/src/pages/iconx/index.vue b/src/pages/iconx/index.vue
new file mode 100644
index 0000000..62f949d
--- /dev/null
+++ b/src/pages/iconx/index.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/index.vue b/src/pages/index.vue
index 57048c8..2dce4e2 100644
--- a/src/pages/index.vue
+++ b/src/pages/index.vue
@@ -50,6 +50,7 @@ const menus = computed(() => ([
{ title: t('home.persistPiniaState'), router: 'counter' },
{ title: t('home.unocssExample'), router: 'unocss' },
{ title: t('home.keepAlive'), router: 'keepalive' },
+ { title: t('home.iconx'), router: 'iconx' },
{ title: t('home.404Demo'), router: 'unknown' },
]))
diff --git a/src/typed-router.d.ts b/src/typed-router.d.ts
index 59cec99..56e7ef5 100644
--- a/src/typed-router.d.ts
+++ b/src/typed-router.d.ts
@@ -22,6 +22,7 @@ declare module 'vue-router/auto-routes' {
'/[...all]': RouteRecordInfo<'/[...all]', '/:all(.*)', { all: ParamValue }, { all: ParamValue }>,
'charts': RouteRecordInfo<'charts', '/charts', Record, Record>,
'counter': RouteRecordInfo<'counter', '/counter', Record, Record>,
+ 'iconx': RouteRecordInfo<'iconx', '/iconx', Record, Record>,
'Keepalive': RouteRecordInfo<'Keepalive', '/keepalive', Record, Record>,
'mock': RouteRecordInfo<'mock', '/mock', Record, Record>,
'profile': RouteRecordInfo<'profile', '/profile', Record, Record>,