feat!: tailwind v4 migration

This commit is contained in:
he3als
2025-05-08 12:19:12 +01:00
parent 11c3c2b1c8
commit 3921466266
80 changed files with 2738 additions and 3823 deletions

View File

@@ -1,4 +1,3 @@
{
"name": "pyrodactyl",
"version": "4.0.0-dev",
@@ -10,6 +9,7 @@
"dependencies": {
"@codemirror/autocomplete": "^6.16.0",
"@codemirror/commands": "^6.3.3",
"@codemirror/language": "^6.11.0",
"@codemirror/language-data": "^6.5.1",
"@codemirror/legacy-modes": "^6.4.0",
"@codemirror/lint": "^6.8.2",
@@ -17,10 +17,13 @@
"@codemirror/state": "^6.4.1",
"@codemirror/view": "^6.34.3",
"@eslint/compat": "^1.2.2",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.26.0",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
"@headlessui/react": "^1.7.18",
"@headlessui/react": "^2.2.2",
"@lezer/highlight": "^1.2.1",
"@preact/signals-react": "^2.0.1",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-context-menu": "^2.1.5",
@@ -30,6 +33,7 @@
"@radix-ui/react-tabs": "^1.0.4",
"@sentry/react": "^7.120.0",
"@sentry/vite-plugin": "^2.16.1",
"@tailwindcss/postcss": "^4.1.5",
"@tanstack/react-virtual": "^3.2.1",
"@xterm/addon-fit": "^0.10.0",
"@xterm/addon-search": "^0.15.0",
@@ -52,6 +56,7 @@
"laravel-vite-plugin": "^1.0.2",
"million": "^3.0.6",
"pathe": "^1.1.2",
"postcss-nesting": "^13.0.1",
"qrcode.react": "^3.1.0",
"react": "^18.3.1",
"react-chartjs-2": "^5.2.0",
@@ -61,12 +66,10 @@
"reaptcha": "^1.12.1",
"sockette": "^2.0.6",
"sonner": "^1.4.41",
"styled-components": "^6.1.13",
"styled-components": "^6.1.17",
"swr": "^2.2.5",
"tailwind-merge": "^2.2.2",
"tailwind-scrollbar": "^3.1.0",
"tailwindcss": "^3.4.10",
"tailwindcss-animate": "^1.0.7",
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.5",
"turbo": "^2.0.14",
"uuid": "^9.0.1",
"vite": "^5.4.11",
@@ -96,14 +99,13 @@
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-react": "^7.34.1",
"eslint-plugin-react-hooks": "^4.6.0",
"postcss": "^8.4.38",
"postcss": "^8.5.3",
"postcss-import": "^16.1.0",
"postcss-nesting": "^12.1.1",
"postcss-preset-env": "^9.5.5",
"prettier": "^3.2.5",
"prettier-plugin-tailwindcss": "^0.5.13",
"tailwindcss-inner-border": "^0.2.0",
"prettier-plugin-tailwindcss": "^0.6.11",
"tailwind-scrollbar": "^4.0.2",
"ts-essentials": "^9.4.2",
"tw-animate-css": "^1.2.9",
"typescript": "^5.4.5",
"vite-plugin-manifest-sri": "^0.2.0"
},

5767
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,13 @@
module.exports = {
plugins: [
require('postcss-import'),
// We want to make use of nesting following the CSS Nesting spec, and not the
// SASS style nesting.
//
// @see https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-nesting
require('tailwindcss/nesting')(require('postcss-nesting')),
require('tailwindcss'),
require('@tailwindcss/postcss'),
require('autoprefixer'),
require('postcss-preset-env')({
features: {
'nesting-rules': false,
},
}),
// Breaks Tailwind V4?
// require('postcss-preset-env')({
// features: {
// 'nesting-rules': false,
// },
// }),
],
};

View File

@@ -1,3 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@@ -1,3 +1,300 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@import 'tailwindcss';
@import 'tw-animate-css';
@plugin 'tailwind-scrollbar';
@theme {
--font-jakarta: 'Plus Jakarta Sans', sans-serif;
--color-inherit: inherit;
--color-current: currentColor;
--color-transparent: transparent;
--color-black: #000000;
--color-white: #fff;
--color-slate-50: #f8fafc;
--color-slate-100: #f1f5f9;
--color-slate-200: #e2e8f0;
--color-slate-300: #cbd5e1;
--color-slate-400: #94a3b8;
--color-slate-500: #64748b;
--color-slate-600: #475569;
--color-slate-700: #334155;
--color-slate-800: #1e293b;
--color-slate-900: #0f172a;
--color-slate-950: #020617;
--color-gray-50: #f9fafb;
--color-gray-100: #f3f4f6;
--color-gray-200: #e5e7eb;
--color-gray-300: #d1d5db;
--color-gray-400: #9ca3af;
--color-gray-500: #6b7280;
--color-gray-600: #4b5563;
--color-gray-700: #374151;
--color-gray-800: #1f2937;
--color-gray-900: #111827;
--color-gray-950: #030712;
--color-zinc-50: #fafafa;
--color-zinc-100: #f4f4f5;
--color-zinc-200: #e4e4e7;
--color-zinc-300: #d4d4d8;
--color-zinc-400: #a1a1aa;
--color-zinc-500: #71717a;
--color-zinc-600: #52525b;
--color-zinc-700: #3f3f46;
--color-zinc-800: #27272a;
--color-zinc-900: #18181b;
--color-zinc-950: #09090b;
--color-neutral-50: #fafafa;
--color-neutral-100: #f5f5f5;
--color-neutral-200: #e5e5e5;
--color-neutral-300: #d4d4d4;
--color-neutral-400: #a3a3a3;
--color-neutral-500: #737373;
--color-neutral-600: #525252;
--color-neutral-700: #404040;
--color-neutral-800: #262626;
--color-neutral-900: #171717;
--color-neutral-950: #0a0a0a;
--color-stone-50: #fafaf9;
--color-stone-100: #f5f5f4;
--color-stone-200: #e7e5e4;
--color-stone-300: #d6d3d1;
--color-stone-400: #a8a29e;
--color-stone-500: #78716c;
--color-stone-600: #57534e;
--color-stone-700: #44403c;
--color-stone-800: #292524;
--color-stone-900: #1c1917;
--color-stone-950: #0c0a09;
--color-red-50: #fef2f2;
--color-red-100: #fee2e2;
--color-red-200: #fecaca;
--color-red-300: #fca5a5;
--color-red-400: #f87171;
--color-red-500: #ef4444;
--color-red-600: #dc2626;
--color-red-700: #b91c1c;
--color-red-800: #991b1b;
--color-red-900: #7f1d1d;
--color-red-950: #450a0a;
--color-orange-50: #fff7ed;
--color-orange-100: #ffedd5;
--color-orange-200: #fed7aa;
--color-orange-300: #fdba74;
--color-orange-400: #fb923c;
--color-orange-500: #f97316;
--color-orange-600: #ea580c;
--color-orange-700: #c2410c;
--color-orange-800: #9a3412;
--color-orange-900: #7c2d12;
--color-orange-950: #431407;
--color-amber-50: #fffbeb;
--color-amber-100: #fef3c7;
--color-amber-200: #fde68a;
--color-amber-300: #fcd34d;
--color-amber-400: #fbbf24;
--color-amber-500: #f59e0b;
--color-amber-600: #d97706;
--color-amber-700: #b45309;
--color-amber-800: #92400e;
--color-amber-900: #78350f;
--color-amber-950: #451a03;
--color-yellow-50: #fefce8;
--color-yellow-100: #fef9c3;
--color-yellow-200: #fef08a;
--color-yellow-300: #fde047;
--color-yellow-400: #facc15;
--color-yellow-500: #eab308;
--color-yellow-600: #ca8a04;
--color-yellow-700: #a16207;
--color-yellow-800: #854d0e;
--color-yellow-900: #713f12;
--color-yellow-950: #422006;
--color-lime-50: #f7fee7;
--color-lime-100: #ecfccb;
--color-lime-200: #d9f99d;
--color-lime-300: #bef264;
--color-lime-400: #a3e635;
--color-lime-500: #84cc16;
--color-lime-600: #65a30d;
--color-lime-700: #4d7c0f;
--color-lime-800: #3f6212;
--color-lime-900: #365314;
--color-lime-950: #1a2e05;
--color-green-50: #f0fdf4;
--color-green-100: #dcfce7;
--color-green-200: #bbf7d0;
--color-green-300: #86efac;
--color-green-400: #4ade80;
--color-green-500: #22c55e;
--color-green-600: #16a34a;
--color-green-700: #15803d;
--color-green-800: #166534;
--color-green-900: #14532d;
--color-green-950: #052e16;
--color-emerald-50: #ecfdf5;
--color-emerald-100: #d1fae5;
--color-emerald-200: #a7f3d0;
--color-emerald-300: #6ee7b7;
--color-emerald-400: #34d399;
--color-emerald-500: #10b981;
--color-emerald-600: #059669;
--color-emerald-700: #047857;
--color-emerald-800: #065f46;
--color-emerald-900: #064e3b;
--color-emerald-950: #022c22;
--color-teal-50: #f0fdfa;
--color-teal-100: #ccfbf1;
--color-teal-200: #99f6e4;
--color-teal-300: #5eead4;
--color-teal-400: #2dd4bf;
--color-teal-500: #14b8a6;
--color-teal-600: #0d9488;
--color-teal-700: #0f766e;
--color-teal-800: #115e59;
--color-teal-900: #134e4a;
--color-teal-950: #042f2e;
--color-cyan-50: #ecfeff;
--color-cyan-100: #cffafe;
--color-cyan-200: #a5f3fc;
--color-cyan-300: #67e8f9;
--color-cyan-400: #22d3ee;
--color-cyan-500: #06b6d4;
--color-cyan-600: #0891b2;
--color-cyan-700: #0e7490;
--color-cyan-800: #155e75;
--color-cyan-900: #164e63;
--color-cyan-950: #083344;
--color-sky-50: #f0f9ff;
--color-sky-100: #e0f2fe;
--color-sky-200: #bae6fd;
--color-sky-300: #7dd3fc;
--color-sky-400: #38bdf8;
--color-sky-500: #0ea5e9;
--color-sky-600: #0284c7;
--color-sky-700: #0369a1;
--color-sky-800: #075985;
--color-sky-900: #0c4a6e;
--color-sky-950: #082f49;
--color-blue-50: #eff6ff;
--color-blue-100: #dbeafe;
--color-blue-200: #bfdbfe;
--color-blue-300: #93c5fd;
--color-blue-400: #60a5fa;
--color-blue-500: #3b82f6;
--color-blue-600: #2563eb;
--color-blue-700: #1d4ed8;
--color-blue-800: #1e40af;
--color-blue-900: #1e3a8a;
--color-blue-950: #172554;
--color-indigo-50: #eef2ff;
--color-indigo-100: #e0e7ff;
--color-indigo-200: #c7d2fe;
--color-indigo-300: #a5b4fc;
--color-indigo-400: #818cf8;
--color-indigo-500: #6366f1;
--color-indigo-600: #4f46e5;
--color-indigo-700: #4338ca;
--color-indigo-800: #3730a3;
--color-indigo-900: #312e81;
--color-indigo-950: #1e1b4b;
--color-violet-50: #f5f3ff;
--color-violet-100: #ede9fe;
--color-violet-200: #ddd6fe;
--color-violet-300: #c4b5fd;
--color-violet-400: #a78bfa;
--color-violet-500: #8b5cf6;
--color-violet-600: #7c3aed;
--color-violet-700: #6d28d9;
--color-violet-800: #5b21b6;
--color-violet-900: #4c1d95;
--color-violet-950: #2e1065;
--color-purple-50: #faf5ff;
--color-purple-100: #f3e8ff;
--color-purple-200: #e9d5ff;
--color-purple-300: #d8b4fe;
--color-purple-400: #c084fc;
--color-purple-500: #a855f7;
--color-purple-600: #9333ea;
--color-purple-700: #7e22ce;
--color-purple-800: #6b21a8;
--color-purple-900: #581c87;
--color-purple-950: #3b0764;
--color-fuchsia-50: #fdf4ff;
--color-fuchsia-100: #fae8ff;
--color-fuchsia-200: #f5d0fe;
--color-fuchsia-300: #f0abfc;
--color-fuchsia-400: #e879f9;
--color-fuchsia-500: #d946ef;
--color-fuchsia-600: #c026d3;
--color-fuchsia-700: #a21caf;
--color-fuchsia-800: #86198f;
--color-fuchsia-900: #701a75;
--color-fuchsia-950: #4a044e;
--color-pink-50: #fdf2f8;
--color-pink-100: #fce7f3;
--color-pink-200: #fbcfe8;
--color-pink-300: #f9a8d4;
--color-pink-400: #f472b6;
--color-pink-500: #ec4899;
--color-pink-600: #db2777;
--color-pink-700: #be185d;
--color-pink-800: #9d174d;
--color-pink-900: #831843;
--color-pink-950: #500724;
--color-rose-50: #fff1f2;
--color-rose-100: #ffe4e6;
--color-rose-200: #fecdd3;
--color-rose-300: #fda4af;
--color-rose-400: #fb7185;
--color-rose-500: #f43f5e;
--color-rose-600: #e11d48;
--color-rose-700: #be123c;
--color-rose-800: #9f1239;
--color-rose-900: #881337;
--color-rose-950: #4c0519;
--color-brand-grad: radial-gradient(109.26% 109.26% at 49.83% 13.37%, #ff343c 0%, #f06f53 100%);
--color-brand: #fa4e49;
--transition-duration-250: 250ms;
}
/*
The default border color has changed to `currentcolor` in Tailwind CSS v4,
so we've added these compatibility styles to make sure everything still
looks the same as it did with Tailwind CSS v3.
If we ever want to remove these styles, we need to add an explicit border
color utility to any element that depends on these defaults.
*/
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentcolor);
}
}

View File

@@ -94,7 +94,7 @@ export default () => {
<Field id='email' label={'Email'} name={'email'} type={'email'} />
<div className={`mt-6`}>
<Button
className={`w-full mt-4 rounded-full bg-brand border-0 ring-0 outline-none capitalize font-bold text-sm py-2`}
className={`w-full mt-4 rounded-full bg-brand border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2`}
type={'submit'}
size={'xlarge'}
isLoading={isSubmitting}
@@ -123,7 +123,7 @@ export default () => {
<div aria-hidden className='my-8 bg-[#ffffff33] min-h-[1px]'></div>
<div
className={`text-center w-full rounded-lg bg-[#ffffff33] border-0 ring-0 outline-none capitalize font-bold text-sm py-2 `}
className={`text-center w-full rounded-lg bg-[#ffffff33] border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2 `}
>
<Link
to={'/auth/login'}

View File

@@ -33,7 +33,7 @@ function LoginCheckpointContainer() {
const [isMissingDevice, setIsMissingDevice] = useState(false);
return (
<ContentBox className='p-12 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-sm rounded-xl'>
<ContentBox className='p-12 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-xs rounded-xl'>
<LoginFormContainer className={`w-full flex`}>
<Link to='/'>
<div className='flex h-12 mb-4 items-center w-full'>
@@ -61,7 +61,7 @@ function LoginCheckpointContainer() {
</div>
<div className={`mt-6`}>
<Button
className='w-full mt-4 rounded-full bg-brand border-0 ring-0 outline-none capitalize font-bold text-sm py-2'
className='w-full mt-4 rounded-full bg-brand border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2'
size={'xlarge'}
type={'submit'}
disabled={isSubmitting}
@@ -73,7 +73,7 @@ function LoginCheckpointContainer() {
<div aria-hidden className='my-8 bg-[#ffffff33] min-h-[1px]'></div>
<div
className={`mt-6 text-center w-full rounded-t-lg bg-[#ffffff33] border-0 ring-0 outline-none capitalize font-bold text-sm py-2 mb-2 `}
className={`mt-6 text-center w-full rounded-t-lg bg-[#ffffff33] border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2 mb-2 `}
>
<span
onClick={() => {
@@ -87,7 +87,7 @@ function LoginCheckpointContainer() {
</span>
</div>
<div
className={`text-center w-full rounded-b-lg bg-[#ffffff33] border-0 ring-0 outline-none capitalize font-bold text-sm py-2 `}
className={`text-center w-full rounded-b-lg bg-[#ffffff33] border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2 `}
>
<Link
to={'/auth/login'}

View File

@@ -131,7 +131,7 @@ function LoginContainer() {
</div>
<div className={`mt-6`}>
<Button
className={`relative mt-4 w-full rounded-full bg-brand border-0 ring-0 outline-none capitalize font-bold text-sm py-2`}
className={`relative mt-4 w-full rounded-full bg-brand border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2`}
type={'submit'}
size={'xlarge'}
isLoading={isSubmitting}

View File

@@ -98,7 +98,7 @@ function ResetPasswordContainer() {
</div>
<div className={`mt-6`}>
<Button
className='w-full mt-4 rounded-full bg-brand border-0 ring-0 outline-none capitalize font-bold text-sm py-2'
className='w-full mt-4 rounded-full bg-brand border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2'
size={'xlarge'}
type={'submit'}
disabled={isSubmitting}
@@ -110,7 +110,7 @@ function ResetPasswordContainer() {
<div aria-hidden className='my-8 bg-[#ffffff33] min-h-[1px]'></div>
<div
className={`text-center w-full rounded-lg bg-[#ffffff33] border-0 ring-0 outline-none capitalize font-bold text-sm py-2 `}
className={`text-center w-full rounded-lg bg-[#ffffff33] border-0 ring-0 outline-hidden capitalize font-bold text-sm py-2 `}
>
<Link
to={'/auth/login'}

View File

@@ -80,7 +80,7 @@ export default () => {
</p>
</div>
<p className='text-sm text-gray-600 hidden md:block'>
<code className='font-mono py-1 px-2 bg-gray-800 rounded text-white'>
<code className='font-mono py-1 px-2 bg-gray-800 rounded-sm text-white'>
{key.identifier}
</code>
</p>

View File

@@ -15,12 +15,12 @@ const ApiKeyModal = ({ apiKey }: Props) => {
const { dismiss } = useContext(ModalContext);
return (
<div className='p-6 space-y-6 max-w-lg mx-auto rounded-lg shadow-lg '>
<div className='p-6 space-y-6 max-w-lg mx-auto rounded-lg shadow-lg'>
{/* Flash message section */}
<FlashMessageRender byKey='account' />
{/* Modal Header */}
<p className='text-sm text-white-600 mt-2 '>
<p className='text-sm text-white-600 mt-2'>
The API key you have requested is shown below. Please store it in a safe place, as it will not be shown
again.
</p>
@@ -42,7 +42,7 @@ const ApiKeyModal = ({ apiKey }: Props) => {
<Button
type='button'
onClick={() => dismiss()}
className='bg-red-600 text-white hover:bg-red-700 px-6 py-2 rounded-md focus:outline-none focus:ring-2 focus:ring-gray-500'
className='bg-red-600 text-white hover:bg-red-700 px-6 py-2 rounded-md focus:outline-hidden focus:ring-2 focus:ring-gray-500 cursor-pointer'
>
Close
</Button>

View File

@@ -75,7 +75,7 @@ export default () => {
<div className='flex gap-4'>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<button className='flex items-center gap-2 font-bold text-sm px-3 py-1 rounded-md bg-[#ffffff11] hover:bg-[#ffffff22] transition hover:duration-0'>
<button className='flex items-center gap-2 font-bold text-sm px-3 py-1 rounded-md bg-[#ffffff11] hover:bg-[#ffffff22] transition hover:duration-0 cursor-pointer'>
<svg
xmlns='http://www.w3.org/2000/svg'
width='20'
@@ -106,7 +106,7 @@ export default () => {
</svg>
</button>
</DropdownMenuTrigger>
<DropdownMenuContent className='flex flex-col gap-1 z-[99999]' sideOffset={8}>
<DropdownMenuContent className='flex flex-col gap-1 z-99999' sideOffset={8}>
<div className='text-xs opacity-50 text-center'>More filters coming soon!</div>
{rootAdmin && (
<DropdownMenuItem
@@ -198,7 +198,7 @@ export default () => {
}}
>
<ServerRow
className='!items-start flex-col w-full gap-4 [&>div~div]:w-full'
className='items-start! flex-col w-full gap-4 [&>div~div]:w-full'
key={server.uuid}
server={server}
/>

View File

@@ -121,7 +121,7 @@ export default ({ server, className }: { server: Server; className?: string }) =
</div>
</div>
<div
className={`h-full hidden sm:flex items-center justify-center bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-sm rounded-md w-fit whitespace-nowrap px-4 py-2 text-sm gap-4`}
className={`h-full hidden sm:flex items-center justify-center bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-xs rounded-md w-fit whitespace-nowrap px-4 py-2 text-sm gap-4`}
>
{!stats || isSuspended ? (
isSuspended ? (

View File

@@ -28,7 +28,7 @@ export default ({ tokens, open, onClose }: RecoveryTokenDialogProps) => {
>
<Dialog.Icon position={'container'} type={'success'} />
<CopyOnClick text={tokens.join('\n')} showInNotification={false}>
<pre className={'bg-zinc-800 rounded p-2 mt-6'}>
<pre className={'bg-zinc-800 rounded-sm p-2 mt-6'}>
{grouped.map((value) => (
<span key={value.join('_')} className={'block'}>
{value[0]}

View File

@@ -66,7 +66,7 @@ const ConfigureTwoFactorForm = ({ onTokens }: Props) => {
return (
<form id={'enable-totp-form'} onSubmit={submit}>
<FlashMessageRender byKey={'account:two-step'} />
<div className={'flex items-center justify-center w-56 h-56 p-2 bg-zinc-50 shadow mx-auto mt-6'}>
<div className={'flex items-center justify-center w-56 h-56 p-2 bg-zinc-50 shadow-sm mx-auto mt-6'}>
{!token ? (
<Spinner />
) : (

View File

@@ -64,7 +64,7 @@ export default () => {
</p>
</div>
<p className='text-sm text-gray-600 hidden md:block'>
<code className='font-mono py-1 px-2 bg-gray-800 rounded text-white'>
<code className='font-mono py-1 px-2 bg-gray-800 rounded-sm text-white'>
SHA256: {key.fingerprint}
</code>
</p>

View File

@@ -9,7 +9,7 @@ const Button = ({ className, ...props }: Props) => {
return (
<button
className={clsx(
'flex items-center justify-center h-8 px-4 text-sm font-medium text-white transition-colors duration-150 bg-gradient-to-b from-[#ffffff10] to-[#ffffff09] inner-border-[1px] inner-border-[#ffffff15] border border-transparent rounded-full shadow-sm hover:from-[#ffffff05] hover:to-[#ffffff04]',
'flex items-center justify-center h-8 px-4 text-sm font-medium text-white transition-colors duration-150 bg-linear-to-b from-[#ffffff10] to-[#ffffff09] border border-[#ffffff15] rounded-full shadow-xs hover:from-[#ffffff05] hover:to-[#ffffff04] cursor-pointer',
className,
)}
{...props}

View File

@@ -11,7 +11,7 @@ const Checkbox = React.forwardRef<
<CheckboxPrimitive.Root
ref={ref}
className={cn(
'peer h-5 w-5 shrink-0 rounded-md border-2 border-[#ffffff66] shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[deepskyblue] disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand data-[state=checked]:text-primary-foreground',
'peer h-5 w-5 shrink-0 rounded-md border-2 border-[#ffffff66] shadow-sm focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-[deepskyblue] disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand data-[state=checked]:text-primary-foreground',
className,
)}
{...props}

View File

@@ -8,7 +8,7 @@ interface CodeProps {
export default ({ dark, className, children }: CodeProps) => (
<code
className={clsx('font-mono text-sm px-2 py-1 inline-block rounded w-fit', className, {
className={clsx('font-mono text-sm px-2 py-1 inline-block rounded-sm w-fit', className, {
'bg-zinc-900': !dark,
'bg-zinc-900 text-zinc-100': dark,
})}

View File

@@ -11,7 +11,7 @@ type Props = Readonly<
>;
const ContentBox = ({ title, showFlashes, showLoadingOverlay, children, ...props }: Props) => (
<div className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-sm rounded-xl' {...props}>
<div className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-xs rounded-xl' {...props}>
{title && <h2 className={`font-extrabold mb-4 text-2xl`}>{title}</h2>}
{showFlashes && <FlashMessageRender byKey={typeof showFlashes === 'string' ? showFlashes : undefined} />}
<div>

View File

@@ -25,7 +25,7 @@ const ContextMenuSubTrigger = React.forwardRef<
<ContextMenuPrimitive.SubTrigger
ref={ref}
className={cn(
'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',
'flex cursor-default select-none items-center rounded-xs px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',
inset && 'pl-8',
className,
)}
@@ -44,7 +44,7 @@ const ContextMenuSubContent = React.forwardRef<
<ContextMenuPrimitive.SubContent
ref={ref}
className={cn(
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,_rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-2xl p-2 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-2xl p-2 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
className,
)}
{...props}
@@ -60,7 +60,7 @@ const ContextMenuContent = React.forwardRef<
<ContextMenuPrimitive.Content
ref={ref}
className={cn(
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,_rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-2xl p-2 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-2xl p-2 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
className,
)}
{...props}
@@ -78,7 +78,7 @@ const ContextMenuItem = React.forwardRef<
<ContextMenuPrimitive.Item
ref={ref}
className={cn(
'font-bold relative flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none transition focus:duration-0 focus:bg-[#ffffff33] data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
'font-bold relative flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-hidden transition focus:duration-0 focus:bg-[#ffffff33] data-disabled:pointer-events-none data-disabled:opacity-50',
inset && 'pl-8',
className,
)}
@@ -94,7 +94,7 @@ const ContextMenuCheckboxItem = React.forwardRef<
<ContextMenuPrimitive.CheckboxItem
ref={ref}
className={cn(
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition focus:duration-0 focus:bg-[#ffffff33] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
'relative flex cursor-default select-none items-center rounded-xs py-1.5 pl-8 pr-2 text-sm outline-hidden transition focus:duration-0 focus:bg-[#ffffff33] focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',
className,
)}
checked={checked}
@@ -117,7 +117,7 @@ const ContextMenuRadioItem = React.forwardRef<
<ContextMenuPrimitive.RadioItem
ref={ref}
className={cn(
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition focus:duration-0 focus:bg-[#ffffff33] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
'relative flex cursor-default select-none items-center rounded-xs py-1.5 pl-8 pr-2 text-sm outline-hidden transition focus:duration-0 focus:bg-[#ffffff33] focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',
className,
)}
{...props}

View File

@@ -25,7 +25,7 @@ const DropdownMenuSubTrigger = React.forwardRef<
<DropdownMenuPrimitive.SubTrigger
ref={ref}
className={cn(
'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',
'flex cursor-default select-none items-center rounded-xs px-2 py-1.5 text-sm outline-hidden focus:bg-accent data-[state=open]:bg-accent',
inset && 'pl-8',
className,
)}
@@ -44,7 +44,7 @@ const DropdownMenuSubContent = React.forwardRef<
<DropdownMenuPrimitive.SubContent
ref={ref}
className={cn(
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,_rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-2xl p-2 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-2xl p-2 shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
className,
)}
{...props}
@@ -61,7 +61,7 @@ const DropdownMenuContent = React.forwardRef<
ref={ref}
sideOffset={sideOffset}
className={cn(
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,_rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-[6px] p-2 shadow-md',
'z-50 min-w-[14rem] overflow-hidden rounded-xl bg-[radial-gradient(124.75%_124.75%_at_50.01%_-10.55%,rgba(255,255,255,0.2)_0%,rgba(255,255,255,0.02)_100%)] backdrop-blur-[6px] p-2 shadow-md',
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
className,
)}
@@ -80,7 +80,7 @@ const DropdownMenuItem = React.forwardRef<
<DropdownMenuPrimitive.Item
ref={ref}
className={cn(
'font-bold relative flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none transition focus:duration-0 focus:bg-[#ffffff33] data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
'font-bold relative flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-hidden transition focus:duration-0 focus:bg-[#ffffff33] data-disabled:pointer-events-none data-disabled:opacity-50',
inset && 'pl-8',
className,
)}
@@ -96,7 +96,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
<DropdownMenuPrimitive.CheckboxItem
ref={ref}
className={cn(
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition focus:duration-0 focus:bg-[#ffffff33] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
'relative flex cursor-default select-none items-center rounded-xs py-1.5 pl-8 pr-2 text-sm outline-hidden transition focus:duration-0 focus:bg-[#ffffff33] focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',
className,
)}
checked={checked}
@@ -119,7 +119,7 @@ const DropdownMenuRadioItem = React.forwardRef<
<DropdownMenuPrimitive.RadioItem
ref={ref}
className={cn(
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition focus:duration-0 focus:bg-[#ffffff10] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
'relative flex cursor-default select-none items-center rounded-xs py-1.5 pl-8 pr-2 text-sm outline-hidden transition focus:duration-0 focus:bg-[#ffffff10] focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',
className,
)}
{...props}

View File

@@ -21,7 +21,7 @@ class ErrorBoundary extends Component<{}, State> {
override render() {
return this.state.hasError ? (
<div className={`flex items-center justify-center w-full my-4`}>
<div className={`flex items-center bg-neutral-900 rounded p-3 text-red-500`}>
<div className={`flex items-center bg-neutral-900 rounded-sm p-3 text-red-500`}>
<p className={`text-sm text-neutral-100`}>
An error was encountered by the application while rendering this view. Try refreshing the page.
</p>

View File

@@ -21,7 +21,7 @@ const Field = forwardRef<HTMLInputElement, Props>(
</label>
)}
<input
className='px-4 py-2 rounded-lg outline-none bg-[#ffffff17] text-sm'
className='px-4 py-2 rounded-lg outline-hidden bg-[#ffffff17] text-sm'
id={id}
{...field}
{...props}

View File

@@ -3,7 +3,7 @@ import styled from 'styled-components';
const MainSidebar = styled.nav`
width: 300px;
flex-direction: column;
flex-shrink: 0;
shrink: 0;
border-radius: 8px;
overflow-x: hidden;
padding: 32px;

View File

@@ -97,7 +97,7 @@ const Modal: React.FC<ModalProps> = ({
<>
{showSpinnerOverlay && (
<div
className={`fixed inset-0 w-full h-full rounded flex items-center justify-center`}
className={`fixed inset-0 w-full h-full rounded-sm flex items-center justify-center`}
style={{ background: 'rgba(0,0,0,0.75)', zIndex: 9999 }}
>
<Spinner />
@@ -121,12 +121,12 @@ const Modal: React.FC<ModalProps> = ({
background:
'radial-gradient(50% 50% at 50% 50%, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.94) 100%)',
}}
className={'fixed inset-0 backdrop-blur-sm z-[9997]'}
className={'fixed inset-0 backdrop-blur-xs z-9997'}
/>
<div className={'fixed inset-0 overflow-y-auto z-[9998]'}>
<div className={'fixed inset-0 overflow-y-auto z-9998'}>
<div
ref={container}
className={styles.container}
className={styles.dialogContainer}
onMouseDown={onContainerClick.bind(this, true)}
onMouseUp={onContainerClick.bind(this, false)}
>
@@ -143,7 +143,7 @@ const Modal: React.FC<ModalProps> = ({
{dismissable && (
<button
onClick={onDismissed}
className={'opacity-45 hover:opacity-100 p-6 -m-6'}
className={'opacity-45 hover:opacity-100 p-6 -m-6 cursor-pointer'}
>
<HugeIconsX fill='currentColor' />
</button>

View File

@@ -45,7 +45,7 @@ function Pagination<T>({ data: { items, pagination }, onPageSelect, children }:
{pages.length > 1 && (
<div className={`flex justify-center mt-4`}>
<div
className={`flex justify-center gap-3 p-[4px] w-fit bg-gradient-to-b from-[#ffffff10] to-[#ffffff09] inner-border-[1px] inner-border-[#00000017] rounded-md`}
className={`flex justify-center gap-3 p-[4px] w-fit bg-linear-to-b from-[#ffffff10] to-[#ffffff09] border border-[#00000017] rounded-md`}
>
<Block
isSecondary

View File

@@ -11,7 +11,7 @@ const Switch = React.forwardRef<
>(({ className, ...props }, ref) => (
<SwitchPrimitives.Root
className={cn(
'peer inline-flex h-7 w-14 shrink-0 cursor-pointer items-center rounded-full p-px transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 bg-gradient-to-b from-[#ffffff0f] to-[#ffffff0a]',
'peer inline-flex h-7 w-14 shrink-0 cursor-pointer items-center rounded-full p-px transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 bg-linear-to-b from-[#ffffff0f] to-[#ffffff0a]',
'data-[state=checked]:bg-[#fa4f49f5]',
className,
)}
@@ -20,7 +20,7 @@ const Switch = React.forwardRef<
>
<SwitchPrimitives.Thumb
className={cn(
'pointer-events-none block h-6 w-6 rounded-full bg-gradient-to-br from-[#ffffffcf] to-[#ffffffa1] inner-border-[1px] shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-7 data-[state=unchecked]:translate-x-0.5',
'pointer-events-none block h-6 w-6 rounded-full bg-linear-to-br from-[#ffffffcf] to-[#ffffffa1] border shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-7 data-[state=unchecked]:translate-x-0.5',
)}
/>
</SwitchPrimitives.Root>

View File

@@ -27,7 +27,7 @@ const TabsTrigger = React.forwardRef<
<TabsPrimitive.Trigger
ref={ref}
className={cn(
'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-[#ffffff23] data-[state=active]:text-[#ffffff] data-[state=active]:shadow',
'inline-flex cursor-pointer items-center justify-center whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-[#ffffff23] data-[state=active]:text-[#ffffff] data-[state=active]:shadow-sm',
className,
)}
{...props}
@@ -42,7 +42,7 @@ const TabsContent = React.forwardRef<
<TabsPrimitive.Content
ref={ref}
className={cn(
'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
'mt-2 ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
className,
)}
{...props}

View File

@@ -9,7 +9,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, type,
<input
type={type}
className={cn(
'flex h-8 w-full rounded-full bg-transparent bg-gradient-to-b from-[#ffffff10] to-[#ffffff09] inner-border-[1px] inner-border-[#ffffff15] px-3 py-2 text-sm ring-offset-[#ffffff15] placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#ffffff15] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
'flex h-8 w-full rounded-full bg-transparent bg-linear-to-b from-[#ffffff10] to-[#ffffff09] border border-[#ffffff15] px-3 py-2 text-sm ring-offset-[#ffffff15] placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-[#ffffff15] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
className,
)}
ref={ref}

View File

@@ -14,7 +14,7 @@ export default ({ meta }: { meta: Record<string, unknown> }) => {
<Dialog open={open} onClose={() => setOpen(false)} hideCloseIcon title={'Metadata'}>
<pre
className={
'bg-zinc-900 rounded p-2 font-mono text-sm leading-relaxed overflow-x-scroll whitespace-pre-wrap'
'bg-zinc-900 rounded-sm p-2 font-mono text-sm leading-relaxed overflow-x-scroll whitespace-pre-wrap'
}
>
{formatObjectToIdentString(meta)}
@@ -26,7 +26,7 @@ export default ({ meta }: { meta: Record<string, unknown> }) => {
<button
aria-describedby={'View additional event metadata'}
className={
'p-2 transition-colors duration-100 text-zinc-400 group-hover:text-zinc-300 group-hover:hover:text-zinc-50'
'p-2 transition-colors duration-100 text-zinc-400 group-hover:text-zinc-300 hover:group-hover:text-zinc-50 cursor-pointer'
}
onClick={() => setOpen(true)}
>

View File

@@ -1,15 +1,17 @@
@import '../../../assets/tailwind.css';
.icons {
@apply flex space-x-1 mx-2 transition-colors duration-100 text-zinc-400;
@apply mx-2 flex space-x-1 text-zinc-400 transition-colors duration-100;
& svg {
@apply px-1 py-px cursor-pointer hover:text-zinc-50 h-5 w-auto;
@apply h-5 w-auto cursor-pointer px-1 py-px hover:text-zinc-50;
}
}
.description {
@apply mt-1 text-sm break-words pr-4;
@apply mt-1 pr-4 text-sm break-words;
& strong {
@apply text-zinc-50 font-semibold break-all;
@apply font-semibold break-all text-zinc-50;
}
}

View File

@@ -12,7 +12,7 @@ export default ({ type, className, children }: AlertProps) => {
return (
<div
className={clsx(
'flex items-center border-l-8 text-zinc-50 rounded-md shadow px-4 py-3',
'flex items-center border-l-8 text-zinc-50 rounded-md shadow-sm px-4 py-3',
{
['border-red-500 bg-red-500/25']: type === 'danger',
['border-yellow-500 bg-yellow-500/25']: type === 'warning',

View File

@@ -1,7 +1,10 @@
/* @import "../../../../scripts/assets/tailwind.css'; */
@import '../../../assets/tailwind.css';
.button {
@apply inline-flex items-center justify-center px-4 py-2;
@apply inline-flex cursor-pointer items-center justify-center px-4 py-2;
@apply rounded-xl text-sm font-bold transition-all duration-100;
@apply focus:ring-[3px] focus:ring-opacity-50 focus:ring-offset-2 focus:ring-offset-zinc-700;
/* @apply focus:ring-3 focus:ring-zinc-700/50 focus:ring-offset-2 focus:ring-offset-zinc-700; */
/* Sizing Controls */
&.small {
@@ -13,7 +16,7 @@
}
&.secondary {
@apply bg-white bg-opacity-10;
@apply bg-white/10;
&:disabled {
background: transparent !important;
@@ -35,10 +38,11 @@
.primary {
@apply bg-brand text-blue-50;
@apply hover:bg-brand/70 focus:ring-brand/50 focus:ring-opacity-75 active:bg-brand;
@apply hover:bg-brand/70 active:bg-brand;
/* @apply hover:bg-brand/70 focus:ring-brand/50 focus:ring-opacity-75 active:bg-brand; */
&.secondary {
@apply hover:bg-opacity-10 active:bg-brand;
@apply hover:bg-brand/10 active:bg-brand;
}
&:disabled {
@@ -48,7 +52,8 @@
.text {
@apply bg-zinc-700 text-zinc-50;
@apply hover:bg-zinc-600 focus:ring-zinc-300 focus:ring-opacity-50 active:bg-zinc-600;
@apply hover:bg-zinc-600 active:bg-zinc-600;
/* @apply focus:ring-opacity-50 hover:bg-zinc-600 focus:ring-zinc-300 active:bg-zinc-600; */
&.secondary {
@apply hover:bg-zinc-500 active:bg-zinc-500;
@@ -61,7 +66,8 @@
.danger {
@apply bg-red-600 text-zinc-50;
@apply hover:bg-red-500 focus:ring-red-400 focus:ring-opacity-75 active:bg-red-500;
@apply hover:bg-red-500 active:bg-red-500;
/* @apply focus:ring-opacity-75 hover:bg-red-500 focus:ring-red-400 active:bg-red-500; */
&.secondary {
@apply hover:bg-red-600 active:bg-red-600;

View File

@@ -77,12 +77,12 @@ export default ({
background:
'radial-gradient(50% 50% at 50% 50%, rgba(0, 0, 0, 0.42) 0%, rgba(0, 0, 0, 0.94) 100%)',
}}
className={'fixed inset-0 backdrop-blur-sm z-[9997]'}
className={'fixed inset-0 backdrop-blur-xs z-9997'}
/>
<div className={'fixed inset-0 overflow-y-auto z-[9998]'}>
<div className={'fixed inset-0 overflow-y-auto z-9998'}>
<div
ref={container}
className={styles.container}
className={styles.dialogContainer}
onMouseDown={onContainerClick.bind(this, true)}
onMouseUp={onContainerClick.bind(this, false)}
>
@@ -116,7 +116,7 @@ export default ({
{/* Keep this below the other buttons so that it isn't the default focus if they're present. */}
{!hideCloseIcon && (
<div className={'absolute right-0 top-0 m-4 p-2 opacity-45 hover:opacity-100'}>
<button onClick={onClose}>
<button onClick={onClose} className='cursor-pointer'>
<HugeIconsX fill='currentColor' />
</button>
</div>

View File

@@ -1,22 +1,24 @@
.container {
@import '../../../assets/tailwind.css';
.dialogContainer {
@apply flex min-h-full items-center justify-center p-4 text-center;
}
.panel {
@apply relative border-[1px] border-[#ffffff07] rounded-2xl max-w-xl w-full mx-auto text-left shadow-2xl backdrop-blur-3xl;
@apply relative mx-auto w-full max-w-xl rounded-2xl border-[1px] border-[#ffffff07] text-left shadow-2xl backdrop-blur-3xl;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), rgba(255, 255, 255, 0.12);
}
.title {
@apply text-2xl tracking-tight font-extrabold mb-2 pr-4;
@apply mb-2 pr-4 text-2xl font-extrabold tracking-tight;
}
.close_icon {
@apply w-5 h-5 group-hover:rotate-90 transition-transform duration-100;
@apply h-5 w-5 transition-transform duration-100 group-hover:rotate-90;
}
.dialog_icon {
@apply flex items-center justify-center w-10 h-10 rounded-full mr-4;
@apply mr-4 flex h-10 w-10 items-center justify-center rounded-full;
&.danger {
@apply bg-red-500 text-red-50;

View File

@@ -1,3 +1,5 @@
@import '../../../assets/tailwind.css';
.checkbox_input {
@apply h-4 w-4 rounded-sm border-zinc-500 bg-zinc-600 text-zinc-500;

View File

@@ -15,7 +15,7 @@ interface Props {
function FadeTransition({ children, duration, ...props }: Props) {
const [enterDuration, exitDuration] = Array.isArray(duration)
? duration
: !duration
: duration!
? ['duration-200', 'duration-100']
: [duration, duration];

View File

@@ -111,7 +111,7 @@ function WebsocketHandler() {
return error ? (
<FadeTransition duration='duration-150' show>
<div
className={`flex items-center px-4 rounded-full fixed w-fit mx-auto left-0 right-0 top-4 bg-red-500 py-2 z-[9999]`}
className={`flex items-center px-4 rounded-full fixed w-fit mx-auto left-0 right-0 top-4 bg-red-500 py-2 z-9999`}
>
{error === 'connecting' ? (
<>

View File

@@ -136,7 +136,7 @@ export default ({ backup }: Props) => {
Your server will be stopped. You will not be able to control the power state, access the file
manager, or create additional backups until completed.
</p>
<p className={`mt-4 -mb-2 bg-zinc-700 p-3 rounded`}>
<p className={`mt-4 -mb-2 bg-zinc-700 p-3 rounded-sm`}>
<label htmlFor={'restore_truncate'} className={`text-base flex items-center cursor-pointer`}>
<Input
type={'checkbox'}
@@ -163,25 +163,25 @@ export default ({ backup }: Props) => {
<ContextMenuContent className='flex flex-col gap-1'>
<Can action={'backup.download'}>
<ContextMenuItem className='flex gap-2' onSelect={doDownload}>
<HugeIconsFileDownload className='!h-4 !w-4' fill='currentColor' />
<HugeIconsFileDownload className='h-4! w-4!' fill='currentColor' />
Download Backup
</ContextMenuItem>
</Can>
<Can action={'backup.restore'}>
<ContextMenuItem className='flex gap-2' onSelect={() => setModal('restore')}>
<HugeIconsFileDownload className='!h-4 !w-4' fill='currentColor' />
<HugeIconsFileDownload className='h-4! w-4!' fill='currentColor' />
Restore Backup
</ContextMenuItem>
</Can>
<Can action={'backup.delete'}>
<>
<ContextMenuItem className='flex gap-2' onClick={onLockToggle}>
<HugeIconsFileSecurity className='!h-4 !w-4' fill='currentColor' />
<HugeIconsFileSecurity className='h-4! w-4!' fill='currentColor' />
{backup.isLocked ? 'Unlock' : 'Lock'}
</ContextMenuItem>
{!backup.isLocked && (
<ContextMenuItem className='flex gap-2' onSelect={() => setModal('delete')}>
<HugeIconsDelete className='!h-4 !w-4' fill='currentColor' />
<HugeIconsDelete className='h-4! w-4!' fill='currentColor' />
Delete Backup
</ContextMenuItem>
)}
@@ -191,7 +191,7 @@ export default ({ backup }: Props) => {
) : (
<button
onClick={() => setModal('delete')}
className={`text-zinc-200 transition-colors duration-150 hover:text-zinc-100 p-2`}
className={`text-zinc-200 transition-colors duration-150 hover:text-zinc-100 p-2 cursor-pointer`}
>
Delete Backup
</button>

View File

@@ -51,7 +51,7 @@ const ModalContent = ({ ...props }: RequiredModalProps) => {
>
<FormikField
as={Textarea}
className='px-4 py-2 rounded-lg outline-none bg-[#ffffff17] text-sm'
className='px-4 py-2 rounded-lg outline-hidden bg-[#ffffff17] text-sm'
name={'ignored'}
rows={6}
/>
@@ -122,7 +122,7 @@ export default () => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md cursor-pointer'
onClick={() => setVisible(true)}
>
New Backup

View File

@@ -9,7 +9,7 @@ interface ChartBlockProps {
}
export default ({ title, legend, children }: ChartBlockProps) => (
<div className={clsx(styles.chart_container, 'group !p-8')}>
<div className={clsx(styles.chart_container, 'group p-8!')}>
<div className={'flex items-center justify-between mb-4'}>
<h3 className={'font-extrabold text-sm'}>{title}</h3>
{legend && <p className={'text-sm flex items-center'}>{legend}</p>}

View File

@@ -206,7 +206,11 @@ export default () => {
>
<div className={clsx(styles.terminal, 'relative')}>
<SpinnerOverlay visible={!connected} size={'large'} />
<div className={clsx(styles.container, styles.overflows_container, { 'rounded-b': !canSendCommands })}>
<div
className={clsx(styles.terminalContainer, styles.overflows_container, {
'rounded-b': !canSendCommands,
})}
>
<div className={'h-full'}>
<div id={styles.terminal} ref={ref} />
</div>

View File

@@ -82,7 +82,7 @@ export default ({ className }: PowerButtonProps) => {
opacity: 0.5,
}
}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-l-full rounded-r-md text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-l-full rounded-r-md text-sm font-bold shadow-md cursor-pointer'
disabled={status !== 'offline'}
onClick={onButtonClick.bind(this, 'start')}
>
@@ -95,7 +95,7 @@ export default ({ className }: PowerButtonProps) => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-none text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-none text-sm font-bold shadow-md cursor-pointer'
disabled={!status}
onClick={onButtonClick.bind(this, 'restart')}
>
@@ -117,7 +117,7 @@ export default ({ className }: PowerButtonProps) => {
opacity: 1,
}
}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-r-full rounded-l-md text-sm font-bold shadow-md transition-all'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-r-full rounded-l-md text-sm font-bold shadow-md transition-all cursor-pointer'
disabled={status === 'offline'}
onClick={onButtonClick.bind(this, killable ? 'kill' : 'stop')}
>

View File

@@ -1,28 +1,30 @@
@import '../../../assets/tailwind.css';
.stat_block {
@apply flex items-center rounded-xl shadow-lg relative w-full;
@apply relative flex w-full items-center rounded-xl shadow-lg;
/* @apply col-span-3 md:col-span-2 lg:col-span-6; */
@apply p-8;
& > .status_bar {
@apply w-1 h-full absolute left-0 top-0 rounded-l sm:hidden;
@apply absolute top-0 left-0 h-full w-1 rounded-l sm:hidden;
}
& > .icon {
@apply hidden flex-shrink-0 items-center justify-center rounded-lg shadow-md w-12 h-12;
@apply hidden h-12 w-12 shrink-0 items-center justify-center rounded-lg shadow-md;
@apply transition-colors duration-500;
@apply sm:flex sm:mr-4;
@apply sm:mr-4 sm:flex;
& > svg {
@apply w-6 h-6 m-auto;
@apply m-auto h-6 w-6;
}
}
}
.terminal {
@apply flex flex-col w-full h-full relative;
@apply relative flex h-full w-full flex-col;
& > .container {
@apply min-h-[453px] rounded-t-xl pt-8 pl-8 bg-[#131313] border-x-[1px] border-[#ffffff11] border-t-[1px] font-mono text-sm h-full;
& > .terminalContainer {
@apply h-full min-h-[453px] rounded-t-xl border-x-[1px] border-t-[1px] border-[#ffffff11] bg-[#131313] pt-8 pl-8 font-mono text-sm;
& #terminal {
@apply h-full w-full;
@@ -38,16 +40,16 @@
}
& .command_icon {
@apply flex items-center top-0 left-0 absolute z-10 select-none h-full px-3 transition-colors duration-100;
@apply absolute top-0 left-0 z-10 flex h-full items-center px-3 transition-colors duration-100 select-none;
}
& .command_input {
@apply relative bg-[#131313] border-[#ffffff11] border-x-[1px] border-b-[1px] px-4 pb-6 pt-2 text-zinc-100 pl-8 pr-4 w-full font-mono text-sm rounded-b-xl;
@apply focus:ring-0 outline-none focus-visible:outline-none;
@apply active:border-b-blue-500 focus:border-b-blue-500;
@apply relative w-full rounded-b-xl border-x-[1px] border-b-[1px] border-[#ffffff11] bg-[#131313] px-4 pt-2 pr-4 pb-6 pl-8 font-mono text-sm text-zinc-100;
@apply outline-hidden focus:ring-0 focus-visible:outline-none;
@apply focus:border-b-blue-500 active:border-b-blue-500;
}
}
.chart_container {
@apply bg-[#131313] rounded-xl border-[#ffffff11] border-[1px] relative;
@apply relative rounded-xl border-[1px] border-[#ffffff11] bg-[#131313];
}

View File

@@ -106,7 +106,7 @@ export default () => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md cursor-pointer'
onClick={() => setVisible(true)}
>
New Database

View File

@@ -202,7 +202,7 @@ export default ({ database }: Props) => {
<button
type={'button'}
aria-label={'View database connection details'}
className={`text-sm p-2 text-zinc-500 hover:text-zinc-100 transition-colors duration-150 mr-4 flex align-middle items-center justify-center flex-col`}
className={`text-sm p-2 text-zinc-500 hover:text-zinc-100 transition-colors duration-150 mr-4 flex align-middle items-center justify-center flex-col cursor-pointer`}
onClick={() => setConnectionVisible(true)}
>
<FontAwesomeIcon icon={faEye} className={`px-5`} size='lg' />
@@ -212,7 +212,7 @@ export default ({ database }: Props) => {
<button
type={'button'}
aria-label={'Delete database'}
className={`text-sm p-2 text-zinc-500 hover:text-red-600 transition-colors duration-150 flex align-middle items-center justify-center flex-col`}
className={`text-sm p-2 text-zinc-500 hover:text-red-600 transition-colors duration-150 flex align-middle items-center justify-center flex-col cursor-pointer`}
onClick={() => setVisible(true)}
>
<FontAwesomeIcon icon={faTrashAlt} className={`px-5`} size='lg' />

View File

@@ -102,7 +102,7 @@ const JavaVersionModalFeature = () => {
<DropdownMenu onOpenChange={(open) => setDropDownOpen(open)}>
<DropdownMenuTrigger asChild>
<button
className='flex items-center justify-center h-8 px-4 text-sm font-medium text-white transition-colors duration-150 bg-gradient-to-b from-[#ffffff10] to-[#ffffff09] inner-border-[1px] inner-border-[#ffffff15] border border-transparent rounded-xl shadow-sm hover:from-[#ffffff05] hover:to-[#ffffff04]'
className='flex items-center justify-center h-8 px-4 text-sm font-medium text-white transition-colors duration-150 bg-linear-to-b from-[#ffffff10] to-[#ffffff09] border border-[#ffffff15] rounded-xl shadow-xs hover:from-[#ffffff05] hover:to-[#ffffff04] cursor-pointer'
disabled={!data}
>
{selectedVersion
@@ -121,7 +121,7 @@ const JavaVersionModalFeature = () => {
)}
</button>
</DropdownMenuTrigger>
<DropdownMenuContent className='z-[99999]' sideOffset={8}>
<DropdownMenuContent className='z-99999' sideOffset={8}>
<DropdownMenuRadioGroup value={selectedVersion} onValueChange={setSelectedVersion}>
{data &&
Object.keys(data.dockerImages).map((key) => (

View File

@@ -60,7 +60,7 @@ const SteamDiskSpaceFeature = () => {
</p>
<p className='mt-3'>
Ensure the machine has enough disk space by typing{' '}
<code className={`font-mono bg-zinc-900 rounded py-1 px-2`}>df -h</code> on the machine
<code className={`font-mono bg-zinc-900 rounded-sm py-1 px-2`}>df -h</code> on the machine
hosting this server. Delete files or increase the available disk space to resolve the issue.
</p>
</>

View File

@@ -126,22 +126,22 @@ const FileDropdownMenu = ({ file }: { file: FileObject }) => {
<ContextMenuContent className='flex flex-col gap-1'>
<Can action={'file.update'}>
<ContextMenuItem className='flex gap-2' onSelect={() => setModal('rename')}>
<HugeIconsPencil className='!h-4 !w-4' fill='currentColor' />
<HugeIconsPencil className='h-4! w-4!' fill='currentColor' />
<span>Rename</span>
</ContextMenuItem>
<ContextMenuItem className='flex gap-2' onSelect={() => setModal('move')}>
<HugeIconsMoveTo className='!h-4 !w-4' fill='currentColor' />
<HugeIconsMoveTo className='h-4! w-4!' fill='currentColor' />
<span>Move</span>
</ContextMenuItem>
<ContextMenuItem className='flex gap-2' onSelect={() => setModal('chmod')}>
<HugeIconsFileSecurity className='!h-4 !w-4' fill='currentColor' />
<HugeIconsFileSecurity className='h-4! w-4!' fill='currentColor' />
<span>Permissions</span>
</ContextMenuItem>
</Can>
{file.isFile && (
<Can action={'file.create'}>
<ContextMenuItem className='flex gap-2' onClick={doCopy}>
<HugeIconsCopy className='!h-4 !w-4' fill='currentColor' />
<HugeIconsCopy className='h-4! w-4!' fill='currentColor' />
<span>Duplicate</span>
</ContextMenuItem>
</Can>
@@ -149,27 +149,27 @@ const FileDropdownMenu = ({ file }: { file: FileObject }) => {
{file.isArchiveType() ? (
<Can action={'file.create'}>
<ContextMenuItem className='flex gap-2' onSelect={doUnarchive} title={'Unarchive'}>
<HugeIconsFileZip className='!h-4 !w-4' fill='currentColor' />
<HugeIconsFileZip className='h-4! w-4!' fill='currentColor' />
<span>Unarchive</span>
</ContextMenuItem>
</Can>
) : (
<Can action={'file.archive'}>
<ContextMenuItem className='flex gap-2' onSelect={doArchive}>
<HugeIconsFileZip className='!h-4 !w-4' fill='currentColor' />
<HugeIconsFileZip className='h-4! w-4!' fill='currentColor' />
<span>Archive</span>
</ContextMenuItem>
</Can>
)}
{file.isFile && (
<ContextMenuItem className='flex gap-2' onSelect={doDownload}>
<HugeIconsFileDownload className='!h-4 !w-4' fill='currentColor' />
<HugeIconsFileDownload className='h-4! w-4!' fill='currentColor' />
<span>Download</span>
</ContextMenuItem>
)}
<Can action={'file.delete'}>
<ContextMenuItem className='flex gap-2' onSelect={() => setShowConfirmation(true)}>
<HugeIconsDelete className='!h-4 !w-4' fill='currentColor' />
<HugeIconsDelete className='h-4! w-4!' fill='currentColor' />
<span>Delete</span>
</ContextMenuItem>
</Can>

View File

@@ -121,7 +121,7 @@ export default () => {
}
return (
<PageContentBlock title={action === 'edit' ? `Editing ${filename}` : `New File`} className='!p-0'>
<PageContentBlock title={action === 'edit' ? `Editing ${filename}` : `New File`} className='p-0!'>
<FlashMessageRender byKey={'files:view'} />
<ErrorBoundary>
@@ -134,14 +134,14 @@ export default () => {
</ErrorBoundary>
{filename === '.pteroignore' ? (
<div className={`mb-4 p-4 border-l-4 bg-neutral-900 rounded border-cyan-400`}>
<div className={`mb-4 p-4 border-l-4 bg-neutral-900 rounded-sm border-cyan-400`}>
<p className={`text-neutral-300 text-sm`}>
You&apos;re editing a{' '}
<code className={`font-mono bg-black rounded py-px px-1`}>.pteroignore</code> file. Any files or
directories listed in here will be excluded from backups. Wildcards are supported by using an
asterisk (<code className={`font-mono bg-black rounded py-px px-1`}>*</code>). You can negate a
prior rule by prepending an exclamation point (
<code className={`font-mono bg-black rounded py-px px-1`}>!</code>).
<code className={`font-mono bg-black rounded-sm py-px px-1`}>.pteroignore</code> file. Any files
or directories listed in here will be excluded from backups. Wildcards are supported by using an
asterisk (<code className={`font-mono bg-black rounded-sm py-px px-1`}>*</code>). You can negate
a prior rule by prepending an exclamation point (
<code className={`font-mono bg-black rounded-sm py-px px-1`}>!</code>).
</p>
</div>
) : null}
@@ -156,7 +156,7 @@ export default () => {
/>
<div
className={`relative h-full bg-[#ffffff11] border-[1px] border-[#ffffff07] border-t-0 [&>div>div]:h-full [&>div>div]:!outline-none w-full`}
className={`relative h-full bg-[#ffffff11] border-[1px] border-[#ffffff07] border-t-0 [&>div>div]:h-full [&>div>div]:outline-hidden! w-full`}
>
<Editor
style={{ height: 'calc(100vh - 86px)', width: '100%' }}
@@ -216,7 +216,7 @@ export default () => {
/>
</svg>
</DropdownMenuTrigger>
<DropdownMenuContent className='max-h-[calc(100vh-4rem)] overflow-auto z-[99999]' sideOffset={8}>
<DropdownMenuContent className='max-h-[calc(100vh-4rem)] overflow-auto z-99999' sideOffset={8}>
<For each={languages.sort((a, b) => a.name.localeCompare(b.name))} memo>
{(language) => (
<DropdownMenuItem
@@ -240,7 +240,7 @@ export default () => {
background:
'radial-gradient(109.26% 109.26% at 49.83% 13.37%, rgb(255, 52, 60) 0%, rgb(240, 111, 83) 100%)',
}}
className='h-[46px] pl-8 pr-6 py-3 border-[1px] border-[#ffffff12] rounded-l-full text-sm font-bold shadow-md'
className='h-[46px] pl-8 pr-6 py-3 border-[1px] border-[#ffffff12] rounded-l-full text-sm font-bold shadow-md cursor-pointer'
onClick={() => save()}
>
Save <span className='ml-2 font-mono text-xs font-bold uppercase'>CTRL + S</span>
@@ -269,7 +269,7 @@ export default () => {
</svg>
</DropdownMenuTrigger>
<DropdownMenuContent
className='max-h-[calc(100vh-4rem)] overflow-auto z-[99999]'
className='max-h-[calc(100vh-4rem)] overflow-auto z-99999'
sideOffset={8}
>
<DropdownMenuItem onSelect={() => saveAndRestart()}>
@@ -286,7 +286,7 @@ export default () => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md cursor-pointer'
onClick={() => setModalVisible(true)}
>
Create File

View File

@@ -46,7 +46,7 @@ export default ({ renderLeft, withinFileEditor, isNewFile }: Props) => {
};
return (
<div className={`group select-none flex flex-grow-0 items-center text-sm overflow-x-hidden`}>
<div className={`group select-none flex grow-0 items-center text-sm overflow-x-hidden`}>
{renderLeft || <div className={`w-12`} />}
<NavLink to={`/server/${id}/files`} className={`px-1 text-zinc-200 no-underline hover:text-zinc-100`}>
root

View File

@@ -99,7 +99,7 @@ export default () => {
});
return (
<ServerContentBlock className='!p-0' title={'File Manager'} showFlashKey={'files'}>
<ServerContentBlock className='p-0!' title={'File Manager'} showFlashKey={'files'}>
<div className='px-2 sm:px-14 pt-2 sm:pt-14'>
<ErrorBoundary>
<MainPageHeader title={'Files'}>

View File

@@ -45,16 +45,16 @@ const FileUploadList = () => {
return (
<div className={'space-y-2 mt-6'}>
{uploads.map(([name, file]) => (
<div key={name} className={'flex items-center space-x-3 bg-zinc-700 p-3 rounded'}>
<div key={name} className={'flex items-center space-x-3 bg-zinc-700 p-3 rounded-sm'}>
{/* <Tooltip content={`${Math.floor((file.loaded / file.total) * 100)}%`} placement={'left'}> */}
<div className={'flex-shrink-0'}>
<div className={'shrink-0'}>
<Spinner progress={(file.loaded / file.total) * 100} className={'w-6 h-6'} />
</div>
{/* </Tooltip> */}
<Code className={'flex-1 truncate'}>{name}</Code>
<button
onClick={cancelFileUpload.bind(this, name)}
className={'text-zinc-500 hover:text-zinc-200 transition-colors duration-75'}
className={'text-zinc-500 hover:text-zinc-200 transition-colors duration-75 cursor-pointer'}
>
FIXME: add X icon Cancel Upload
</button>
@@ -90,7 +90,10 @@ export default () => {
<>
{count > 0 && (
// <Tooltip content={`${count} files are uploading, click to view`}>
<button className={'flex items-center justify-center w-10 h-10'} onClick={() => (open.value = true)}>
<button
className={'flex items-center justify-center w-10 h-10 cursor-pointer'}
onClick={() => (open.value = true)}
>
<svg
className='animate-spin -ml-1 mr-3 h-5 w-5 text-white'
xmlns='http://www.w3.org/2000/svg'

View File

@@ -100,7 +100,7 @@ const MassActionsBar = () => {
'pointer-events-none fixed bottom-0 left-0 right-0 mb-6 flex justify-center w-full z-50'
}
>
<div className={`flex items-center space-x-4 pointer-events-auto rounded p-4 bg-black/50`}>
<div className={`flex items-center space-x-4 pointer-events-auto rounded-sm p-4 bg-black/50`}>
<Button onClick={() => setShowMove(true)}>Move</Button>
<Button onClick={onClickCompress}>Archive</Button>
<Button.Danger variant={Button.Variants.Secondary} onClick={() => setShowConfirm(true)}>

View File

@@ -75,7 +75,7 @@ const NewDirectoryDialog = asDialog({
<FlashMessageRender key={'files:directory-modal'} />
<Form className={`m-0`}>
<Field autoFocus id={'directoryName'} name={'directoryName'} label={'Name'} />
<p className={`mt-2 !text-xs break-all`}>
<p className={`mt-2 text-xs! break-all`}>
<span className={`text-zinc-200`}>This folder will be created as&nbsp;</span>
<Code>
/root/
@@ -110,7 +110,7 @@ export default () => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-l-full rounded-r-md text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-l-full rounded-r-md text-sm font-bold shadow-md cursor-pointer'
onClick={setOpen.bind(this, true)}
>
New Folder

View File

@@ -71,7 +71,7 @@ const RenameFileModal = ({ files, useMoveTerminology, ...props }: OwnProps) => {
<div className='w-full'>
<Field type={'string'} id={'file_name'} name={'name'} label={'File Name'} autoFocus />
{useMoveTerminology && (
<p className={`mt-2 !text-xs break-all`}>
<p className={`mt-2 text-xs! break-all`}>
<strong className={`text-sm text-zinc-200`}>New location: </strong>
<Code>
/root/

View File

@@ -171,7 +171,7 @@ export default () => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-r-full rounded-l-md text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-r-full rounded-l-md text-sm font-bold shadow-md cursor-pointer'
onClick={() => fileUploadInput.current && fileUploadInput.current.click()}
>
Upload

View File

@@ -1,12 +1,14 @@
@import '../../../assets/tailwind.css';
.manager_actions {
@apply grid grid-cols-2 sm:grid-cols-3 w-full gap-4 mb-4;
@apply mb-4 grid w-full grid-cols-2 gap-4 sm:grid-cols-3;
& button {
@apply w-full first:col-span-2 sm:first:col-span-1;
}
@screen md {
@apply flex flex-1 justify-end mb-0;
@apply mb-0 flex flex-1 justify-end;
& button {
@apply w-auto;
@@ -15,11 +17,11 @@
}
.file_row {
@apply rounded-sm p-1 transition bg-[#ffffff08] border-[1px] border-[#ffffff07] flex items-center text-sm no-underline;
@apply flex items-center rounded-sm border-[1px] border-[#ffffff07] bg-[#ffffff08] p-1 text-sm no-underline transition;
@apply hover:bg-[#ffffff12] hover:duration-0;
& > .details {
@apply flex flex-1 items-center text-zinc-300 no-underline px-4 py-2 overflow-hidden truncate;
@apply flex flex-1 items-center truncate overflow-hidden px-4 py-2 text-zinc-300 no-underline;
&:not(a) {
@apply cursor-default;

View File

@@ -98,7 +98,7 @@ const ProjectSelector: React.FC<Props> = ({ appVersion, baseUrl, nonApiUrl }) =>
<button
onClick={fetchProjects}
id='fetchNewProjects'
className='btn btn-primary mb-4 flex hidden'
className='btn btn-primary mb-4 flex hidden cursor-pointer'
disabled={isLoading}
>
{isLoading ? 'Loading...' : 'Fetch Projects'}
@@ -110,13 +110,13 @@ const ProjectSelector: React.FC<Props> = ({ appVersion, baseUrl, nonApiUrl }) =>
projects.map((project) => (
<ContentBox
key={project.project_id}
className='p-4 bg-[#ffffff09] border border-gray-600 shadow-sm rounded-xl w-full mb-4'
className='p-4 bg-[#ffffff09] border border-gray-600 shadow-xs rounded-xl w-full mb-4'
>
<div className='flex items-center'>
<ContentBox className='pt-1 rounded-xl mr-4'>
<a href={`${nonApiUrl}/mod/${project.project_id}`} target='_blank' rel='noreferrer'>
{project.icon_url !== 'N/A' ? (
<img src={project.icon_url} className='w-24 h-20 object-contain rounded' />
<img src={project.icon_url} className='w-24 h-20 object-contain rounded-sm' />
) : (
<svg
fillRule='evenodd'
@@ -159,7 +159,7 @@ const ProjectSelector: React.FC<Props> = ({ appVersion, baseUrl, nonApiUrl }) =>
</div>
<div className='flex flex-col py-2 px-6 mx-6'>
<button
className='flex items-center border-2 border-solid rounded py-1 px-6 border-brand hover:border-white hover:bg-red-600 hover:scale-110 justify-center'
className='flex items-center border-2 border-solid rounded-sm py-1 px-6 border-brand hover:border-white hover:bg-red-600 hover:scale-110 justify-center cursor-pointer'
onClick={() => setModalProject(project.project_id)}
>
<HugeIconsDownload className='px-2 mx-2' fill='currentColor' /> Install

View File

@@ -68,7 +68,7 @@ const DownloadModrinth: React.FC<DownloadProps> = ({ url, serverUuid, directory
<button
onClick={downloadAndUploadFile}
disabled={loading}
className='px-4 py-2 bg-blue-500 text-white rounded-lg'
className='px-4 py-2 bg-blue-500 text-white rounded-lg cursor-pointer'
>
{loading ? 'Processing...' : 'Download & Upload'}
</button>

View File

@@ -52,7 +52,7 @@ const DropdownButton = ({ list }: Props) => {
<ChevronDownIcon className='w-4 h-4 ml-2' />
</Button>
{open && (
<div className='absolute mt-1 w-full bg-[#ffffff09] border rounded-sm shadow-lg text-white'>
<div className='absolute mt-1 w-full bg-[#ffffff09] border rounded-xs shadow-lg text-white'>
{list.map((option) => (
<div
key={option.id}

View File

@@ -63,12 +63,12 @@ export default () => {
return (
<PageContentBlock title={'Mods/Plugins'}>
<ContentBox className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-sm rounded-xl mb-5'>
<ContentBox className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-xs rounded-xl mb-5'>
{/* TODO: Add a navbar to cycle between Downloaded, Download, and Dependency resolver*/}
</ContentBox>
<div className='flex flex-wrap gap-4'>
<ContentBox
className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-sm rounded-xl md:w-1/6'
className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-xs rounded-xl md:w-1/6'
title='Settings'
>
<Can action={'modrinth.loader'}>
@@ -107,7 +107,7 @@ export default () => {
</ContentBox>
<ContentBox
className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-sm rounded-xl w-full md:w-4/5'
className='p-8 bg-[#ffffff09] border-[1px] border-[#ffffff11] shadow-xs rounded-xl w-full md:w-4/5'
title='Modrinth'
>
<div className='relative w-full h-full mb-4'>

View File

@@ -45,9 +45,9 @@ export function ExpandableScrollBox({
{/* Selection Button */}
<button
className={cn(
'w-full px-6 py-3 rounded-md font-medium',
'w-full px-6 py-3 rounded-md font-medium cursor-pointer',
'bg-custom-red text-white',
'hover:bg-custom-red-hover focus:outline-none focus:ring-2 focus:ring-custom-red-hover focus:ring-offset-2 focus:ring-offset-black',
'hover:bg-custom-red-hover focus:outline-hidden focus:ring-2 focus:ring-custom-red-hover focus:ring-offset-2 focus:ring-offset-black',
'transition-colors duration-200 shadow-md',
'flex items-center justify-between',
buttonClassName,
@@ -58,9 +58,9 @@ export function ExpandableScrollBox({
>
<span className='truncate'>{selectedItem ? selectedItem.label : placeholder}</span>
{isOpen ? (
<ChevronUpIcon className='ml-2 h-5 w-5 flex-shrink-0' />
<ChevronUpIcon className='ml-2 h-5 w-5 shrink-0' />
) : (
<ChevronDownIcon className='ml-2 h-5 w-5 flex-shrink-0' />
<ChevronDownIcon className='ml-2 h-5 w-5 shrink-0' />
)}
</button>
@@ -71,7 +71,7 @@ export function ExpandableScrollBox({
'w-full mt-4 rounded-md overflow-hidden',
'bg-custom-medium-gray border-2 border-custom-dark-gray',
'shadow-lg transition-all duration-300 ease-in-out',
isOpen ? 'max-h-[var(--max-height)] opacity-100 my-4' : 'max-h-0 opacity-0 my-0 border-0',
isOpen ? 'max-h-(--max-height) opacity-100 my-4' : 'max-h-0 opacity-0 my-0 border-0',
boxClassName,
)}
style={{ '--max-height': maxHeight } as React.CSSProperties}

View File

@@ -45,7 +45,9 @@ const DeleteAllocationButton = ({ allocation }: Props) => {
>
This allocation will be immediately removed from your server.
</Dialog.Confirm>
<button onClick={() => setConfirm(true)}>Delete</button>
<button className='cursor-pointer' onClick={() => setConfirm(true)}>
Delete
</button>
</>
);
};

View File

@@ -70,7 +70,7 @@ const NetworkContainer = () => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md cursor-pointer'
onClick={onCreateAllocation}
>
New Allocation

View File

@@ -118,7 +118,7 @@ const EditScheduleModal = ({ schedule }: Props) => {
The schedule system supports the use of Cronjob syntax when defining when tasks should begin
running. Use the fields above to specify when these tasks should begin running.
</p>
<div className={`space-y-3 my-6`}>
<div className='gap-3 my-6 flex flex-col'>
<a href='https://crontab.guru/' target='_blank' rel='noreferrer'>
<ItemContainer
description={'Online editor for cron schedule experessions.'}

View File

@@ -48,7 +48,7 @@ function ScheduleContainer() {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='rounded-full border-[1px] border-[#ffffff12] px-8 py-3 text-sm font-bold shadow-md'
className='rounded-full border-[1px] border-[#ffffff12] px-8 py-3 text-sm font-bold shadow-md cursor-pointer'
onClick={() => setVisible(true)}
>
New Schedule

View File

@@ -74,7 +74,7 @@ export default () => {
{!schedule || isLoading ? (
<Spinner size={'large'} centered />
) : (
<div className={`rounded shadow flex flex-col gap-6`}>
<div className={`rounded-sm shadow-sm flex flex-col gap-6`}>
<div
className={`bg-[#ffffff09] border-[1px] border-[#ffffff11] flex items-center place-content-between flex-col md:flex-row gap-6 p-6 rounded-2xl overflow-hidden`}
>

View File

@@ -76,7 +76,7 @@ export default ({ schedule, task }: Props) => {
icon={icon}
divClasses={`mb-2 gap-6`}
copyDescription={copyOnClick}
descriptionClasses={`whitespace-nowrap overflow-hidden overflow-ellipsis`}
descriptionClasses={`whitespace-nowrap overflow-hidden text-ellipsis`}
>
<SpinnerOverlay visible={isLoading} fixed size={'large'} />
<TaskDetailsModal
@@ -103,7 +103,7 @@ export default ({ schedule, task }: Props) => {
<p className={`text-xs uppercase text-zinc-400 mb-1`}>Ignoring files & folders:</p>
)}
<div
className={`font-mono bg-zinc-800 rounded py-1 px-2 text-sm w-auto inline-block whitespace-pre-wrap break-all`}
className={`font-mono bg-zinc-800 rounded-sm py-1 px-2 text-sm w-auto inline-block whitespace-pre-wrap break-all`}
>
{task.payload}
</div>
@@ -125,7 +125,7 @@ export default ({ schedule, task }: Props) => {
<button
type={'button'}
aria-label={'Edit scheduled task'}
className={`block text-sm p-2 text-zinc-500 hover:text-zinc-100 transition-colors duration-150 mr-4 ml-auto sm:ml-0`}
className={`block text-sm p-2 text-zinc-500 hover:text-zinc-100 transition-colors duration-150 mr-4 ml-auto sm:ml-0 cursor-pointer`}
onClick={() => setIsEditing(true)}
>
<FontAwesomeIcon icon={faPen} className={`px-5`} size='lg' />
@@ -136,7 +136,7 @@ export default ({ schedule, task }: Props) => {
<button
type={'button'}
aria-label={'Delete scheduled task'}
className={`block text-sm p-2 text-zinc-500 hover:text-red-600 transition-colors duration-150`}
className={`block text-sm p-2 text-zinc-500 hover:text-red-600 transition-colors duration-150 cursor-pointer`}
onClick={() => setVisible(true)}
>
<FontAwesomeIcon icon={faTrash} className={`px-5`} size='lg' />

View File

@@ -41,12 +41,12 @@ export default () => {
<TitledGreyBox title={'Debug Information'}>
<div className={`flex items-center justify-between text-sm`}>
<p>Node</p>
<code className={`font-mono bg-zinc-900 rounded py-1 px-2`}>{node}</code>
<code className={`font-mono bg-zinc-900 rounded-sm py-1 px-2`}>{node}</code>
</div>
<CopyOnClick text={uuid}>
<div className={`flex items-center justify-between mt-2 text-sm`}>
<p>Server ID</p>
<code className={`font-mono bg-zinc-900 rounded py-1 px-2`}>{uuid}</code>
<code className={`font-mono bg-zinc-900 rounded-sm py-1 px-2`}>{uuid}</code>
</div>
</CopyOnClick>
</TitledGreyBox>
@@ -56,14 +56,14 @@ export default () => {
<Label>Server Address</Label>
<CopyOnClick text={`sftp://${ip(sftp.ip)}:${sftp.port}`}>
<code
className={`font-mono bg-zinc-900 rounded py-1 px-2`}
className={`font-mono bg-zinc-900 rounded-sm py-1 px-2`}
>{`sftp://${ip(sftp.ip)}:${sftp.port}`}</code>
</CopyOnClick>
</div>
<div className={`mt-2 flex items-center justify-between text-sm`}>
<Label>Username</Label>
<CopyOnClick text={`${username}.${id}`}>
<code className={`font-mono bg-zinc-900 rounded py-1 px-2`}>{`${username}.${id}`}</code>
<code className={`font-mono bg-zinc-900 rounded-sm py-1 px-2`}>{`${username}.${id}`}</code>
</CopyOnClick>
</div>
<div className={`mt-6 flex items-center`}>

View File

@@ -272,7 +272,10 @@ const SoftwareContainer = () => {
{isLongDescription && !shouldShowFull ? (
<>
{`${description.slice(0, MAX_DESCRIPTION_LENGTH)}... `}
<button className='text-brand' onClick={() => toggleDescriptionVisibility(index)}>
<button
className='text-brand cursor-pointer'
onClick={() => toggleDescriptionVisibility(index)}
>
Show More
</button>
</>
@@ -280,7 +283,10 @@ const SoftwareContainer = () => {
<>
{description}
{isLongDescription && (
<button className='text-brand' onClick={() => toggleDescriptionVisibility(index)}>
<button
className='text-brand cursor-pointer'
onClick={() => toggleDescriptionVisibility(index)}
>
<span className='text-neutral-400'>..</span>Show Less
</button>
)}
@@ -316,7 +322,7 @@ const SoftwareContainer = () => {
</div>
</div>
<button
className='rounded-full border-[1px] border-[#ffffff12] px-4 py-2 text-sm font-bold shadow-md hover:border-[#ffffff22] hover:shadow-lg bg-gradient-to-b from-[#ffffff10] to-[#ffffff09] text-white'
className='rounded-full border-[1px] cursor-pointer border-[#ffffff12] px-4 py-2 text-sm font-bold shadow-md hover:border-[#ffffff22] hover:shadow-lg bg-linear-to-b from-[#ffffff10] to-[#ffffff09] text-white'
onClick={() => setVisible(true)}
>
Change Egg
@@ -341,7 +347,7 @@ const SoftwareContainer = () => {
style={{ cursor: 'pointer' }}
>
<div
className={`${index < step + 1 ? 'border-[radial-gradient(circle_at_center,_var(--tw-gradient-stops))] from-[#FF343C] to-[#F06F53] text-brand' : 'border-[#ffffff20] text-[#ffffff20]'} border-[2px] rounded-full p-1 w-8 h-8 text-sm font-bold shadow-md hover:shadow-lg items-center text-center`}
className={`${index < step + 1 ? 'border-[radial-gradient(circle_at_center,var(--tw-gradient-stops))] from-[#FF343C] to-[#F06F53] text-brand' : 'border-[#ffffff20] text-[#ffffff20]'} border-[2px] rounded-full p-1 w-8 h-8 text-sm font-bold shadow-md hover:shadow-lg items-center text-center`}
>
{index + 1}
</div>

View File

@@ -108,7 +108,7 @@ const StartupContainer = () => {
<TitledGreyBox title={'Startup Command'} className={`col-span-2`}>
<CopyOnClick text={data.invocation}>
<div className={`px-1 py-2`}>
<p className={`font-mono bg-zinc-900 rounded py-2 px-4`}>{data.invocation}</p>
<p className={`font-mono bg-zinc-900 rounded-sm py-2 px-4`}>{data.invocation}</p>
</div>
</CopyOnClick>
</TitledGreyBox>
@@ -118,7 +118,7 @@ const StartupContainer = () => {
<InputSpinner visible={loading}>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<button className='flex items-center gap-2 font-bold text-sm px-3 py-1 rounded-md bg-[#ffffff11]'>
<button className='flex items-center gap-2 font-bold text-sm px-3 py-1 rounded-md bg-[#ffffff11] cursor-pointer'>
<div>{variables.dockerImage}</div>
<svg
xmlns='http://www.w3.org/2000/svg'
@@ -137,7 +137,7 @@ const StartupContainer = () => {
</svg>
</button>
</DropdownMenuTrigger>
<DropdownMenuContent className='flex flex-col gap-1 z-[99999]' sideOffset={8}>
<DropdownMenuContent className='flex flex-col gap-1 z-99999' sideOffset={8}>
<DropdownMenuRadioGroup
value={variables.dockerImage}
onValueChange={(value) => updateSelectedDockerImage(value)}

View File

@@ -111,7 +111,7 @@ const VariableBox = ({ variable }: Props) => {
<DropdownMenu onOpenChange={(open) => setDropDownOpen(open)}>
<DropdownMenuTrigger asChild>
<button
className='flex items-center justify-center h-8 px-4 text-sm font-medium text-white transition-colors duration-150 bg-gradient-to-b from-[#ffffff10] to-[#ffffff09] inner-border-[1px] inner-border-[#ffffff15] border border-transparent rounded-xl shadow-sm hover:from-[#ffffff05] hover:to-[#ffffff04]'
className='flex items-center justify-center h-8 px-4 text-sm font-medium text-white transition-colors duration-150 bg-linear-to-b from-[#ffffff10] to-[#ffffff09] border border-[#ffffff15] rounded-xl shadow-xs hover:from-[#ffffff05] hover:to-[#ffffff04] cursor-pointer'
disabled={!canEdit || !variable.isEditable}
>
{variable.serverValue}
@@ -128,7 +128,7 @@ const VariableBox = ({ variable }: Props) => {
)}
</button>
</DropdownMenuTrigger>
<DropdownMenuContent className='z-[99999]' sideOffset={8}>
<DropdownMenuContent className='z-99999' sideOffset={8}>
<DropdownMenuRadioGroup
value={variable.serverValue}
onValueChange={setVariableValue}

View File

@@ -13,7 +13,7 @@ export default () => {
background:
'radial-gradient(124.75% 124.75% at 50.01% -10.55%, rgb(36, 36, 36) 0%, rgb(20, 20, 20) 100%)',
}}
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md'
className='px-8 py-3 border-[1px] border-[#ffffff12] rounded-full text-sm font-bold shadow-md cursor-pointer'
onClick={() => setVisible(true)}
>
New User

View File

@@ -50,7 +50,7 @@ export default ({ subuser }: { subuser: Subuser }) => {
<button
type={'button'}
aria-label={'Delete subuser'}
className={`text-sm p-2 text-zinc-500 hover:text-red-600 transition-colors duration-150 flex align-middle items-center justify-center flex-col`}
className={`text-sm p-2 text-zinc-500 hover:text-red-600 transition-colors duration-150 flex align-middle items-center justify-center flex-col cursor-pointer`}
onClick={() => setShowConfirmation(true)}
>
<FontAwesomeIcon icon={faTrashAlt} className={`px-5`} size='lg' />

View File

@@ -48,7 +48,7 @@ export default ({ subuser }: Props) => {
<button
type={'button'}
aria-label={'Edit subuser'}
className={`text-sm p-2 text-zinc-500 hover:text-zinc-100 transition-colors duration-150 flex align-middle items-center justify-center flex-col`}
className={`text-sm p-2 text-zinc-500 hover:text-zinc-100 transition-colors duration-150 flex align-middle items-center justify-center flex-col cursor-pointer`}
onClick={() => setVisible(true)}
>
<FontAwesomeIcon icon={faEdit} className={`px-5`} size='lg' />

View File

@@ -84,13 +84,13 @@ export default () => {
<Fragment key={'dashboard-router'}>
{isSidebarVisible && (
<div
className='lg:hidden fixed inset-0 bg-black bg-opacity-50 z-[9998] transition-opacity duration-300 '
className='lg:hidden fixed inset-0 bg-black bg-opacity-50 z-9998 transition-opacity duration-300 '
onClick={() => setSidebarVisible(false)}
/>
)}
<button
id='sidebarToggle'
className='lg:hidden fixed flex items-center justify-center top-4 left-4 z-50 bg-[#1a1a1a] p-3 rounded-md text-white shadow-md'
className='lg:hidden fixed flex items-center justify-center top-4 left-4 z-50 bg-[#1a1a1a] p-3 rounded-md text-white shadow-md cursor-pointer'
onClick={toggleSidebar}
aria-label='Toggle sidebar'
>
@@ -98,7 +98,7 @@ export default () => {
</button>
<MainSidebar
className={`fixed inset-y-0 left-0 z-[9999] w-[300px] bg-[#1a1a1a] transition-transform duration-300 ease-in-out absolute backdrop-blur-sm ${
className={`fixed inset-y-0 left-0 z-9999 w-[300px] bg-[#1a1a1a] transition-transform duration-300 ease-in-out absolute backdrop-blur-xs ${
isSidebarVisible ? 'translate-x-0' : '-translate-x-full'
} lg:translate-x-0 lg:relative lg:flex lg:shrink-0`}
>
@@ -128,7 +128,7 @@ export default () => {
</NavLink>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<button className='w-10 h-10 flex items-center justify-center rounded-md text-white hover:bg-[#ffffff11] p-2'>
<button className='w-10 h-10 flex items-center justify-center rounded-md text-white hover:bg-[#ffffff11] p-2 cursor-pointer'>
<svg
xmlns='http://www.w3.org/2000/svg'
width='16'
@@ -141,7 +141,7 @@ export default () => {
</svg>
</button>
</DropdownMenuTrigger>
<DropdownMenuContent className='z-[99999]' sideOffset={8}>
<DropdownMenuContent className='z-99999' sideOffset={8}>
{rootAdmin && (
<DropdownMenuItem onSelect={onSelectAdminPanel}>
Admin Panel

View File

@@ -266,14 +266,14 @@ export default () => {
<>
{isSidebarVisible && (
<div
className='lg:hidden fixed inset-0 bg-black bg-opacity-50 z-[9998] transition-opacity duration-300'
className='lg:hidden fixed inset-0 bg-black bg-opacity-50 z-9998 transition-opacity duration-300'
onClick={() => setSidebarVisible(false)}
/>
)}
<button
id='sidebarToggle'
className='lg:hidden fixed flex items-center justify-center top-4 left-4 z-50 bg-[#1a1a1a] p-3 rounded-md text-white shadow-md'
className='lg:hidden fixed flex items-center justify-center top-4 left-4 z-50 bg-[#1a1a1a] p-3 rounded-md text-white shadow-md cursor-pointer'
onClick={toggleSidebar}
aria-label='Toggle sidebar'
>
@@ -283,7 +283,7 @@ export default () => {
<div className='flex flex-row w-full'>
<MainSidebar
ref={sidebarRef}
className={`fixed inset-y-0 left-0 z-[9999] w-[300px] bg-[#1a1a1a] transition-transform duration-300 ease-in-out absolute backdrop-blur-sm ${
className={`fixed inset-y-0 left-0 z-9999 w-[300px] bg-[#1a1a1a] transition-transform duration-300 ease-in-out absolute backdrop-blur-xs ${
isSidebarVisible ? 'translate-x-0' : '-translate-x-full'
} lg:translate-x-0 lg:relative lg:flex lg:shrink-0`}
onTouchStart={handleTouchStart}
@@ -314,7 +314,7 @@ export default () => {
</NavLink>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<button className='w-10 h-10 flex items-center justify-center rounded-md text-white hover:bg-[#ffffff11] p-2 select-none'>
<button className='w-10 h-10 flex items-center justify-center rounded-md text-white hover:bg-[#ffffff11] p-2 select-none cursor-pointer'>
<svg
xmlns='http://www.w3.org/2000/svg'
width='16'
@@ -328,7 +328,7 @@ export default () => {
</svg>
</button>
</DropdownMenuTrigger>
<DropdownMenuContent className='z-[99999] select-none relative' sideOffset={8}>
<DropdownMenuContent className='z-99999 select-none relative' sideOffset={8}>
{rootAdmin && (
<DropdownMenuItem onSelect={onSelectManageServer}>
Manage Server

View File

@@ -1,31 +0,0 @@
const colors = require('tailwindcss/colors');
// I'm literally so smart :3
delete colors['lightBlue'];
delete colors['warmGray'];
delete colors['trueGray'];
delete colors['coolGray'];
delete colors['blueGray'];
module.exports = {
content: ['./resources/views/**/*.blade.php', './resources/scripts/**/*.{js,ts,tsx}'],
theme: {
extend: {
fontFamily: {
jakarta: ['"Plus Jakarta Sans"', 'sans-serif'],
},
colors: {
...colors,
transparent: 'transparent',
current: 'currentColor',
black: '#000000',
brandGrad: 'radial-gradient(109.26% 109.26% at 49.83% 13.37%, #FF343C 0%, #F06F53 100%)',
brand: '#fa4e49',
},
transitionDuration: {
250: '250ms',
},
},
},
// plugins: [require('tailwindcss-animate'), require('tailwindcss-inner-border'), require('tailwind-scrollbar')],
};