From 44fad476d2dfb38a53eaeafe733f5d1c8615d66f Mon Sep 17 00:00:00 2001 From: Annika Merris Date: Tue, 16 Jan 2024 17:06:01 -0500 Subject: [PATCH] Initial commit... --- .eslintrc.cjs | 15 ++ .gitignore | 30 +++ .prettierrc.json | 8 + .vscode/extensions.json | 8 + README.md | 52 ++++ bun.lockb | Bin 0 -> 180269 bytes env.d.ts | 1 + index.html | 13 + package.json | 46 ++++ public/favicon.ico | Bin 0 -> 4286 bytes public/items/blessingPowerItems.json | 68 +++++ public/items/fellowPowerItems.json | 92 +++++++ src/App.vue | 18 ++ src/assets/base.css | 86 +++++++ src/assets/logo.svg | 1 + src/assets/main.css | 31 +++ .../BlessingPower/SpecialItemsCard.vue | 55 ++++ .../BlessingPower/StandardItemsCard.vue | 48 ++++ src/components/BlessingPower/SummaryCard.vue | 30 +++ .../FellowPower/SpecialItemsCard.vue | 55 ++++ .../FellowPower/StandardItemsCard.vue | 48 ++++ src/components/FellowPower/SummaryCard.vue | 30 +++ src/components/GlobalHeader.vue | 7 + src/components/SpecialItem.vue | 40 +++ src/components/StandardItem.vue | 35 +++ src/main.ts | 30 +++ src/router/index.ts | 25 ++ src/stores/counter.ts | 12 + src/stores/powerItems.ts | 241 ++++++++++++++++++ src/styles/settings.scss | 1 + src/types/PowerItem.ts | 7 + src/views/BlessingPowerView.vue | 26 ++ src/views/FellowPowerView.vue | 26 ++ src/views/HomeView.vue | 11 + tsconfig.app.json | 13 + tsconfig.json | 14 + tsconfig.node.json | 17 ++ tsconfig.vitest.json | 9 + vite.config.ts | 16 ++ vitest.config.ts | 14 + 40 files changed, 1279 insertions(+) create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 env.d.ts create mode 100644 index.html create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 public/items/blessingPowerItems.json create mode 100644 public/items/fellowPowerItems.json create mode 100644 src/App.vue create mode 100644 src/assets/base.css create mode 100644 src/assets/logo.svg create mode 100644 src/assets/main.css create mode 100644 src/components/BlessingPower/SpecialItemsCard.vue create mode 100644 src/components/BlessingPower/StandardItemsCard.vue create mode 100644 src/components/BlessingPower/SummaryCard.vue create mode 100644 src/components/FellowPower/SpecialItemsCard.vue create mode 100644 src/components/FellowPower/StandardItemsCard.vue create mode 100644 src/components/FellowPower/SummaryCard.vue create mode 100644 src/components/GlobalHeader.vue create mode 100644 src/components/SpecialItem.vue create mode 100644 src/components/StandardItem.vue create mode 100644 src/main.ts create mode 100644 src/router/index.ts create mode 100644 src/stores/counter.ts create mode 100644 src/stores/powerItems.ts create mode 100644 src/styles/settings.scss create mode 100644 src/types/PowerItem.ts create mode 100644 src/views/BlessingPowerView.vue create mode 100644 src/views/FellowPowerView.vue create mode 100644 src/views/HomeView.vue create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 tsconfig.vitest.json create mode 100644 vite.config.ts create mode 100644 vitest.config.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..6f40582 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,15 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier/skip-formatting' + ], + parserOptions: { + ecmaVersion: 'latest' + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..66e2335 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..009a534 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "Vue.vscode-typescript-vue-plugin", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..c8759d6 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# isl-calc + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +### Run Unit Tests with [Vitest](https://vitest.dev/) + +```sh +npm run test:unit +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..4053ca7945bade5c06c2fbaedd016bdd5438d80f GIT binary patch literal 180269 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 literal 0 HcmV?d00001 diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 0000000..a888544 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..b08cacf --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "isl-calc", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "test:unit": "vitest", + "build-only": "vite build", + "type-check": "vue-tsc --build --force", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "format": "prettier --write src/" + }, + "dependencies": { + "axios": "^1.6.5", + "pinia": "^2.1.7", + "sass": "^1.69.7", + "vue": "^3.3.11", + "vue-router": "^4.2.5", + "vuetify": "^3.4.10" + }, + "devDependencies": { + "@mdi/font": "^7.4.47", + "@rushstack/eslint-patch": "^1.3.3", + "@tsconfig/node18": "^18.2.2", + "@types/jsdom": "^21.1.6", + "@types/node": "^18.19.3", + "@vitejs/plugin-vue": "^4.5.2", + "@vue/eslint-config-prettier": "^8.0.0", + "@vue/eslint-config-typescript": "^12.0.0", + "@vue/test-utils": "^2.4.3", + "@vue/tsconfig": "^0.5.0", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "jsdom": "^23.0.1", + "npm-run-all2": "^6.1.1", + "prettier": "^3.0.3", + "sass-loader": "^14.0.0", + "typescript": "~5.3.0", + "vite": "^5.0.10", + "vitest": "^1.0.4", + "vue-tsc": "^1.8.25" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/public/items/blessingPowerItems.json b/public/items/blessingPowerItems.json new file mode 100644 index 0000000..5d9a224 --- /dev/null +++ b/public/items/blessingPowerItems.json @@ -0,0 +1,68 @@ +{ + "d9def40f-6deb-45af-b8d1-d8af8a997b58": { + "iconURL": "", + "itemName": "Flower Necklace", + "minItemPower": 1, + "maxItemPower": 1 + }, + "facb5102-34d8-4813-ab06-ac2b8e9f3ed9": { + "iconURL": "", + "itemName": "Jewel Necklace", + "minItemPower": 2, + "maxItemPower": 2 + }, + "ddd29671-ca7f-4132-8784-80346e154059": { + "iconURL": "", + "itemName": "Blessing Power Cachapon", + "minItemPower": 10, + "maxItemPower": 30 + }, + "c1e029ff-b82c-48bd-a1f1-ea6291fad948": { + "iconURL": "", + "itemName": "Mandrake", + "minItemPower": 1, + "maxItemPower": 3 + }, + "52cd4a48-ff8a-4493-8030-b4e7754cd227": { + "iconURL": "", + "itemName": "Muddled Mushroom", + "minItemPower": 2, + "maxItemPower": 5 + }, + "636b7384-1389-4012-933c-9063baa7a38d": { + "iconURL": "", + "itemName": "Grassy Bunny", + "minItemPower": 3, + "maxItemPower": 6 + }, + "2563b5f8-8fd5-4795-af86-33200605cf3e": { + "iconURL": "", + "itemName": "Chirping Chick", + "minItemPower": 4, + "maxItemPower": 10 + }, + "54e9bcf5-f1a5-4350-a75d-88af02b4fc13": { + "iconURL": "", + "itemName": "Gorgeous Horse", + "minItemPower": 5, + "maxItemPower": 16 + }, + "e736d2b9-a8ec-4a4e-a721-24880c8a6038": { + "iconURL": "", + "itemName": "Blooming Fox", + "minItemPower": 7, + "maxItemPower": 24 + }, + "9fb7f9ba-e7ed-4e99-b161-386f48299443": { + "iconURL": "", + "itemName": "Frozen Dragon", + "minItemPower": 10, + "maxItemPower": 32 + }, + "e2472929-1218-4cd6-a73b-b783c17bbc31": { + "iconURL": "", + "itemName": "Flaming Lion", + "minItemPower": -1, + "maxItemPower": 0 + } +} \ No newline at end of file diff --git a/public/items/fellowPowerItems.json b/public/items/fellowPowerItems.json new file mode 100644 index 0000000..4c41ca8 --- /dev/null +++ b/public/items/fellowPowerItems.json @@ -0,0 +1,92 @@ +{ + "1f7aff96-030d-4007-9a70-82db7a8be3e3": { + "iconURL": "", + "itemName": "Contestant Portrait", + "minItemPower": 15000, + "maxItemPower": 40000 + }, + "2006c92e-8e32-4c9f-a913-3b2d1ed8dea0": { + "iconURL": "", + "itemName": "Potion of Bravery", + "minItemPower": 800, + "maxItemPower": 800 + }, + "30d05d98-a615-4e3a-94da-8aa6e4ad03a9": { + "iconURL": "", + "itemName": "Basic Elixir", + "minItemPower": 3000, + "maxItemPower": 3000 + }, + "3eccaaac-5afe-415a-ac8f-55df213cf015": { + "iconURL": "", + "itemName": "Potion of Freedom", + "minItemPower": 800, + "maxItemPower": 800 + }, + "68a7a68a-2123-4a8e-b64d-9dbdf0637521": { + "iconURL": "", + "itemName": "Potion of Erudition", + "minItemPower": 800, + "maxItemPower": 800 + }, + "7075da2f-a617-42a1-b142-fe2401ad87ec": { + "iconURL": "", + "itemName": "Potion of Inspiration", + "minItemPower": 800, + "maxItemPower": 800 + }, + "762a2775-ca50-4c13-8797-2f03b045ed10": { + "iconURL": "", + "itemName": "Red Contestant Portrait", + "minItemPower": 10000, + "maxItemPower": 25000 + }, + "9c95396d-e5d8-4f7d-9d37-1469e7dc0ee1": { + "iconURL": "", + "itemName": "Yellow Signed Towel", + "minItemPower": 4500, + "maxItemPower": 10000 + }, + "a351a27b-765b-46b5-95fc-99c47e63176d": { + "iconURL": "", + "itemName": "Potion of Diligence", + "minItemPower": 800, + "maxItemPower": 800 + }, + "a44b763b-833b-49d0-91d6-e5fcb8c6ce7c": { + "iconURL": "", + "itemName": "Yellow Signed Handkerchief", + "minItemPower": 2000, + "maxItemPower": 5000 + }, + "bc5fc5c6-65e1-41c8-822d-d6e06ec0894e": { + "iconURL": "", + "itemName": "Advanced Elixir", + "minItemPower": 30000, + "maxItemPower": 30000 + }, + "cd50f711-36a4-4b3b-b4ef-84b52c8a18e2": { + "iconURL": "", + "itemName": "Champion's Statue", + "minItemPower": 30000, + "maxItemPower": 80000 + }, + "ce522371-80bd-4266-b473-8f5ace7099c7": { + "iconURL": "", + "itemName": "Red Signed Handkerchief", + "minItemPower": 3000, + "maxItemPower": 8000 + }, + "d7d705d3-9562-4f03-98d8-3b0da81fcf47": { + "iconURL": "", + "itemName": "Champion's Belt", + "minItemPower": 20000, + "maxItemPower": 50000 + }, + "ed1663c2-aff0-41b4-b5ed-7f86463c1d69": { + "iconURL": "", + "itemName": "Red Signed Towel", + "minItemPower": 6000, + "maxItemPower": 15000 + } +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..f7d5fa9 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 0000000..8816868 --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,86 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..1e37676 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,31 @@ +@import './base.css'; + +#app { + margin: 0 auto; + padding: 2rem; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + place-items: center; + } + + #app { + padding: 0 2rem; + } +} diff --git a/src/components/BlessingPower/SpecialItemsCard.vue b/src/components/BlessingPower/SpecialItemsCard.vue new file mode 100644 index 0000000..03a4ccd --- /dev/null +++ b/src/components/BlessingPower/SpecialItemsCard.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/components/BlessingPower/StandardItemsCard.vue b/src/components/BlessingPower/StandardItemsCard.vue new file mode 100644 index 0000000..32f068d --- /dev/null +++ b/src/components/BlessingPower/StandardItemsCard.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/BlessingPower/SummaryCard.vue b/src/components/BlessingPower/SummaryCard.vue new file mode 100644 index 0000000..0d04677 --- /dev/null +++ b/src/components/BlessingPower/SummaryCard.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/components/FellowPower/SpecialItemsCard.vue b/src/components/FellowPower/SpecialItemsCard.vue new file mode 100644 index 0000000..2cacf6d --- /dev/null +++ b/src/components/FellowPower/SpecialItemsCard.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/components/FellowPower/StandardItemsCard.vue b/src/components/FellowPower/StandardItemsCard.vue new file mode 100644 index 0000000..dd8a4f6 --- /dev/null +++ b/src/components/FellowPower/StandardItemsCard.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/FellowPower/SummaryCard.vue b/src/components/FellowPower/SummaryCard.vue new file mode 100644 index 0000000..8fcd1ea --- /dev/null +++ b/src/components/FellowPower/SummaryCard.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/components/GlobalHeader.vue b/src/components/GlobalHeader.vue new file mode 100644 index 0000000..35d9861 --- /dev/null +++ b/src/components/GlobalHeader.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/components/SpecialItem.vue b/src/components/SpecialItem.vue new file mode 100644 index 0000000..6396933 --- /dev/null +++ b/src/components/SpecialItem.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/StandardItem.vue b/src/components/StandardItem.vue new file mode 100644 index 0000000..a6a002d --- /dev/null +++ b/src/components/StandardItem.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..b645d87 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,30 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' + +import App from './App.vue' +import router from './router' + +// Vuetify +import 'vuetify/styles' +import '@mdi/font/css/materialdesignicons.css' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' + +const vuetify = createVuetify({ + components, + directives, + icons: { + defaultSet: 'mdi', + } +}) + +const app = createApp(App) + +app.use(createPinia()) +app.use(router) +app.use(vuetify) + +app.mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..65c6ea2 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,25 @@ +import { createRouter, createWebHistory } from 'vue-router' +import HomeView from '../views/HomeView.vue' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: HomeView + }, + { + path: "/blessing-power", + name: "blessing-power", + component: () => import('@/views/BlessingPowerView.vue') + }, + { + path: "/fellow-power", + name: "fellow-power", + component: () => import('@/views/FellowPowerView.vue') + } + ] +}) + +export default router diff --git a/src/stores/counter.ts b/src/stores/counter.ts new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/src/stores/counter.ts @@ -0,0 +1,12 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', () => { + const count = ref(0) + const doubleCount = computed(() => count.value * 2) + function increment() { + count.value++ + } + + return { count, doubleCount, increment } +}) diff --git a/src/stores/powerItems.ts b/src/stores/powerItems.ts new file mode 100644 index 0000000..ab902b5 --- /dev/null +++ b/src/stores/powerItems.ts @@ -0,0 +1,241 @@ +import type { PowerItem } from '@/types/PowerItem' +import axios from 'axios' +import { defineStore } from 'pinia' +import { computed, ref, toRaw } from 'vue' + +export const usePowerItems = defineStore('powerItems', () => { + const BLESSING_POWER_ITEM_STORAGE = 'BLESSING_POWER_ITEM_STORAGE' + const FELLOW_POWER_ITEM_STORAGE = 'FELLOW_POWER_ITEM_STORAGE' + const blessingPowerItems = ref(new Map()) + const fellowPowerItems = ref(new Map()) + + async function fetchPowerItems() { + axios + .get('/items/blessingPowerItems.json') + .then((resp) => { + const plainMap = new Map( + Object.entries(JSON.parse(localStorage.getItem(BLESSING_POWER_ITEM_STORAGE) || '{}')) + ) + Object.keys(resp.data).map((key) => { + const cur = resp.data[key] + if (cur['owned'] === undefined) cur['owned'] = 0 + cur['owned'] = plainMap.get(key) !== undefined ? plainMap.get(key)?.owned : 0 + blessingPowerItems.value.set(key, resp.data[key]) + }) + }) + .catch((err) => { + console.log(err) + }) + axios + .get('/items/fellowPowerItems.json') + .then((resp) => { + const plainMap = new Map( + Object.entries(JSON.parse(localStorage.getItem(FELLOW_POWER_ITEM_STORAGE) || '{}')) + ) + Object.keys(resp.data).map((key) => { + const cur = resp.data[key] + if (cur['owned'] === undefined) cur['owned'] = 0 + cur['owned'] = plainMap.get(key) !== undefined ? plainMap.get(key)?.owned : 0 + fellowPowerItems.value.set(key, resp.data[key]) + }) + }) + .catch((err) => { + console.log(err) + }) + } + + function updateOwned(key: string, newOwned: number) { + let cur = blessingPowerItems.value.get(key) + if (cur !== undefined) { + cur.owned = newOwned + blessingPowerItems.value.set(key, cur) + localStorage.setItem( + BLESSING_POWER_ITEM_STORAGE, + JSON.stringify(mapToObj(toRaw(blessingPowerItems.value))) + ) + return + } + cur = fellowPowerItems.value.get(key) + if (cur !== undefined) { + cur.owned = newOwned + fellowPowerItems.value.set(key, cur) + localStorage.setItem( + FELLOW_POWER_ITEM_STORAGE, + JSON.stringify(mapToObj(toRaw(fellowPowerItems.value))) + ) + } + } + + function mapToObj(map: Map) { + return Array.from(map).reduce((obj, [key, value]) => { + // Doing weird magic to work with maps is infuriating, and I haven't found a better solution for this. + // So ignore that error TypeScript, I (don't) know what I'm doing! + // @ts-ignore: noImplicitAny + obj[key] = value + return obj + }, {}) + } + + const totalBlessingPower = computed(() => + [...blessingPowerItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => { + return currentValue !== undefined + ? accumulator + + ((currentValue.maxItemPower + currentValue.minItemPower) / 2) * currentValue.owned + : 0 + }, + 0 + ) + ) + + const standardBlessingItems = computed( + () => + new Map( + [...blessingPowerItems.value.entries()].filter( + (cur) => cur[1].maxItemPower === cur[1].minItemPower + ) + ) + ) + + const standardBlessingItemTotal = computed(() => + [...standardBlessingItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + + ((currentValue.maxItemPower + currentValue.minItemPower) / 2) * currentValue.owned + : 0, + 0 + ) + ) + + const specialBlessingItems = computed( + () => + new Map( + [...blessingPowerItems.value.entries()].filter( + (cur) => cur[1].maxItemPower !== cur[1].minItemPower + ) + ) + ) + + const specialBlessingItemsMinTotal = computed(() => + [...specialBlessingItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + currentValue.minItemPower * currentValue.owned + : 0, + 0 + ) + ) + + const specialBlessingItemsMaxTotal = computed(() => + [...specialBlessingItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + currentValue.maxItemPower * currentValue.owned + : 0, + 0 + ) + ) + + const specialBlessingItemsAveTotal = computed(() => + [...specialBlessingItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + + ((currentValue.maxItemPower + currentValue.minItemPower) / 2) * currentValue.owned + : 0, + 0 + ) + ) + + const totalFellowPower = computed(() => + [...fellowPowerItems.value.values()].reduce((accumulator: number, currentValue: PowerItem) => { + return currentValue !== undefined + ? accumulator + + ((currentValue.maxItemPower + currentValue.minItemPower) / 2) * currentValue.owned + : 0 + }, 0) + ) + + const standardFellowItems = computed( + () => + new Map( + [...fellowPowerItems.value.entries()].filter( + (cur) => cur[1].maxItemPower === cur[1].minItemPower + ) + ) + ) + + const standardFellowItemTotal = computed(() => + [...standardFellowItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + + ((currentValue.maxItemPower + currentValue.minItemPower) / 2) * currentValue.owned + : 0, + 0 + ) + ) + + const specialFellowItems = computed( + () => + new Map( + [...fellowPowerItems.value.entries()].filter( + (cur) => cur[1].maxItemPower !== cur[1].minItemPower + ) + ) + ) + + const specialFellowItemsMinTotal = computed(() => + [...specialFellowItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + currentValue.minItemPower * currentValue.owned + : 0, + 0 + ) + ) + + const specialFellowItemsMaxTotal = computed(() => + [...specialFellowItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + currentValue.maxItemPower * currentValue.owned + : 0, + 0 + ) + ) + + const specialFellowItemsAveTotal = computed(() => + [...specialFellowItems.value.values()].reduce( + (accumulator: number, currentValue: PowerItem) => + currentValue !== undefined + ? accumulator + + ((currentValue.maxItemPower + currentValue.minItemPower) / 2) * currentValue.owned + : 0, + 0 + ) + ) + + fetchPowerItems() + + return { + blessingPowerItems, + fetchPowerItems, + updateOwned, + totalBlessingPower, + standardBlessingItems, + standardBlessingItemTotal, + specialBlessingItems, + specialBlessingItemsMinTotal, + specialBlessingItemsMaxTotal, + specialBlessingItemsAveTotal, + totalFellowPower, + standardFellowItems, + standardFellowItemTotal, + specialFellowItems, + specialFellowItemsMinTotal, + specialFellowItemsMaxTotal, + specialFellowItemsAveTotal + } +}) diff --git a/src/styles/settings.scss b/src/styles/settings.scss new file mode 100644 index 0000000..2021dde --- /dev/null +++ b/src/styles/settings.scss @@ -0,0 +1 @@ +@forward 'vuetify/settings'; diff --git a/src/types/PowerItem.ts b/src/types/PowerItem.ts new file mode 100644 index 0000000..89f2b4e --- /dev/null +++ b/src/types/PowerItem.ts @@ -0,0 +1,7 @@ +export type PowerItem = { + iconURL: string + itemName: string + minItemPower: number + maxItemPower: number + owned: number +} diff --git a/src/views/BlessingPowerView.vue b/src/views/BlessingPowerView.vue new file mode 100644 index 0000000..8ec1eaa --- /dev/null +++ b/src/views/BlessingPowerView.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/views/FellowPowerView.vue b/src/views/FellowPowerView.vue new file mode 100644 index 0000000..a0d58a6 --- /dev/null +++ b/src/views/FellowPowerView.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue new file mode 100644 index 0000000..2d55feb --- /dev/null +++ b/src/views/HomeView.vue @@ -0,0 +1,11 @@ + + + diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..491e093 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "noEmit": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..100cf6a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.vitest.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..46cf2e1 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,17 @@ +{ + "extends": "@tsconfig/node18/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/tsconfig.vitest.json b/tsconfig.vitest.json new file mode 100644 index 0000000..d080d61 --- /dev/null +++ b/tsconfig.vitest.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.app.json", + "exclude": [], + "compilerOptions": { + "composite": true, + "lib": [], + "types": ["node", "jsdom"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..5c45e1d --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + } +}) diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..10067d5 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,14 @@ +import { fileURLToPath } from 'node:url' +import { mergeConfig, defineConfig, configDefaults } from 'vitest/config' +import viteConfig from './vite.config' + +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + environment: 'jsdom', + exclude: [...configDefaults.exclude, 'e2e/*'], + root: fileURLToPath(new URL('./', import.meta.url)) + } + }) +)