mirror of
https://github.com/graphql-hive/console
synced 2026-04-21 14:37:17 +00:00
Upgrade web/app to tailwind v4 (#7490)
Co-authored-by: Dotan Simha <dotansimha@gmail.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Piotr Monwid-Olechnowicz <hasparus@gmail.com>
This commit is contained in:
parent
1179fb59d1
commit
44cc1d7db1
64 changed files with 1028 additions and 625 deletions
104
.eslintrc.cjs
104
.eslintrc.cjs
|
|
@ -147,7 +147,7 @@ module.exports = {
|
|||
extends: [
|
||||
'@theguild',
|
||||
'@theguild/eslint-config/react',
|
||||
'plugin:tailwindcss/recommended',
|
||||
'plugin:better-tailwindcss/legacy-recommended',
|
||||
'plugin:@next/next/recommended',
|
||||
],
|
||||
settings: {
|
||||
|
|
@ -159,13 +159,12 @@ module.exports = {
|
|||
},
|
||||
rules: {
|
||||
// conflicts with official prettier-plugin-tailwindcss and tailwind v3
|
||||
'tailwindcss/classnames-order': 'off',
|
||||
'tailwindcss/no-unnecessary-arbitrary-value': 'off',
|
||||
// set more strict to highlight in editor
|
||||
'tailwindcss/enforces-shorthand': 'error',
|
||||
'tailwindcss/no-custom-classname': 'error',
|
||||
'tailwindcss/migration-from-tailwind-2': 'error',
|
||||
'tailwindcss/no-contradicting-classname': 'error',
|
||||
'better-tailwindcss/enforce-consistent-class-order': 'off',
|
||||
'better-tailwindcss/enforce-canonical-classes': 'warn',
|
||||
// keeping classes in one line helps prettier-plugin-tailwindcss
|
||||
// enable wrapping in text editors to make classes human readable
|
||||
'better-tailwindcss/enforce-consistent-line-wrapping': 'off',
|
||||
'better-tailwindcss/enforce-shorthand-classes': 'off',
|
||||
'react/display-name': 'off',
|
||||
'react/prop-types': 'off',
|
||||
'react/no-unknown-property': 'off',
|
||||
|
|
@ -198,13 +197,55 @@ module.exports = {
|
|||
{
|
||||
files: ['packages/web/app/**'],
|
||||
settings: {
|
||||
tailwindcss: {
|
||||
'better-tailwindcss': {
|
||||
// tailwindcss 4: the path to the entry file of the css based tailwind config (eg: `src/global.css`)
|
||||
entryPoint: 'packages/web/app/src/index.css',
|
||||
callees: tailwindCallees,
|
||||
config: path.join(__dirname, './packages/web/app/tailwind.config.ts'),
|
||||
whitelist: ['drag-none'],
|
||||
cssFiles: ['packages/web/app/src/index.css', 'node_modules/graphiql/dist/style.css'],
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
// better-tailwindcss assumes you're using v4...we're being explicit here due to our dual tailwind setups
|
||||
'better-tailwindcss/no-deprecated-classes': 'error',
|
||||
// Tailwind v4 uses CSS variables without var() syntax
|
||||
'better-tailwindcss/enforce-consistent-variable-syntax': 'off',
|
||||
'better-tailwindcss/no-unknown-classes': [
|
||||
'error',
|
||||
{
|
||||
ignore: [
|
||||
'drag-none',
|
||||
// Tailwind v4 semantic colors from @theme in index.css
|
||||
// Regex patterns to match all utility variants (bg-*, text-*, border-*, etc.)
|
||||
// Includes optional opacity modifier (/40, /60, etc.)
|
||||
'(bg|text|border|ring|outline|shadow|from|via|to|fill|stroke|caret|accent|divide|placeholder)-(background|foreground|card|card-foreground|popover|popover-foreground|primary|primary-foreground|secondary|secondary-foreground|muted|muted-foreground|accent|accent-foreground|destructive|destructive-foreground|border|input|ring|sidebar|sidebar-background|sidebar-foreground|sidebar-primary|sidebar-primary-foreground|sidebar-accent|sidebar-accent-foreground|sidebar-border|sidebar-ring|chart-1|chart-2)(/.*)?',
|
||||
// Animation utilities (from index.css, replaces tailwindcss-animate)
|
||||
'animate-in',
|
||||
'animate-out',
|
||||
'fade-in-.*',
|
||||
'fade-out-.*',
|
||||
'zoom-in-.*',
|
||||
'zoom-out-.*',
|
||||
'slide-in-from-.*',
|
||||
'slide-out-to-.*',
|
||||
// Custom radius from @theme
|
||||
'rounded-xs',
|
||||
// ring-offset with semantic colors
|
||||
'ring-offset-.*',
|
||||
// Data attribute variants with custom animations (for Radix UI components)
|
||||
'data-\\[side=(top|right|bottom|left)\\]:animate-slide-(up|down|left|right)-fade',
|
||||
// GraphiQL classes
|
||||
'graphiql-.*',
|
||||
// hive classes
|
||||
'hive-.*',
|
||||
// Schema diff custom classes (defined in index.css)
|
||||
'schema-doc-row-.*',
|
||||
// No scrollbar utility (defined in index.css)
|
||||
'no-scrollbar',
|
||||
// Tailwind v4 CSS variable syntax with parentheses
|
||||
'.*-\\(--.*\\)',
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['packages/web/app/**/*.stories.tsx', 'packages/web/docs/**'],
|
||||
|
|
@ -218,23 +259,38 @@ module.exports = {
|
|||
next: {
|
||||
rootDir: 'packages/web/docs',
|
||||
},
|
||||
tailwindcss: {
|
||||
'better-tailwindcss': {
|
||||
// tailwindcss 3: the path to the tailwind config file (eg: `tailwind.config.js`)
|
||||
tailwindConfig: 'packages/web/docs/tailwind.config.ts',
|
||||
callees: tailwindCallees,
|
||||
whitelist: [
|
||||
'light',
|
||||
'hive-focus',
|
||||
'hive-focus-within',
|
||||
'nextra-scrollbar',
|
||||
'no-scrollbar', // from Nextra
|
||||
'hive-slider',
|
||||
'hive-prose',
|
||||
'subheader',
|
||||
],
|
||||
config: path.join(__dirname, './packages/web/docs/tailwind.config.ts'),
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
'import/extensions': 'off',
|
||||
// better-tailwindcss assumes you're using v4...we're being explicit here due to our dual tailwind setups
|
||||
'better-tailwindcss/no-deprecated-classes': 'off',
|
||||
'better-tailwindcss/no-unknown-classes': [
|
||||
'error',
|
||||
{
|
||||
ignore: [
|
||||
'light',
|
||||
'hive-focus',
|
||||
'hive-focus-within',
|
||||
'nextra-focus',
|
||||
'nextra-scrollbar',
|
||||
'no-scrollbar', // from Nextra
|
||||
'hive-slider',
|
||||
'hive-prose',
|
||||
'subheader',
|
||||
'subheading-anchor',
|
||||
'duration-\\[.*\\]', // Allow arbitrary duration values like duration-[.8s]
|
||||
'ease-\\[var\\(--.*\\)\\]', // Allow CSS variables in arbitrary ease values
|
||||
'x:.*', // Allow Nextra 4 custom variant prefix
|
||||
],
|
||||
},
|
||||
],
|
||||
// Allow CSS variables in arbitrary values for Tailwind v3
|
||||
'better-tailwindcss/enforce-consistent-variable-syntax': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
|||
9
.github/workflows/release-stable.yaml
vendored
9
.github/workflows/release-stable.yaml
vendored
|
|
@ -57,14 +57,21 @@ jobs:
|
|||
with:
|
||||
toolchain: stable
|
||||
|
||||
# see https://github.com/changesets/action/issues/523
|
||||
- name: fix gh-api issues with changesets
|
||||
run: |
|
||||
echo "Cargo.lock" >> .gitignore
|
||||
git ls-files | while read -r file; do [ -x "$file" ] && chmod -x "$file" || true; done
|
||||
|
||||
- name: publish stable
|
||||
id: changesets
|
||||
uses: changesets/action@06245a4e0a36c064a573d4150030f5ec548e4fcc # v1.4.10
|
||||
uses: changesets/action@e0145edc7d9d8679003495b11f87bd8ef63c0cba # v1.5.3
|
||||
with:
|
||||
publish: pnpm release
|
||||
version: pnpm release:version
|
||||
commit: 'chore(release): update monorepo packages versions'
|
||||
title: 'Upcoming Release Changes'
|
||||
commitMode: github-api
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||
|
||||
|
|
|
|||
3
.npmrc
3
.npmrc
|
|
@ -1,3 +1,6 @@
|
|||
enable-pre-post-scripts=true
|
||||
shamefully-hoist=true
|
||||
public-hoist-pattern[]=@tailwindcss/vite
|
||||
public-hoist-pattern[]=!tailwindcss
|
||||
public-hoist-pattern[]=!@tailwindcss/*
|
||||
engine-strict=true
|
||||
|
|
|
|||
|
|
@ -89,9 +89,9 @@
|
|||
"cypress": "13.17.0",
|
||||
"dotenv": "16.4.7",
|
||||
"eslint": "8.57.1",
|
||||
"eslint-plugin-better-tailwindcss": "^4.0.0",
|
||||
"eslint-plugin-cypress": "4.1.0",
|
||||
"eslint-plugin-hive": "file:rules",
|
||||
"eslint-plugin-tailwindcss": "npm:@hasparus/eslint-plugin-tailwindcss@3.17.5",
|
||||
"fs-extra": "11.2.0",
|
||||
"graphql": "16.9.0",
|
||||
"gray-matter": "4.0.3",
|
||||
|
|
@ -134,6 +134,9 @@
|
|||
"ip": "npm:neoip@2.1.0",
|
||||
"miniflare@3>undici": "^7.18.2",
|
||||
"tailwindcss": "3.4.17",
|
||||
"@hive/app>tailwindcss": "4.1.18",
|
||||
"@tailwindcss/node>tailwindcss": "4.1.18",
|
||||
"@tailwindcss/vite>tailwindcss": "4.1.18",
|
||||
"estree-util-value-to-estree": "^3.3.3",
|
||||
"nodemailer@^6.0.0": "^7.0.11",
|
||||
"@types/nodemailer>@aws-sdk/client-sesv2": "-",
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
"@storybook/react-vite": "8.6.15",
|
||||
"@stripe/react-stripe-js": "3.1.1",
|
||||
"@stripe/stripe-js": "5.5.0",
|
||||
"@tailwindcss/vite": "^4.1.18",
|
||||
"@tanstack/react-form": "^1.27.0",
|
||||
"@tanstack/react-query": "5.63.0",
|
||||
"@tanstack/react-router": "1.34.9",
|
||||
|
|
@ -93,7 +94,6 @@
|
|||
"@urql/exchange-graphcache": "7.1.0",
|
||||
"@vitejs/plugin-react": "4.3.4",
|
||||
"@xyflow/react": "12.4.4",
|
||||
"autoprefixer": "10.4.21",
|
||||
"class-variance-authority": "0.7.1",
|
||||
"clsx": "2.1.1",
|
||||
"cmdk": "0.2.1",
|
||||
|
|
@ -149,9 +149,7 @@
|
|||
"supertokens-auth-react": "0.38.0",
|
||||
"supertokens-web-js": "0.9.0",
|
||||
"tailwind-merge": "2.6.0",
|
||||
"tailwindcss": "3.4.17",
|
||||
"tailwindcss-animate": "1.0.7",
|
||||
"tailwindcss-radix": "3.0.5",
|
||||
"tailwindcss": "4.1.18",
|
||||
"tslib": "2.8.1",
|
||||
"tsx": "4.19.2",
|
||||
"urql": "4.1.0",
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
export default {
|
||||
plugins: {
|
||||
autoprefixer: {},
|
||||
tailwindcss: {},
|
||||
},
|
||||
};
|
||||
|
|
@ -5,7 +5,7 @@ export function Label({ className, children, ...props }: ComponentProps<'span'>)
|
|||
return (
|
||||
<span
|
||||
className={cn(
|
||||
'inline-block rounded bg-yellow-50 px-2 py-1 text-xs font-medium tracking-widest text-yellow-600 dark:bg-white/10 dark:text-yellow-300',
|
||||
'inline-block rounded-sm bg-yellow-50 px-2 py-1 text-xs font-medium tracking-widest text-yellow-600 dark:bg-white/10 dark:text-yellow-300',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ export function GetStartedProgress(props: {
|
|||
<button
|
||||
onClick={toggle}
|
||||
className={cn(
|
||||
'cursor-pointer rounded px-4 py-2 text-left hover:opacity-80',
|
||||
'cursor-pointer rounded-sm px-4 py-2 text-left hover:opacity-80',
|
||||
props.className,
|
||||
)}
|
||||
>
|
||||
|
|
@ -50,7 +50,7 @@ export function GetStartedProgress(props: {
|
|||
{remaining} remaining task{remaining > 1 ? 's' : ''}
|
||||
</div>
|
||||
<div>
|
||||
<div className="relative mt-1 h-[5px] w-full overflow-hidden rounded bg-gray-800">
|
||||
<div className="relative mt-1 h-[5px] w-full overflow-hidden rounded-sm bg-gray-800">
|
||||
<div
|
||||
className="h-full bg-orange-500"
|
||||
style={{ width: `${(completed / total) * 100}%` }}
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ export function OrganizationLayout({
|
|||
return (
|
||||
<>
|
||||
<header>
|
||||
<div className="container flex h-[--header-height] items-center justify-between">
|
||||
<div className="h-(--header-height) container flex items-center justify-between">
|
||||
<div className="flex flex-row items-center gap-4">
|
||||
<HiveLink className="size-8" />
|
||||
<OrganizationSelector
|
||||
|
|
@ -142,7 +142,7 @@ export function OrganizationLayout({
|
|||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div className="relative h-[--tabs-navbar-height] border-b border-gray-800">
|
||||
<div className="h-(--tabs-navbar-height) relative border-b border-gray-800">
|
||||
<div className="container flex items-center justify-between">
|
||||
{currentOrganization ? (
|
||||
<Tabs value={page} className="min-w-[600px]">
|
||||
|
|
@ -383,7 +383,7 @@ export function CreateProjectModalContent(props: {
|
|||
}) {
|
||||
return (
|
||||
<Dialog open={props.isOpen} onOpenChange={props.toggleModalOpen}>
|
||||
<DialogContent className="container w-4/5 max-w-[600px] md:w-3/5">
|
||||
<DialogContent className="w-4/5 max-w-[600px] md:w-3/5">
|
||||
<Form {...props.form}>
|
||||
<form onSubmit={props.form.handleSubmit(props.onSubmit)} data-cy="create-project-form">
|
||||
<DialogHeader className="mb-8">
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ export function ProjectLayout({
|
|||
return (
|
||||
<>
|
||||
<header>
|
||||
<div className="container flex h-[--header-height] items-center justify-between">
|
||||
<div className="h-(--header-height) container flex items-center justify-between">
|
||||
<div className="flex flex-row items-center gap-4">
|
||||
<HiveLink className="size-8" />
|
||||
<ProjectSelector
|
||||
|
|
@ -111,7 +111,7 @@ export function ProjectLayout({
|
|||
<ResourceNotFoundComponent title="404 - This project does not seem to exist." />
|
||||
) : (
|
||||
<>
|
||||
<div className="relative h-[--tabs-navbar-height] border-b border-gray-800">
|
||||
<div className="h-(--tabs-navbar-height) relative border-b border-gray-800">
|
||||
<div className="container flex items-center justify-between">
|
||||
{currentOrganization && currentProject ? (
|
||||
<Tabs value={page}>
|
||||
|
|
@ -298,7 +298,7 @@ export function CreateTargetModalContent(props: {
|
|||
}) {
|
||||
return (
|
||||
<Dialog open={props.isOpen} onOpenChange={props.toggleModalOpen}>
|
||||
<DialogContent className="container w-4/5 max-w-[520px] md:w-3/5">
|
||||
<DialogContent className="w-4/5 max-w-[520px] md:w-3/5">
|
||||
<Form {...props.form}>
|
||||
<form className="space-y-8" onSubmit={props.form.handleSubmit(props.onSubmit)}>
|
||||
<DialogHeader>
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ export const TargetLayout = ({
|
|||
targetSlug={props.targetSlug}
|
||||
>
|
||||
<header>
|
||||
<div className="container flex h-[--header-height] items-center justify-between">
|
||||
<div className="h-(--header-height) container flex items-center justify-between">
|
||||
<div className="flex flex-row items-center gap-4">
|
||||
<HiveLink className="size-8" />
|
||||
<TargetSelector
|
||||
|
|
@ -183,7 +183,7 @@ export const TargetLayout = ({
|
|||
<ResourceNotFoundComponent title="404 - This project does not seem to exist." />
|
||||
) : (
|
||||
<>
|
||||
<div className="relative h-[--tabs-navbar-height] border-b border-gray-800">
|
||||
<div className="h-(--tabs-navbar-height) relative border-b border-gray-800">
|
||||
<div className="container flex items-center justify-between">
|
||||
{currentOrganization && currentProject && currentTarget ? (
|
||||
<Tabs className="flex h-full grow flex-col" value={page}>
|
||||
|
|
|
|||
|
|
@ -138,13 +138,13 @@ export function BillingPlanPicker({
|
|||
}): ReactElement {
|
||||
const plans = useFragment(BillingPlanPicker_PlanFragment, props.plans);
|
||||
return (
|
||||
<RadioGroup value={value} onValueChange={onPlanChange} className="flex gap-4 md:!flex-row">
|
||||
<RadioGroup value={value} onValueChange={onPlanChange} className="md:flex-row! flex gap-4">
|
||||
{plans.map(plan => (
|
||||
<Radio
|
||||
disabled={disabled}
|
||||
value={plan.planType}
|
||||
key={plan.id}
|
||||
className="!rounded-md border p-4 md:w-1/3"
|
||||
className="rounded-md! border p-4 md:w-1/3"
|
||||
>
|
||||
<Plan
|
||||
key={plan.id}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ const IncrementalNativeCompositionSwitch = (props: {
|
|||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'flex flex-row items-center gap-x-10 rounded border-[1px] border-gray-800 bg-gray-800/50 p-4',
|
||||
'flex flex-row items-center gap-x-10 rounded-sm border border-gray-800 bg-gray-800/50 p-4',
|
||||
mutation.fetching && 'animate-pulse',
|
||||
)}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export function SchemaExplorerUsageStats(props: {
|
|||
</div>
|
||||
<div
|
||||
title={`${toDecimal(percentage)}% of all requests`}
|
||||
className="relative z-0 mt-1 w-full min-w-[25px] overflow-hidden rounded bg-orange-500/20"
|
||||
className="relative z-0 mt-1 w-full min-w-[25px] overflow-hidden rounded-sm bg-orange-500/20"
|
||||
style={{ width: 50, height: 5 }}
|
||||
>
|
||||
<div className="z-0 h-full bg-orange-500" style={{ width: `${percentage}%` }} />
|
||||
|
|
|
|||
|
|
@ -235,10 +235,7 @@ export function CreateCollectionModalContent(props: {
|
|||
}) {
|
||||
return (
|
||||
<Dialog open={props.isOpen} onOpenChange={props.toggleModalOpen}>
|
||||
<DialogContent
|
||||
className="container w-4/5 max-w-[600px] md:w-3/5"
|
||||
data-cy="create-collection-modal"
|
||||
>
|
||||
<DialogContent className="w-4/5 max-w-[600px] md:w-3/5" data-cy="create-collection-modal">
|
||||
{!props.fetching && (
|
||||
<Form {...props.form}>
|
||||
<form className="space-y-8" onSubmit={props.form.handleSubmit(props.onSubmit)}>
|
||||
|
|
|
|||
|
|
@ -190,10 +190,7 @@ export function CreateOperationModalContent(props: {
|
|||
props.form.reset();
|
||||
}}
|
||||
>
|
||||
<DialogContent
|
||||
className="container w-4/5 max-w-[600px] md:w-3/5"
|
||||
data-cy="create-operation-modal"
|
||||
>
|
||||
<DialogContent className="w-4/5 max-w-[600px] md:w-3/5" data-cy="create-operation-modal">
|
||||
{!props.fetching && (
|
||||
<Form {...props.form}>
|
||||
<form className="space-y-8" onSubmit={props.form.handleSubmit(props.onSubmit)}>
|
||||
|
|
@ -231,7 +228,7 @@ export function CreateOperationModalContent(props: {
|
|||
{props.collections.find(c => c.id === field.value)?.name ??
|
||||
'Select a Collection'}
|
||||
</SelectTrigger>
|
||||
<SelectContent className="w-[--radix-select-trigger-width]">
|
||||
<SelectContent className="w-(--radix-select-trigger-width)">
|
||||
{props.collections.map(c => (
|
||||
<SelectItem key={c.id} value={c.id} data-cy="collection-select-item">
|
||||
{c.name}
|
||||
|
|
|
|||
|
|
@ -167,10 +167,7 @@ export const EditOperationModalContent = (props: {
|
|||
props.form.reset();
|
||||
}}
|
||||
>
|
||||
<DialogContent
|
||||
className="container w-4/5 max-w-[600px] md:w-3/5"
|
||||
data-cy="edit-operation-modal"
|
||||
>
|
||||
<DialogContent className="w-4/5 max-w-[600px] md:w-3/5" data-cy="edit-operation-modal">
|
||||
{!props.fetching && (
|
||||
<Form {...props.form}>
|
||||
<form className="space-y-8" onSubmit={props.form.handleSubmit(props.onSubmit)}>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ export function ReviewComments(props: {
|
|||
|
||||
return (
|
||||
<>
|
||||
<div className="mb-2 rounded border-[1px] border-gray-600 bg-black px-6 py-4 font-sans">
|
||||
<div className="mb-2 rounded-sm border border-gray-600 bg-black px-6 py-4 font-sans">
|
||||
{review.comments?.edges?.map(({ node: comment }, idx) => {
|
||||
return (
|
||||
<ReviewComment key={`comment-${comment.id}`} first={idx === 0} comment={comment} />
|
||||
|
|
|
|||
|
|
@ -391,7 +391,7 @@ export function ProposalEditor(props: {
|
|||
? `new-${idx}`
|
||||
: `tab-${service.id}`
|
||||
}
|
||||
className="relative mt-0 rounded border py-0"
|
||||
className="relative mt-0 rounded-sm border py-0"
|
||||
>
|
||||
<DiffEditor
|
||||
before={existing?.source ?? ''}
|
||||
|
|
|
|||
|
|
@ -165,10 +165,7 @@ export function CreatedTokenContent(props: {
|
|||
toggleModalOpen: () => void;
|
||||
}) {
|
||||
return (
|
||||
<DialogContent
|
||||
className="container w-4/5 max-w-[600px] md:w-3/5"
|
||||
data-cy="registry-token-created"
|
||||
>
|
||||
<DialogContent className="w-4/5 max-w-[600px] md:w-3/5" data-cy="registry-token-created">
|
||||
<DialogHeader className="flex flex-col gap-5">
|
||||
<DialogTitle>Token successfully created!</DialogTitle>
|
||||
<DialogDescription className="flex flex-col gap-5">
|
||||
|
|
@ -197,7 +194,7 @@ export function GenerateTokenContent(props: {
|
|||
noPermissionsSelected: boolean;
|
||||
}) {
|
||||
return (
|
||||
<DialogContent className="container w-4/5 max-w-[600px] md:w-3/5">
|
||||
<DialogContent className="w-4/5 max-w-[600px] md:w-3/5">
|
||||
<Form {...props.form}>
|
||||
<form
|
||||
className="flex grow flex-col gap-5"
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ const ChartTooltipContent = React.forwardRef<
|
|||
!hideIndicator && (
|
||||
<div
|
||||
className={cn(
|
||||
'shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]',
|
||||
'border-(--color-border) bg-(--color-bg) shrink-0 rounded-[2px]',
|
||||
{
|
||||
'h-2.5 w-2.5': indicator === 'dot',
|
||||
'w-1': indicator === 'line',
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ const CommandItem = React.forwardRef<
|
|||
<CommandPrimitive.Item
|
||||
ref={ref}
|
||||
className={cn(
|
||||
'aria-selected:bg-accent aria-selected:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
||||
'aria-selected:bg-accent aria-selected:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ const DropdownMenuItem = React.forwardRef<
|
|||
<DropdownMenuPrimitive.Item
|
||||
ref={ref}
|
||||
className={cn(
|
||||
'focus:bg-accent focus:text-accent-foreground relative flex cursor-pointer select-none items-center rounded-sm p-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
||||
'focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-pointer select-none items-center rounded-sm p-2 text-sm outline-none transition-colors',
|
||||
inset && 'pl-8',
|
||||
active && 'bg-accent text-orange-500',
|
||||
className,
|
||||
|
|
@ -92,7 +92,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
|
|||
<DropdownMenuPrimitive.CheckboxItem
|
||||
ref={ref}
|
||||
className={cn(
|
||||
'focus:bg-accent focus:text-accent-foreground relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
||||
'focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors',
|
||||
className,
|
||||
)}
|
||||
checked={checked}
|
||||
|
|
@ -115,7 +115,7 @@ const DropdownMenuRadioItem = React.forwardRef<
|
|||
<DropdownMenuPrimitive.RadioItem
|
||||
ref={ref}
|
||||
className={cn(
|
||||
'focus:bg-accent focus:text-accent-foreground relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
||||
'focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ const ScrollArea = React.forwardRef<
|
|||
{...props}
|
||||
>
|
||||
{/** LOL https://github.com/radix-ui/primitives/issues/2722 */}
|
||||
<ScrollAreaPrimitive.Viewport className="size-full rounded-[inherit] [&>div]:!block">
|
||||
<ScrollAreaPrimitive.Viewport className="[&>div]:block! size-full rounded-[inherit]">
|
||||
{children}
|
||||
</ScrollAreaPrimitive.Viewport>
|
||||
<ScrollBar />
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ const SelectContent = React.forwardRef<
|
|||
className={cn(
|
||||
'p-1',
|
||||
position === 'popper' &&
|
||||
'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',
|
||||
'max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width) w-full',
|
||||
)}
|
||||
>
|
||||
{children}
|
||||
|
|
@ -96,7 +96,7 @@ const SelectItem = React.forwardRef<
|
|||
<SelectPrimitive.Item
|
||||
ref={ref}
|
||||
className={cn(
|
||||
'focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
||||
'focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ const SidebarProvider = React.forwardRef<
|
|||
} as React.CSSProperties
|
||||
}
|
||||
className={cn(
|
||||
'group/sidebar-wrapper has-[[data-variant=inset]]:bg-sidebar flex min-h-svh w-full',
|
||||
'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',
|
||||
className,
|
||||
)}
|
||||
ref={ref}
|
||||
|
|
@ -167,7 +167,7 @@ const Sidebar = React.forwardRef<
|
|||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'bg-sidebar text-sidebar-foreground flex h-full w-[--sidebar-width] flex-col',
|
||||
'bg-sidebar text-sidebar-foreground w-(--sidebar-width) flex h-full flex-col',
|
||||
className,
|
||||
)}
|
||||
ref={ref}
|
||||
|
|
@ -184,7 +184,7 @@ const Sidebar = React.forwardRef<
|
|||
<SheetContent
|
||||
data-sidebar="sidebar"
|
||||
data-mobile="true"
|
||||
className="bg-sidebar text-sidebar-foreground w-[--sidebar-width] p-0 [&>button]:hidden"
|
||||
className="bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden"
|
||||
style={
|
||||
{
|
||||
'--sidebar-width': SIDEBAR_WIDTH_MOBILE,
|
||||
|
|
@ -210,31 +210,31 @@ const Sidebar = React.forwardRef<
|
|||
{/* This is what handles the sidebar gap on desktop */}
|
||||
<div
|
||||
className={cn(
|
||||
'relative h-svh w-[--sidebar-width] bg-transparent transition-[width] duration-200 ease-linear',
|
||||
'w-(--sidebar-width) relative h-svh bg-transparent transition-[width] duration-200 ease-linear',
|
||||
'group-data-[collapsible=offcanvas]:w-0',
|
||||
'group-data-[side=right]:rotate-180',
|
||||
variant === 'floating' || variant === 'inset'
|
||||
? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]'
|
||||
: 'group-data-[collapsible=icon]:w-[--sidebar-width-icon]',
|
||||
? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'
|
||||
: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',
|
||||
)}
|
||||
/>
|
||||
<div
|
||||
className={cn(
|
||||
'fixed inset-y-0 z-10 hidden h-svh w-[--sidebar-width] transition-[left,right,width] duration-200 ease-linear md:flex',
|
||||
'w-(--sidebar-width) fixed inset-y-0 z-10 hidden h-svh transition-[left,right,width] duration-200 ease-linear md:flex',
|
||||
side === 'left'
|
||||
? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'
|
||||
: 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',
|
||||
// Adjust the padding for floating and inset variants.
|
||||
variant === 'floating' || variant === 'inset'
|
||||
? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]'
|
||||
: 'group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l',
|
||||
? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'
|
||||
: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
<div
|
||||
data-sidebar="sidebar"
|
||||
className="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex size-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow"
|
||||
className="bg-sidebar group-data-[variant=floating]:border-sidebar-border flex size-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm"
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
|
|
@ -285,10 +285,10 @@ const SidebarRail = React.forwardRef<HTMLButtonElement, React.ComponentProps<'bu
|
|||
title="Toggle Sidebar"
|
||||
className={cn(
|
||||
'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',
|
||||
'[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize',
|
||||
'[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',
|
||||
'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',
|
||||
'group-data-[side=left]:group-data-[state=collapsed]:cursor-e-resize group-data-[side=right]:group-data-[state=collapsed]:cursor-w-resize',
|
||||
'group-data-[collapsible=offcanvas]:hover:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',
|
||||
'[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',
|
||||
'group-data-[side=left]:group-data-[collapsible=offcanvas]:-right-2',
|
||||
'[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',
|
||||
className,
|
||||
)}
|
||||
|
|
@ -306,7 +306,7 @@ const SidebarInset = React.forwardRef<HTMLDivElement, React.ComponentProps<'main
|
|||
ref={ref}
|
||||
className={cn(
|
||||
'bg-background relative flex min-h-svh flex-1 flex-col',
|
||||
'peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))] md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow',
|
||||
'peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))] md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -489,7 +489,7 @@ const SidebarMenuItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li
|
|||
SidebarMenuItem.displayName = 'SidebarMenuItem';
|
||||
|
||||
const sidebarMenuButtonVariants = cva(
|
||||
'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',
|
||||
'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',
|
||||
{
|
||||
variants: {
|
||||
variant: {
|
||||
|
|
@ -640,7 +640,7 @@ const SidebarMenuSkeleton = React.forwardRef<
|
|||
>
|
||||
{showIcon && <Skeleton className="size-4 rounded-md" data-sidebar="menu-skeleton-icon" />}
|
||||
<Skeleton
|
||||
className="h-4 max-w-[--skeleton-width] flex-1"
|
||||
className="max-w-(--skeleton-width) h-4 flex-1"
|
||||
data-sidebar="menu-skeleton-text"
|
||||
style={
|
||||
{
|
||||
|
|
|
|||
|
|
@ -403,7 +403,7 @@ const listVariants = cva('flex gap-2', {
|
|||
const classForSeparator = cva(
|
||||
[
|
||||
'bg-muted',
|
||||
'data-[state=completed]:bg-primary data-[disabled]:opacity-50',
|
||||
'data-[state=completed]:bg-primary data-disabled:opacity-50',
|
||||
'transition-all duration-300 ease-in-out',
|
||||
],
|
||||
{
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ const tabsListVariants = cva('relative flex items-center', {
|
|||
});
|
||||
|
||||
// Define variants for TabsTrigger
|
||||
const tabsTriggerVariants = cva('cursor-pointer !appearance-none text-sm font-medium transition', {
|
||||
const tabsTriggerVariants = cva('cursor-pointer appearance-none! text-sm font-medium transition', {
|
||||
variants: {
|
||||
variant: {
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ const ToastViewport = React.forwardRef<
|
|||
));
|
||||
ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
|
||||
|
||||
// eslint-disable-next-line tailwindcss/no-custom-classname
|
||||
const toastVariants = cva(
|
||||
'group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ export const Input = forwardRef<
|
|||
<button
|
||||
aria-label="Reset"
|
||||
onClick={onClear}
|
||||
className="rounded p-0.5 transition-colors hover:bg-gray-700/50"
|
||||
className="rounded-sm p-0.5 transition-colors hover:bg-gray-700/50"
|
||||
>
|
||||
<svg
|
||||
stroke="currentColor"
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ export function RadixSelect<T extends string>({
|
|||
value={value}
|
||||
className={clsx(
|
||||
'relative flex items-center rounded-md px-8 py-2 text-sm font-medium text-gray-700 focus:bg-gray-100 dark:text-gray-300 dark:focus:bg-gray-900',
|
||||
'radix-disabled:opacity-50',
|
||||
'data-disabled:opacity-50',
|
||||
'cursor-pointer select-none focus:outline-none',
|
||||
)}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -18,11 +18,11 @@ function Wrapper({
|
|||
sideOffset={4}
|
||||
{...contentProps}
|
||||
className={clsx(
|
||||
'radix-side-top:animate-slide-down-fade',
|
||||
'radix-side-right:animate-slide-left-fade',
|
||||
'radix-side-bottom:animate-slide-up-fade',
|
||||
'radix-side-left:animate-slide-right-fade',
|
||||
'rounded-lg bg-gray-800 p-4 text-xs font-normal text-white shadow',
|
||||
'data-[side=top]:animate-slide-down-fade',
|
||||
'data-[side=right]:animate-slide-left-fade',
|
||||
'data-[side=bottom]:animate-slide-up-fade',
|
||||
'data-[side=left]:animate-slide-right-fade',
|
||||
'rounded-lg bg-gray-800 p-4 text-xs font-normal text-white shadow-sm',
|
||||
contentProps.className,
|
||||
)}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,356 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
@import 'tailwindcss';
|
||||
@plugin "./lib/tailwind-plugins.js";
|
||||
|
||||
@theme {
|
||||
/* Typography */
|
||||
--font-sans: 'Inter var', ui-sans-serif, system-ui, sans-serif;
|
||||
--font-mono: ui-monospace, 'SFMono-Regular', 'Menlo', 'Monaco', monospace;
|
||||
--default-font-feature-settings: normal;
|
||||
--default-font-variation-settings: 'opsz' 32;
|
||||
|
||||
/* Custom Colors */
|
||||
--color-white: #fcfcfc;
|
||||
--color-black: #0b0d11;
|
||||
--color-cyan: #0acccc;
|
||||
--color-magenta: #f11197;
|
||||
|
||||
/* Red Palette */
|
||||
--color-red-50: #fef5f5;
|
||||
--color-red-100: #fdeaeb;
|
||||
--color-red-200: #fbcbce;
|
||||
--color-red-300: #f8abb0;
|
||||
--color-red-400: #f26d74;
|
||||
--color-red-500: #ed2e39;
|
||||
--color-red-600: #d52933;
|
||||
--color-red-700: #b2232b;
|
||||
--color-red-800: #8e1c22;
|
||||
--color-red-900: #74171c;
|
||||
|
||||
/* Yellow Palette */
|
||||
--color-yellow-50: #fffcf2;
|
||||
--color-yellow-100: #fffae6;
|
||||
--color-yellow-200: #fff2bf;
|
||||
--color-yellow-300: #ffeb99;
|
||||
--color-yellow-400: #ffdb4d;
|
||||
--color-yellow-500: #fc0;
|
||||
--color-yellow-600: #e6b800;
|
||||
--color-yellow-700: #bf9900;
|
||||
--color-yellow-800: #997a00;
|
||||
--color-yellow-900: #7d6400;
|
||||
|
||||
/* Green Palette */
|
||||
--color-green-50: #f2fcf9;
|
||||
--color-green-100: #e6f8f3;
|
||||
--color-green-200: #bfeee1;
|
||||
--color-green-300: #99e3cf;
|
||||
--color-green-400: #4dcfac;
|
||||
--color-green-500: #00ba88;
|
||||
--color-green-600: #00a77a;
|
||||
--color-green-700: #008c66;
|
||||
--color-green-800: #007052;
|
||||
--color-green-900: #005b43;
|
||||
|
||||
/* Orange Palette */
|
||||
--color-orange-50: #fefbf5;
|
||||
--color-orange-100: #fef8ec;
|
||||
--color-orange-200: #fcedcf;
|
||||
--color-orange-300: #fbe2b3;
|
||||
--color-orange-400: #f7cd79;
|
||||
--color-orange-500: #f4b740;
|
||||
--color-orange-600: #dca53a;
|
||||
--color-orange-700: #b78930;
|
||||
--color-orange-800: #926e26;
|
||||
--color-orange-900: #785a1f;
|
||||
|
||||
/* Gray Palette (Stone) */
|
||||
--color-gray-50: #fafaf9;
|
||||
--color-gray-100: #f5f5f4;
|
||||
--color-gray-200: #e7e5e4;
|
||||
--color-gray-300: #d6d3d1;
|
||||
--color-gray-400: #a8a29e;
|
||||
--color-gray-500: #78716c;
|
||||
--color-gray-600: #57534e;
|
||||
--color-gray-700: #44403c;
|
||||
--color-gray-800: #292524;
|
||||
--color-gray-900: #1c1917;
|
||||
--color-gray-950: #0c0a09;
|
||||
|
||||
/* Blue Palette (Sky) */
|
||||
--color-blue-50: #f0f9ff;
|
||||
--color-blue-100: #e0f2fe;
|
||||
--color-blue-200: #bae6fd;
|
||||
--color-blue-300: #7dd3fc;
|
||||
--color-blue-400: #38bdf8;
|
||||
--color-blue-500: #0ea5e9;
|
||||
--color-blue-600: #0284c7;
|
||||
--color-blue-700: #0369a1;
|
||||
--color-blue-800: #075985;
|
||||
--color-blue-900: #0c4a6e;
|
||||
--color-blue-950: #082f49;
|
||||
|
||||
/* Emerald Palette */
|
||||
--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;
|
||||
|
||||
/* Amber Palette */
|
||||
--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;
|
||||
|
||||
/* Zinc Palette */
|
||||
--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;
|
||||
|
||||
/* Indigo Palette */
|
||||
--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;
|
||||
|
||||
/* Lime Palette */
|
||||
--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;
|
||||
|
||||
/* Pink Palette */
|
||||
--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;
|
||||
|
||||
/* Purple Palette */
|
||||
--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;
|
||||
|
||||
/* Rose Palette */
|
||||
--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;
|
||||
|
||||
/* Teal Palette */
|
||||
--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;
|
||||
|
||||
/* Special Colors */
|
||||
--color-transparent: transparent;
|
||||
--color-current: currentColor;
|
||||
--color-inherit: inherit;
|
||||
|
||||
/* Border Radius */
|
||||
--radius: 0.5rem;
|
||||
--radius-lg: var(--radius);
|
||||
--radius-md: calc(var(--radius) - 2px);
|
||||
--radius-sm: calc(var(--radius) - 4px);
|
||||
--radius-xs: calc(var(--radius) - 6px);
|
||||
|
||||
/* Animations */
|
||||
--animate-slide-up-fade: slide-up-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
--animate-slide-right-fade: slide-right-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
--animate-slide-down-fade: slide-down-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
--animate-slide-left-fade: slide-left-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
--animate-shimmer: shimmer 1.5s linear infinite;
|
||||
--animate-shake: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
|
||||
|
||||
/* Min Height */
|
||||
--min-h-content: var(--content-height);
|
||||
|
||||
/* Shadcn/UI Semantic Colors - referencing CSS variables */
|
||||
--color-background: hsl(var(--background));
|
||||
--color-foreground: hsl(var(--foreground));
|
||||
--color-card: hsl(var(--card));
|
||||
--color-card-foreground: hsl(var(--card-foreground));
|
||||
--color-popover: hsl(var(--popover));
|
||||
--color-popover-foreground: hsl(var(--popover-foreground));
|
||||
--color-primary: hsl(var(--primary));
|
||||
--color-primary-foreground: hsl(var(--primary-foreground));
|
||||
--color-secondary: hsl(var(--secondary));
|
||||
--color-secondary-foreground: hsl(var(--secondary-foreground));
|
||||
--color-muted: hsl(var(--muted));
|
||||
--color-muted-foreground: hsl(var(--muted-foreground));
|
||||
--color-accent: hsl(var(--accent));
|
||||
--color-accent-foreground: hsl(var(--accent-foreground));
|
||||
--color-destructive: rgb(var(--destructive));
|
||||
--color-destructive-foreground: hsl(var(--destructive-foreground));
|
||||
--color-border: hsl(var(--border));
|
||||
--color-input: hsl(var(--input));
|
||||
--color-ring: hsl(var(--ring));
|
||||
--color-sidebar: hsl(var(--sidebar-background));
|
||||
--color-sidebar-background: hsl(var(--sidebar-background));
|
||||
--color-sidebar-foreground: hsl(var(--sidebar-foreground));
|
||||
--color-sidebar-primary: hsl(var(--sidebar-primary));
|
||||
--color-sidebar-primary-foreground: hsl(var(--sidebar-primary-foreground));
|
||||
--color-sidebar-accent: hsl(var(--sidebar-accent));
|
||||
--color-sidebar-accent-foreground: hsl(var(--sidebar-accent-foreground));
|
||||
--color-sidebar-border: hsl(var(--sidebar-border));
|
||||
--color-sidebar-ring: hsl(var(--sidebar-ring));
|
||||
--color-chart-1: hsl(var(--chart-1));
|
||||
--color-chart-2: hsl(var(--chart-2));
|
||||
}
|
||||
|
||||
/* Keyframes (must be outside @theme) */
|
||||
@keyframes slide-up-fade {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(2px);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slide-right-fade {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateX(-2px);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slide-down-fade {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slide-left-fade {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateX(2px);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
from {
|
||||
background-position: 0 0;
|
||||
}
|
||||
to {
|
||||
background-position: -200% 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shake {
|
||||
10%,
|
||||
90% {
|
||||
transform: translate3d(-1px, 0, 0);
|
||||
}
|
||||
20%,
|
||||
80% {
|
||||
transform: translate3d(2px, 0, 0);
|
||||
}
|
||||
30%,
|
||||
50%,
|
||||
70% {
|
||||
transform: translate3d(-4px, 0, 0);
|
||||
}
|
||||
40%,
|
||||
60% {
|
||||
transform: translate3d(4px, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Animation keyframes for shadcn/ui components */
|
||||
@keyframes enter {
|
||||
from {
|
||||
opacity: var(--tw-enter-opacity, 1);
|
||||
transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0)
|
||||
scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1));
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes exit {
|
||||
to {
|
||||
opacity: var(--tw-exit-opacity, 1);
|
||||
transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0)
|
||||
scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1));
|
||||
}
|
||||
}
|
||||
|
||||
/* <shadcdn */
|
||||
|
||||
|
|
@ -124,6 +474,24 @@
|
|||
'rlig' 1,
|
||||
'calt' 1;
|
||||
}
|
||||
|
||||
/* Tailwind v4 compatibility - restore v3 Preflight behavior */
|
||||
|
||||
/* Buttons use pointer cursor */
|
||||
button,
|
||||
[role='button'] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Disabled elements use default cursor */
|
||||
:disabled {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* Placeholder color matches v3 (gray-400) */
|
||||
::placeholder {
|
||||
color: #9ca3af;
|
||||
}
|
||||
}
|
||||
|
||||
/* shadcdn> */
|
||||
|
|
@ -172,7 +540,7 @@
|
|||
}
|
||||
|
||||
.hive-markdown code {
|
||||
@apply rounded bg-white/10 px-2 py-1 text-orange-500;
|
||||
@apply rounded-sm bg-white/10 px-2 py-1 text-orange-500;
|
||||
}
|
||||
|
||||
.hive-loading-indicator {
|
||||
|
|
@ -253,6 +621,17 @@
|
|||
background-color: rgb(3 7 17 / var(--tw-bg-opacity, 1)) !important;
|
||||
}
|
||||
|
||||
/* Custom container - matches v3 config: full-width until 2xl, then 1800px max */
|
||||
@utility container {
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
margin-inline: auto;
|
||||
padding-inline: 2rem;
|
||||
@media (width >= 96rem) {
|
||||
max-width: 1800px;
|
||||
}
|
||||
}
|
||||
|
||||
@layer utilities {
|
||||
.no-scrollbar::-webkit-scrollbar {
|
||||
display: none;
|
||||
|
|
@ -261,4 +640,112 @@
|
|||
-ms-overflow-style: none;
|
||||
scrollbar-width: none;
|
||||
}
|
||||
|
||||
/* Animation utilities (replaces tailwindcss-animate) */
|
||||
.animate-in {
|
||||
animation-name: enter;
|
||||
animation-duration: 150ms;
|
||||
--tw-enter-opacity: initial;
|
||||
--tw-enter-scale: initial;
|
||||
--tw-enter-translate-x: initial;
|
||||
--tw-enter-translate-y: initial;
|
||||
}
|
||||
|
||||
.animate-out {
|
||||
animation-name: exit;
|
||||
animation-duration: 150ms;
|
||||
--tw-exit-opacity: initial;
|
||||
--tw-exit-scale: initial;
|
||||
--tw-exit-translate-x: initial;
|
||||
--tw-exit-translate-y: initial;
|
||||
}
|
||||
|
||||
/* Fade utilities */
|
||||
.fade-in-0 {
|
||||
--tw-enter-opacity: 0;
|
||||
}
|
||||
.fade-in-50 {
|
||||
--tw-enter-opacity: 0.5;
|
||||
}
|
||||
.fade-in-80 {
|
||||
--tw-enter-opacity: 0.8;
|
||||
}
|
||||
.fade-out-0 {
|
||||
--tw-exit-opacity: 0;
|
||||
}
|
||||
.fade-out-80 {
|
||||
--tw-exit-opacity: 0.8;
|
||||
}
|
||||
|
||||
/* Zoom utilities */
|
||||
.zoom-in-95 {
|
||||
--tw-enter-scale: 0.95;
|
||||
}
|
||||
.zoom-out-95 {
|
||||
--tw-exit-scale: 0.95;
|
||||
}
|
||||
|
||||
/* Slide in utilities */
|
||||
.slide-in-from-top {
|
||||
--tw-enter-translate-y: -100%;
|
||||
}
|
||||
.slide-in-from-top-1 {
|
||||
--tw-enter-translate-y: -0.25rem;
|
||||
}
|
||||
.slide-in-from-top-2 {
|
||||
--tw-enter-translate-y: -0.5rem;
|
||||
}
|
||||
.slide-in-from-bottom {
|
||||
--tw-enter-translate-y: 100%;
|
||||
}
|
||||
.slide-in-from-bottom-1 {
|
||||
--tw-enter-translate-y: 0.25rem;
|
||||
}
|
||||
.slide-in-from-bottom-2 {
|
||||
--tw-enter-translate-y: 0.5rem;
|
||||
}
|
||||
.slide-in-from-bottom-full {
|
||||
--tw-enter-translate-y: 100%;
|
||||
}
|
||||
.slide-in-from-left {
|
||||
--tw-enter-translate-x: -100%;
|
||||
}
|
||||
.slide-in-from-left-1 {
|
||||
--tw-enter-translate-x: -0.25rem;
|
||||
}
|
||||
.slide-in-from-left-2 {
|
||||
--tw-enter-translate-x: -0.5rem;
|
||||
}
|
||||
.slide-in-from-left-1\/2 {
|
||||
--tw-enter-translate-x: -50%;
|
||||
}
|
||||
.slide-in-from-right {
|
||||
--tw-enter-translate-x: 100%;
|
||||
}
|
||||
.slide-in-from-right-1 {
|
||||
--tw-enter-translate-x: 0.25rem;
|
||||
}
|
||||
.slide-in-from-right-2 {
|
||||
--tw-enter-translate-x: 0.5rem;
|
||||
}
|
||||
|
||||
/* Slide out utilities */
|
||||
.slide-out-to-top {
|
||||
--tw-exit-translate-y: -100%;
|
||||
}
|
||||
.slide-out-to-bottom {
|
||||
--tw-exit-translate-y: 100%;
|
||||
}
|
||||
.slide-out-to-left {
|
||||
--tw-exit-translate-x: -100%;
|
||||
}
|
||||
.slide-out-to-left-1\/2 {
|
||||
--tw-exit-translate-x: -50%;
|
||||
}
|
||||
.slide-out-to-right {
|
||||
--tw-exit-translate-x: 100%;
|
||||
}
|
||||
.slide-out-to-right-full {
|
||||
--tw-exit-translate-x: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ export const GraphQLType = (props: {
|
|||
return (
|
||||
<span>
|
||||
<GraphQLType type={props.type.ofType} />
|
||||
<span className="!text-muted-foreground">!</span>
|
||||
<span className="text-muted-foreground!">!</span>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
|
@ -23,9 +23,9 @@ export const GraphQLType = (props: {
|
|||
if (props.type instanceof GraphQLList) {
|
||||
return (
|
||||
<span>
|
||||
<span className="!text-muted-foreground">[</span>
|
||||
<span className="text-muted-foreground!">[</span>
|
||||
<GraphQLType type={props.type.ofType} />
|
||||
<span className="!text-muted-foreground">]</span>
|
||||
<span className="text-muted-foreground!">]</span>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ export const BuilderArgument = (props: {
|
|||
<Button
|
||||
key={props.field.name}
|
||||
variant="ghost"
|
||||
className={cn('text-muted-foreground w-full justify-start !p-1 text-xs', {
|
||||
className={cn('text-muted-foreground p-1! w-full justify-start text-xs', {
|
||||
'text-foreground-primary': isInQuery,
|
||||
})}
|
||||
size="sm"
|
||||
|
|
@ -142,7 +142,7 @@ export const BuilderScalarField = (props: {
|
|||
<Button
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
'text-muted-foreground bg-card group sticky top-0 z-10 w-full justify-start overflow-hidden !p-1 text-xs',
|
||||
'text-muted-foreground bg-card p-1! group sticky top-0 z-10 w-full justify-start overflow-hidden text-xs',
|
||||
{
|
||||
'text-foreground-primary': isInQuery,
|
||||
},
|
||||
|
|
@ -185,7 +185,7 @@ export const BuilderScalarField = (props: {
|
|||
<Button
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
'text-muted-foreground bg-card group sticky top-0 z-10 w-full justify-start overflow-hidden !p-1 text-xs',
|
||||
'text-muted-foreground bg-card p-1! group sticky top-0 z-10 w-full justify-start overflow-hidden text-xs',
|
||||
{
|
||||
'text-foreground-primary': hasArgs,
|
||||
},
|
||||
|
|
@ -229,7 +229,7 @@ export const BuilderScalarField = (props: {
|
|||
<Button
|
||||
key={props.field.name}
|
||||
variant="ghost"
|
||||
className={cn('text-muted-foreground w-full justify-start !p-1 text-xs', {
|
||||
className={cn('text-muted-foreground p-1! w-full justify-start text-xs', {
|
||||
'text-foreground-primary': isInQuery,
|
||||
})}
|
||||
size="sm"
|
||||
|
|
@ -320,7 +320,7 @@ export const BuilderObjectField = (props: {
|
|||
<Button
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
'text-muted-foreground bg-card group sticky top-0 z-10 w-full justify-start overflow-hidden !p-1 text-xs',
|
||||
'text-muted-foreground bg-card p-1! group sticky top-0 z-10 w-full justify-start overflow-hidden text-xs',
|
||||
{
|
||||
'text-foreground-primary': isInQuery,
|
||||
},
|
||||
|
|
@ -363,7 +363,7 @@ export const BuilderObjectField = (props: {
|
|||
<Button
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
'text-muted-foreground bg-card group sticky top-0 z-10 w-full justify-start overflow-hidden !p-1 text-xs',
|
||||
'text-muted-foreground bg-card p-1! group sticky top-0 z-10 w-full justify-start overflow-hidden text-xs',
|
||||
{
|
||||
'text-foreground-primary': hasArgs,
|
||||
},
|
||||
|
|
@ -505,7 +505,7 @@ export const Builder = (props: {
|
|||
onClick={() => setOpenPaths([])}
|
||||
variant="ghost"
|
||||
size="icon-sm"
|
||||
className="size-6 rounded-sm !p-1"
|
||||
className="p-1! size-6 rounded-sm"
|
||||
disabled={openPaths.length === 0}
|
||||
>
|
||||
<CopyMinusIcon className="text-muted-foreground size-4" />
|
||||
|
|
@ -593,7 +593,7 @@ export const Builder = (props: {
|
|||
</div>
|
||||
</Tabs>
|
||||
) : (
|
||||
<Empty className="h-96 w-full !px-0">
|
||||
<Empty className="px-0! h-96 w-full">
|
||||
<EmptyHeader>
|
||||
<EmptyMedia variant="icon">
|
||||
<FolderIcon className="text-muted-foreground size-6" />
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ export const CollectionItem = (props: { collection: LaboratoryCollection }) => {
|
|||
<AlertDialogTrigger asChild>
|
||||
<Button
|
||||
variant="link"
|
||||
className="text-muted-foreground hover:text-destructive ml-auto !p-1 !pr-0 opacity-0 transition-opacity group-hover:opacity-100"
|
||||
className="text-muted-foreground hover:text-destructive p-1! pr-0! ml-auto opacity-0 transition-opacity group-hover:opacity-100"
|
||||
onClick={e => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
|
|
@ -156,7 +156,7 @@ export const CollectionItem = (props: { collection: LaboratoryCollection }) => {
|
|||
<AlertDialogTrigger asChild>
|
||||
<Button
|
||||
variant="link"
|
||||
className="text-muted-foreground hover:text-destructive ml-auto !p-1 !pr-0 opacity-0 transition-opacity group-hover:opacity-100"
|
||||
className="text-muted-foreground hover:text-destructive p-1! pr-0! ml-auto opacity-0 transition-opacity group-hover:opacity-100"
|
||||
onClick={e => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
|
|
@ -279,7 +279,7 @@ export const Collections = () => {
|
|||
<Button
|
||||
variant="ghost"
|
||||
size="icon-sm"
|
||||
className="size-6 rounded-sm !p-1"
|
||||
className="p-1! size-6 rounded-sm"
|
||||
onClick={openAddCollectionDialog}
|
||||
>
|
||||
<FolderPlusIcon className="text-primary size-4" />
|
||||
|
|
@ -303,7 +303,7 @@ export const Collections = () => {
|
|||
<Button
|
||||
variant="ghost"
|
||||
size="icon-sm"
|
||||
className="absolute right-5 top-1/2 size-6 -translate-y-1/2 rounded-sm !p-1"
|
||||
className="p-1! absolute right-5 top-1/2 size-6 -translate-y-1/2 rounded-sm"
|
||||
onClick={() => setSearch('')}
|
||||
>
|
||||
<XIcon className="text-muted-foreground size-4" />
|
||||
|
|
@ -318,7 +318,7 @@ export const Collections = () => {
|
|||
searchResults.length > 0 ? (
|
||||
<CollectionsSearchResult items={searchResults} />
|
||||
) : (
|
||||
<Empty className="w-full !px-0">
|
||||
<Empty className="px-0! w-full">
|
||||
<EmptyHeader>
|
||||
<EmptyMedia variant="icon">
|
||||
<SearchIcon className="text-muted-foreground size-6" />
|
||||
|
|
@ -333,7 +333,7 @@ export const Collections = () => {
|
|||
) : collections.length > 0 ? (
|
||||
collections.map(item => <CollectionItem key={item.id} collection={item} />)
|
||||
) : (
|
||||
<Empty className="w-full !px-0">
|
||||
<Empty className="px-0! w-full">
|
||||
<EmptyHeader>
|
||||
<EmptyMedia variant="icon">
|
||||
<FolderIcon className="text-muted-foreground size-6" />
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ export const HistoryOperationItem = (props: { historyItem: LaboratoryHistoryRequ
|
|||
<AlertDialogTrigger asChild>
|
||||
<Button
|
||||
variant="link"
|
||||
className="text-muted-foreground hover:text-destructive ml-auto !p-1 !pr-0 opacity-0 transition-opacity group-hover:opacity-100"
|
||||
className="text-muted-foreground hover:text-destructive p-1! pr-0! ml-auto opacity-0 transition-opacity group-hover:opacity-100"
|
||||
onClick={e => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
|
|
@ -149,7 +149,7 @@ export const HistoryGroup = (props: { group: { date: string; items: LaboratoryHi
|
|||
<AlertDialogTrigger asChild>
|
||||
<Button
|
||||
variant="link"
|
||||
className="text-muted-foreground hover:text-destructive ml-auto !p-1 !pr-0 opacity-0 transition-opacity group-hover:opacity-100"
|
||||
className="text-muted-foreground hover:text-destructive p-1! pr-0! ml-auto opacity-0 transition-opacity group-hover:opacity-100"
|
||||
onClick={e => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
|
|
@ -246,7 +246,7 @@ export const History = () => {
|
|||
<Button
|
||||
variant="ghost"
|
||||
size="icon-sm"
|
||||
className="text-muted-foreground hover:text-destructive size-6 rounded-sm !p-1"
|
||||
className="text-muted-foreground hover:text-destructive p-1! size-6 rounded-sm"
|
||||
disabled={history.length === 0}
|
||||
>
|
||||
<TrashIcon className="size-4" />
|
||||
|
|
@ -290,7 +290,7 @@ export const History = () => {
|
|||
return <HistoryGroup key={group.date} group={group} />;
|
||||
})
|
||||
) : (
|
||||
<Empty className="w-full !px-0">
|
||||
<Empty className="px-0! w-full">
|
||||
<EmptyHeader>
|
||||
<EmptyMedia variant="icon">
|
||||
<ClockIcon className="text-muted-foreground size-6" />
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ const LaboratoryContent = () => {
|
|||
return <Settings />;
|
||||
default:
|
||||
return (
|
||||
<Empty className="w-full !px-0">
|
||||
<Empty className="px-0! w-full">
|
||||
<EmptyHeader>
|
||||
<EmptyMedia variant="icon">
|
||||
<FileIcon className="text-muted-foreground size-6" />
|
||||
|
|
|
|||
|
|
@ -763,7 +763,7 @@ export const Operation = (props: {
|
|||
<Query operation={operation} isReadOnly={isReadOnly} />
|
||||
</ResizablePanel>
|
||||
<ResizableHandle />
|
||||
<ResizablePanel minSize={10} defaultSize={30} className="!overflow-visible">
|
||||
<ResizablePanel minSize={10} defaultSize={30} className="overflow-visible!">
|
||||
<Tabs className="grid size-full grid-rows-[auto_1fr]" defaultValue="variables">
|
||||
<TabsList className="h-[49.5px] w-full justify-start rounded-none border-b bg-transparent p-3">
|
||||
<TabsTrigger value="variables" className="grow-0 rounded-sm">
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { cn } from '@/laboratory/lib/utils';
|
|||
import { Slot } from '@radix-ui/react-slot';
|
||||
|
||||
const buttonGroupVariants = cva(
|
||||
"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2",
|
||||
"flex w-fit items-stretch *:focus-visible:z-10 *:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2",
|
||||
{
|
||||
variants: {
|
||||
orientation: {
|
||||
|
|
@ -66,7 +66,7 @@ function ButtonGroupSeparator({
|
|||
data-slot="button-group-separator"
|
||||
orientation={orientation}
|
||||
className={cn(
|
||||
'bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto',
|
||||
'bg-input m-0! relative self-stretch data-[orientation=vertical]:h-auto',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {
|
|||
<div
|
||||
data-slot="card-header"
|
||||
className={cn(
|
||||
'has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6 grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6',
|
||||
'[.border-b]:pb-6 grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-[>[data-slot=card-action]]:grid-cols-[1fr_auto]',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ function ContextMenuSubTrigger({
|
|||
data-slot="context-menu-sub-trigger"
|
||||
data-inset={inset}
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm data-[inset]:pl-8 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden data-inset:pl-8 flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -62,7 +62,7 @@ function ContextMenuSubContent({
|
|||
<ContextMenuPrimitive.SubContent
|
||||
data-slot="context-menu-sub-content"
|
||||
className={cn(
|
||||
'bg-popover text-popover-foreground 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-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border p-1 shadow-lg',
|
||||
'bg-popover text-popover-foreground 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 origin-(--radix-context-menu-content-transform-origin) z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -79,7 +79,7 @@ function ContextMenuContent({
|
|||
<ContextMenuPrimitive.Content
|
||||
data-slot="context-menu-content"
|
||||
className={cn(
|
||||
'bg-popover text-popover-foreground 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 max-h-[var(--radix-context-menu-content-available-height)] min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-y-auto overflow-x-hidden rounded-md border p-1 shadow-md',
|
||||
'bg-popover text-popover-foreground 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 max-h-(--radix-context-menu-content-available-height) origin-(--radix-context-menu-content-transform-origin) z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border p-1 shadow-md',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -103,7 +103,7 @@ function ContextMenuItem({
|
|||
data-inset={inset}
|
||||
data-variant={variant}
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm data-[disabled]:pointer-events-none data-[inset]:pl-8 data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden data-disabled:pointer-events-none data-inset:pl-8 data-disabled:opacity-50 relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -121,7 +121,7 @@ function ContextMenuCheckboxItem({
|
|||
<ContextMenuPrimitive.CheckboxItem
|
||||
data-slot="context-menu-checkbox-item"
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
checked={checked}
|
||||
|
|
@ -146,7 +146,7 @@ function ContextMenuRadioItem({
|
|||
<ContextMenuPrimitive.RadioItem
|
||||
data-slot="context-menu-radio-item"
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -172,7 +172,7 @@ function ContextMenuLabel({
|
|||
<ContextMenuPrimitive.Label
|
||||
data-slot="context-menu-label"
|
||||
data-inset={inset}
|
||||
className={cn('text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className)}
|
||||
className={cn('text-foreground data-inset:pl-8 px-2 py-1.5 text-sm font-medium', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ function DropdownMenuItem({
|
|||
data-inset={inset}
|
||||
data-variant={variant}
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm data-[disabled]:pointer-events-none data-[inset]:pl-8 data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden data-disabled:pointer-events-none data-inset:pl-8 data-disabled:opacity-50 relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -75,7 +75,7 @@ function DropdownMenuCheckboxItem({
|
|||
<DropdownMenuPrimitive.CheckboxItem
|
||||
data-slot="dropdown-menu-checkbox-item"
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
checked={checked}
|
||||
|
|
@ -106,7 +106,7 @@ function DropdownMenuRadioItem({
|
|||
<DropdownMenuPrimitive.RadioItem
|
||||
data-slot="dropdown-menu-radio-item"
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50 relative flex cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-8 pr-2 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -132,7 +132,7 @@ function DropdownMenuLabel({
|
|||
<DropdownMenuPrimitive.Label
|
||||
data-slot="dropdown-menu-label"
|
||||
data-inset={inset}
|
||||
className={cn('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className)}
|
||||
className={cn('data-inset:pl-8 px-2 py-1.5 text-sm font-medium', className)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
|
|
@ -178,7 +178,7 @@ function DropdownMenuSubTrigger({
|
|||
data-slot="dropdown-menu-sub-trigger"
|
||||
data-inset={inset}
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm data-[inset]:pl-8 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden data-inset:pl-8 flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>)
|
|||
className={cn(
|
||||
'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50',
|
||||
'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4',
|
||||
'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10',
|
||||
'has-[>[data-state=checked]]:bg-primary/5 has-[>[data-state=checked]]:border-primary dark:has-[>[data-state=checked]]:bg-primary/10',
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ function SelectTrigger({
|
|||
data-slot="select-trigger"
|
||||
data-size={size}
|
||||
className={cn(
|
||||
"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 whitespace-nowrap rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm outline-none transition-[color,box-shadow] focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 whitespace-nowrap rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm outline-none transition-[color,box-shadow] focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
@ -96,7 +96,7 @@ function SelectItem({
|
|||
<SelectPrimitive.Item
|
||||
data-slot="select-item"
|
||||
className={cn(
|
||||
"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-2 pr-8 text-sm data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 data-disabled:pointer-events-none data-disabled:opacity-50 relative flex w-full cursor-default select-none items-center gap-2 rounded-sm py-1.5 pl-2 pr-8 text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ export function Content() {
|
|||
<AccordionItem key={collection.id} value={collection.id} className="border-b-0">
|
||||
<AccordionHeader className="flex items-center justify-between" data-cy="collection-item">
|
||||
<AccordionTriggerPrimitive
|
||||
className="group flex w-full items-center gap-x-3 rounded p-2 text-left font-medium text-white hover:bg-gray-100/10"
|
||||
className="group flex w-full items-center gap-x-3 rounded-sm p-2 text-left font-medium text-white hover:bg-gray-100/10"
|
||||
data-cy="collection-item-trigger"
|
||||
>
|
||||
<FolderIcon className="size-4 group-data-[state=open]:hidden" />
|
||||
|
|
@ -366,7 +366,7 @@ export function Content() {
|
|||
search={{ operation: node.id }}
|
||||
data-cy={`operation-${node.name}`}
|
||||
className={cn(
|
||||
'flex w-full items-center gap-x-3 rounded p-2 font-normal text-white/50 hover:bg-gray-100/10 hover:text-white hover:no-underline',
|
||||
'flex w-full items-center gap-x-3 rounded-sm p-2 font-normal text-white/50 hover:bg-gray-100/10 hover:text-white hover:no-underline',
|
||||
node.id === queryParamsOperationId && [
|
||||
'bg-gray-100/10 text-white',
|
||||
currentOperation &&
|
||||
|
|
|
|||
27
packages/web/app/src/lib/tailwind-plugins.js
Normal file
27
packages/web/app/src/lib/tailwind-plugins.js
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import svgToDataUri from 'mini-svg-data-uri';
|
||||
|
||||
export default function ({ matchUtilities, theme }) {
|
||||
matchUtilities(
|
||||
{
|
||||
'bg-grid': value => ({
|
||||
backgroundImage: `url("${svgToDataUri(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="${value}"><path d="M0 .5H31.5V32"/></svg>`,
|
||||
)}")`,
|
||||
}),
|
||||
'bg-grid-small': value => ({
|
||||
backgroundImage: `url("${svgToDataUri(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="8" height="8" fill="none" stroke="${value}"><path d="M0 .5H31.5V32"/></svg>`,
|
||||
)}")`,
|
||||
}),
|
||||
'bg-dot': value => ({
|
||||
backgroundImage: `url("${svgToDataUri(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="16" height="16" fill="none"><circle fill="${value}" id="pattern-circle" cx="10" cy="10" r="1.6257413380501518"></circle></svg>`,
|
||||
)}")`,
|
||||
}),
|
||||
},
|
||||
{
|
||||
values: theme('backgroundColor'),
|
||||
type: 'color',
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
@ -944,7 +944,7 @@ function AuditLogsOrganizationModal(props: {
|
|||
|
||||
return (
|
||||
<Dialog open={props.isOpen} onOpenChange={props.toggleModalOpen}>
|
||||
<DialogContent className="container w-4/5 max-w-[520px] md:w-3/5">
|
||||
<DialogContent className="w-4/5 max-w-[520px] md:w-3/5">
|
||||
<Form {...form}>
|
||||
<form className="space-y-8" onSubmit={form.handleSubmit(onSubmit)}>
|
||||
<DialogHeader>
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ function TargetAppVersionContent(props: {
|
|||
<div className="mt-4 flex items-center justify-between rounded-md border border-orange-500/50 bg-orange-500/10 px-4 py-2 text-sm">
|
||||
<span>
|
||||
Showing operations affected by{' '}
|
||||
<code className="rounded bg-gray-800 px-1 py-0.5 font-mono text-orange-400">
|
||||
<code className="rounded-sm bg-gray-800 px-1 py-0.5 font-mono text-orange-400">
|
||||
{coordinates}
|
||||
</code>
|
||||
</span>
|
||||
|
|
@ -317,7 +317,7 @@ function TargetAppVersionContent(props: {
|
|||
{data.data?.target?.appDeployment.documents?.edges.map((edge, i) => (
|
||||
<TableRow key={i}>
|
||||
<TableCell>
|
||||
<span className="rounded bg-gray-800 p-1 font-mono text-sm">
|
||||
<span className="rounded-sm bg-gray-800 p-1 font-mono text-sm">
|
||||
{edge.node.hash}
|
||||
</span>
|
||||
</TableCell>
|
||||
|
|
@ -334,13 +334,13 @@ function TargetAppVersionContent(props: {
|
|||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
) : (
|
||||
<span className="rounded bg-gray-800 p-1 font-mono text-xs">
|
||||
<span className="rounded-sm bg-gray-800 p-1 font-mono text-xs">
|
||||
{edge.node.operationName}
|
||||
</span>
|
||||
)}
|
||||
</TableCell>
|
||||
<TableCell className="text-end">
|
||||
<span className="rounded bg-gray-800 p-1 font-mono text-xs">
|
||||
<span className="rounded-sm bg-gray-800 p-1 font-mono text-xs">
|
||||
{edge.node.body.length > 43
|
||||
? edge.node.body.substring(0, 43).replace(/\n/g, '\\n') + '...'
|
||||
: edge.node.body}
|
||||
|
|
@ -458,7 +458,7 @@ export function TargetAppVersionPage(props: {
|
|||
projectSlug={props.projectSlug}
|
||||
organizationSlug={props.organizationSlug}
|
||||
page={Page.Apps}
|
||||
className="min-h-content"
|
||||
className="min-h-(--min-h-content)"
|
||||
>
|
||||
<TargetAppVersionContent {...props} />
|
||||
</TargetLayout>
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ function TargetChecksAffectedDeploymentsContent(props: {
|
|||
props.coordinate ? (
|
||||
<>
|
||||
App deployments affected by breaking change to{' '}
|
||||
<code className="rounded bg-gray-800 px-1 py-0.5 font-mono text-orange-400">
|
||||
<code className="rounded-sm bg-gray-800 px-1 py-0.5 font-mono text-orange-400">
|
||||
{props.coordinate}
|
||||
</code>
|
||||
</>
|
||||
|
|
@ -364,7 +364,7 @@ export function TargetChecksAffectedDeploymentsPage(props: {
|
|||
projectSlug={props.projectSlug}
|
||||
organizationSlug={props.organizationSlug}
|
||||
page={Page.Checks}
|
||||
className="min-h-content"
|
||||
className="min-h-(--min-h-content)"
|
||||
>
|
||||
<TargetChecksAffectedDeploymentsContent {...props} />
|
||||
</TargetLayout>
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ const PolicyBlock = (props: {
|
|||
return (
|
||||
<div>
|
||||
<h2 className="mb-2 text-sm font-medium text-gray-900 dark:text-white">{props.title}</h2>
|
||||
<ul className="list-inside list-disc pl-3 text-sm leading-relaxed">
|
||||
<ul className="list-inside list-disc pl-3 text-sm/relaxed">
|
||||
{policies.edges.map((edge, key) => (
|
||||
<li
|
||||
key={key}
|
||||
|
|
|
|||
|
|
@ -760,7 +760,7 @@ export function TargetLaboratoryPage(props: {
|
|||
projectSlug={props.projectSlug}
|
||||
targetSlug={props.targetSlug}
|
||||
page={Page.Laboratory}
|
||||
className="flex h-[--content-height] flex-col pb-0"
|
||||
className="h-(--content-height) flex flex-col pb-0"
|
||||
>
|
||||
<LaboratoryPageContent {...props} />
|
||||
</TargetLayout>
|
||||
|
|
|
|||
|
|
@ -690,7 +690,7 @@ export function TargetLaboratoryPage(props: {
|
|||
projectSlug={props.projectSlug}
|
||||
targetSlug={props.targetSlug}
|
||||
page={Page.Laboratory}
|
||||
className="flex h-[--content-height] flex-col pb-0"
|
||||
className="h-(--content-height) flex flex-col pb-0"
|
||||
>
|
||||
<PromptProvider>
|
||||
<LaboratoryPageContent {...props} />
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ export function TargetProposalsSinglePage(props: {
|
|||
projectSlug={props.projectSlug}
|
||||
targetSlug={props.targetSlug}
|
||||
page={Page.Proposals}
|
||||
className="flex h-[--content-height] min-h-[300px] flex-col pb-0"
|
||||
className="h-(--content-height) flex min-h-[300px] flex-col pb-0"
|
||||
>
|
||||
<ProposalsContent {...props} />
|
||||
</TargetLayout>
|
||||
|
|
@ -416,7 +416,7 @@ const ProposalsContent = (props: Parameters<typeof TargetProposalsSinglePage>[0]
|
|||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex w-full grow flex-col rounded bg-gray-900/50 p-4">
|
||||
<div className="flex w-full grow flex-col rounded-sm bg-gray-900/50 p-4">
|
||||
{query.fetching ? (
|
||||
<Spinner />
|
||||
) : (
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ export function TargetProposalsNewPage(props: {
|
|||
projectSlug={props.projectSlug}
|
||||
targetSlug={props.targetSlug}
|
||||
page={Page.Proposals}
|
||||
className="flex h-[--content-height] min-h-[300px] flex-col pb-0"
|
||||
className="h-(--content-height) flex min-h-[300px] flex-col pb-0"
|
||||
>
|
||||
<ProposalsNewHeading {...props} />
|
||||
<ProposalsNewContent {...props} />
|
||||
|
|
@ -552,7 +552,7 @@ function ProposalsNewContent(
|
|||
variant="content"
|
||||
className={cn(
|
||||
'flex h-full w-[20vw] min-w-[160px] flex-col items-start border-0',
|
||||
'[&>*]:flex [&>*]:w-full [&>*]:justify-start [&>*]:p-3',
|
||||
'*:flex *:w-full *:justify-start *:p-3',
|
||||
)}
|
||||
>
|
||||
<TabsTrigger variant="menu" value="overview" asChild>
|
||||
|
|
|
|||
|
|
@ -827,7 +827,7 @@ const BreakingChanges = (props: {
|
|||
disabled={isSubmitting}
|
||||
type="number"
|
||||
step="0.01"
|
||||
className="mx-2 !inline-flex w-16 text-center"
|
||||
className="inline-flex! mx-2 w-16 text-center"
|
||||
/>
|
||||
<label htmlFor="percentage">Percent of Traffic</label>
|
||||
</div>
|
||||
|
|
@ -854,7 +854,7 @@ const BreakingChanges = (props: {
|
|||
disabled={isSubmitting}
|
||||
type="number"
|
||||
step="1"
|
||||
className="mx-2 !inline-flex w-16 text-center"
|
||||
className="inline-flex! mx-2 w-16 text-center"
|
||||
/>
|
||||
<label htmlFor="requestCount">Total Operations</label>
|
||||
</div>
|
||||
|
|
@ -871,7 +871,7 @@ const BreakingChanges = (props: {
|
|||
type="number"
|
||||
min="1"
|
||||
max={targetSettings.data?.organization?.usageRetentionInDays ?? 30}
|
||||
className="mx-2 !inline-flex w-16"
|
||||
className="inline-flex! mx-2 w-16"
|
||||
/>
|
||||
days.
|
||||
</div>
|
||||
|
|
@ -1015,7 +1015,7 @@ const BreakingChanges = (props: {
|
|||
{touched.targetIds && errors.targetIds && (
|
||||
<div className="text-red-500">{errors.targetIds}</div>
|
||||
)}
|
||||
<div className="mb-3 mt-5 space-y-2 rounded border-l-2 border-l-gray-800 bg-gray-600/10 py-2 pl-5 text-gray-400">
|
||||
<div className="mb-3 mt-5 space-y-2 rounded-sm border-l-2 border-l-gray-800 bg-gray-600/10 py-2 pl-5 text-gray-400">
|
||||
<div>
|
||||
<div className="font-semibold">Example settings</div>
|
||||
<div className="text-sm">Removal of a field is considered breaking if</div>
|
||||
|
|
|
|||
|
|
@ -1779,7 +1779,7 @@ function ExceptionTeaser(props: {
|
|||
<div className="p-3 text-xs">
|
||||
<p className="text-gray-300">{props.message}</p>
|
||||
{props.stacktrace && (
|
||||
<pre className="mt-2 overflow-x-auto rounded bg-black/50 p-2 font-mono text-[10px] leading-tight text-gray-400">
|
||||
<pre className="mt-2 overflow-x-auto rounded-sm bg-black/50 p-2 font-mono text-[10px] leading-tight text-gray-400">
|
||||
{props.stacktrace}
|
||||
</pre>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -1,351 +0,0 @@
|
|||
import svgToDataUri from 'mini-svg-data-uri';
|
||||
import type { Config } from 'tailwindcss';
|
||||
import tailwindcssAnimate from 'tailwindcss-animate';
|
||||
import tailwindcssRadix from 'tailwindcss-radix';
|
||||
import colors from 'tailwindcss/colors';
|
||||
import { fontFamily } from 'tailwindcss/defaultTheme';
|
||||
import flattenColorPalette from 'tailwindcss/lib/util/flattenColorPalette';
|
||||
import plugin from 'tailwindcss/plugin';
|
||||
|
||||
const config: Config = {
|
||||
darkMode: 'class',
|
||||
content: ['./index.html', './src/**/*.ts{,x}'],
|
||||
important: true,
|
||||
theme: {
|
||||
container: {
|
||||
center: true,
|
||||
padding: '2rem',
|
||||
screens: {
|
||||
sm: '100%',
|
||||
md: '100%',
|
||||
lg: '100%',
|
||||
xl: '100%',
|
||||
'2xl': '1800px',
|
||||
},
|
||||
},
|
||||
fontFamily: {
|
||||
sans: [
|
||||
'Inter var,' + fontFamily.sans.join(','),
|
||||
{
|
||||
fontFeatureSettings: 'normal',
|
||||
fontVariationSettings: '"opsz" 32',
|
||||
},
|
||||
],
|
||||
mono: fontFamily.mono,
|
||||
},
|
||||
colors: {
|
||||
transparent: 'transparent',
|
||||
current: 'currentColor',
|
||||
inherit: 'inherit',
|
||||
white: '#fcfcfc',
|
||||
black: '#0b0d11',
|
||||
emerald: colors.emerald,
|
||||
red: {
|
||||
50: '#fef5f5',
|
||||
100: '#fdeaeb',
|
||||
200: '#fbcbce',
|
||||
300: '#f8abb0',
|
||||
400: '#f26d74',
|
||||
500: '#ed2e39',
|
||||
600: '#d52933',
|
||||
700: '#b2232b',
|
||||
800: '#8e1c22',
|
||||
900: '#74171c',
|
||||
},
|
||||
yellow: {
|
||||
50: '#fffcf2',
|
||||
100: '#fffae6',
|
||||
200: '#fff2bf',
|
||||
300: '#ffeb99',
|
||||
400: '#ffdb4d',
|
||||
500: '#fc0',
|
||||
600: '#e6b800',
|
||||
700: '#bf9900',
|
||||
800: '#997a00',
|
||||
900: '#7d6400',
|
||||
},
|
||||
green: {
|
||||
50: '#f2fcf9',
|
||||
100: '#e6f8f3',
|
||||
200: '#bfeee1',
|
||||
300: '#99e3cf',
|
||||
400: '#4dcfac',
|
||||
500: '#00ba88',
|
||||
600: '#00a77a',
|
||||
700: '#008c66',
|
||||
800: '#007052',
|
||||
900: '#005b43',
|
||||
},
|
||||
cyan: '#0acccc',
|
||||
blue: colors.sky,
|
||||
gray: colors.stone,
|
||||
rose: colors.rose,
|
||||
pink: colors.pink,
|
||||
teal: colors.teal,
|
||||
indigo: colors.indigo,
|
||||
amber: colors.amber,
|
||||
lime: colors.lime,
|
||||
magenta: '#f11197',
|
||||
orange: {
|
||||
50: '#fefbf5',
|
||||
100: '#fef8ec',
|
||||
200: '#fcedcf',
|
||||
300: '#fbe2b3',
|
||||
400: '#f7cd79',
|
||||
500: '#f4b740',
|
||||
600: '#dca53a',
|
||||
700: '#b78930',
|
||||
800: '#926e26',
|
||||
900: '#785a1f',
|
||||
},
|
||||
zinc: colors.zinc,
|
||||
purple: colors.purple,
|
||||
},
|
||||
extend: {
|
||||
colors: {
|
||||
border: 'hsl(var(--border))',
|
||||
input: 'hsl(var(--input))',
|
||||
ring: 'hsl(var(--ring))',
|
||||
background: 'hsl(var(--background))',
|
||||
foreground: 'hsl(var(--foreground))',
|
||||
primary: {
|
||||
DEFAULT: 'hsl(var(--primary))',
|
||||
foreground: 'hsl(var(--primary-foreground))',
|
||||
},
|
||||
secondary: {
|
||||
DEFAULT: 'hsl(var(--secondary))',
|
||||
foreground: 'hsl(var(--secondary-foreground))',
|
||||
},
|
||||
destructive: {
|
||||
DEFAULT: 'rgb(var(--destructive))',
|
||||
foreground: 'hsl(var(--destructive-foreground))',
|
||||
},
|
||||
muted: {
|
||||
DEFAULT: 'hsl(var(--muted))',
|
||||
foreground: 'hsl(var(--muted-foreground))',
|
||||
},
|
||||
accent: {
|
||||
DEFAULT: 'hsl(var(--accent))',
|
||||
foreground: 'hsl(var(--accent-foreground))',
|
||||
},
|
||||
popover: {
|
||||
DEFAULT: 'hsl(var(--popover))',
|
||||
foreground: 'hsl(var(--popover-foreground))',
|
||||
},
|
||||
card: {
|
||||
DEFAULT: 'hsl(var(--card))',
|
||||
foreground: 'hsl(var(--card-foreground))',
|
||||
},
|
||||
sidebar: {
|
||||
DEFAULT: 'hsl(var(--sidebar-background))',
|
||||
foreground: 'hsl(var(--sidebar-foreground))',
|
||||
primary: 'hsl(var(--sidebar-primary))',
|
||||
'primary-foreground': 'hsl(var(--sidebar-primary-foreground))',
|
||||
accent: 'hsl(var(--sidebar-accent))',
|
||||
'accent-foreground': 'hsl(var(--sidebar-accent-foreground))',
|
||||
border: 'hsl(var(--sidebar-border))',
|
||||
ring: 'hsl(var(--sidebar-ring))',
|
||||
},
|
||||
},
|
||||
borderRadius: {
|
||||
lg: 'var(--radius)',
|
||||
md: 'calc(var(--radius) - 2px)',
|
||||
sm: 'calc(var(--radius) - 4px)',
|
||||
xs: 'calc(var(--radius) - 6px)',
|
||||
},
|
||||
ringColor: ({ theme }) => ({
|
||||
DEFAULT: theme('colors.orange.500/75'),
|
||||
...theme('colors'),
|
||||
}),
|
||||
keyframes: {
|
||||
// Dropdown menu
|
||||
'scale-in': {
|
||||
'0%': { opacity: '0', transform: 'scale(0)' },
|
||||
'100%': { opacity: '1', transform: 'scale(1)' },
|
||||
},
|
||||
'slide-down': {
|
||||
'0%': { opacity: '0', transform: 'translateY(-10px)' },
|
||||
'100%': { opacity: '1', transform: 'translateY(0)' },
|
||||
},
|
||||
'slide-up': {
|
||||
'0%': { opacity: '0', transform: 'translateY(10px)' },
|
||||
'100%': { opacity: '1', transform: 'translateY(0)' },
|
||||
},
|
||||
// Tooltip
|
||||
'slide-up-fade': {
|
||||
'0%': { opacity: '0', transform: 'translateY(2px)' },
|
||||
'100%': { opacity: '1', transform: 'translateY(0)' },
|
||||
},
|
||||
'slide-right-fade': {
|
||||
'0%': { opacity: '0', transform: 'translateX(-2px)' },
|
||||
'100%': { opacity: '1', transform: 'translateX(0)' },
|
||||
},
|
||||
'slide-down-fade': {
|
||||
'0%': { opacity: '0', transform: 'translateY(-2px)' },
|
||||
'100%': { opacity: '1', transform: 'translateY(0)' },
|
||||
},
|
||||
'slide-left-fade': {
|
||||
'0%': { opacity: '0', transform: 'translateX(2px)' },
|
||||
'100%': { opacity: '1', transform: 'translateX(0)' },
|
||||
},
|
||||
// Navigation menu
|
||||
'enter-from-right': {
|
||||
'0%': { transform: 'translateX(200px)', opacity: '0' },
|
||||
'100%': { transform: 'translateX(0)', opacity: '1' },
|
||||
},
|
||||
'enter-from-left': {
|
||||
'0%': { transform: 'translateX(-200px)', opacity: '0' },
|
||||
'100%': { transform: 'translateX(0)', opacity: '1' },
|
||||
},
|
||||
'exit-to-right': {
|
||||
'0%': { transform: 'translateX(0)', opacity: '1' },
|
||||
'100%': { transform: 'translateX(200px)', opacity: '0' },
|
||||
},
|
||||
'exit-to-left': {
|
||||
'0%': { transform: 'translateX(0)', opacity: '1' },
|
||||
'100%': { transform: 'translateX(-200px)', opacity: '0' },
|
||||
},
|
||||
'scale-in-content': {
|
||||
'0%': { transform: 'rotateX(-30deg) scale(0.9)', opacity: '0' },
|
||||
'100%': { transform: 'rotateX(0deg) scale(1)', opacity: '1' },
|
||||
},
|
||||
'scale-out-content': {
|
||||
'0%': { transform: 'rotateX(0deg) scale(1)', opacity: '1' },
|
||||
'100%': { transform: 'rotateX(-10deg) scale(0.95)', opacity: '0' },
|
||||
},
|
||||
'fade-in': {
|
||||
'0%': { opacity: '0' },
|
||||
'100%': { opacity: '1' },
|
||||
},
|
||||
'fade-out': {
|
||||
'0%': { opacity: '1' },
|
||||
'100%': { opacity: '0' },
|
||||
},
|
||||
// Toast
|
||||
'toast-hide': {
|
||||
'0%': { opacity: '1' },
|
||||
'100%': { opacity: '0' },
|
||||
},
|
||||
'toast-slide-in-right': {
|
||||
'0%': { transform: 'translateX(calc(100% + 1rem))' },
|
||||
'100%': { transform: 'translateX(0)' },
|
||||
},
|
||||
'toast-slide-in-bottom': {
|
||||
'0%': { transform: 'translateY(calc(100% + 1rem))' },
|
||||
'100%': { transform: 'translateY(0)' },
|
||||
},
|
||||
'toast-swipe-out-x': {
|
||||
'0%': { transform: 'translateX(var(--radix-toast-swipe-end-x))' },
|
||||
'100%': { transform: 'translateX(calc(100% + 1rem))' },
|
||||
},
|
||||
'toast-swipe-out-y': {
|
||||
'0%': { transform: 'translateY(var(--radix-toast-swipe-end-y))' },
|
||||
'100%': { transform: 'translateY(calc(100% + 1rem))' },
|
||||
},
|
||||
'accordion-down': {
|
||||
from: { height: '0' },
|
||||
to: { height: 'var(--radix-accordion-content-height)' },
|
||||
},
|
||||
'accordion-up': {
|
||||
from: { height: 'var(--radix-accordion-content-height)' },
|
||||
to: { height: '0' },
|
||||
},
|
||||
shimmer: {
|
||||
from: {
|
||||
backgroundPosition: '0 0',
|
||||
},
|
||||
to: {
|
||||
backgroundPosition: '-200% 0',
|
||||
},
|
||||
},
|
||||
/** @source https://gist.github.com/krishaantechnology/245b29cfbb25eb456c09fce63673decc */
|
||||
shake: {
|
||||
'10%, 90%': {
|
||||
transform: 'translate3d(-1px, 0, 0)',
|
||||
},
|
||||
'20%, 80%': {
|
||||
transform: 'translate3d(2px, 0, 0)',
|
||||
},
|
||||
'30%, 50%, 70%': {
|
||||
transform: 'translate3d(-4px, 0, 0)',
|
||||
},
|
||||
'40%, 60%': {
|
||||
transform: 'translate3d(4px, 0, 0)',
|
||||
},
|
||||
},
|
||||
},
|
||||
animation: {
|
||||
// Dropdown menu
|
||||
'scale-in': 'scale-in 0.2s ease-in-out',
|
||||
'slide-down': 'slide-down 0.6s cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
'slide-up': 'slide-up 0.6s cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
// Tooltip
|
||||
'slide-up-fade': 'slide-up-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
'slide-right-fade': 'slide-right-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
'slide-down-fade': 'slide-down-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
'slide-left-fade': 'slide-left-fade 0.4s cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
// Navigation menu
|
||||
'enter-from-right': 'enter-from-right 0.25s ease',
|
||||
'enter-from-left': 'enter-from-left 0.25s ease',
|
||||
'exit-to-right': 'exit-to-right 0.25s ease',
|
||||
'exit-to-left': 'exit-to-left 0.25s ease',
|
||||
'scale-in-content': 'scale-in-content 0.2s ease',
|
||||
'scale-out-content': 'scale-out-content 0.2s ease',
|
||||
'fade-in': 'fade-in 0.2s ease',
|
||||
'fade-out': 'fade-out 0.2s ease',
|
||||
// Toast
|
||||
'toast-hide': 'toast-hide 100ms ease-in forwards',
|
||||
'toast-slide-in-right': 'toast-slide-in-right 150ms cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
'toast-slide-in-bottom': 'toast-slide-in-bottom 150ms cubic-bezier(0.16, 1, 0.3, 1)',
|
||||
'toast-swipe-out-x': 'toast-swipe-out-x 100ms ease-out forwards',
|
||||
'toast-swipe-out-y': 'toast-swipe-out-y 100ms ease-out forwards',
|
||||
'accordion-down': 'accordion-down 0.2s ease-out',
|
||||
'accordion-up': 'accordion-up 0.2s ease-out',
|
||||
shimmer: 'shimmer 1.5s linear infinite',
|
||||
/** @source https://gist.github.com/krishaantechnology/245b29cfbb25eb456c09fce63673decc */
|
||||
shake: 'shake 0.82s cubic-bezier(.36,.07,.19,.97) both',
|
||||
},
|
||||
minHeight: {
|
||||
content: 'var(--content-height)',
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
// Utilities and variants for styling Radix state
|
||||
tailwindcssRadix({}),
|
||||
tailwindcssAnimate,
|
||||
plugin(({ addBase, theme }) => {
|
||||
const allColors = flattenColorPalette(theme('colors'));
|
||||
const newVars = Object.fromEntries(
|
||||
Object.entries(allColors).map(([key, val]) => [`--${key}`, val]),
|
||||
);
|
||||
addBase({
|
||||
':root': newVars,
|
||||
});
|
||||
}),
|
||||
plugin(({ matchUtilities, theme }) => {
|
||||
matchUtilities(
|
||||
{
|
||||
'bg-grid': value => ({
|
||||
backgroundImage: `url("${svgToDataUri(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="${value}"><path d="M0 .5H31.5V32"/></svg>`,
|
||||
)}")`,
|
||||
}),
|
||||
'bg-grid-small': value => ({
|
||||
backgroundImage: `url("${svgToDataUri(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="8" height="8" fill="none" stroke="${value}"><path d="M0 .5H31.5V32"/></svg>`,
|
||||
)}")`,
|
||||
}),
|
||||
'bg-dot': value => ({
|
||||
backgroundImage: `url("${svgToDataUri(
|
||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="16" height="16" fill="none"><circle fill="${value}" id="pattern-circle" cx="10" cy="10" r="1.6257413380501518"></circle></svg>`,
|
||||
)}")`,
|
||||
}),
|
||||
},
|
||||
{ values: flattenColorPalette(theme('backgroundColor')), type: 'color' },
|
||||
);
|
||||
}),
|
||||
],
|
||||
};
|
||||
|
||||
export default config;
|
||||
4
packages/web/app/tailwind.d.ts
vendored
4
packages/web/app/tailwind.d.ts
vendored
|
|
@ -1,4 +0,0 @@
|
|||
declare module 'tailwindcss/lib/util/flattenColorPalette' {
|
||||
const flattenColorPalette: (colors: any) => Record<string, string>;
|
||||
export default flattenColorPalette;
|
||||
}
|
||||
|
|
@ -25,6 +25,6 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"include": ["src", "tailwind.config.ts", "tailwind.d.ts"],
|
||||
"include": ["src"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { resolve } from 'node:path';
|
|||
import type { Plugin, UserConfig } from 'vite';
|
||||
import monacoEditor from 'vite-plugin-monaco-editor';
|
||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||
import tailwindcss from '@tailwindcss/vite';
|
||||
import react from '@vitejs/plugin-react';
|
||||
|
||||
const __dirname = new URL('.', import.meta.url).pathname;
|
||||
|
|
@ -26,6 +27,7 @@ export default {
|
|||
plugins: [
|
||||
tsconfigPaths(),
|
||||
react(),
|
||||
tailwindcss(),
|
||||
reactScanPlugin,
|
||||
// @ts-expect-error temp
|
||||
monacoEditor.default({
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ export const ProductUpdateAuthors = ({
|
|||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'has-[a:hover]:bg-beige-900/5 dark:has[a:hover]:bg-neutral-50/5 my-4 -mb-1 flex flex-row items-center justify-center rounded-xl py-1 pl-1 pr-3',
|
||||
'has-[a:hover]:bg-beige-900/5 my-4 -mb-1 flex flex-row items-center justify-center rounded-xl py-1 pl-1 pr-3 dark:has-[a:hover]:bg-neutral-50/5',
|
||||
className,
|
||||
)}
|
||||
>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
/* eslint-disable tailwindcss/no-custom-classname */
|
||||
import { ReactElement } from 'react';
|
||||
import { Callout, Code } from '@theguild/components';
|
||||
|
||||
|
|
|
|||
385
pnpm-lock.yaml
385
pnpm-lock.yaml
|
|
@ -17,6 +17,9 @@ overrides:
|
|||
ip: npm:neoip@2.1.0
|
||||
miniflare@3>undici: ^7.18.2
|
||||
tailwindcss: 3.4.17
|
||||
'@hive/app>tailwindcss': 4.1.18
|
||||
'@tailwindcss/node>tailwindcss': 4.1.18
|
||||
'@tailwindcss/vite>tailwindcss': 4.1.18
|
||||
estree-util-value-to-estree: ^3.3.3
|
||||
nodemailer@^6.0.0: ^7.0.11
|
||||
'@types/nodemailer>@aws-sdk/client-sesv2': '-'
|
||||
|
|
@ -176,15 +179,15 @@ importers:
|
|||
eslint:
|
||||
specifier: 8.57.1
|
||||
version: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
eslint-plugin-better-tailwindcss:
|
||||
specifier: ^4.0.0
|
||||
version: 4.0.1(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.5)(typescript@5.7.3)))(typescript@5.7.3)
|
||||
eslint-plugin-cypress:
|
||||
specifier: 4.1.0
|
||||
version: 4.1.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-hive:
|
||||
specifier: file:rules
|
||||
version: link:rules
|
||||
eslint-plugin-tailwindcss:
|
||||
specifier: npm:@hasparus/eslint-plugin-tailwindcss@3.17.5
|
||||
version: '@hasparus/eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.5)(typescript@5.7.3)))'
|
||||
fs-extra:
|
||||
specifier: 11.2.0
|
||||
version: 11.2.0
|
||||
|
|
@ -1851,6 +1854,9 @@ importers:
|
|||
'@stripe/stripe-js':
|
||||
specifier: 5.5.0
|
||||
version: 5.5.0
|
||||
'@tailwindcss/vite':
|
||||
specifier: ^4.1.18
|
||||
version: 4.1.18(vite@7.1.11(@types/node@25.0.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0))
|
||||
'@tanstack/react-form':
|
||||
specifier: ^1.27.0
|
||||
version: 1.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
|
|
@ -1923,9 +1929,6 @@ importers:
|
|||
'@xyflow/react':
|
||||
specifier: 12.4.4
|
||||
version: 12.4.4(@types/react@18.3.18)(immer@10.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
autoprefixer:
|
||||
specifier: 10.4.21
|
||||
version: 10.4.21(postcss@8.5.6)
|
||||
class-variance-authority:
|
||||
specifier: 0.7.1
|
||||
version: 0.7.1
|
||||
|
|
@ -2092,14 +2095,8 @@ importers:
|
|||
specifier: 2.6.0
|
||||
version: 2.6.0
|
||||
tailwindcss:
|
||||
specifier: 3.4.17
|
||||
version: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@25.0.2)(typescript@5.7.3))
|
||||
tailwindcss-animate:
|
||||
specifier: 1.0.7
|
||||
version: 1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@25.0.2)(typescript@5.7.3)))
|
||||
tailwindcss-radix:
|
||||
specifier: 3.0.5
|
||||
version: 3.0.5(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@25.0.2)(typescript@5.7.3)))
|
||||
specifier: 4.1.18
|
||||
version: 4.1.18
|
||||
tslib:
|
||||
specifier: 2.8.1
|
||||
version: 2.8.1
|
||||
|
|
@ -3922,6 +3919,10 @@ packages:
|
|||
resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
|
||||
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
||||
|
||||
'@eslint/css-tree@3.6.8':
|
||||
resolution: {integrity: sha512-s0f40zY7dlMp8i0Jf0u6l/aSswS0WRAgkhgETgiCJRcxIWb4S/Sp9uScKHWbkM3BnoFLbJbmOYk5AZUDFVxaLA==}
|
||||
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
|
||||
|
||||
'@eslint/eslintrc@2.1.4':
|
||||
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
|
|
@ -5290,12 +5291,6 @@ packages:
|
|||
engines: {node: '>=6'}
|
||||
hasBin: true
|
||||
|
||||
'@hasparus/eslint-plugin-tailwindcss@3.17.5':
|
||||
resolution: {integrity: sha512-mqoB807HS4AItVpjaoxvx1wh6s5ES1NbLoLB3TpQDLHGyFy7/bFG5BkOuJ6hthy9yCcNPLaDmgAZbYNjQGncbQ==}
|
||||
engines: {node: '>=18.12.0'}
|
||||
peerDependencies:
|
||||
tailwindcss: 3.4.17
|
||||
|
||||
'@headlessui/react@1.7.19':
|
||||
resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
@ -5807,10 +5802,6 @@ packages:
|
|||
'@jridgewell/gen-mapping@0.3.13':
|
||||
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.8':
|
||||
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/remapping@2.3.5':
|
||||
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
|
||||
|
||||
|
|
@ -5818,22 +5809,12 @@ packages:
|
|||
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/set-array@1.2.1':
|
||||
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/source-map@0.3.11':
|
||||
resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0':
|
||||
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.5':
|
||||
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.25':
|
||||
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.31':
|
||||
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
|
||||
|
||||
|
|
@ -6985,6 +6966,10 @@ packages:
|
|||
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
'@pkgr/core@0.2.9':
|
||||
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
|
||||
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
||||
|
||||
'@pkgr/utils@2.4.2':
|
||||
resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==}
|
||||
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
||||
|
|
@ -9310,11 +9295,101 @@ packages:
|
|||
peerDependencies:
|
||||
tailwindcss: 3.4.17
|
||||
|
||||
'@tailwindcss/node@4.1.18':
|
||||
resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
|
||||
|
||||
'@tailwindcss/oxide-android-arm64@4.1.18':
|
||||
resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.18':
|
||||
resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.18':
|
||||
resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.18':
|
||||
resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
|
||||
resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
|
||||
resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.18':
|
||||
resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.18':
|
||||
resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.18':
|
||||
resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.18':
|
||||
resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
cpu: [wasm32]
|
||||
bundledDependencies:
|
||||
- '@napi-rs/wasm-runtime'
|
||||
- '@emnapi/core'
|
||||
- '@emnapi/runtime'
|
||||
- '@tybys/wasm-util'
|
||||
- '@emnapi/wasi-threads'
|
||||
- tslib
|
||||
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
|
||||
resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.18':
|
||||
resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@tailwindcss/oxide@4.1.18':
|
||||
resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
|
||||
engines: {node: '>= 10'}
|
||||
|
||||
'@tailwindcss/typography@0.5.16':
|
||||
resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
|
||||
peerDependencies:
|
||||
tailwindcss: 3.4.17
|
||||
|
||||
'@tailwindcss/vite@4.1.18':
|
||||
resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==}
|
||||
peerDependencies:
|
||||
vite: ^5.2.0 || ^6 || ^7
|
||||
|
||||
'@tanstack/devtools-event-client@0.3.5':
|
||||
resolution: {integrity: sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw==}
|
||||
engines: {node: '>=18'}
|
||||
|
|
@ -10121,6 +10196,11 @@ packages:
|
|||
peerDependencies:
|
||||
graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
|
||||
|
||||
'@valibot/to-json-schema@1.5.0':
|
||||
resolution: {integrity: sha512-GE7DmSr1C2UCWPiV0upRH6mv0cCPsqYGs819fb6srCS1tWhyXrkGGe+zxUiwzn/L1BOfADH4sNjY/YHCuP8phQ==}
|
||||
peerDependencies:
|
||||
valibot: ^1.2.0
|
||||
|
||||
'@vitejs/plugin-react@4.3.4':
|
||||
resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
|
|
@ -10589,13 +10669,6 @@ packages:
|
|||
resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
|
||||
autoprefixer@10.4.21:
|
||||
resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
postcss: ^8.1.0
|
||||
|
||||
available-typed-arrays@1.0.5:
|
||||
resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
|
@ -12012,6 +12085,10 @@ packages:
|
|||
resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
||||
enhanced-resolve@5.18.4:
|
||||
resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
||||
enquirer@2.4.1:
|
||||
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
|
||||
engines: {node: '>=8.6'}
|
||||
|
|
@ -12192,6 +12269,19 @@ packages:
|
|||
eslint-import-resolver-webpack:
|
||||
optional: true
|
||||
|
||||
eslint-plugin-better-tailwindcss@4.0.1:
|
||||
resolution: {integrity: sha512-iHf7tMgISkXJ5XLgskpxMPgHSHorI28cN4rQyn1Q5YFTovObZwESi/r5cmF49hTQfWkb0B8s7Me6BLM2efvzlQ==}
|
||||
engines: {node: ^20.19.0 || ^22.12.0 || >=23.0.0}
|
||||
peerDependencies:
|
||||
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
|
||||
oxlint: ^1.35.0
|
||||
tailwindcss: 3.4.17
|
||||
peerDependenciesMeta:
|
||||
eslint:
|
||||
optional: true
|
||||
oxlint:
|
||||
optional: true
|
||||
|
||||
eslint-plugin-cypress@4.1.0:
|
||||
resolution: {integrity: sha512-JhqkMY02mw74USwK9OFhectx3YSj6Co1NgWBxlGdKvlqiAp9vdEuQqt33DKGQFvvGS/NWtduuhWXWNnU29xDSg==}
|
||||
peerDependencies:
|
||||
|
|
@ -12697,9 +12787,6 @@ packages:
|
|||
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
fraction.js@4.3.7:
|
||||
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
|
||||
|
||||
framer-motion@10.18.0:
|
||||
resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==}
|
||||
peerDependencies:
|
||||
|
|
@ -14655,6 +14742,9 @@ packages:
|
|||
mdast-util-to-string@4.0.0:
|
||||
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
|
||||
|
||||
mdn-data@2.23.0:
|
||||
resolution: {integrity: sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==}
|
||||
|
||||
mdurl@2.0.0:
|
||||
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
|
||||
|
||||
|
|
@ -15368,10 +15458,6 @@ packages:
|
|||
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
normalize-range@0.1.2:
|
||||
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
normalize-url@6.1.0:
|
||||
resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
@ -17630,6 +17716,10 @@ packages:
|
|||
synchronous-promise@2.0.17:
|
||||
resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==}
|
||||
|
||||
synckit@0.11.12:
|
||||
resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
|
||||
synckit@0.8.6:
|
||||
resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
|
|
@ -17641,6 +17731,10 @@ packages:
|
|||
tabbable@6.2.0:
|
||||
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
|
||||
|
||||
tailwind-csstree@0.1.4:
|
||||
resolution: {integrity: sha512-FzD187HuFIZEyeR7Xy6sJbJll2d4SybS90satC8SKIuaNRC05CxMvdzN7BUsfDQffcnabckRM5OIcfArjsZ0mg==}
|
||||
engines: {node: '>=18.18'}
|
||||
|
||||
tailwind-merge@2.6.0:
|
||||
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
|
||||
|
||||
|
|
@ -17660,6 +17754,9 @@ packages:
|
|||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
|
||||
tailwindcss@4.1.18:
|
||||
resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
|
||||
|
||||
tapable@2.2.1:
|
||||
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
|
||||
engines: {node: '>=6'}
|
||||
|
|
@ -17902,6 +17999,10 @@ packages:
|
|||
typescript:
|
||||
optional: true
|
||||
|
||||
tsconfig-paths-webpack-plugin@4.2.0:
|
||||
resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
||||
tsconfig-paths@3.15.0:
|
||||
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
|
||||
|
||||
|
|
@ -18369,6 +18470,14 @@ packages:
|
|||
v8-compile-cache-lib@3.0.1:
|
||||
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
|
||||
|
||||
valibot@1.2.0:
|
||||
resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==}
|
||||
peerDependencies:
|
||||
typescript: '>=5'
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
valid-data-url@3.0.1:
|
||||
resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
@ -18887,7 +18996,7 @@ snapshots:
|
|||
'@ampproject/remapping@2.3.0':
|
||||
dependencies:
|
||||
'@jridgewell/gen-mapping': 0.3.13
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
'@jridgewell/trace-mapping': 0.3.31
|
||||
|
||||
'@antfu/install-pkg@1.1.0':
|
||||
dependencies:
|
||||
|
|
@ -20659,8 +20768,8 @@ snapshots:
|
|||
dependencies:
|
||||
'@babel/parser': 7.26.10
|
||||
'@babel/types': 7.26.10
|
||||
'@jridgewell/gen-mapping': 0.3.8
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
'@jridgewell/gen-mapping': 0.3.13
|
||||
'@jridgewell/trace-mapping': 0.3.31
|
||||
jsesc: 3.0.2
|
||||
|
||||
'@babel/generator@7.28.5':
|
||||
|
|
@ -21835,6 +21944,11 @@ snapshots:
|
|||
|
||||
'@eslint-community/regexpp@4.11.0': {}
|
||||
|
||||
'@eslint/css-tree@3.6.8':
|
||||
dependencies:
|
||||
mdn-data: 2.23.0
|
||||
source-map-js: 1.2.1
|
||||
|
||||
'@eslint/eslintrc@2.1.4':
|
||||
dependencies:
|
||||
ajv: 6.12.6
|
||||
|
|
@ -25331,12 +25445,6 @@ snapshots:
|
|||
protobufjs: 7.4.0
|
||||
yargs: 17.7.2
|
||||
|
||||
'@hasparus/eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.5)(typescript@5.7.3)))':
|
||||
dependencies:
|
||||
fast-glob: 3.3.2
|
||||
postcss: 8.4.49
|
||||
tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.5)(typescript@5.7.3))
|
||||
|
||||
'@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@tanstack/react-virtual': 3.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
|
|
@ -25831,12 +25939,6 @@ snapshots:
|
|||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
'@jridgewell/trace-mapping': 0.3.31
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.8':
|
||||
dependencies:
|
||||
'@jridgewell/set-array': 1.2.1
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
|
||||
'@jridgewell/remapping@2.3.5':
|
||||
dependencies:
|
||||
'@jridgewell/gen-mapping': 0.3.13
|
||||
|
|
@ -25844,23 +25946,14 @@ snapshots:
|
|||
|
||||
'@jridgewell/resolve-uri@3.1.1': {}
|
||||
|
||||
'@jridgewell/set-array@1.2.1': {}
|
||||
|
||||
'@jridgewell/source-map@0.3.11':
|
||||
dependencies:
|
||||
'@jridgewell/gen-mapping': 0.3.13
|
||||
'@jridgewell/trace-mapping': 0.3.31
|
||||
optional: true
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0': {}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.5': {}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.25':
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.1
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.31':
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.1
|
||||
|
|
@ -27459,6 +27552,8 @@ snapshots:
|
|||
'@pkgjs/parseargs@0.11.0':
|
||||
optional: true
|
||||
|
||||
'@pkgr/core@0.2.9': {}
|
||||
|
||||
'@pkgr/utils@2.4.2':
|
||||
dependencies:
|
||||
cross-spawn: 7.0.6
|
||||
|
|
@ -30645,6 +30740,67 @@ snapshots:
|
|||
dependencies:
|
||||
tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@25.0.2)(typescript@5.7.3))
|
||||
|
||||
'@tailwindcss/node@4.1.18':
|
||||
dependencies:
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
enhanced-resolve: 5.18.4
|
||||
jiti: 2.6.1
|
||||
lightningcss: 1.30.2
|
||||
magic-string: 0.30.21
|
||||
source-map-js: 1.2.1
|
||||
tailwindcss: 4.1.18
|
||||
|
||||
'@tailwindcss/oxide-android-arm64@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.18':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide@4.1.18':
|
||||
optionalDependencies:
|
||||
'@tailwindcss/oxide-android-arm64': 4.1.18
|
||||
'@tailwindcss/oxide-darwin-arm64': 4.1.18
|
||||
'@tailwindcss/oxide-darwin-x64': 4.1.18
|
||||
'@tailwindcss/oxide-freebsd-x64': 4.1.18
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18
|
||||
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.18
|
||||
'@tailwindcss/oxide-linux-arm64-musl': 4.1.18
|
||||
'@tailwindcss/oxide-linux-x64-gnu': 4.1.18
|
||||
'@tailwindcss/oxide-linux-x64-musl': 4.1.18
|
||||
'@tailwindcss/oxide-wasm32-wasi': 4.1.18
|
||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
|
||||
'@tailwindcss/oxide-win32-x64-msvc': 4.1.18
|
||||
|
||||
'@tailwindcss/typography@0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@25.0.2)(typescript@5.7.3)))':
|
||||
dependencies:
|
||||
lodash.castarray: 4.4.0
|
||||
|
|
@ -30653,6 +30809,13 @@ snapshots:
|
|||
postcss-selector-parser: 6.0.10
|
||||
tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@25.0.2)(typescript@5.7.3))
|
||||
|
||||
'@tailwindcss/vite@4.1.18(vite@7.1.11(@types/node@25.0.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0))':
|
||||
dependencies:
|
||||
'@tailwindcss/node': 4.1.18
|
||||
'@tailwindcss/oxide': 4.1.18
|
||||
tailwindcss: 4.1.18
|
||||
vite: 7.1.11(@types/node@25.0.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0)
|
||||
|
||||
'@tanstack/devtools-event-client@0.3.5': {}
|
||||
|
||||
'@tanstack/form-core@1.27.0':
|
||||
|
|
@ -30895,8 +31058,8 @@ snapshots:
|
|||
'@typescript-eslint/parser': 7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3)
|
||||
eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
eslint-config-prettier: 9.1.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-jsonc: 2.11.1(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-mdx: 3.0.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
|
|
@ -31662,6 +31825,10 @@ snapshots:
|
|||
dependencies:
|
||||
graphql: 16.9.0
|
||||
|
||||
'@valibot/to-json-schema@1.5.0(valibot@1.2.0(typescript@5.7.3))':
|
||||
dependencies:
|
||||
valibot: 1.2.0(typescript@5.7.3)
|
||||
|
||||
'@vitejs/plugin-react@4.3.4(vite@7.1.11(@types/node@25.0.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.0
|
||||
|
|
@ -32190,16 +32357,6 @@ snapshots:
|
|||
|
||||
auto-bind@5.0.1: {}
|
||||
|
||||
autoprefixer@10.4.21(postcss@8.5.6):
|
||||
dependencies:
|
||||
browserslist: 4.26.0
|
||||
caniuse-lite: 1.0.30001741
|
||||
fraction.js: 4.3.7
|
||||
normalize-range: 0.1.2
|
||||
picocolors: 1.1.1
|
||||
postcss: 8.5.6
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
available-typed-arrays@1.0.5: {}
|
||||
|
||||
avvio@8.4.0:
|
||||
|
|
@ -33760,6 +33917,11 @@ snapshots:
|
|||
graceful-fs: 4.2.11
|
||||
tapable: 2.2.1
|
||||
|
||||
enhanced-resolve@5.18.4:
|
||||
dependencies:
|
||||
graceful-fs: 4.2.11
|
||||
tapable: 2.2.1
|
||||
|
||||
enquirer@2.4.1:
|
||||
dependencies:
|
||||
ansi-colors: 4.1.3
|
||||
|
|
@ -33990,13 +34152,13 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)):
|
||||
eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)):
|
||||
dependencies:
|
||||
debug: 4.4.3(supports-color@8.1.1)
|
||||
enhanced-resolve: 5.17.1
|
||||
eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
fast-glob: 3.3.2
|
||||
get-tsconfig: 4.7.5
|
||||
is-core-module: 2.13.1
|
||||
|
|
@ -34027,17 +34189,33 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-module-utils@2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)):
|
||||
eslint-module-utils@2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)):
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3)
|
||||
eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-plugin-better-tailwindcss@4.0.1(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.5)(typescript@5.7.3)))(typescript@5.7.3):
|
||||
dependencies:
|
||||
'@eslint/css-tree': 3.6.8
|
||||
'@valibot/to-json-schema': 1.5.0(valibot@1.2.0(typescript@5.7.3))
|
||||
enhanced-resolve: 5.18.4
|
||||
jiti: 2.6.1
|
||||
synckit: 0.11.12
|
||||
tailwind-csstree: 0.1.4
|
||||
tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.10.5)(typescript@5.7.3))
|
||||
tsconfig-paths-webpack-plugin: 4.2.0
|
||||
valibot: 1.2.0(typescript@5.7.3)
|
||||
optionalDependencies:
|
||||
eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
transitivePeerDependencies:
|
||||
- typescript
|
||||
|
||||
eslint-plugin-cypress@4.1.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)):
|
||||
dependencies:
|
||||
eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
|
|
@ -34050,7 +34228,7 @@ snapshots:
|
|||
eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
eslint-compat-utils: 0.1.2(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
|
||||
eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)):
|
||||
eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)):
|
||||
dependencies:
|
||||
array-includes: 3.1.7
|
||||
array.prototype.findlastindex: 1.2.3
|
||||
|
|
@ -34060,7 +34238,7 @@ snapshots:
|
|||
doctrine: 2.1.0
|
||||
eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))
|
||||
hasown: 2.0.2
|
||||
is-core-module: 2.13.1
|
||||
is-glob: 4.0.3
|
||||
|
|
@ -34750,8 +34928,6 @@ snapshots:
|
|||
|
||||
forwarded@0.2.0: {}
|
||||
|
||||
fraction.js@4.3.7: {}
|
||||
|
||||
framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
dependencies:
|
||||
tslib: 2.8.1
|
||||
|
|
@ -37183,6 +37359,8 @@ snapshots:
|
|||
dependencies:
|
||||
'@types/mdast': 4.0.1
|
||||
|
||||
mdn-data@2.23.0: {}
|
||||
|
||||
mdurl@2.0.0: {}
|
||||
|
||||
media-typer@0.3.0: {}
|
||||
|
|
@ -38291,8 +38469,6 @@ snapshots:
|
|||
|
||||
normalize-path@3.0.0: {}
|
||||
|
||||
normalize-range@0.1.2: {}
|
||||
|
||||
normalize-url@6.1.0: {}
|
||||
|
||||
normalize-url@8.0.1: {}
|
||||
|
|
@ -40893,6 +41069,10 @@ snapshots:
|
|||
|
||||
synchronous-promise@2.0.17: {}
|
||||
|
||||
synckit@0.11.12:
|
||||
dependencies:
|
||||
'@pkgr/core': 0.2.9
|
||||
|
||||
synckit@0.8.6:
|
||||
dependencies:
|
||||
'@pkgr/utils': 2.4.2
|
||||
|
|
@ -40902,6 +41082,8 @@ snapshots:
|
|||
|
||||
tabbable@6.2.0: {}
|
||||
|
||||
tailwind-csstree@0.1.4: {}
|
||||
|
||||
tailwind-merge@2.6.0: {}
|
||||
|
||||
tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@25.0.2)(typescript@5.7.3))):
|
||||
|
|
@ -40966,6 +41148,8 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- ts-node
|
||||
|
||||
tailwindcss@4.1.18: {}
|
||||
|
||||
tapable@2.2.1: {}
|
||||
|
||||
tar-fs@2.1.4:
|
||||
|
|
@ -41211,6 +41395,13 @@ snapshots:
|
|||
optionalDependencies:
|
||||
typescript: 5.7.3
|
||||
|
||||
tsconfig-paths-webpack-plugin@4.2.0:
|
||||
dependencies:
|
||||
chalk: 4.1.2
|
||||
enhanced-resolve: 5.18.4
|
||||
tapable: 2.2.1
|
||||
tsconfig-paths: 4.2.0
|
||||
|
||||
tsconfig-paths@3.15.0:
|
||||
dependencies:
|
||||
'@types/json5': 0.0.29
|
||||
|
|
@ -41720,6 +41911,10 @@ snapshots:
|
|||
v8-compile-cache-lib@3.0.1:
|
||||
optional: true
|
||||
|
||||
valibot@1.2.0(typescript@5.7.3):
|
||||
optionalDependencies:
|
||||
typescript: 5.7.3
|
||||
|
||||
valid-data-url@3.0.1: {}
|
||||
|
||||
validate-npm-package-license@3.0.4:
|
||||
|
|
|
|||
Loading…
Reference in a new issue