Compare commits

...

22 Commits

Author SHA1 Message Date
rYeti 831f7c4ad1 wip, input of the weights and reps per set. working on state save for each exercise 2023-05-11 01:08:03 +02:00
roberts c036a97d39 expanded muscel prop button now knows which exercise was clicked 2023-05-09 18:16:38 +02:00
rYeti 7991269dcf wip on button click show weightinput view and state of weigtinput 2023-05-08 00:51:04 +02:00
roberts 3010fd62be working on the alignment of sets input and reps input 2023-05-07 19:39:17 +02:00
roberts 120ad96545 added view to imput the weight and how many reps 2023-05-07 19:11:43 +02:00
rYeti 7e2a7c31f7 added tailwind 2023-05-05 22:37:24 +02:00
rYeti 5bb26be1c3 deleted unnessery files 2023-05-05 21:45:12 +02:00
roberts bd008c5961 added comments for sourcing of code 2023-05-05 12:36:48 +02:00
roberts 29d68d8b9b added styling for the exercise list 2023-05-05 12:14:33 +02:00
rYeti 16ae5880e1 refactor: added exerciseList.vue to ensure modularity 2023-05-03 00:30:42 +02:00
rYeti ba858e70c0 added search funcionality 2023-05-02 23:10:19 +02:00
roberts 2b8b4f27ec buttons now in collums 2023-05-02 16:55:56 +02:00
roberts cb586bdddb exercises from the json file are now read in the specific view 2023-05-02 16:29:28 +02:00
rYeti 6cfe95c5ee added store state for json 2023-05-02 11:25:04 +02:00
roberts 7ce0795a7b added json of exercies of each muscle group 2023-05-01 17:36:50 +02:00
roberts 9c3f3788c9 minor improvemts, changed colors 2023-04-30 18:02:29 +02:00
roberts b4817d968e Merge remote-tracking branch 'refs/remotes/origin/main' 2023-04-30 12:17:59 +02:00
roberts 22de28a9cd resolved merge conflict 2023-04-30 12:14:43 +02:00
roberts a0347a4fc3 resolved merge conflicts 2023-04-30 01:30:29 +02:00
roberts fcc8bb95f7 resovled build error and added tilebar navigation 2023-04-30 01:27:13 +02:00
roberts d55a2126b4 resolved build error and added tilebar at the top 2023-04-30 00:53:02 +02:00
rYeti 6a64fc24ab reloved build error 2023-04-28 22:49:50 +02:00
50 changed files with 1836 additions and 498 deletions

2
dist/assets/index-3d69e972.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
dist/assets/logo-d921ef81.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

2
dist/index.html vendored
View File

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="./favicon.ico"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Hello_World_Vue 01</title><script type="module" crossorigin src="./assets/index-6b91de8d.js"></script></head><body><div id="app"></div></body></html> <!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="./logo.ico"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Gym Tracker</title><script type="module" crossorigin src="./assets/index-3d69e972.js"></script></head><body><div id="app"></div></body></html>

BIN
dist/logo.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View File

@ -2,9 +2,9 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="icon" href="/favicon.ico"> <link rel="icon" href="/logo.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello_World_Vue 01</title> <title>Gym Tracker</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

649
package-lock.json generated
View File

@ -8,6 +8,7 @@
"name": "gym_tracker", "name": "gym_tracker",
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"@vueuse/core": "^10.1.2",
"pinia": "^2.0.32", "pinia": "^2.0.32",
"uuid": "^9.0.0", "uuid": "^9.0.0",
"vite-plugin-css-injected-by-js": "^3.1.0", "vite-plugin-css-injected-by-js": "^3.1.0",
@ -16,19 +17,35 @@
"vue-router": "^4.1.6" "vue-router": "^4.1.6"
}, },
"devDependencies": { "devDependencies": {
"@rollup/plugin-json": "^6.0.0",
"@rushstack/eslint-patch": "^1.2.0", "@rushstack/eslint-patch": "^1.2.0",
"@vitejs/plugin-vue": "^4.0.0", "@vitejs/plugin-vue": "^4.0.0",
"@vue/eslint-config-prettier": "^7.1.0", "@vue/eslint-config-prettier": "^7.1.0",
"@vue/test-utils": "^2.3.0", "@vue/test-utils": "^2.3.0",
"autoprefixer": "^10.4.14",
"eslint": "^8.34.0", "eslint": "^8.34.0",
"eslint-plugin-vue": "^9.9.0", "eslint-plugin-vue": "^9.9.0",
"jsdom": "^21.1.0", "jsdom": "^21.1.0",
"postcss": "^8.4.23",
"prettier": "^2.8.4", "prettier": "^2.8.4",
"sass": "^1.62.0", "sass": "^1.62.1",
"tailwindcss": "^3.3.2",
"vite": "^4.1.4", "vite": "^4.1.4",
"vitest": "^0.29.1" "vitest": "^0.29.1"
} }
}, },
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.21.4", "version": "7.21.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz",
@ -548,6 +565,48 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/@rollup/plugin-json": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz",
"integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^5.0.1"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"rollup": "^1.20.0||^2.0.0||^3.0.0"
},
"peerDependenciesMeta": {
"rollup": {
"optional": true
}
}
},
"node_modules/@rollup/plugin-json/node_modules/@rollup/pluginutils": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
"integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^2.0.2",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"rollup": "^1.20.0||^2.0.0||^3.0.0"
},
"peerDependenciesMeta": {
"rollup": {
"optional": true
}
}
},
"node_modules/@rollup/pluginutils": { "node_modules/@rollup/pluginutils": {
"version": "4.2.1", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
@ -590,12 +649,23 @@
"@types/chai": "*" "@types/chai": "*"
} }
}, },
"node_modules/@types/estree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
"integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
"dev": true
},
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.15.11", "version": "18.15.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
"integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==",
"devOptional": true "devOptional": true
}, },
"node_modules/@types/web-bluetooth": {
"version": "0.0.17",
"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz",
"integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA=="
},
"node_modules/@vitejs/plugin-vue": { "node_modules/@vitejs/plugin-vue": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz",
@ -818,6 +888,89 @@
"vue": "^3.0.1" "vue": "^3.0.1"
} }
}, },
"node_modules/@vueuse/core": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.1.2.tgz",
"integrity": "sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==",
"dependencies": {
"@types/web-bluetooth": "^0.0.17",
"@vueuse/metadata": "10.1.2",
"@vueuse/shared": "10.1.2",
"vue-demi": ">=0.14.0"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.0.tgz",
"integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/@vueuse/metadata": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.1.2.tgz",
"integrity": "sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.1.2.tgz",
"integrity": "sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==",
"dependencies": {
"vue-demi": ">=0.14.0"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.0.tgz",
"integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/abab": { "node_modules/abab": {
"version": "2.0.6", "version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@ -920,6 +1073,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1" "url": "https://github.com/chalk/ansi-styles?sponsor=1"
} }
}, },
"node_modules/any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
"dev": true
},
"node_modules/anymatch": { "node_modules/anymatch": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@ -933,6 +1092,12 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
"dev": true
},
"node_modules/argparse": { "node_modules/argparse": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@ -959,6 +1124,39 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true "dev": true
}, },
"node_modules/autoprefixer": {
"version": "10.4.14",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
"integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
}
],
"dependencies": {
"browserslist": "^4.21.5",
"caniuse-lite": "^1.0.30001464",
"fraction.js": "^4.2.0",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
"postcss-value-parser": "^4.2.0"
},
"bin": {
"autoprefixer": "bin/autoprefixer"
},
"engines": {
"node": "^10 || ^12 || >=14"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/balanced-match": { "node_modules/balanced-match": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@ -998,6 +1196,34 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/browserslist": {
"version": "4.21.5",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
"integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001449",
"electron-to-chromium": "^1.4.284",
"node-releases": "^2.0.8",
"update-browserslist-db": "^1.0.10"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/buffer-from": { "node_modules/buffer-from": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@ -1030,6 +1256,35 @@
"tslib": "^2.0.3" "tslib": "^2.0.3"
} }
}, },
"node_modules/camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001482",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz",
"integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
]
},
"node_modules/chai": { "node_modules/chai": {
"version": "4.3.7", "version": "4.3.7",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
@ -1337,6 +1592,12 @@
"node": ">=0.4.0" "node": ">=0.4.0"
} }
}, },
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true
},
"node_modules/diff": { "node_modules/diff": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
@ -1346,6 +1607,12 @@
"node": ">=0.3.1" "node": ">=0.3.1"
} }
}, },
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"dev": true
},
"node_modules/doctrine": { "node_modules/doctrine": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@ -1498,6 +1765,12 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/electron-to-chromium": {
"version": "1.4.385",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.385.tgz",
"integrity": "sha512-L9zlje9bIw0h+CwPQumiuVlfMcV4boxRjFIWDcLfFqTZNbkwOExBzfmswytHawObQX4OUhtNv8gIiB21kOurIg==",
"dev": true
},
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "9.2.2", "version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@ -1552,6 +1825,15 @@
"@esbuild/win32-x64": "0.17.17" "@esbuild/win32-x64": "0.17.17"
} }
}, },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/escape-string-regexp": { "node_modules/escape-string-regexp": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@ -2010,6 +2292,19 @@
"node": ">= 6" "node": ">= 6"
} }
}, },
"node_modules/fraction.js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
"dev": true,
"engines": {
"node": "*"
},
"funding": {
"type": "patreon",
"url": "https://www.patreon.com/infusion"
}
},
"node_modules/fs-extra": { "node_modules/fs-extra": {
"version": "10.1.0", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@ -2410,6 +2705,15 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/jiti": {
"version": "1.18.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
"integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
"dev": true,
"bin": {
"jiti": "bin/jiti.js"
}
},
"node_modules/js-beautify": { "node_modules/js-beautify": {
"version": "1.14.6", "version": "1.14.6",
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.6.tgz", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.6.tgz",
@ -2547,6 +2851,21 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
"engines": {
"node": ">=10"
}
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
"node_modules/local-pkg": { "node_modules/local-pkg": {
"version": "0.4.3", "version": "0.4.3",
"resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
@ -2691,6 +3010,17 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true "dev": true
}, },
"node_modules/mz": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
"dev": true,
"dependencies": {
"any-promise": "^1.0.0",
"object-assign": "^4.0.1",
"thenify-all": "^1.0.0"
}
},
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.6", "version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
@ -2732,6 +3062,12 @@
"he": "1.2.0" "he": "1.2.0"
} }
}, },
"node_modules/node-releases": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
"integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
"dev": true
},
"node_modules/nopt": { "node_modules/nopt": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
@ -2756,6 +3092,15 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/normalize-range": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/nth-check": { "node_modules/nth-check": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@ -2773,6 +3118,24 @@
"integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==", "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==",
"dev": true "dev": true
}, },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-hash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/once": { "node_modules/once": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@ -2934,6 +3297,15 @@
"url": "https://github.com/sponsors/jonschlinkert" "url": "https://github.com/sponsors/jonschlinkert"
} }
}, },
"node_modules/pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/pinia": { "node_modules/pinia": {
"version": "2.0.34", "version": "2.0.34",
"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.34.tgz", "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.34.tgz",
@ -2984,6 +3356,15 @@
} }
} }
}, },
"node_modules/pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
"integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/pkg-types": { "node_modules/pkg-types": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz",
@ -2996,9 +3377,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.22", "version": "8.4.23",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
"integrity": "sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==", "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -3022,6 +3403,90 @@
"node": "^10 || ^12 || >=14" "node": "^10 || ^12 || >=14"
} }
}, },
"node_modules/postcss-import": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
"dev": true,
"dependencies": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
"resolve": "^1.1.7"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"postcss": "^8.0.0"
}
},
"node_modules/postcss-js": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
"dev": true,
"dependencies": {
"camelcase-css": "^2.0.1"
},
"engines": {
"node": "^12 || ^14 || >= 16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": "^8.4.21"
}
},
"node_modules/postcss-load-config": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
"integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
"dev": true,
"dependencies": {
"lilconfig": "^2.0.5",
"yaml": "^2.1.1"
},
"engines": {
"node": ">= 14"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
"postcss": {
"optional": true
},
"ts-node": {
"optional": true
}
}
},
"node_modules/postcss-nested": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
"integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
"dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.11"
},
"engines": {
"node": ">=12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": "^8.2.14"
}
},
"node_modules/postcss-selector-parser": { "node_modules/postcss-selector-parser": {
"version": "6.0.11", "version": "6.0.11",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
@ -3035,6 +3500,12 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true
},
"node_modules/prelude-ls": { "node_modules/prelude-ls": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@ -3155,6 +3626,15 @@
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true "dev": true
}, },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"dev": true,
"dependencies": {
"pify": "^2.3.0"
}
},
"node_modules/readdirp": { "node_modules/readdirp": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@ -3300,9 +3780,9 @@
"dev": true "dev": true
}, },
"node_modules/sass": { "node_modules/sass": {
"version": "1.62.0", "version": "1.62.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz",
"integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==", "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==",
"devOptional": true, "devOptional": true,
"dependencies": { "dependencies": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
@ -3545,6 +4025,57 @@
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
} }
}, },
"node_modules/sucrase": {
"version": "3.32.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
"integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
"glob": "7.1.6",
"lines-and-columns": "^1.1.6",
"mz": "^2.7.0",
"pirates": "^4.0.1",
"ts-interface-checker": "^0.1.9"
},
"bin": {
"sucrase": "bin/sucrase",
"sucrase-node": "bin/sucrase-node"
},
"engines": {
"node": ">=8"
}
},
"node_modules/sucrase/node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/sucrase/node_modules/glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/supports-color": { "node_modules/supports-color": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@ -3573,6 +4104,44 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true "dev": true
}, },
"node_modules/tailwindcss": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
"integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
"dev": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
"chokidar": "^3.5.3",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
"fast-glob": "^3.2.12",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"jiti": "^1.18.2",
"lilconfig": "^2.1.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
"picocolors": "^1.0.0",
"postcss": "^8.4.23",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
"postcss-load-config": "^4.0.1",
"postcss-nested": "^6.0.1",
"postcss-selector-parser": "^6.0.11",
"postcss-value-parser": "^4.2.0",
"resolve": "^1.22.2",
"sucrase": "^3.32.0"
},
"bin": {
"tailwind": "lib/cli.js",
"tailwindcss": "lib/cli.js"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/terser": { "node_modules/terser": {
"version": "5.17.1", "version": "5.17.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz",
@ -3596,6 +4165,27 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true "dev": true
}, },
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
"dev": true,
"dependencies": {
"any-promise": "^1.0.0"
}
},
"node_modules/thenify-all": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
"dev": true,
"dependencies": {
"thenify": ">= 3.1.0 < 4"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/tinybench": { "node_modules/tinybench": {
"version": "2.4.0", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.4.0.tgz", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.4.0.tgz",
@ -3658,6 +4248,12 @@
"node": ">=14" "node": ">=14"
} }
}, },
"node_modules/ts-interface-checker": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"dev": true
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
@ -3711,6 +4307,36 @@
"node": ">= 4.0.0" "node": ">= 4.0.0"
} }
}, },
"node_modules/update-browserslist-db": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
"integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"node_modules/uri-js": { "node_modules/uri-js": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@ -4120,6 +4746,15 @@
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
"dev": true "dev": true
}, },
"node_modules/yaml": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
"integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
"dev": true,
"engines": {
"node": ">= 14"
}
},
"node_modules/yocto-queue": { "node_modules/yocto-queue": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",

View File

@ -13,6 +13,7 @@
"format": "prettier --write src/" "format": "prettier --write src/"
}, },
"dependencies": { "dependencies": {
"@vueuse/core": "^10.1.2",
"pinia": "^2.0.32", "pinia": "^2.0.32",
"uuid": "^9.0.0", "uuid": "^9.0.0",
"vite-plugin-css-injected-by-js": "^3.1.0", "vite-plugin-css-injected-by-js": "^3.1.0",
@ -21,15 +22,19 @@
"vue-router": "^4.1.6" "vue-router": "^4.1.6"
}, },
"devDependencies": { "devDependencies": {
"@rollup/plugin-json": "^6.0.0",
"@rushstack/eslint-patch": "^1.2.0", "@rushstack/eslint-patch": "^1.2.0",
"@vitejs/plugin-vue": "^4.0.0", "@vitejs/plugin-vue": "^4.0.0",
"@vue/eslint-config-prettier": "^7.1.0", "@vue/eslint-config-prettier": "^7.1.0",
"@vue/test-utils": "^2.3.0", "@vue/test-utils": "^2.3.0",
"autoprefixer": "^10.4.14",
"eslint": "^8.34.0", "eslint": "^8.34.0",
"eslint-plugin-vue": "^9.9.0", "eslint-plugin-vue": "^9.9.0",
"jsdom": "^21.1.0", "jsdom": "^21.1.0",
"postcss": "^8.4.23",
"prettier": "^2.8.4", "prettier": "^2.8.4",
"sass": "^1.62.0", "sass": "^1.62.1",
"tailwindcss": "^3.3.2",
"vite": "^4.1.4", "vite": "^4.1.4",
"vitest": "^0.29.1" "vitest": "^0.29.1"
} }

6
postcss.config.js Normal file
View File

@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

BIN
public/logo.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View File

@ -1,14 +1,13 @@
<script setup> <script setup>
import { NavigationModel, Nav } from '@/components'; import { NavigationModel } from "./components/Index.js";
</script> </script>
<template> <template>
<div class="app-container"> <div class="app-containe">
<NavigationModel /> <NavigationModel />
<!-- <Nav /> --> <div class="container px-3 mx-auto">
<div class="container pt-4 pb-4"> <router-view class="mt-4" />
<router-view />
</div> </div>
</div> </div>
</template> </template>
@ -16,56 +15,9 @@ import { NavigationModel, Nav } from '@/components';
<style scoped lang="scss"> <style scoped lang="scss">
@import '/css/head.scss'; @import '/css/head.scss';
header { .app-container
line-height: 1.5; {
max-height: 100vh;
}
nav {
width: 100%; width: 100%;
font-size: 12px;
text-align: center;
margin-top: 2rem;
} }
nav a.router-link-exact-active {
color: var(--color-text);
}
nav a.router-link-exact-active:hover {
background-color: transparent;
}
nav a {
display: inline-block;
padding: 0 1rem;
border-left: 1px solid var(--color-border);
}
nav a:first-of-type {
border: 0;
}
@media (min-width: 1024px) {
header {
display: flex;
place-items: top;
padding-right: calc(var(--section-gap));
}
header .wrapper {
display: flex;
place-items: flex-start;
flex-wrap: wrap;
}
nav {
text-align: center;
margin-left: 2rem;
font-size: 1rem;
padding: 1rem 0;
margin-top: 1rem;
}
}
</style> </style>

View File

@ -1,65 +0,0 @@
/* color palette from <https://github.com/vuejs/theme> */
: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;
position: relative;
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;
}
/*# sourceMappingURL=head.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["head.scss"],"names":[],"mappings":"AAAA;AACA;EACE;EACA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;;;AAGF;EACE;IACE;IACA;IACA;IAEA;IACA;IAEA;IACA;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA","file":"head.css"}

View File

@ -1,74 +0,0 @@
/* color palette from <https://github.com/vuejs/theme> */
: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;
position: relative;
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;
}

1
src/assets/index.js Normal file
View File

@ -0,0 +1 @@
export {default as gymTrackerLogo} from './gymTrackerLogo.png';

BIN
src/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>

Before

Width:  |  Height:  |  Size: 276 B

View File

@ -1,35 +0,0 @@
@import './base.css';
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
font-weight: normal;
}
a,
.green {
text-decoration: none;
color: hsla(160, 100%, 37%, 1);
transition: 0.4s;
}
@media (hover: hover) {
a:hover {
background-color: hsla(160, 100%, 37%, 0.2);
}
}
@media (min-width: 1024px) {
body {
display: flex;
place-items: center;
}
#app {
display: grid;
grid-template-columns: 1fr 1fr;
padding: 0 2rem;
}
}

View File

@ -1,35 +0,0 @@
@import './base.scss';
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
font-weight: normal;
}
a,
.green {
text-decoration: none;
color: hsla(160, 100%, 37%, 1);
transition: 0.4s;
}
@media (hover: hover) {
a:hover {
background-color: hsla(160, 100%, 37%, 0.2);
}
}
@media (min-width: 1024px) {
body {
display: flex;
place-items: center;
}
#app {
display: grid;
grid-template-columns: 1fr 1fr;
padding: 0 2rem;
}
}

View File

@ -0,0 +1,763 @@
{ "muscle": [
{
"name": "Legs",
"exercises":
[
{
"name": "Barbell Back Squat"
},
{
"name": "Barbell Front Squat"
},
{
"name":"Barbell Split squat"
},
{
"name":"Dumbbell Split Squat"
},
{
"name": "Barbell Lunge"
},
{
"name":"Barbell Bulgarien split Squat"
},
{
"name":"Barbell Reverse Lunge"
},
{
"name":"Dumbbell Bulgarien split squat"
},
{
"name":"Dumbbell Lunges"
},
{
"name":"Dumbbell Walking Lunges"
},
{
"name":"Dumbbell Reverse Lunge"
},
{
"name":"Dumbbell Goblet Squat"
},
{
"name":"Dumbbell Step Ups"
},
{
"name":"Hack Squat"
},
{
"name": "Leg Press"
},
{
"name": "Leg Extension"
},
{
"name": "Leg Curl"
},
{
"name":"Barbell Romanin Deadlift"
},
{
"name":"Barbell Stiff leg Deadlift"
},
{
"name":"Dumbell Romanin Deadlift"
},
{
"name":"Dumbell Stiff leg Deadlift"
},
{
"name":"Decline Dumbbell leg curl"
},
{
"name":"Leg Ham Raises"
},
{
"name":"Seated Leg Curl"
},
{
"name":"Seated Single Leg Curl"
},
{
"name":"Laying Leg Curl"
},
{
"name":"Laying single leg leg Curl"
},
{
"name":"Cable Laying Leg Curl"
},
{
"name":"Cable Single Leg Romanian Deadlift"
},
{
"name":"Back Extension (Ham Focused)"
},
{
"name":"Barbell Hip Thrusts"
},
{
"name":"Dumbbell Hip Thusts"
},
{
"name":"Dumbbell leaning Forward Step up"
},
{
"name":"Dumbbell Single leg Hip thusts"
},
{
"name":"Cable Standing Cuff Kickback"
},
{
"name":"Cable Pullthroughs"
},
{
"name":"Cable Standing Side raises"
},
{
"name":"Hip Abduction"
},
{
"name":"Kettkebelt Swings"
},
{
"name":"Glue hamm Raise"
},
{
"name":"Back Extension (Glute Focused)"
},
{
"name":"Single leg Hip Thusts"
},
{
"name":"Plate Hip Thrusts"
},
{
"name":"Single leg Plate Hip thusts"
},
{
"name": "Hip Adduction"
},
{
"name": "Hip Dumbbell Gobleg Adductor Lunges"
},
{
"name": "Calf Raise"
},
{
"name":"Single Leg Standing Dumbbell Calf Raises"
},
{
"name":"Standing Dumbbell Calf Raises"
},
{
"name":"Seated Dunbbell calrf Extensions"
},
{
"name":"Seated Calf Raises"
},
{
"name":"Staning Calf Raises"
},
{
"name":"Donkey Calf Raises"
},
{
"name":"Leg Press Calf Raises"
},
{
"name":"Smith Maschine Donkey Calf Raises"
}
]
},
{
"name": "Back",
"exercises":[
{
"name":"Bentover Barbell Row"
},
{
"name":"Standing T Bar Row"
},
{
"name":"Chest Supported Barbell Row"
},
{
"name":"Landmine 1 Arm Row"
},
{
"name":"Dumbbell Tripod Row"
},
{
"name":"Dumbbell Pullover (Lats)"
},
{
"name":"Chest Supported Dumbbell row"
},
{
"name":"Lat Focused Dumbbell Row"
},
{
"name":"Rocking Pulldown"
},
{
"name":"Close Grip Undergand Pulldown"
},
{
"name":"Lap Pulldown"
},
{
"name":"One Arm High Calbe Row"
},
{
"name":"Seated One Arm High Cable row"
},
{
"name":"Incline Cable Single Arm Stretch"
},
{
"name":"Cable Straight Arm Pushdown Bar"
},
{
"name":"Cable Straight Arm Pusdown Rope"
},
{
"name":"Single Arm Straight Arm Pushdown"
},
{
"name":"Seated Lat Focused Row"
},
{
"name":"Seated Lat Focused One Arm Row"
},
{
"name":"Kneeling one Arm Lat Focused Row"
},
{
"name":"Kneeling Lat Pullin"
},
{
"name":"Seated Chest supported lat row"
},
{
"name":"Pull ups"
},
{
"name":"Asissted Pull ups"
},
{
"name":"Lat Pulldown"
},
{
"name":"Chin ups"
},
{
"name":"Asissted Pull ups"
},
{
"name":"Austrailan Pull ups"
},
{
"name":"Bentover Barbell row"
},
{
"name":"Chest Supported Barbell Row"
},
{
"name":"Medow Row"
},
{
"name":"Chest Supported Dumbbell Row"
},
{
"name":"Dumbbell One Arm Row"
},
{
"name":"Bentover Dumbbell Row"
},
{
"name":"Dumbbell Helms Row"
},
{
"name":"Seated Row (Wide Grip)"
},
{
"name":"Seated Row"
},
{
"name":"Seated chest supported Row"
},
{
"name":"Deadlift"
},
{
"name":"Sumo Deadlift"
},
{
"name":"Dead Row"
},
{
"name":"Barbell Good Morning"
},
{
"name":"Dumbell Good Morning"
},
{
"name":"Dumbell Superman"
},
{
"name":"Back Extensions"
},
{
"name":"Superman"
},
{
"name":"Good Morning"
},
{
"name":"Rack Pull"
},
{
"name":"Barbell Shrugs"
},
{
"name":"Trap bar Shrugs"
},
{
"name":"Trap Bar Carry"
},
{
"name":"Dumbbell Shrugs"
},
{
"name":"Dumbbell Carry"
},
{
"name":"Dumbell Seated Shrug"
},
{
"name":"Cable Shrugs"
},
{
"name":"Plate Shurugs"
},
{
"name":"Plate Carry"
},
{
"name":"Cable Wrap Around Row"
},
{
"name":"Cable Rope Pull"
},
{
"name":"Prone Reverse Fly"
},
{
"name":"Cable FacePull Press"
},
{
"name":"Prone Y Rise"
},
{
"name":"Prone Press"
},
{
"name":"Plate Raise"
}
]
},
{
"name": "Chest",
"exercises":[
{
"name":"Incline Barbell Bench Press"
},
{
"name":"Kneeling Landmine Press"
},
{
"name":"Flat Underhand Barbell Bench Press"
},
{
"name":"Landmine Rainbow"
},
{
"name":"Paused Incline Barbell Bench Press"
},
{
"name":"Incline Dumbbell Bench Press"
},
{
"name":"Dumbbell Pullover (Chest)"
},
{
"name":"DB UCV Raise"
},
{
"name":"Incline Dumbbell Squeeze Press"
},
{
"name":"Flat Underhand Dumbbell Bench Press"
},
{
"name":"Paused Incline Dumbbell Bench Press"
},
{
"name":"Sranding Low to High Cable Fly"
},
{
"name":"Seated Low to High Cable Fly"
},
{
"name":"Incline Cable Press"
},
{
"name":"Standing Low to High Crossover"
},
{
"name":"Seated Low to High Crossover"
},
{
"name":"Dual Cable UCV Raise"
},
{
"name":"Decline Pushup"
},
{
"name":"Slight Decline Bench Pess"
},
{
"name":"Barbell Bench Press"
},
{
"name":"Close Grip Barbell Bench Press"
},
{
"name":"Slight Delcline Dumbbell Press"
},
{
"name":"Dumbbell Bench Press"
},
{
"name":"Paused Dumbbell Bench Press"
},
{
"name":"Dumbbel Floor Fly"
},
{
"name":"Seated Cable Fly"
},
{
"name":"Seated Cable Press"
},
{
"name":"Seated Cable Crossover"
},
{
"name":"Standing Calbe Press"
},
{
"name":"Standing Cable Crossover"
},
{
"name":"Staning Cable Fly"
},
{
"name":"Standing Calbe Press"
},
{
"name":"Standing Cable Crossover"
},
{
"name":"Pushup"
},
{
"name":"Push away Pushup"
},
{
"name":"Plate loaded Chest press"
},
{
"name":"Assisted Chest press"
},
{
"name":"Pec Dec (Chest)"
},
{
"name":"Assisted Dip"
},
{
"name":"Dip"
},
{
"name":"Decline Barbell Bench Press"
},
{
"name":"Barbell Dips"
},
{
"name":"Decline Dumbbell Bench Press"
},
{
"name":"Decline Dumbbell Flys Supernated"
},
{
"name":"Decline Dumbbell Pullover"
},
{
"name":"High to low Cable flys"
},
{
"name":"High to low Cable Press"
},
{
"name":"High to low Crossover"
},
{
"name":"Standing Cable LC Press"
},
{
"name":"Kneeling X Press"
},
{
"name":"Decline Cable Dip"
},
{
"name":"Jack Hammer Pushdown"
}
]
},
{
"name": "Shoulders",
"exercises":[
{
"name":"Barbell Overhead Press"
},
{
"name":"Seated Barbell Overhead Press"
},
{
"name":"Barbell Front raises"
},
{
"name":"Kneeling Landmine Press"
},
{
"name":"Smithmashine Shoulder Press"
},
{
"name":"Dumbell Overhead Press"
},
{
"name":"Seated Dumbell Overhead Press"
},
{
"name":"Dumbell Arnold Press"
},
{
"name":"Seated Arnold Press"
},
{
"name":"Dumbbell Front Raises (pronated Grip)"
},
{
"name":"Dumbbell Front Raises (Hammer Grip)"
},
{
"name":"Dumbbell Front Raises (Supernated Grip BEST)"
},
{
"name":"Seated Dumbell Press (Supernated Grip"
},
{
"name":"Staning Dumbell Press (Supernated Grip)"
},
{
"name":"Dumbbel Scoop Press"
},
{
"name":"Cable Front Riase (Pronated Grip)"
},
{
"name":"Cable Front Riase (Supernated Grip BEST)"
},
{
"name":"Cable Strch Front Raises"
},
{
"name":"Plate Bus Drivers"
},
{
"name":"Handstand Pushup"
},
{
"name":"Pike Pushup"
},
{
"name":"Seated Dumbbell Lateral Raise"
},
{
"name":"Standing Dumbbell Lateral Raise"
},
{
"name":"Dumbbell Cheat Lateral Raise"
},
{
"name":"Lying Incline Lateral Raise"
},
{
"name":"Incline Dumbbell Parsel Side Lateral Raise"
},
{
"name":"Cable Behind Body Lateral Raise "
},
{
"name":"Cable Lateral Raise"
},
{
"name":"Cable Lean-Away Lateral Raise"
},
{
"name":"Egyptian Lateral Raise"
},
{
"name":"Standing Cable Y Raise"
},
{
"name":"Maschine Side Lateral Raises"
},
{
"name":"Standing Barbell Rear Delt Row"
},
{
"name":"Chest Supported Barbell Rear Delt Row"
},
{
"name":"Behinde the Back Barbell Raise"
},
{
"name":"Dumbbell Rear Delt Row"
},
{
"name":"Dumbbell Chest Supported Rear Delt Swing"
},
{
"name":"Dumbbell Chest Supported Rear Delt Row"
},
{
"name":"Dumbbell Reverse Flys"
},
{
"name":"Dumbbll Hip Hugger"
},
{
"name":"Abdduction Row"
},
{
"name":"Incline Behind the Back Dumbbell Raise"
},
{
"name":"Incline Dumbbell Rear Delt Fly"
},
{
"name":"Seated Cable Rear Delt Row"
},
{
"name":"Rear Delt Cable Pull"
},
{
"name":"Double Arm Reverse Cabel Fly"
},
{
"name":"Singke Arm Reverse Cable Fly"
},
{
"name":"Standing Face Pull"
},
{
"name":"Kneeling Face Pull"
},
{
"name":"Laying Face Pull"
},
{
"name":"Reverse Pec Deck"
},
{
"name":"Maschine Side Lateral Rear Delt Fly"
}
]
},
{
"name":"Biceps",
"exercises":[
{
"name":"Dumbbell Concentration Curl (Pronated Grip)"
},
{
"name":"Crossbody Cable Curl"
},
{
"name":"Dumbbell Concentration Curl (Hammer Grip)"
},
{
"name":"Barbell Reverse Grip Curl"
},
{
"name":"Ez Bar Reverse Grip Curl"
},
{
"name":"Dumbbell Reverse Grip"
},
{
"name":"Barbell Curl"
},
{
"name":"Ez bar Curl"
},
{
"name":"Standing Dumbbell Curl"
},
{
"name":"Seated Cable Curl"
},
{
"name":"High Cable Curl"
}
]
},
{
"name":"Triceps",
"exercises":[
{
"name":"Rope Cable Pushdown (infront Body)"
},
{
"name":"Straight Bart Cable Pushdown (underhand Grip)"
},
{
"name":"Dumbbell Overhead Extension"
},
{
"name":"Dip"
},
{
"name":"Rope Cable Pushdown (behind body)"
},
{
"name":"Cable Straight Bar Pushdown"
},
{
"name":"Barbell Dip"
},
{
"name":"Close Grip Pushup"
},
{
"name":"Close Grip Barbell Bench Press"
}
]
}
]
}

24
src/components/Button.vue Normal file
View File

@ -0,0 +1,24 @@
<template>
</template>
<script setup>
</script>
<style>
.btn {
background-color: white;
border: none;
border-radius: 1rem;
color: #000;
cursor: pointer;
font-size: 18px;
padding: 5px 10px;
}
.btn--primary {
background-color: #007bff;
color: #fff;
}
</style>

View File

@ -0,0 +1,118 @@
<template>
<input class="search " type="text" v-model="input" placeholder="Search..." />
<div class="flex">
<div class="exerciseList">
<ul class="exerciseItem" v-for="exercise in filterExercises()" :key="exercise.name">
<Button @click="exerciseClick(exercise)" class="btn bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4" >{{ exercise.name }}</Button>
</ul>
</div>
<div v-show="isClicked" class="show">
<label> {{ exerciseName }}</label>
<WeightsInput/>
</div>
</div>
</template>
<script setup>
import { usePostStore } from '@/stores/store.js';
import { onMounted, ref } from 'vue';
import WeightsInput from "@/views/weight/WeightsInput.vue";
const muscle = defineProps({
muscle: String,
warmUpSets: Array,
workingSets: Array,
warmUpReps: Array,
workingReps: Array,
})
let isClicked = false
const json = usePostStore()
const exercises = ref([])
let exerciseName = ""
onMounted(async () => {
await json.fetchMuscleExercise()
switch (muscle.muscle) {
case "Legs":
exercises.value = json.postList.muscle[0].exercises
break;
case "Back":
exercises.value = json.postList.muscle[1].exercises
break;
case "Chest":
exercises.value = json.postList.muscle[2].exercises
break;
case "Shoulder":
exercises.value = json.postList.muscle[3].exercises
break;
case "Biceps":
exercises.value = json.postList.muscle[4].exercises
break;
case "Triceps":
exercises.value = json.postList.muscle[5].exercises
break;
}
}
)
// filter exercises with help from https://blog.logrocket.com/create-search-bar-vue/ last accessed 05.05.2023
let input = ref('');
function filterExercises(){
return exercises.value.filter((exercise) => {
return exercise.name.toLowerCase().includes(input.value.toLowerCase());
});
};
const showWeightInput = (isClicked) => {
isClicked.value = true
}
const exerciseClick = (exercise) => {
isClicked = true
exerciseName = exercise.name
console.log(isClicked)
}
</script>
<style>
.exerciseList{
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 0.25rem;
margin-top: 0.5rem;
}
.search{
width: auto;
height: 2rem;
border-radius: 1rem;
border: 1px solid #ccc;
padding: 1rem;
font-size: 1rem;
}
.weights{
display: flex;
flex-direction: row;
gap: 0.25rem;
margin-top: 0.5rem;
margin-left: 5rem;
color: white;
}
.set{
display: flex;
flex-direction: row;
align-items: flex-start;
gap: 0.25rem;
margin-top: 0.5rem;
color: white;
}
</style>

View File

@ -1,2 +1,3 @@
export { default as NavigationModel } from './NavigationModel.vue'; export { default as NavigationModel } from './NavigationModel.vue';
export { default as Nav } from './Nav.vue'; export { default as ExerciseList } from './ExerciseList.vue';
export { default as Button } from './Button.vue';

View File

@ -1,13 +0,0 @@
<script setup>
</script>
<template>
<nav v-show="true" class="navbar navbar-expand navbar-dark bg-dark">
<div class="navbar-nav">
<router-link to="/" class="nav-item nav-link">Home</router-link>
<router-link to="/users" class="nav-item nav-link">Users</router-link>
<button @click="authStore.logout()" class="btn btn-link nav-item nav-link">Logout</button>
</div>
</nav>
</template>

View File

@ -1,9 +1,8 @@
<script setup>
</script>
<template> <template>
<nav v-show="true" class="navbar navbar-expand navbar-dark bg-dark"> <nav v-show="true" class="navbar navbar-expand navbar-dark bg-dark">
<div class="logo">
<img src="../assets/logo.png" alt="logo"/>
</div>
<div class="navbar-nav"> <div class="navbar-nav">
<router-link to="/" class="nav-item nav-link">Home</router-link> <router-link to="/" class="nav-item nav-link">Home</router-link>
<router-link to="/Muscles/Legs" class="nav-item nav-link">Legs</router-link> <router-link to="/Muscles/Legs" class="nav-item nav-link">Legs</router-link>
@ -11,7 +10,44 @@
<router-link to="/Muscles/Chest" class="nav-item nav-link">Chest</router-link> <router-link to="/Muscles/Chest" class="nav-item nav-link">Chest</router-link>
<router-link to="/Muscles/Shoulder" class="nav-item nav-link">Shoulder</router-link> <router-link to="/Muscles/Shoulder" class="nav-item nav-link">Shoulder</router-link>
<router-link to="/Muscles/Triceps" class="nav-item nav-link">Triceps</router-link> <router-link to="/Muscles/Triceps" class="nav-item nav-link">Triceps</router-link>
<router-link to="/Muscles/Bicepts" class="nav-item nav-link">Bicepts</router-link> <router-link to="/Muscles/Biceps" class="nav-item nav-link">Biceps</router-link>
</div> </div>
</nav> </nav>
</template> </template>
<script setup>
</script>
<style lang="scss" scoped>
// styling for the navbar (with reference to https://css-tricks.com/snippets/css/a-guide-to-flexbox/#aa-flexbox-properties last accessed 05.05.2023)
.navbar{
display: flex;
width: 100%;
height: 4rem;
justify-content: start;
background: rgb(36, 165, 75);
}
.navbar-nav{
display: flex;
width: 100%;
justify-content: start;
align-items: center;
}
.nav-item{
margin-left: 1rem;
margin-right: 1rem;
color: white;
text-decoration: none;
}
.nav-item:hover{
color: orangered;
}
.logo{
display: flex;
}
.logo img {
width: 15%;
height: 100%;
margin-left: 0.5rem;
}
</style>

View File

@ -1,11 +0,0 @@
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import HelloWorld from '../HelloWorld.vue'
describe('HelloWorld', () => {
it('renders properly', () => {
const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } })
expect(wrapper.text()).toContain('Hello Vitest')
})
})

View File

@ -63,4 +63,3 @@
} }
/*# sourceMappingURL=head.css.map */ /*# sourceMappingURL=head.css.map */

View File

@ -49,17 +49,4 @@
font-weight: normal; 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;
}
/*# sourceMappingURL=head.css.map */ /*# sourceMappingURL=head.css.map */

View File

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["head.scss"],"names":[],"mappings":"AAAA;AACA;EACE;EACA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;;;AAGF;EACE;IACE;IACA;IACA;IAEA;IACA;IAEA;IACA;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA","file":"head.css"} {"version":3,"sourceRoot":"","sources":["head.scss"],"names":[],"mappings":"AAAA;AACA;EACE;EACA;EACA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;;;AAGF;EACE;IACE;IACA;IACA;IAEA;IACA;IAEA;IACA;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA","file":"head.css"}

View File

@ -58,17 +58,3 @@
position: relative; position: relative;
font-weight: normal; 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;
}

4
src/css/main.scss Normal file
View File

@ -0,0 +1,4 @@
@import 'base.scss';
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@ -4,7 +4,7 @@ import { createPinia } from 'pinia'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import './assets/main.css' import './css/main.scss'
const app = createApp(App) const app = createApp(App)
app.use(createPinia()) app.use(createPinia())

View File

@ -1,15 +1,13 @@
import { Legs, Back, Chest, Shoulder, Triceps, Biceps } from '@/views/muscles'; import {Back, Biceps, Chest, Legs, Shoulder, Triceps } from "../views/muscles/Index.js";
// import Tilebar from '@/views/layouts';
export default { export default {
path: '/muscles', path: '/muscles',
// component: Tilebar,
children: [ children: [
{ path: 'legs', component: Legs }, { path: 'legs', component: Legs },
{ path: 'back', component: Back }, { path: 'back', component: Back },
{ path: 'chest', component: Chest }, { path: 'chest', component: Chest },
{ path: 'shoulder', component: Shoulder }, { path: 'shoulder', component: Shoulder },
{ path: 'triceps', component: Triceps }, { path: 'triceps', component: Triceps },
{ path: 'bicepts', component: Biceps }, { path: 'biceps', component: Biceps },
] ]
}; };

View File

@ -1,6 +1,6 @@
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/Home.vue' import HomeView from '../views/Home.vue'
import MusclesRouter from './muscle.router.js'; import MusclesRouter from './muscle.js';
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
@ -11,54 +11,11 @@ const router = createRouter({
component: HomeView component: HomeView
}, },
{... MusclesRouter}, {... MusclesRouter},
// { {
// path: '/chest', path: '/weightsinput',
// name: 'chest', name: 'weightsinput',
// // route level code-splitting component: () => import('../views/weight/WeightsInput.vue')
// // this generates a separate chunk (About.[hash].js) for this route }
// // which is lazy-loaded when the route is visited.
// component: () => import('../views/Muscles/ChestView.vue')
// },
// {
// path: '/shoulder',
// name: 'shoulder',
// // route level code-splitting
// // this generates a separate chunk (About.[hash].js) for this route
// // which is lazy-loaded when the route is visited.
// component: () => import('../views/Muscles/ShoulderView.vue')
// },
// {
// path: '/legs',
// name: 'legs',
// // route level code-splitting
// // this generates a separate chunk (About.[hash].js) for this route
// // which is lazy-loaded when the route is visited.
// component: () => import('../views/Muscles/LegsView.vue')
// },
// {
// path: '/back',
// name: 'back',
// // route level code-splitting
// // this generates a separate chunk (About.[hash].js) for this route
// // which is lazy-loaded when the route is visited.
// component: () => import('../views/Muscles/BackView.vue')
// },
// {
// path: '/biceps',
// name: 'biceps',
// // route level code-splitting
// // this generates a separate chunk (About.[hash].js) for this route
// // which is lazy-loaded when the route is visited.
// component: () => import('../views/Muscles/BicepsView.vue')
// },
// {
// path: '/triceps',
// name: 'triceps',
// // route level code-splitting
// // this generates a separate chunk (About.[hash].js) for this route
// // which is lazy-loaded when the route is visited.
// component: () => import('../views/Muscles/TricepsView.vue')
// },
] ]
}) })

View File

@ -1,12 +0,0 @@
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 }
})

22
src/stores/store.js Normal file
View File

@ -0,0 +1,22 @@
import {defineStore} from 'pinia'
import muscleExercise from '../assets/muscleExercise';
import { ref } from 'vue'
export const usePostStore = defineStore('json', () => {
const postList = ref([])
const error = ref([])
async function fetchMuscleExercise() {
postList.value = muscleExercise
error.value = []
}
return {
postList,
error,
fetchMuscleExercise
}
}
)
export default usePostStore

22
src/stores/storeWeight.js Normal file
View File

@ -0,0 +1,22 @@
import {defineStore} from 'pinia'
import {useStorage} from '@vueuse/core'
//see https://stephanlangeveld.medium.com/simple-local-storage-implementation-using-vue-3-vueuse-and-pinia-with-zero-extra-lines-of-code-cb9ed2cce42a
export const useWeightStore = defineStore({
id: 'weight',
state: () => ({
weight: [],
reps: []
}),
getters: {
getAllWeights() {
return this.weight.value
},
},
actions: {
addWeight(weight, reps) {
this.weight.push(weight);
this.reps.push(reps);
},
}
})

View File

@ -1,18 +0,0 @@
<template>
<div class="wrapper">
<nav>
<RouterLink to="/home">Home</RouterLink>
</nav>
</div>
</template>
<style>
@media (min-width: 1024px) {
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>

View File

@ -4,6 +4,6 @@
<template> <template>
<main> <main>
<h1 HomeView h1/> <h1>HomeView</h1>
</main> </main>
</template> </template>

View File

@ -1 +0,0 @@
export {default as Tilebar} from './Tilebar.vue';

View File

@ -1,8 +0,0 @@
<template>
<div class="p-4">
<div class="container">
<router-view />
</div>
</div>
</template>

View File

@ -1,16 +1,15 @@
<template> <template>
<div class="back"> <div class="text-3xl font-bold underline text-blue-500">
<h1>Back</h1> <h1>Back</h1>
<ExerciseList muscle="Back"/>
</div> </div>
</template> </template>
<style> <script setup>
@media (min-width: 1024px) { import {ExerciseList} from "@/components/Index.js";
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>
</script>
<style>
</style>

View File

@ -1,16 +1,15 @@
<template> <template>
<div class="biceps"> <div class="biceps">
<h1>Biceps</h1> <h1>Biceps</h1>
<ExerciseList muscle="Biceps"/>
</div> </div>
</template> </template>
<style> <script setup>
@media (min-width: 1024px) { import {ExerciseList} from "@/components/Index.js";
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>
</script>
<style>
</style>

View File

@ -1,19 +1,19 @@
<script setup>
</script>
<template> <template>
<div class="chest"> <div class="flex">
<div class="w-1/2">
<h1>Chest</h1> <h1>Chest</h1>
<ExerciseList muscle="Chest"/>
</div>
<div>
<weightsInput/>
</div>
</div> </div>
</template> </template>
<script setup>
import {ExerciseList} from "@/components/Index.js";
</script>
<style> <style>
@media (min-width: 1024px) {
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style> </style>

View File

@ -1,16 +1,15 @@
<template> <template>
<div class="legs"> <div class="legs">
<h1>Legs</h1> <h1>Legs</h1>
<ExerciseList muscle="Legs"/>
</div> </div>
</template> </template>
<style> <script setup>
@media (min-width: 1024px) { import {ExerciseList} from "@/components/Index.js";
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>
</script>
<style>
</style>

View File

@ -1,16 +1,16 @@
<template> <template>
<div class="shoulder"> <div class="shoulder">
<h1>Shoulder</h1> <h1>Shoulder</h1>
<ExerciseList muscle="Shoulder"/>
</div> </div>
</template> </template>
<script setup>
import {ExerciseList} from "@/components/Index.js";
</script>
<style> <style>
@media (min-width: 1024px) {
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style> </style>

View File

@ -1,16 +1,15 @@
<template> <template>
<div class="triceps"> <div class="triceps">
<h1><button>Triceps</button></h1> <h1>Triceps</h1>
<ExerciseList muscle="Triceps"/>
</div> </div>
</template> </template>
<style> <script setup>
@media (min-width: 1024px) { import {ExerciseList} from "@/components/Index.js";
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>
</script>
<style>
</style>

View File

@ -0,0 +1 @@
export {default as weightsInput} from './WeightsInput.vue';

View File

@ -0,0 +1,87 @@
<template>
//TODO make view resposive on button click add
<div class="w-2/3 mx-auto">
<div class="warmup-sets mt-12 w-2/3">
<label>Warm-Up Sets</label>
<button @click="warmUpAddSet()" class="add-btn bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded ml-5">Add</button>
<div v-for="warmupset in warmUpInput.warmUpSets" class="item" :key="warmupset">
{{ warmupset }}
<input name="warmupweight" class="mt-1 px-3 py-2 bg-black border shadow-sm border-slate-300 placeholder-slate-400 focus:outline-none focus:border-sky-500 focus:ring-sky-500 block rounded-md sm:text-sm focus:ring-1" placeholder="Weight in Kg" />
</div>
</div>
<div class="working-set mt-5">
<label>Working Sets</label>
<button @click="workingAddSet()" class="add-btn bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded ml-7">Add</button>
<div>
<div v-for="(workingset, index) in workingInput.workingSets" class="item flex justify-smart mt-3" :key="index">
{{ workingset }}
<div class="ml-3">
<input v-model="workingInput.workingSets" class="mt-1 px-3 py-2 bg-black border shadow-sm border-slate-300 placeholder-slate-400 focus:outline-none focus:border-sky-500 focus:ring-sky-500 block rounded-md sm:text-sm focus:ring-1" placeholder="Weight in Kg"/>
</div>
<label>Reps</label>
<div class="ml-3">
<input v-model="workingInput.workingReps" class="mt-1 px-3 py-2 bg-black border shadow-sm border-slate-300 placeholder-slate-400 focus:outline-none focus:border-sky-500 focus:ring-sky-500 block rounded-md sm:text-sm focus:ring-1" placeholder="Reps">
</div>
</div>
</div>
</div>
<button @click="addWeight()" class="add-btn bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mt-5">Save</button>
</div>
</template>
<script setup>
import { useWeightStore } from '@/stores/storeWeight';
let warmUpSetCount = 0;
let workingSetCount = 0;
const weight = useWeightStore();
let warmUpInput = {
warmUpSets: [],
warmUpReps: []
}
let workingInput = {
workingSets: [],
workingReps: []
}
const warmUpAddSet = () => {
const newWarmUpSet = {
id: warmUpSetCount++,
content: warmUpSetCount + ". Set"
};
warmUpInput.warmUpSets.push(newWarmUpSet.content);
console.log(warmUpInput.warmUpSets);
};
const workingAddSet = () => {
const newWorkingSet = {
id: workingSetCount++,
content: workingSetCount + ". Set"
};
workingInput.workingSets.push(newWorkingSet.content);
console.log(workingInput);
};
const addWeight = () => {
//TODO: Add warmup sets and reps to store
weight.addWeight(workingSetInput.value, workingRepsSets.value);
workingSetInput.value = "";
workingRepsSets.value = "";
}
console.log(addWeight);
</script>
<style>
</style>
export default weightsInput;

12
tailwind.config.js Normal file
View File

@ -0,0 +1,12 @@
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
"./src/**/*.{vue,js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}