Compare commits

..

No commits in common. "9b874eebf87ab536b7a13e59f1e608f353c0c3fd" and "57ef20a69cea277fd2971ab08ce3b383248ab23e" have entirely different histories.

24 changed files with 290 additions and 345 deletions

View File

@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.1/schema.json",
"$schema": "https://biomejs.dev/schemas/2.2.4/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
@ -108,7 +108,7 @@
"useThrowOnlyError": "error"
},
"suspicious": {
"noExplicitAny": "info",
"noExplicitAny": "error",
"noDebugger": "error",
"noDuplicateJsxProps": "error",
"noDuplicateObjectKeys": "error",
@ -209,7 +209,7 @@
"useKeyWithClickEvents": "error",
"useKeyWithMouseEvents": "error",
"useMediaCaption": "error",
"useSemanticElements": "info",
"useSemanticElements": "error",
"useValidAnchor": "error",
"useValidAriaProps": "error",
"useValidAriaValues": "error",
@ -278,9 +278,6 @@
}
},
"css": {
"parser": {
"tailwindDirectives": true
},
"formatter": {
"enabled": true,
"indentStyle": "space",
@ -352,7 +349,7 @@
}
},
"suspicious": {
"noExplicitAny": "info"
"noExplicitAny": "error"
},
"complexity": {
"noExcessiveCognitiveComplexity": {

View File

@ -1 +1 @@
@source "**/*.{ts,tsx}";
@source "./components";

View File

@ -1 +1,2 @@
@source "**/*.{ts,tsx}";
@source "./components";
@source "./pages";

View File

@ -1,4 +1,4 @@
import type { FiltersPrimitives } from "./Filter";
import { FiltersPrimitives } from "./Filter";
import { Filters } from "./Filters";
import { InvalidCriteria } from "./InvalidCriteria";
import { Order } from "./Order";
@ -8,7 +8,7 @@ export class Criteria {
public readonly filters: Filters,
public readonly order: Order,
public readonly pageSize: number | null,
public readonly pageNumber: number | null
public readonly pageNumber: number | null,
) {
if (pageNumber !== null && pageSize === null) {
throw new InvalidCriteria();
@ -20,13 +20,13 @@ export class Criteria {
orderBy: string | null,
orderType: string | null,
pageSize: number | null,
pageNumber: number | null
pageNumber: number | null,
): Criteria {
return new Criteria(
Filters.fromPrimitives(filters),
Order.fromPrimitives(orderBy, orderType),
pageSize,
pageNumber
pageNumber,
);
}

View File

@ -1,6 +1,6 @@
import type { FilterField } from "./FilterField";
import type { FilterOperator } from "./FilterOperator";
import type { FilterValue } from "./FilterValue";
import { FilterField } from "./FilterField";
import { FilterOperator } from "./FilterOperator";
import { FilterValue } from "./FilterValue";
export type FiltersPrimitives = {
field: string;
operator: string;

View File

@ -23,7 +23,7 @@ export class Filter {
return new Filter(
new FilterField(field),
new FilterOperator(Operator[operator as keyof typeof Operator]),
new FilterValue(value)
new FilterValue(value),
);
}

View File

@ -1,11 +1,11 @@
import { Filter, type FiltersPrimitives } from "./Filter";
import { Filter, FiltersPrimitives } from "./Filter";
export class Filters {
constructor(public readonly value: Filter[]) {}
static fromPrimitives(filters: FiltersPrimitives[]): Filters {
return new Filters(
filters.map((filter) => Filter.fromPrimitives(filter.field, filter.operator, filter.value))
filters.map((filter) => Filter.fromPrimitives(filter.field, filter.operator, filter.value)),
);
}

View File

@ -4,7 +4,7 @@ import { OrderType, OrderTypes } from "./OrderType";
export class Order {
constructor(
public readonly orderBy: OrderBy,
public readonly orderType: OrderType
public readonly orderType: OrderType,
) {}
static none(): Order {

View File

@ -1,4 +1,4 @@
import { Criteria as BaseCriteria, Filters, type FiltersPrimitives, Order } from "./codelytv";
import { Criteria as BaseCriteria, Filters, FiltersPrimitives, Order } from "./codelytv";
import { INITIAL_PAGE_INDEX, INITIAL_PAGE_SIZE } from "./defaults";
export class Criteria extends BaseCriteria {

View File

@ -1,4 +1,4 @@
import type { FiltersPrimitives } from "./codelytv";
import { FiltersPrimitives } from "./codelytv";
import { Criteria } from "./critera";
import { DEFAULT_ORDER, INITIAL_PAGE_INDEX, INITIAL_PAGE_SIZE } from "./defaults";
@ -64,7 +64,7 @@ export class CriteriaFromUrlConverter {
searchParams.forEach((value, key) => {
const match = key.match(/filters\[(\d+)]\[(.+)]/);
if (match) {
const index = match[1]!;
const index = match[1];
const property = match[2] as keyof FiltersPrimitives;
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (!tempFilters[index]) {

View File

@ -1,6 +1,5 @@
import type { FindOptions, Sequelize } from "sequelize";
import type { Criteria } from "./critera.js";
import { FindOptions, Sequelize } from "sequelize";
import { Criteria } from "./critera.js";
/**
* Mapeo lógicofísico de campos.

View File

@ -35,7 +35,7 @@
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.6.0",
"tailwindcss": "^4.1.10",
"tailwindcss": "^4.1.5",
"tsup": "^8.4.0",
"tw-animate-css": "^1.2.9",
"typescript-plugin-css-modules": "^5.1.0",

View File

@ -9,7 +9,7 @@ import {
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@repo/shadcn-ui/components";
import type { Column, Table } from "@tanstack/react-table";
import type { Table } from "@tanstack/react-table";
import { Settings2 } from "lucide-react";
import { useTranslation } from "../../locales/i18n.ts";
@ -24,7 +24,7 @@ export function DataTableViewOptions<TData>({ table }: { table: Table<TData> })
{t("components.datatable_view_options.view_button")}
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuContent align="end" className="w-[150px]">
<DropdownMenuLabel>
{t("components.datatable_view_options.toggle_columns")}
</DropdownMenuLabel>
@ -36,10 +36,11 @@ export function DataTableViewOptions<TData>({ table }: { table: Table<TData> })
return (
<DropdownMenuCheckboxItem
checked={column.getIsVisible()}
className="capitalize"
key={column.id}
onCheckedChange={(value) => column.toggleVisibility(!!value)}
>
{getColumnLabel(column)}
{column.id}
</DropdownMenuCheckboxItem>
);
})}
@ -47,19 +48,3 @@ export function DataTableViewOptions<TData>({ table }: { table: Table<TData> })
</DropdownMenu>
);
}
const getColumnLabel = <TData, TValue>(column: Column<TData, TValue>): string => {
let label = String(column.id);
const h = column.columnDef.header;
// header como string literal
if (typeof h === "string") label = h;
// header función → intentar obtener title si lo usas en tus componentes
if (typeof h === "function") {
// tu DataTableColumnHeader recibe `title` como prop → está en column.columnDef.meta
const meta = column.columnDef.meta as { title?: string } | undefined;
label = meta?.title ?? column.id;
}
return label;
};

View File

@ -75,12 +75,11 @@ export interface DataTableProps<TData, TValue> {
meta?: DataTableMeta<TData>;
// Configuración
columnVisibility?: VisibilityState;
readOnly?: boolean;
enablePagination?: boolean;
pageSize?: number;
enableRowSelection?: boolean;
EditorComponent?: React.ComponentType<{ row?: TData; index: number; onClose: () => void }>;
EditorComponent?: React.ComponentType<{ row: TData; index: number; onClose: () => void }>;
getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string;
@ -100,7 +99,6 @@ export function DataTable<TData, TValue>({
data,
meta,
columnVisibility: inititalcolumnVisibility = {},
readOnly = false,
enablePagination = true,
pageSize = 10,
@ -121,8 +119,7 @@ export function DataTable<TData, TValue>({
const [rowSelection, setRowSelection] = React.useState({});
const [sorting, setSorting] = React.useState<SortingState>([]);
const [columnVisibility, setColumnVisibility] =
React.useState<VisibilityState>(inititalcolumnVisibility);
const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);
const [colSizes, setColSizes] = React.useState<ColumnSizingState>({});
const [editIndex, setEditIndex] = React.useState<number | null>(null);

View File

@ -1,4 +1,4 @@
@source "**/*.{ts,tsx}";
@source "../components";
@layer components {
/**
@ -8,28 +8,36 @@
/* Fondo suave diagonal */
.brand-surface-50-br {
@apply bg-gradient-to-br from-blue-50 via-violet-50 to-purple-50 dark:from-blue-950 dark:via-violet-950 dark:to-purple-950;
@apply bg-gradient-to-br from-blue-50 via-violet-50 to-purple-50
dark:from-blue-950 dark:via-violet-950 dark:to-purple-950;
}
.brand-surface-100-br {
@apply bg-gradient-to-br from-blue-100 via-violet-100 to-purple-100 dark:from-blue-900 dark:via-violet-900 dark:to-purple-900;
@apply bg-gradient-to-br from-blue-100 via-violet-100 to-purple-100
dark:from-blue-900 dark:via-violet-900 dark:to-purple-900;
}
/* Fondo suave horizontal */
.brand-surface-50-x {
@apply bg-gradient-to-r from-blue-50 to-violet-50 hover:from-blue-50 hover:to-violet-50 dark:from-blue-900 dark:to-violet-900;
@apply bg-gradient-to-r from-blue-50 to-violet-50
hover:from-blue-50 hover:to-violet-50
dark:from-blue-900 dark:to-violet-900;
}
.brand-surface-100-x {
@apply bg-gradient-to-r from-blue-100 to-violet-100 hover:from-blue-100 hover:to-violet-100 dark:from-blue-900 dark:to-violet-900;
@apply bg-gradient-to-r from-blue-100 to-violet-100
hover:from-blue-100 hover:to-violet-100
dark:from-blue-900 dark:to-violet-900;
}
.brand-surface-200-x {
@apply bg-gradient-to-r from-blue-200 to-violet-200 dark:from-blue-800 dark:to-violet-800;
@apply bg-gradient-to-r from-blue-200 to-violet-200
dark:from-blue-800 dark:to-violet-800;
}
/* Gradiente para texto (intenso) */
.brand-text-strong-x {
@apply bg-gradient-to-r from-blue-600 to-violet-600 bg-clip-text text-transparent antialiased dark:from-blue-400 dark:to-violet-400;
@apply bg-gradient-to-r from-blue-600 to-violet-600 bg-clip-text text-transparent antialiased
dark:from-blue-400 dark:to-violet-400;
}
}

View File

@ -26,7 +26,6 @@
"devDependencies": {
"@biomejs/biome": "^2.3.1",
"@repo/typescript-config": "workspace:*",
"@tailwindcss/cli": "^4.1.5",
"@tailwindcss/postcss": "^4.1.5",
"@turbo/gen": "^2.5.2",
"@types/node": "^22.15.12",
@ -35,7 +34,8 @@
"postcss": "^8.5.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"typescript": "^5.6.0"
"typescript": "^5.6.0",
"tailwindcss": "^4.1.5"
},
"dependencies": {
"@hookform/resolvers": "^5.2.2",
@ -65,6 +65,7 @@
"@radix-ui/react-toggle": "^1.1.10",
"@radix-ui/react-toggle-group": "^1.1.11",
"@radix-ui/react-tooltip": "^1.2.8",
"@tailwindcss/cli": "^4.1.5",
"add": "^2.0.6",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
@ -82,7 +83,6 @@
"recharts": "^2.15.4",
"sonner": "^2.0.7",
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.10",
"tw-animate-css": "^1.2.9",
"vaul": "^1.1.2",
"zod": "^3.25.76"

View File

@ -10,7 +10,109 @@
@custom-variant dark (&:is(.dark *));
@theme {
/**
*
* https://tweakcn.com/
* https://themux.vercel.app/shadcn-themes
* https://shadcnstudio.com/theme-generator
*
**/
:root {
--font-sans: "Noto Sans", ui-sans-serif, sans-serif, system-ui;
--font-serif: "Noto Serif", ui-serif, serif;
--font-mono: "Noto Sans Mono", ui-monospace, monospace;
--background: oklch(1 0 0);
--foreground: oklch(13.636% 0.02685 282.25);
--card: oklch(1.0 0 0);
--card-foreground: oklch(0.2035 0.0139 285.1021);
--popover: oklch(1.0 0 0);
--popover-foreground: oklch(0.2035 0.0139 285.1021);
--primary: oklch(0.623 0.214 259.815);
--primary-foreground: oklch(1.0 0 0);
--secondary: oklch(0.9574 0.0011 197.1383);
--secondary-foreground: oklch(0.2069 0.0098 285.5081);
--muted: oklch(0.9674 0.0013 286.3752);
--muted-foreground: oklch(0.5466 0.0216 285.664);
--accent: oklch(0.9299 0.0334 272.7879);
--accent-foreground: oklch(0.3729 0.0306 259.7328);
--destructive: oklch(0.583 0.2387 28.4765);
--destructive-foreground: oklch(1.0 0 0);
--border: oklch(0.9273 0.0067 286.2663);
--input: oklch(0.9173 0.0067 286.2663);
--ring: oklch(0.6187 0.2067 259.2316);
--chart-1: oklch(0.6471 0.2173 36.8511);
--chart-2: oklch(37.973% 0.0506 187.591);
--chart-3: oklch(0.4247 0.0852 230.5827);
--chart-4: oklch(0.829 0.1712 81.0381);
--chart-5: oklch(0.7724 0.1728 65.367);
--sidebar: oklch(0.957 0.007 272.5840410480741);
--sidebar-foreground: oklch(0.2035 0.0139 285.1021);
--sidebar-primary: oklch(0.623 0.214 259.815);
--sidebar-primary-foreground: oklch(1.0 0 0);
--sidebar-accent: oklch(0.9674 0.0013 286.3752);
--sidebar-accent-foreground: oklch(0.2069 0.0098 285.5081);
--sidebar-border: oklch(0.9173 0.0067 286.2663);
--sidebar-ring: oklch(0.623 0.214 259.815);
--radius: 0.40rem;
--shadow-2xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-sm: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow-md: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 2px 4px -1px hsl(0 0% 0% / 0.1);
--shadow-lg: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 4px 6px -1px hsl(0 0% 0% / 0.1);
--shadow-xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 8px 10px -1px hsl(0 0% 0% / 0.1);
--shadow-2xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.25);
--tracking-normal: 0rem;
--spacing: 0.22rem;
}
.dark {
--background: oklch(0.1448 0 0);
--foreground: oklch(0.9851 0 0);
--card: oklch(0.2046 0 0);
--card-foreground: oklch(0.9851 0 0);
--popover: oklch(0.2046 0 0);
--popover-foreground: oklch(0.9851 0 0);
--primary: oklch(0.5471 0.2506 262.8726);
--primary-foreground: oklch(0.9705 0.0142 254.6042);
--secondary: oklch(0.2707 0.0092 285.7705);
--secondary-foreground: oklch(0.9851 0 0);
--muted: oklch(0.2686 0 0);
--muted-foreground: oklch(0.709 0 0);
--accent: oklch(0.3729 0.0306 259.7328);
--accent-foreground: oklch(0.8717 0.0093 258.3382);
--destructive: oklch(0.7022 0.1892 22.2279);
--destructive-foreground: oklch(0.2558 0.0412 235.1561);
--border: oklch(1.0 0 0);
--input: oklch(1.0 0 0);
--ring: oklch(0.4915 0.2776 263.8724);
--chart-1: oklch(0.4915 0.2776 263.8724);
--chart-2: oklch(0.7019 0.1577 160.4375);
--chart-3: oklch(0.7724 0.1728 65.367);
--chart-4: oklch(0.6217 0.2589 305.309);
--chart-5: oklch(0.6435 0.2452 16.501);
--sidebar: oklch(0.2046 0 0);
--sidebar-foreground: oklch(0.9851 0 0);
--sidebar-primary: oklch(0.5471 0.2506 262.8726);
--sidebar-primary-foreground: oklch(0.9705 0.0142 254.6042);
--sidebar-accent: oklch(0.2686 0 0);
--sidebar-accent-foreground: oklch(0.9851 0 0);
--sidebar-border: oklch(1.0 0 0);
--sidebar-ring: oklch(0.4915 0.2776 263.8724);
--radius: 0.25rem;
--shadow-2xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-sm: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow-md: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 2px 4px -1px hsl(0 0% 0% / 0.1);
--shadow-lg: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 4px 6px -1px hsl(0 0% 0% / 0.1);
--shadow-xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 8px 10px -1px hsl(0 0% 0% / 0.1);
--shadow-2xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.25);
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
@ -61,150 +163,6 @@
--shadow-lg: var(--shadow-lg);
--shadow-xl: var(--shadow-xl);
--shadow-2xl: var(--shadow-2xl);
@keyframes accordion-down {
from {
height: 0;
}
to {
height: var(--radix-accordion-content-height);
}
}
@keyframes accordion-up {
from {
height: var(--radix-accordion-content-height);
}
to {
height: 0;
}
}
}
/*
The default border color has changed to `currentColor` in Tailwind CSS v4,
so we've added these compatibility styles to make sure everything still
looks the same as it did with Tailwind CSS v3.
If we ever want to remove these styles, we need to add an explicit border
color utility to any element that depends on these defaults.
*/
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentColor);
}
}
@layer utilities {
body {
font-family: Arial, Helvetica, sans-serif;
}
}
/**
*
* https://tweakcn.com/
* https://themux.vercel.app/shadcn-themes
* https://shadcnstudio.com/theme-generator
*
**/
@layer base {
:root {
--font-sans: "Noto Sans", ui-sans-serif, sans-serif, system-ui;
--font-serif: "Noto Serif", ui-serif, serif;
--font-mono: "Noto Sans Mono", ui-monospace, monospace;
--background: oklch(1 0 0);
--foreground: oklch(13.636% 0.02685 282.25);
--card: oklch(1 0 0);
--card-foreground: oklch(0.2035 0.0139 285.1021);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.2035 0.0139 285.1021);
--primary: oklch(0.623 0.214 259.815);
--primary-foreground: oklch(1 0 0);
--secondary: oklch(0.9574 0.0011 197.1383);
--secondary-foreground: oklch(0.2069 0.0098 285.5081);
--muted: oklch(0.9674 0.0013 286.3752);
--muted-foreground: oklch(0.5466 0.0216 285.664);
--accent: oklch(0.9299 0.0334 272.7879);
--accent-foreground: oklch(0.3729 0.0306 259.7328);
--destructive: oklch(0.583 0.2387 28.4765);
--destructive-foreground: oklch(1 0 0);
--border: oklch(0.9273 0.0067 286.2663);
--input: oklch(0.9173 0.0067 286.2663);
--ring: oklch(0.6187 0.2067 259.2316);
--chart-1: oklch(0.6471 0.2173 36.8511);
--chart-2: oklch(37.973% 0.0506 187.591);
--chart-3: oklch(0.4247 0.0852 230.5827);
--chart-4: oklch(0.829 0.1712 81.0381);
--chart-5: oklch(0.7724 0.1728 65.367);
--sidebar: oklch(0.957 0.007 272.5840410480741);
--sidebar-foreground: oklch(0.2035 0.0139 285.1021);
--sidebar-primary: oklch(0.623 0.214 259.815);
--sidebar-primary-foreground: oklch(1 0 0);
--sidebar-accent: oklch(0.9674 0.0013 286.3752);
--sidebar-accent-foreground: oklch(0.2069 0.0098 285.5081);
--sidebar-border: oklch(0.9173 0.0067 286.2663);
--sidebar-ring: oklch(0.623 0.214 259.815);
--radius: 0.4rem;
--shadow-2xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-sm: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow-md: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 2px 4px -1px hsl(0 0% 0% / 0.1);
--shadow-lg: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 4px 6px -1px hsl(0 0% 0% / 0.1);
--shadow-xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 8px 10px -1px hsl(0 0% 0% / 0.1);
--shadow-2xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.25);
--tracking-normal: 0rem;
--spacing: 0.22rem;
}
.dark {
--background: oklch(0.1448 0 0);
--foreground: oklch(0.9851 0 0);
--card: oklch(0.2046 0 0);
--card-foreground: oklch(0.9851 0 0);
--popover: oklch(0.2046 0 0);
--popover-foreground: oklch(0.9851 0 0);
--primary: oklch(0.5471 0.2506 262.8726);
--primary-foreground: oklch(0.9705 0.0142 254.6042);
--secondary: oklch(0.2707 0.0092 285.7705);
--secondary-foreground: oklch(0.9851 0 0);
--muted: oklch(0.2686 0 0);
--muted-foreground: oklch(0.709 0 0);
--accent: oklch(0.3729 0.0306 259.7328);
--accent-foreground: oklch(0.8717 0.0093 258.3382);
--destructive: oklch(0.7022 0.1892 22.2279);
--destructive-foreground: oklch(0.2558 0.0412 235.1561);
--border: oklch(1 0 0);
--input: oklch(1 0 0);
--ring: oklch(0.4915 0.2776 263.8724);
--chart-1: oklch(0.4915 0.2776 263.8724);
--chart-2: oklch(0.7019 0.1577 160.4375);
--chart-3: oklch(0.7724 0.1728 65.367);
--chart-4: oklch(0.6217 0.2589 305.309);
--chart-5: oklch(0.6435 0.2452 16.501);
--sidebar: oklch(0.2046 0 0);
--sidebar-foreground: oklch(0.9851 0 0);
--sidebar-primary: oklch(0.5471 0.2506 262.8726);
--sidebar-primary-foreground: oklch(0.9705 0.0142 254.6042);
--sidebar-accent: oklch(0.2686 0 0);
--sidebar-accent-foreground: oklch(0.9851 0 0);
--sidebar-border: oklch(1 0 0);
--sidebar-ring: oklch(0.4915 0.2776 263.8724);
--radius: 0.25rem;
--shadow-2xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-xs: 1px 1px 6px 0px hsl(0 0% 0% / 0.05);
--shadow-sm: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow-md: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 2px 4px -1px hsl(0 0% 0% / 0.1);
--shadow-lg: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 4px 6px -1px hsl(0 0% 0% / 0.1);
--shadow-xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.1), 1px 8px 10px -1px hsl(0 0% 0% / 0.1);
--shadow-2xl: 1px 1px 6px 0px hsl(0 0% 0% / 0.25);
}
}
@layer base {

View File

@ -861,7 +861,7 @@ importers:
specifier: ^19.1.0
version: 19.2.0(react@19.2.0)
tailwindcss:
specifier: ^4.1.10
specifier: ^4.1.5
version: 4.1.16
tsup:
specifier: ^8.4.0
@ -981,6 +981,9 @@ importers:
'@radix-ui/react-tooltip':
specifier: ^1.2.8
version: 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tailwindcss/cli':
specifier: ^4.1.5
version: 4.1.16
add:
specifier: ^2.0.6
version: 2.0.6
@ -1032,9 +1035,6 @@ importers:
tailwind-merge:
specifier: ^3.2.0
version: 3.3.1
tailwindcss:
specifier: ^4.1.10
version: 4.1.16
tw-animate-css:
specifier: ^1.2.9
version: 1.4.0
@ -1051,9 +1051,6 @@ importers:
'@repo/typescript-config':
specifier: workspace:*
version: link:../typescript-config
'@tailwindcss/cli':
specifier: ^4.1.5
version: 4.1.16
'@tailwindcss/postcss':
specifier: ^4.1.5
version: 4.1.16
@ -1078,6 +1075,9 @@ importers:
react-dom:
specifier: ^19.1.0
version: 19.2.0(react@19.2.0)
tailwindcss:
specifier: ^4.1.5
version: 4.1.16
typescript:
specifier: ^5.6.0
version: 5.9.3