aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.changeset/rude-foxes-attack.md5
-rw-r--r--.github/workflows/node.yml2
-rw-r--r--README.md5
-rw-r--r--eslint.config.mjs10
-rw-r--r--pnpm-lock.yaml346
-rw-r--r--src/packages/eslint-config/eslint.library.config.d.ts2
-rw-r--r--src/packages/typescript-config/base.json12
-rw-r--r--src/packages/vue/.gitignore24
-rw-r--r--src/packages/vue/README.md5
-rw-r--r--src/packages/vue/eslint.config.mjs11
-rw-r--r--src/packages/vue/index.html13
-rw-r--r--src/packages/vue/package.json55
-rw-r--r--src/packages/vue/src/components/Locusts.vue6
-rw-r--r--src/packages/vue/src/index.ts3
-rw-r--r--src/packages/vue/src/vite-env.d.ts1
-rw-r--r--src/packages/vue/tsconfig.json19
-rw-r--r--src/packages/vue/vite.config.ts23
17 files changed, 517 insertions, 25 deletions
diff --git a/.changeset/rude-foxes-attack.md b/.changeset/rude-foxes-attack.md
new file mode 100644
index 0000000..914a176
--- /dev/null
+++ b/.changeset/rude-foxes-attack.md
@@ -0,0 +1,5 @@
+---
+"@locusts/vue": major
+---
+
+feat: Add Vue
diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
index 14bb851..066986f 100644
--- a/.github/workflows/node.yml
+++ b/.github/workflows/node.yml
@@ -48,6 +48,6 @@ jobs:
node-version: "latest"
cache: "pnpm"
- name: Check formatting
- run: pnpm ci:format
+ run: pnpm lint
- name: Build and Test
run: pnpm build && pnpm test
diff --git a/README.md b/README.md
index 8c796b9..cf19103 100644
--- a/README.md
+++ b/README.md
@@ -40,6 +40,11 @@ We here at Locusts-R-Us have developed a series of libraries for all sorts of pr
It's funny.
+### Why did you decide to use a monorepo for absolutely everything?
+
+At this point, I do not know anymore. It was probably a mistake.
+Too late to change it now.
+
### Do any of these libraries serve any purpose?
No.
diff --git a/eslint.config.mjs b/eslint.config.mjs
index fceabb0..8c293ba 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -1,7 +1,3 @@
-export default {
- languageOptions: {
- parserOptions: {
- project: true,
- },
- },
-};
+import library from "@repo/eslint-config/eslint.library.config.js";
+
+export default [...library];
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a4fbade..79d3655 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -134,6 +134,37 @@ importers:
src/packages/typescript-config: {}
+ src/packages/vue:
+ dependencies:
+ vue:
+ specifier: ^3.0.0
+ version: 3.5.12(typescript@5.6.3)
+ devDependencies:
+ '@repo/eslint-config':
+ specifier: workspace:*
+ version: link:../eslint-config
+ '@repo/typescript-config':
+ specifier: workspace:*
+ version: link:../typescript-config
+ '@vitejs/plugin-vue':
+ specifier: ^5.1.4
+ version: 5.1.4(vite@5.4.10(@types/node@22.8.4))(vue@3.5.12(typescript@5.6.3))
+ eslint-plugin-vue:
+ specifier: ^9.30.0
+ version: 9.30.0(eslint@9.13.0)
+ publint:
+ specifier: ^0.2.0
+ version: 0.2.12
+ typescript:
+ specifier: ^5.6.3
+ version: 5.6.3
+ vite:
+ specifier: ^5.4.10
+ version: 5.4.10(@types/node@22.8.4)
+ vue-tsc:
+ specifier: ^2.1.8
+ version: 2.1.10(typescript@5.6.3)
+
packages:
'@ampproject/remapping@2.3.0':
@@ -1145,6 +1176,13 @@ packages:
typescript:
optional: true
+ '@vitejs/plugin-vue@5.1.4':
+ resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0
+ vue: ^3.2.25
+
'@vitest/expect@2.1.4':
resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==}
@@ -1174,6 +1212,55 @@ packages:
'@vitest/utils@2.1.4':
resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==}
+ '@volar/language-core@2.4.8':
+ resolution: {integrity: sha512-K/GxMOXGq997bO00cdFhTNuR85xPxj0BEEAy+BaqqayTmy9Tmhfgmq2wpJcVspRhcwfgPoE2/mEJa26emUhG/g==}
+
+ '@volar/source-map@2.4.8':
+ resolution: {integrity: sha512-jeWJBkC/WivdelMwxKkpFL811uH/jJ1kVxa+c7OvG48DXc3VrP7pplSWPP2W1dLMqBxD+awRlg55FQQfiup4cA==}
+
+ '@volar/typescript@2.4.8':
+ resolution: {integrity: sha512-6xkIYJ5xxghVBhVywMoPMidDDAFT1OoQeXwa27HSgJ6AiIKRe61RXLoik+14Z7r0JvnblXVsjsRLmCr42SGzqg==}
+
+ '@vue/compiler-core@3.5.12':
+ resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==}
+
+ '@vue/compiler-dom@3.5.12':
+ resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==}
+
+ '@vue/compiler-sfc@3.5.12':
+ resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==}
+
+ '@vue/compiler-ssr@3.5.12':
+ resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==}
+
+ '@vue/compiler-vue2@2.7.16':
+ resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+
+ '@vue/language-core@2.1.10':
+ resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@vue/reactivity@3.5.12':
+ resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==}
+
+ '@vue/runtime-core@3.5.12':
+ resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==}
+
+ '@vue/runtime-dom@3.5.12':
+ resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==}
+
+ '@vue/server-renderer@3.5.12':
+ resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==}
+ peerDependencies:
+ vue: 3.5.12
+
+ '@vue/shared@3.5.12':
+ resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -1197,6 +1284,9 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ alien-signals@0.2.0:
+ resolution: {integrity: sha512-StlonZhBBrsPPwrDjiPAiVTf/rolxffLxVPT60Qv/t88BZ81BvUVzHgGqEFvJ1ii8HXtm1+zU2Icr59tfWEcag==}
+
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -1299,6 +1389,9 @@ packages:
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
engines: {node: '>=4'}
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
@@ -1449,6 +1542,9 @@ packages:
engines: {node: '>=4'}
hasBin: true
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
@@ -1464,6 +1560,9 @@ packages:
resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
engines: {node: '>= 0.4'}
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
@@ -1560,6 +1659,10 @@ packages:
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
@@ -1792,6 +1895,12 @@ packages:
vitest:
optional: true
+ eslint-plugin-vue@9.30.0:
+ resolution: {integrity: sha512-CyqlRgShvljFkOeYK8wN5frh/OGTvkj1S7wlr2Q2pUvwq+X5VYiLd6ZjujpgSgLnys2W8qrBLkXQ41SUYaoPIQ==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
+
eslint-scope@5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
@@ -1861,6 +1970,9 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
@@ -2083,6 +2195,10 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
@@ -2408,6 +2524,9 @@ packages:
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
log-symbols@6.0.0:
resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
engines: {node: '>=18'}
@@ -2479,6 +2598,9 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ muggle-string@0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
@@ -2516,6 +2638,9 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
hasBin: true
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -2619,6 +2744,9 @@ packages:
pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3411,6 +3539,29 @@ packages:
jsdom:
optional: true
+ vscode-uri@3.0.8:
+ resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
+
+ vue-eslint-parser@9.4.3:
+ resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+
+ vue-tsc@2.1.10:
+ resolution: {integrity: sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.0.0'
+
+ vue@3.5.12:
+ resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
webidl-conversions@4.0.2:
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
@@ -3461,6 +3612,10 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ xml-name-validator@4.0.0:
+ resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
+ engines: {node: '>=12'}
+
yallist@2.1.2:
resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
@@ -4458,10 +4613,10 @@ snapshots:
'@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3)
'@typescript-eslint/parser': 7.18.0(eslint@9.13.0)(typescript@5.6.3)
eslint-config-prettier: 9.1.0(eslint@9.13.0)
- eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0))
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0)(eslint@9.13.0)
eslint-plugin-eslint-comments: 3.2.0(eslint@9.13.0)
- eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)
eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3)
eslint-plugin-jsx-a11y: 6.10.0(eslint@9.13.0)
eslint-plugin-playwright: 1.6.2(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)
@@ -4484,6 +4639,11 @@ snapshots:
- supports-color
- vitest
+ '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@22.8.4))(vue@3.5.12(typescript@5.6.3))':
+ dependencies:
+ vite: 5.4.10(@types/node@22.8.4)
+ vue: 3.5.12(typescript@5.6.3)
+
'@vitest/expect@2.1.4':
dependencies:
'@vitest/spy': 2.1.4
@@ -4524,6 +4684,90 @@ snapshots:
loupe: 3.1.2
tinyrainbow: 1.2.0
+ '@volar/language-core@2.4.8':
+ dependencies:
+ '@volar/source-map': 2.4.8
+
+ '@volar/source-map@2.4.8': {}
+
+ '@volar/typescript@2.4.8':
+ dependencies:
+ '@volar/language-core': 2.4.8
+ path-browserify: 1.0.1
+ vscode-uri: 3.0.8
+
+ '@vue/compiler-core@3.5.12':
+ dependencies:
+ '@babel/parser': 7.25.6
+ '@vue/shared': 3.5.12
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.12':
+ dependencies:
+ '@vue/compiler-core': 3.5.12
+ '@vue/shared': 3.5.12
+
+ '@vue/compiler-sfc@3.5.12':
+ dependencies:
+ '@babel/parser': 7.25.6
+ '@vue/compiler-core': 3.5.12
+ '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-ssr': 3.5.12
+ '@vue/shared': 3.5.12
+ estree-walker: 2.0.2
+ magic-string: 0.30.12
+ postcss: 8.4.47
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.12':
+ dependencies:
+ '@vue/compiler-dom': 3.5.12
+ '@vue/shared': 3.5.12
+
+ '@vue/compiler-vue2@2.7.16':
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
+ '@vue/language-core@2.1.10(typescript@5.6.3)':
+ dependencies:
+ '@volar/language-core': 2.4.8
+ '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-vue2': 2.7.16
+ '@vue/shared': 3.5.12
+ alien-signals: 0.2.0
+ minimatch: 9.0.5
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ optionalDependencies:
+ typescript: 5.6.3
+
+ '@vue/reactivity@3.5.12':
+ dependencies:
+ '@vue/shared': 3.5.12
+
+ '@vue/runtime-core@3.5.12':
+ dependencies:
+ '@vue/reactivity': 3.5.12
+ '@vue/shared': 3.5.12
+
+ '@vue/runtime-dom@3.5.12':
+ dependencies:
+ '@vue/reactivity': 3.5.12
+ '@vue/runtime-core': 3.5.12
+ '@vue/shared': 3.5.12
+ csstype: 3.1.3
+
+ '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.12
+ '@vue/shared': 3.5.12
+ vue: 3.5.12(typescript@5.6.3)
+
+ '@vue/shared@3.5.12': {}
+
acorn-jsx@5.3.2(acorn@8.12.1):
dependencies:
acorn: 8.12.1
@@ -4547,6 +4791,8 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ alien-signals@0.2.0: {}
+
ansi-colors@4.1.3: {}
ansi-regex@5.0.1: {}
@@ -4662,6 +4908,8 @@ snapshots:
dependencies:
is-windows: 1.0.2
+ boolbase@1.0.0: {}
+
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
@@ -4801,6 +5049,8 @@ snapshots:
cssesc@3.0.0: {}
+ csstype@3.1.3: {}
+
damerau-levenshtein@1.0.8: {}
data-view-buffer@1.0.1:
@@ -4821,6 +5071,8 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.1
+ de-indent@1.0.2: {}
+
debug@3.2.7:
dependencies:
ms: 2.1.3
@@ -4910,6 +5162,8 @@ snapshots:
ansi-colors: 4.1.3
strip-ansi: 6.0.1
+ entities@4.5.0: {}
+
env-paths@2.2.1: {}
error-ex@1.3.2:
@@ -5120,9 +5374,9 @@ snapshots:
eslint: 9.13.0
eslint-plugin-turbo: 2.2.3(eslint@9.13.0)
- eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0)):
+ eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0):
dependencies:
- eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -5132,43 +5386,43 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0):
+ eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0)(eslint@9.13.0):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.3.7
enhanced-resolve: 5.17.1
eslint: 9.13.0
- eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0)
fast-glob: 3.3.2
get-tsconfig: 4.8.0
is-bun-module: 1.2.1
is-glob: 4.0.3
optionalDependencies:
- eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0):
+ eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.18.0(eslint@9.13.0)(typescript@5.6.3)
eslint: 9.13.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0)(eslint@9.13.0)
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0):
+ eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.18.0(eslint@9.13.0)(typescript@5.6.3)
eslint: 9.13.0
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0)(eslint@9.13.0)
transitivePeerDependencies:
- supports-color
@@ -5178,7 +5432,7 @@ snapshots:
eslint: 9.13.0
ignore: 5.3.2
- eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0):
+ eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -5189,7 +5443,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.13.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0))(eslint@9.13.0))(eslint@9.13.0)
+ eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.13.0)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -5200,7 +5454,7 @@ snapshots:
semver: 6.3.1
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 7.18.0(eslint@9.13.0)(typescript@5.6.3)
+ '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@5.6.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -5341,6 +5595,20 @@ snapshots:
- supports-color
- typescript
+ eslint-plugin-vue@9.30.0(eslint@9.13.0):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0)
+ eslint: 9.13.0
+ globals: 13.24.0
+ natural-compare: 1.4.0
+ nth-check: 2.1.1
+ postcss-selector-parser: 6.1.2
+ semver: 7.6.3
+ vue-eslint-parser: 9.4.3(eslint@9.13.0)
+ xml-name-validator: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
eslint-scope@5.1.1:
dependencies:
esrecurse: 4.3.0
@@ -5435,6 +5703,8 @@ snapshots:
estraverse@5.3.0: {}
+ estree-walker@2.0.2: {}
+
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.6
@@ -5665,6 +5935,8 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ he@1.2.0: {}
+
hosted-git-info@2.8.9: {}
hosted-git-info@7.0.2:
@@ -5943,6 +6215,8 @@ snapshots:
lodash.startcase@4.4.0: {}
+ lodash@4.17.21: {}
+
log-symbols@6.0.0:
dependencies:
chalk: 5.3.0
@@ -6006,6 +6280,8 @@ snapshots:
ms@2.1.3: {}
+ muggle-string@0.4.1: {}
+
mz@2.7.0:
dependencies:
any-promise: 1.3.0
@@ -6050,6 +6326,10 @@ snapshots:
npm-bundled: 2.0.1
npm-normalize-package-bin: 2.0.0
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
object-assign@4.1.1: {}
object-inspect@1.13.2: {}
@@ -6170,6 +6450,8 @@ snapshots:
no-case: 3.0.4
tslib: 2.7.0
+ path-browserify@1.0.1: {}
+
path-exists@4.0.0: {}
path-key@3.1.1: {}
@@ -6987,6 +7269,38 @@ snapshots:
- supports-color
- terser
+ vscode-uri@3.0.8: {}
+
+ vue-eslint-parser@9.4.3(eslint@9.13.0):
+ dependencies:
+ debug: 4.3.7
+ eslint: 9.13.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.6.0
+ lodash: 4.17.21
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - supports-color
+
+ vue-tsc@2.1.10(typescript@5.6.3):
+ dependencies:
+ '@volar/typescript': 2.4.8
+ '@vue/language-core': 2.1.10(typescript@5.6.3)
+ semver: 7.6.3
+ typescript: 5.6.3
+
+ vue@3.5.12(typescript@5.6.3):
+ dependencies:
+ '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-sfc': 3.5.12
+ '@vue/runtime-dom': 3.5.12
+ '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3))
+ '@vue/shared': 3.5.12
+ optionalDependencies:
+ typescript: 5.6.3
+
webidl-conversions@4.0.2: {}
whatwg-url@7.1.0:
@@ -7062,6 +7376,8 @@ snapshots:
wrappy@1.0.2: {}
+ xml-name-validator@4.0.0: {}
+
yallist@2.1.2: {}
yallist@3.1.1: {}
diff --git a/src/packages/eslint-config/eslint.library.config.d.ts b/src/packages/eslint-config/eslint.library.config.d.ts
new file mode 100644
index 0000000..56addbf
--- /dev/null
+++ b/src/packages/eslint-config/eslint.library.config.d.ts
@@ -0,0 +1,2 @@
+declare const _default: import(".pnpm/@typescript-eslint+utils@8.12.2_eslint@9.13.0_typescript@5.6.3/node_modules/@typescript-eslint/utils/dist/ts-eslint").FlatConfig.ConfigArray;
+export default _default;
diff --git a/src/packages/typescript-config/base.json b/src/packages/typescript-config/base.json
index d5ac453..7a30961 100644
--- a/src/packages/typescript-config/base.json
+++ b/src/packages/typescript-config/base.json
@@ -10,15 +10,23 @@
"forceConsistentCasingInFileNames": true,
"incremental": false,
"isolatedModules": true,
- "lib": ["es2022", "DOM", "DOM.Iterable"],
+ "lib": [
+ "es2022",
+ "DOM",
+ "DOM.Iterable"
+ ],
"module": "NodeNext",
"moduleDetection": "force",
"moduleResolution": "NodeNext",
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
+ "noUncheckedSideEffectImports": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"target": "ES2022"
}
-}
+} \ No newline at end of file
diff --git a/src/packages/vue/.gitignore b/src/packages/vue/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/src/packages/vue/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/src/packages/vue/README.md b/src/packages/vue/README.md
new file mode 100644
index 0000000..33895ab
--- /dev/null
+++ b/src/packages/vue/README.md
@@ -0,0 +1,5 @@
+# Vue 3 + TypeScript + Vite
+
+This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
+
+Learn more about the recommended Project Setup and IDE Support in the [Vue Docs TypeScript Guide](https://vuejs.org/guide/typescript/overview.html#project-setup).
diff --git a/src/packages/vue/eslint.config.mjs b/src/packages/vue/eslint.config.mjs
new file mode 100644
index 0000000..439d403
--- /dev/null
+++ b/src/packages/vue/eslint.config.mjs
@@ -0,0 +1,11 @@
+import library from "@repo/eslint-config/eslint.library.config.js";
+import pluginVue from "eslint-plugin-vue";
+
+/** @type {import("eslint").Linter.Config[]} */
+export default [
+ ...library,
+ ...pluginVue.configs["flat/recommended"],
+ {
+ ignores: ["dist/"],
+ },
+];
diff --git a/src/packages/vue/index.html b/src/packages/vue/index.html
new file mode 100644
index 0000000..a6ef3a8
--- /dev/null
+++ b/src/packages/vue/index.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Vite + Vue + TS</title>
+ </head>
+ <body>
+ <div id="app"></div>
+ <script type="module" src="/src/index.ts"></script>
+ </body>
+</html>
diff --git a/src/packages/vue/package.json b/src/packages/vue/package.json
new file mode 100644
index 0000000..f706e3d
--- /dev/null
+++ b/src/packages/vue/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "@locusts/vue",
+ "description": "A Vue 3 component that introduces locusts into your website.",
+ "author": "Matt Strapp <matt+locusts@mattstrapp.net> (https://mattstrapp.net)",
+ "bugs": "https://github.com/locusts-r-us/locusts/issues",
+ "license": "0BSD",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/locusts-r-us/locusts.git",
+ "directory": "packages/vue"
+ },
+ "version": "0.0.0",
+ "type": "module",
+ "files": [
+ "dist"
+ ],
+ "main": "./dist/locusts.umd.cjs",
+ "module": "./dist/locusts.js",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/locusts.js",
+ "require": "./dist/locusts.umd.cjs"
+ }
+ },
+ "types": "./dist/index.d.ts",
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build && vue-tsc --declaration --emitDeclarationOnly && publint",
+ "check": "vue-tsc --noEmit",
+ "format": "prettier --write .",
+ "lint": "prettier --check . && eslint --fix .",
+ "preview": "vite preview"
+ },
+ "keywords": [
+ "vue",
+ "vue3",
+ "component",
+ "why",
+ "joke"
+ ],
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ },
+ "devDependencies": {
+ "@repo/eslint-config": "workspace:*",
+ "@repo/typescript-config": "workspace:*",
+ "@vitejs/plugin-vue": "^5.1.4",
+ "eslint-plugin-vue": "^9.30.0",
+ "publint": "^0.2.0",
+ "typescript": "^5.6.3",
+ "vite": "^5.4.10",
+ "vue-tsc": "^2.1.8"
+ }
+}
diff --git a/src/packages/vue/src/components/Locusts.vue b/src/packages/vue/src/components/Locusts.vue
new file mode 100644
index 0000000..a01014e
--- /dev/null
+++ b/src/packages/vue/src/components/Locusts.vue
@@ -0,0 +1,6 @@
+<!-- eslint-disable vue/multi-word-component-names -->
+<script setup lang="ts"></script>
+
+<template>
+ <div />
+</template>
diff --git a/src/packages/vue/src/index.ts b/src/packages/vue/src/index.ts
new file mode 100644
index 0000000..5158db7
--- /dev/null
+++ b/src/packages/vue/src/index.ts
@@ -0,0 +1,3 @@
+import Locusts from "./components/Locusts.vue";
+
+export { Locusts };
diff --git a/src/packages/vue/src/vite-env.d.ts b/src/packages/vue/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/packages/vue/src/vite-env.d.ts
@@ -0,0 +1 @@
+/// <reference types="vite/client" />
diff --git a/src/packages/vue/tsconfig.json b/src/packages/vue/tsconfig.json
new file mode 100644
index 0000000..b8e300a
--- /dev/null
+++ b/src/packages/vue/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "@repo/typescript-config/base.json",
+ "compilerOptions": {
+ "outDir": "dist",
+ "declaration": true,
+ "declarationDir": "dist",
+ "emitDeclarationOnly": true,
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "useDefineForClassFields": true
+ },
+ "exclude": [
+ "node_modules",
+ "dist",
+ "src/main.ts",
+ "src/components/Locusts.vue"
+ ],
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
+}
diff --git a/src/packages/vue/vite.config.ts b/src/packages/vue/vite.config.ts
new file mode 100644
index 0000000..c1b4415
--- /dev/null
+++ b/src/packages/vue/vite.config.ts
@@ -0,0 +1,23 @@
+import { resolve } from "node:path";
+import { defineConfig } from "vite";
+import vue from "@vitejs/plugin-vue";
+
+// https://vite.dev/config/
+export default defineConfig({
+ plugins: [vue()],
+ build: {
+ lib: {
+ entry: resolve(__dirname, "src/index.ts"),
+ name: "Locusts",
+ fileName: "locusts",
+ },
+ rollupOptions: {
+ external: ["vue"],
+ output: {
+ globals: {
+ vue: "Vue",
+ },
+ },
+ },
+ },
+});