From edc93401db257e388a7920b107d7b14c408f6e9b Mon Sep 17 00:00:00 2001 From: Ada Werefox Date: Fri, 25 Apr 2025 15:40:04 -0700 Subject: [PATCH] Properly display and add items to database. --- package-lock.json | 52 ++++++++++++++++++- package.json | 1 + public/css/main.css | 77 +++++++++++++++++++--------- src/components/AddFunction.vue | 59 +++++++++++++++++++++ src/components/AddFunctionTag.vue | 27 ++++++++++ src/components/AddGroup.vue | 16 ++++-- src/components/ListFunctionTags.vue | 15 ++++++ src/components/ListFunctions.vue | 35 +++++++++++++ src/components/ListGroups.vue | 6 +-- src/components/TheWelcome.vue | 5 +- src/components/UserInfo.vue | 2 +- src/ts/function_tags.ts | 47 +++++++++++++++++ src/ts/functions.ts | 79 +++++++++++++++++++++++++++++ src/ts/groups.ts | 4 +- src/views/UserDashboard.vue | 65 +++++++++++++++++++++--- 15 files changed, 445 insertions(+), 45 deletions(-) create mode 100644 src/components/AddFunction.vue create mode 100644 src/components/AddFunctionTag.vue create mode 100644 src/components/ListFunctionTags.vue create mode 100644 src/components/ListFunctions.vue create mode 100644 src/ts/function_tags.ts create mode 100644 src/ts/functions.ts diff --git a/package-lock.json b/package-lock.json index 31a6d70..6d622bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@tailwindcss/cli": "^4.1.4", "@tailwindcss/vite": "^4.1.4", + "rustywind": "^0.24.0", "tailwindcss": "^4.1.4", "vue": "^3.5.13", "vue-router": "^4.5.0" @@ -2798,6 +2799,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3083,7 +3093,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3844,6 +3853,19 @@ "dev": true, "license": "MIT" }, + "node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "license": "MIT", + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/human-signals": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", @@ -4516,7 +4538,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/muggle-string": { @@ -4947,6 +4968,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5096,6 +5123,21 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rustywind": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/rustywind/-/rustywind-0.24.0.tgz", + "integrity": "sha512-NVOuXMO6WSuzZ1M+p2d3tGuSVY0XFJtjCHtK4G2L3tm+DDxfVUUR0RGhfQShoSKttYfc25cCbzhLUfQrlvfY8A==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "https-proxy-agent": "^4.0.0", + "proxy-from-env": "^1.1.0", + "user": "^0.0.0" + }, + "bin": { + "rustywind": "bin/rustywind" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -5478,6 +5520,12 @@ "punycode": "^2.1.0" } }, + "node_modules/user": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/user/-/user-0.0.0.tgz", + "integrity": "sha512-eRNM5isOvr6aEFAGi1CqAkmLkYxW2NJ5ThhbD+6IJXYKM1mo7Gtxx4mQIveHz/5K3p/SVnlW9k17ETn+QAu8IQ==", + "license": "MIT" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 82a41f6..ab125fe 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "dependencies": { "@tailwindcss/cli": "^4.1.4", "@tailwindcss/vite": "^4.1.4", + "rustywind": "^0.24.0", "tailwindcss": "^4.1.4", "vue": "^3.5.13", "vue-router": "^4.5.0" diff --git a/public/css/main.css b/public/css/main.css index 893f157..b5fc8ec 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -23,7 +23,6 @@ --text-3xl--line-height: calc(2.25 / 1.875); --radius-sm: 0.25rem; --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12); - --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15); --default-font-family: var(--font-sans); --default-mono-font-family: var(--font-mono); --color-primary: oklch(0.1 0 0); @@ -177,6 +176,9 @@ } } @layer utilities { + .absolute { + position: absolute; + } .fixed { position: fixed; } @@ -207,12 +209,18 @@ .mx-auto { margin-inline: auto; } + .my-auto { + margin-block: auto; + } .ml-2 { margin-left: calc(var(--spacing) * 2); } .flex { display: flex; } + .h-fit { + height: fit-content; + } .h-full { height: 100%; } @@ -225,6 +233,9 @@ .min-h-screen { min-height: 100vh; } + .w-fit { + width: fit-content; + } .w-full { width: 100%; } @@ -260,6 +271,13 @@ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); } } + .space-x-2 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); + } + } .space-x-4 { :where(& > :not(:last-child)) { --tw-space-x-reverse: 0; @@ -267,6 +285,13 @@ margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); } } + .space-x-8 { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 8) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-x-reverse))); + } + } .rounded-full { border-radius: calc(infinity * 1px); } @@ -284,25 +309,28 @@ .border-accent { border-color: var(--color-accent); } + .bg-accent { + background-color: var(--color-accent); + } .bg-black { background-color: var(--color-black); } .bg-primary { background-color: var(--color-primary); } - .bg-primary\/50 { - background-color: color-mix(in srgb, oklch(0.1 0 0) 50%, transparent); + .bg-primary\/80 { + background-color: color-mix(in srgb, oklch(0.1 0 0) 80%, transparent); @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-primary) 50%, transparent); + background-color: color-mix(in oklab, var(--color-primary) 80%, transparent); } } .bg-secondary { background-color: var(--color-secondary); } - .bg-white\/50 { - background-color: color-mix(in srgb, #fff 50%, transparent); + .bg-secondary\/50 { + background-color: color-mix(in srgb, oklch(0.85 0.1733 93.56) 50%, transparent); @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 50%, transparent); + background-color: color-mix(in oklab, var(--color-secondary) 50%, transparent); } } .bg-white\/75 { @@ -311,18 +339,6 @@ background-color: color-mix(in oklab, var(--color-white) 75%, transparent); } } - .bg-white\/80 { - background-color: color-mix(in srgb, #fff 80%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 80%, transparent); - } - } - .bg-white\/90 { - background-color: color-mix(in srgb, #fff 90%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 90%, transparent); - } - } .mask-clip-border { mask-clip: border-box; } @@ -335,6 +351,9 @@ .text-center { text-align: center; } + .align-middle { + vertical-align: middle; + } .font-mono { font-family: var(--font-mono); } @@ -346,6 +365,9 @@ font-size: var(--text-xl); line-height: var(--tw-leading, var(--text-xl--line-height)); } + .text-nowrap { + text-wrap: nowrap; + } .text-accent { color: var(--color-accent); } @@ -359,23 +381,30 @@ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } + .ring-accent\/80 { + --tw-ring-color: color-mix(in srgb, oklch(0.6 0.1556 246.71) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-accent) 80%, transparent); + } + } .ring-primary\/80 { --tw-ring-color: color-mix(in srgb, oklch(0.1 0 0) 80%, transparent); @supports (color: color-mix(in lab, red, red)) { --tw-ring-color: color-mix(in oklab, var(--color-primary) 80%, transparent); } } + .ring-secondary\/30 { + --tw-ring-color: color-mix(in srgb, oklch(0.85 0.1733 93.56) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + --tw-ring-color: color-mix(in oklab, var(--color-secondary) 30%, transparent); + } + } .ring-secondary\/80 { --tw-ring-color: color-mix(in srgb, oklch(0.85 0.1733 93.56) 80%, transparent); @supports (color: color-mix(in lab, red, red)) { --tw-ring-color: color-mix(in oklab, var(--color-secondary) 80%, transparent); } } - .drop-shadow-lg { - --tw-drop-shadow-size: drop-shadow(0 4px 4px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.15))); - --tw-drop-shadow: drop-shadow(var(--drop-shadow-lg)); - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } .drop-shadow-md { --tw-drop-shadow-size: drop-shadow(0 3px 3px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.12))); --tw-drop-shadow: drop-shadow(var(--drop-shadow-md)); diff --git a/src/components/AddFunction.vue b/src/components/AddFunction.vue new file mode 100644 index 0000000..fc43a94 --- /dev/null +++ b/src/components/AddFunction.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/components/AddFunctionTag.vue b/src/components/AddFunctionTag.vue new file mode 100644 index 0000000..42932b0 --- /dev/null +++ b/src/components/AddFunctionTag.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/AddGroup.vue b/src/components/AddGroup.vue index d694315..f96beba 100644 --- a/src/components/AddGroup.vue +++ b/src/components/AddGroup.vue @@ -1,13 +1,21 @@