feat: migrate to tailwind v4 and fix user token API

This commit is contained in:
DecDuck
2025-02-14 20:01:18 +11:00
parent 97792f0707
commit 31aaec74af
19 changed files with 348 additions and 57 deletions

View File

@ -1,7 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
$motiva: (
("MotivaSansThin.ttf", "ttf", 100, normal),
("MotivaSansLight.woff.ttf", "woff", 300, normal),
@ -72,3 +68,12 @@ $helvetica: (
.store-caoursel > .carousel__viewport {
overflow: visible !important;
}
button {
cursor: pointer !important;
}
html {
background-color: oklch(.21 .006 285.885);
}

4
assets/tailwindcss.css Normal file
View File

@ -0,0 +1,4 @@
@import "tailwindcss";
@plugin "@tailwindcss/typography";
@plugin "@tailwindcss/forms";
@config "../tailwind.config.js";

View File

@ -4,7 +4,7 @@
:loading="isLibraryLoading"
@click="() => toggleLibrary()"
:style="'none'"
class="transition w-48 inline-flex items-center justify-center gap-x-2 rounded-l-md bg-white/10 group-hover:bg-white/15 text-zinc-100 backdrop-blur px-5 py-3 active:scale-95"
class="transition w-48 h-fit gap-x-2 rounded-none rounded-l-md bg-white/10 hover:bg-white/20 text-zinc-100 backdrop-blur px-5 py-3 active:scale-95"
>
{{ inLibrary ? "In Library" : "Add to Library" }}
<CheckIcon v-if="inLibrary" class="-mr-0.5 h-5 w-5" aria-hidden="true" />
@ -15,7 +15,7 @@
<Menu as="div" class="relative">
<MenuButton
as="div"
class="transition cursor-pointer inline-flex items-center rounded-r-md h-full ml-[2px] bg-white/10 group-hover:bg-white/15 backdrop-blur py-3.5 px-2 justify-center focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white/20"
class="transition cursor-pointer inline-flex items-center rounded-r-md h-full ml-[2px] bg-white/10 hover:bg-white/20 backdrop-blur py-3.5 px-2 justify-center focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white/20"
>
<ChevronDownIcon class="h-5 w-5 text-white" aria-hidden="true" />
</MenuButton>

View File

@ -39,15 +39,16 @@
</NuxtLink>
<div class="h-0.5 rounded-full w-full bg-zinc-800" />
<div class="flex flex-col">
<MenuItem v-for="(nav, navIdx) in navigation" v-slot="{ active }">
<NuxtLink
<MenuItem v-for="(nav, navIdx) in navigation" v-slot="{ active, close }">
<button
:href="nav.route"
@click="() => navigateTo(nav.route, close)"
:class="[
active ? 'bg-zinc-800 text-zinc-100' : 'text-zinc-400',
'transition block px-4 py-2 text-sm',
'text-left transition block px-4 py-2 text-sm',
]"
>
{{ nav.label }}</NuxtLink
{{ nav.label }}</button
>
</MenuItem>
</div>
@ -84,4 +85,11 @@ const navigation: NavigationItem[] = [
prefix: "",
},
].filter((e) => e !== undefined);
const router = useRouter();
function navigateLink(href: string, closeFn: () => any) {
closeFn();
router.push(href);
}
</script>

View File

@ -1,4 +1,5 @@
import path from "path";
import tailwindcss from "@tailwindcss/vite";
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
@ -6,13 +7,12 @@ export default defineNuxtConfig({
telemetry: false,
compatibilityDate: "2024-04-03",
devtools: { enabled: false },
css: ["~/assets/core.scss"],
css: ["~/assets/tailwindcss.css", "~/assets/core.scss"],
postcss: {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
vite: {
plugins: [
tailwindcss()
]
},
app: {

View File

@ -17,6 +17,7 @@
"@nuxt/content": "^2.13.4",
"@nuxtjs/tailwindcss": "^6.12.2",
"@prisma/client": "^6.1.0",
"@tailwindcss/vite": "^4.0.6",
"axios": "^1.7.7",
"bcryptjs": "^2.4.3",
"cookie-es": "^1.2.2",
@ -48,13 +49,13 @@
"nitropack": "^2.9.7",
"postcss": "^8.4.47",
"sass": "^1.79.4",
"tailwindcss": "^3.4.15"
"tailwindcss": "^4.0.0"
},
"optionalDependencies": {
"@drop/droplet-linux-x64-gnu": "^0.7.0",
"@drop/droplet-win32-x64-msvc": "^0.7.0",
"@drop/droplet-darwin-arm64": "^0.7.0",
"@drop/droplet-linux-arm64-gnu": "^0.7.0"
"@drop/droplet-linux-arm64-gnu": "^0.7.0",
"@drop/droplet-linux-x64-gnu": "^0.7.0",
"@drop/droplet-win32-x64-msvc": "^0.7.0"
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}

View File

@ -0,0 +1,8 @@
/*
Warnings:
- Added the required column `name` to the `APIToken` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "APIToken" ADD COLUMN "name" TEXT NOT NULL;

View File

@ -0,0 +1,14 @@
/*
Warnings:
- The primary key for the `APIToken` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The required column `id` was added to the `APIToken` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
*/
-- AlterTable
ALTER TABLE "APIToken" DROP CONSTRAINT "APIToken_pkey",
ADD COLUMN "id" TEXT NOT NULL,
ADD CONSTRAINT "APIToken_pkey" PRIMARY KEY ("id");
-- CreateIndex
CREATE INDEX "APIToken_token_idx" ON "APIToken"("token");

View File

@ -0,0 +1,20 @@
/*
Warnings:
- Made the column `launchCommand` on table `GameVersion` required. This step will fail if there are existing NULL values in that column.
- Made the column `setupCommand` on table `GameVersion` required. This step will fail if there are existing NULL values in that column.
*/
UPDATE "GameVersion"
SET "launchCommand" = ''
WHERE "launchCommand" is NULL;
UPDATE "GameVersion"
SET "setupCommand" = ''
WHERE "launchCommand" is NULL;
-- AlterTable
ALTER TABLE "GameVersion" ALTER COLUMN "launchCommand" SET NOT NULL,
ALTER COLUMN "launchCommand" SET DEFAULT '',
ALTER COLUMN "setupCommand" SET NOT NULL,
ALTER COLUMN "setupCommand" SET DEFAULT '';

View File

@ -28,11 +28,15 @@ enum APITokenMode {
}
model APIToken {
token String @id @default(uuid())
id String @id @default(uuid())
token String @default(uuid())
mode APITokenMode
name String
userId String?
user User? @relation(fields: [userId], references: [id])
acls String[]
@@index([token])
}

View File

@ -46,9 +46,9 @@ model GameVersion {
platform Platform
launchCommand String? // Command to run to start. Platform-specific. Windows games on Linux will wrap this command in Proton/Wine
launchCommand String @default("") // Command to run to start. Platform-specific. Windows games on Linux will wrap this command in Proton/Wine
launchArgs String[]
setupCommand String? // Command to setup game (dependencies and such)
setupCommand String @default("") // Command to setup game (dependencies and such)
setupArgs String[]
onlySetup Boolean @default(false)

View File

@ -6,7 +6,7 @@
generator client {
provider = "prisma-client-js"
previewFeatures = ["prismaSchemaFolder"]
previewFeatures = ["prismaSchemaFolder", "omitApi"]
}
datasource db {

View File

@ -0,0 +1,23 @@
import { APITokenMode } from "@prisma/client";
import aclManager from "~/server/internal/acls";
import prisma from "~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, []); // No ACLs only allows session authentication
if (!userId) throw createError({ statusCode: 403 });
const id = h3.context.params?.id;
if (!id)
throw createError({
statusCode: 400,
statusMessage: "No id in router params",
});
const deleted = await prisma.aPIToken.delete({
where: { id: id, userId: userId, mode: APITokenMode.User },
})!!;
if (!deleted)
throw createError({ statusCode: 404, statusMessage: "Token not found" });
return;
});

View File

@ -0,0 +1,15 @@
import { APITokenMode } from "@prisma/client";
import aclManager from "~/server/internal/acls";
import prisma from "~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, []); // No ACLs only allows session authentication
if (!userId) throw createError({ statusCode: 403 });
const tokens = await prisma.aPIToken.findMany({
where: { userId: userId, mode: APITokenMode.User },
omit: { token: true },
});
return tokens;
});

View File

@ -0,0 +1,41 @@
import { APITokenMode } from "@prisma/client";
import aclManager, { userACLs } from "~/server/internal/acls";
import { userACLDescriptions } from "~/server/internal/acls/descriptions";
import prisma from "~/server/internal/db/database";
export default defineEventHandler(async (h3) => {
const userId = await aclManager.getUserIdACL(h3, []); // No ACLs only allows session authentication
if (!userId) throw createError({ statusCode: 403 });
const body = await readBody(h3);
const name: string = body.name;
const acls: string[] = body.acls;
if (!name || typeof name !== "string")
throw createError({
statusCode: 400,
statusMessage: "Token name required",
});
if (!acls || !Array.isArray(acls))
throw createError({ statusCode: 400, statusMessage: "ACLs required" });
if (acls.length == 0)
throw createError({
statusCode: 400,
statusMessage: "Token requires more than zero ACLs",
});
const invalidACLs = acls.filter((e) => userACLs.findIndex((v) => e == v) == -1);
if(invalidACLs.length > 0) throw createError({statusCode: 400, statusMessage: `Invalid ACLs: ${invalidACLs.join(", ")}`});
const token = await prisma.aPIToken.create({
data: {
mode: APITokenMode.User,
name: name,
userId: userId,
acls: acls,
}
})
return token;
});

View File

@ -1,7 +1,7 @@
import { PrismaClient } from '@prisma/client'
const prismaClientSingleton = () => {
return new PrismaClient()
return new PrismaClient({});
}
declare const globalThis: {

View File

@ -21,5 +21,4 @@ export default {
},
},
},
plugins: [require("@tailwindcss/forms"), require("@tailwindcss/typography")],
};

211
yarn.lock
View File

@ -1400,6 +1400,87 @@
dependencies:
mini-svg-data-uri "^1.2.3"
"@tailwindcss/node@^4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.0.6.tgz#d07152f447b37c8ce68244b0ec1ce427f5ed856e"
integrity sha512-jb6E0WeSq7OQbVYcIJ6LxnZTeC4HjMvbzFBMCrQff4R50HBlo/obmYNk6V2GCUXDeqiXtvtrQgcIbT+/boB03Q==
dependencies:
enhanced-resolve "^5.18.0"
jiti "^2.4.2"
tailwindcss "4.0.6"
"@tailwindcss/oxide-android-arm64@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.6.tgz#0dbee5042870ceaf756829c48c1e6ddacbb4b35b"
integrity sha512-xDbym6bDPW3D2XqQqX3PjqW3CKGe1KXH7Fdkc60sX5ZLVUbzPkFeunQaoP+BuYlLc2cC1FoClrIRYnRzof9Sow==
"@tailwindcss/oxide-darwin-arm64@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.6.tgz#9b5574626464b2ba658a7ecf689a4a835dc97369"
integrity sha512-1f71/ju/tvyGl5c2bDkchZHy8p8EK/tDHCxlpYJ1hGNvsYihZNurxVpZ0DefpN7cNc9RTT8DjrRoV8xXZKKRjg==
"@tailwindcss/oxide-darwin-x64@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.6.tgz#576b9fcd422790371efdb9e3733862759e76639c"
integrity sha512-s/hg/ZPgxFIrGMb0kqyeaqZt505P891buUkSezmrDY6lxv2ixIELAlOcUVTkVh245SeaeEiUVUPiUN37cwoL2g==
"@tailwindcss/oxide-freebsd-x64@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.6.tgz#787421ebad9460a7ff4a17ca7d1c495579db00ae"
integrity sha512-Z3Wo8FWZnmio8+xlcbb7JUo/hqRMSmhQw8IGIRoRJ7GmLR0C+25Wq+bEX/135xe/yEle2lFkhu9JBHd4wZYiig==
"@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.6.tgz#07872b2a1d4404a9819788ca5e8384d42a4004fd"
integrity sha512-SNSwkkim1myAgmnbHs4EjXsPL7rQbVGtjcok5EaIzkHkCAVK9QBQsWeP2Jm2/JJhq4wdx8tZB9Y7psMzHYWCkA==
"@tailwindcss/oxide-linux-arm64-gnu@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.6.tgz#fd314d294aec5f40c19c5fd09d448b23628dc384"
integrity sha512-tJ+mevtSDMQhKlwCCuhsFEFg058kBiSy4TkoeBG921EfrHKmexOaCyFKYhVXy4JtkaeeOcjJnCLasEeqml4i+Q==
"@tailwindcss/oxide-linux-arm64-musl@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.6.tgz#67b74205d72d3a83e6893adf5b35ac55118e0ebc"
integrity sha512-IoArz1vfuTR4rALXMUXI/GWWfx2EaO4gFNtBNkDNOYhlTD4NVEwE45nbBoojYiTulajI4c2XH8UmVEVJTOJKxA==
"@tailwindcss/oxide-linux-x64-gnu@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.6.tgz#2268beea15f18adcaa83c0e6540d3ee464130082"
integrity sha512-QtsUfLkEAeWAC3Owx9Kg+7JdzE+k9drPhwTAXbXugYB9RZUnEWWx5x3q/au6TvUYcL+n0RBqDEO2gucZRvRFgQ==
"@tailwindcss/oxide-linux-x64-musl@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.6.tgz#869b49cc783eabe7c33283abe23aafd35b4dd645"
integrity sha512-QthvJqIji2KlGNwLcK/PPYo7w1Wsi/8NK0wAtRGbv4eOPdZHkQ9KUk+oCoP20oPO7i2a6X1aBAFQEL7i08nNMA==
"@tailwindcss/oxide-win32-arm64-msvc@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.6.tgz#c7e3650b19a24bbebc9d513f188e1d75e1fccf2a"
integrity sha512-+oka+dYX8jy9iP00DJ9Y100XsqvbqR5s0yfMZJuPR1H/lDVtDfsZiSix1UFBQ3X1HWxoEEl6iXNJHWd56TocVw==
"@tailwindcss/oxide-win32-x64-msvc@4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.6.tgz#ba736748c72273f277e7afb4eaf401108e10ccfd"
integrity sha512-+o+juAkik4p8Ue/0LiflQXPmVatl6Av3LEZXpBTfg4qkMIbZdhCGWFzHdt2NjoMiLOJCFDddoV6GYaimvK1Olw==
"@tailwindcss/oxide@^4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.0.6.tgz#57035c941065195db4e5b26eebb3e63b56885a83"
integrity sha512-lVyKV2y58UE9CeKVcYykULe9QaE1dtKdxDEdrTPIdbzRgBk6bdxHNAoDqvcqXbIGXubn3VOl1O/CFF77v/EqSA==
optionalDependencies:
"@tailwindcss/oxide-android-arm64" "4.0.6"
"@tailwindcss/oxide-darwin-arm64" "4.0.6"
"@tailwindcss/oxide-darwin-x64" "4.0.6"
"@tailwindcss/oxide-freebsd-x64" "4.0.6"
"@tailwindcss/oxide-linux-arm-gnueabihf" "4.0.6"
"@tailwindcss/oxide-linux-arm64-gnu" "4.0.6"
"@tailwindcss/oxide-linux-arm64-musl" "4.0.6"
"@tailwindcss/oxide-linux-x64-gnu" "4.0.6"
"@tailwindcss/oxide-linux-x64-musl" "4.0.6"
"@tailwindcss/oxide-win32-arm64-msvc" "4.0.6"
"@tailwindcss/oxide-win32-x64-msvc" "4.0.6"
"@tailwindcss/typography@^0.5.15":
version "0.5.15"
resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.15.tgz#007ab9870c86082a1c76e5b3feda9392c7c8d648"
@ -1410,6 +1491,16 @@
lodash.merge "^4.6.2"
postcss-selector-parser "6.0.10"
"@tailwindcss/vite@^4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@tailwindcss/vite/-/vite-4.0.6.tgz#e43be7bfaabaf3f157d08273e21edb74faf24f47"
integrity sha512-O25vZ/URWbZ2JHdk2o8wH7jOKqEGCsYmX3GwGmYS5DjE4X3mpf93a72Rn7VRnefldNauBzr5z2hfZptmBNtTUQ==
dependencies:
"@tailwindcss/node" "^4.0.6"
"@tailwindcss/oxide" "^4.0.6"
lightningcss "^1.29.1"
tailwindcss "4.0.6"
"@tanstack/virtual-core@3.10.8":
version "3.10.8"
resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz#975446a667755222f62884c19e5c3c66d959b8b4"
@ -2869,6 +2960,14 @@ enhanced-resolve@^5.14.1:
graceful-fs "^4.2.4"
tapable "^2.2.0"
enhanced-resolve@^5.18.0:
version "5.18.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf"
integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
entities@^4.2.0, entities@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
@ -3881,6 +3980,11 @@ jiti@^2.1.2, jiti@^2.3.0, jiti@^2.3.1, jiti@^2.4.0:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.0.tgz#393d595fb6031a11d11171b5e4fc0b989ba3e053"
integrity sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==
jiti@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560"
integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==
js-base64@^3.6.0:
version "3.7.7"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79"
@ -4033,10 +4137,73 @@ lazystream@^1.0.0:
dependencies:
readable-stream "^2.0.5"
lilconfig@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
lightningcss-darwin-arm64@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.1.tgz#dce17349c7b9f968f396ec240503de14e7b4870b"
integrity sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==
lightningcss-darwin-x64@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.1.tgz#e79c984180c57d00ee114210ceced83473d72dfc"
integrity sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==
lightningcss-freebsd-x64@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.1.tgz#4b3aec9620684a60c45266d50fd843869320f42f"
integrity sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==
lightningcss-linux-arm-gnueabihf@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.1.tgz#b80e9c4dd75652bec451ffd4d5779492a01791ff"
integrity sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==
lightningcss-linux-arm64-gnu@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.1.tgz#7825eb119ddf580a4a4f011c6f384a3f9c992060"
integrity sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==
lightningcss-linux-arm64-musl@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.1.tgz#389efccf80088dce2bb00e28bd7d1cfe36a71669"
integrity sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==
lightningcss-linux-x64-gnu@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz#98fc5df5e39ac8ddc51e51f785849eb21131f789"
integrity sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==
lightningcss-linux-x64-musl@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz#fb4f80895ba7dfa8048ee32e9716a1684fefd6b2"
integrity sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==
lightningcss-win32-arm64-msvc@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.1.tgz#fd4409fd1505d89d0ff66511c36df5a1379eb7cd"
integrity sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==
lightningcss-win32-x64-msvc@1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.1.tgz#54dcd52884f6cbf205a53d49239559603f194927"
integrity sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==
lightningcss@^1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.29.1.tgz#1d4d62332fc5ba4b6c28e04a8c5638c76019702b"
integrity sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==
dependencies:
detect-libc "^1.0.3"
optionalDependencies:
lightningcss-darwin-arm64 "1.29.1"
lightningcss-darwin-x64 "1.29.1"
lightningcss-freebsd-x64 "1.29.1"
lightningcss-linux-arm-gnueabihf "1.29.1"
lightningcss-linux-arm64-gnu "1.29.1"
lightningcss-linux-arm64-musl "1.29.1"
lightningcss-linux-x64-gnu "1.29.1"
lightningcss-linux-x64-musl "1.29.1"
lightningcss-win32-arm64-msvc "1.29.1"
lightningcss-win32-x64-msvc "1.29.1"
lilconfig@^3.0.0, lilconfig@^3.1.2:
version "3.1.2"
@ -6500,33 +6667,15 @@ tailwind-config-viewer@^2.0.4:
portfinder "^1.0.26"
replace-in-file "^6.1.0"
tailwindcss@^3.4.15:
version "3.4.15"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.15.tgz#04808bf4bf1424b105047d19e7d4bfab368044a9"
integrity sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==
dependencies:
"@alloc/quick-lru" "^5.2.0"
arg "^5.0.2"
chokidar "^3.6.0"
didyoumean "^1.2.2"
dlv "^1.1.3"
fast-glob "^3.3.2"
glob-parent "^6.0.2"
is-glob "^4.0.3"
jiti "^1.21.6"
lilconfig "^2.1.0"
micromatch "^4.0.8"
normalize-path "^3.0.0"
object-hash "^3.0.0"
picocolors "^1.1.1"
postcss "^8.4.47"
postcss-import "^15.1.0"
postcss-js "^4.0.1"
postcss-load-config "^4.0.2"
postcss-nested "^6.2.0"
postcss-selector-parser "^6.1.2"
resolve "^1.22.8"
sucrase "^3.35.0"
tailwindcss@4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.0.6.tgz#c033bfba94d6e3bf70650a2f9fe949f39d3bb191"
integrity sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==
tailwindcss@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.0.0.tgz#1f275ed16eb4127cb70bf5e9f53fb8eb7b72be3c"
integrity sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ==
tailwindcss@~3.4.13:
version "3.4.17"