From 1e09a32022de3ae44774b5692a378221d26ff9d4 Mon Sep 17 00:00:00 2001 From: andres Date: Sun, 14 Jul 2024 13:01:40 +0200 Subject: [PATCH] remove primere --- frontend/bun.lockb | Bin 138990 -> 143586 bytes frontend/package.json | 19 +- .../db-table-view/data-table-prime.tsx | 210 ---------- frontend/src/main.tsx | 28 +- .../db/$dbName/tables/$tableName/data.tsx | 5 +- frontend/src/styles/datatable.tsx | 379 ------------------ frontend/src/styles/multiselect.ts | 165 -------- frontend/tailwind.config.js | 1 - 8 files changed, 13 insertions(+), 794 deletions(-) delete mode 100644 frontend/src/components/db-table-view/data-table-prime.tsx delete mode 100644 frontend/src/styles/datatable.tsx delete mode 100644 frontend/src/styles/multiselect.ts diff --git a/frontend/bun.lockb b/frontend/bun.lockb index 1e717ae147a1bc3f1f44f9cf52b6e6d9e72588f5..a7b9bef0ff10f4e677db5382255eddee7e39b87c 100755 GIT binary patch delta 21769 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 ( -
- {columnName} - [{udt_name.toUpperCase()}] -
-); - -const columnTemplate = - ({ - columnName, - formatDates, - showImagesPreview, - udt_name, - data_type, - }: { - columnName: string; - formatDates: boolean; - showImagesPreview: boolean; - udt_name: string; - data_type: string; - }) => - (item: Record) => { - const value = item[columnName] as any; - - let finalValue = value; - if ( - formatDates && - ["timestamp", "datetime"].includes(udt_name.toLowerCase()) - ) { - finalValue = new Date(value as string).toLocaleString(); - } - if (showImagesPreview && typeof value === "string" && isUrl(value)) { - const isImage = isImageUrl(value); - return ( - -
- {value} - {isImage && ( - {"preview"} - )} -
-
- ); - } - return ( -
- {finalValue} -
- ); - }; - -export const DataTablePrime = ({ - tableName, - dbName, - offset, - pageSize, - onPageSizeChange, - onPageIndexChange, -}: { - tableName: string; - offset: number; - dbName: string; - pageSize: number; - onPageIndexChange: (pageIndex: number) => void; - onPageSizeChange: (pageSize: number) => void; -}) => { - const formatDates = useSettingsStore.use.formatDates(); - const showImagesPreview = useSettingsStore.use.showImagesPreview(); - const paginationOptions = useSettingsStore.use.paginationOptions(); - const [sorting, setSorting] = useState< - | { - sortField?: string; - sortOrder?: SortOrder; - } - | undefined - >(undefined); - const { data: columns } = useTableColumnsQuery({ dbName, tableName }); - const [visibleColumns, setVisibleColumns] = useState(columns); - - useEffect(() => { - setVisibleColumns(columns); - }, [columns]); - - const onColumnToggle = (event: MultiSelectChangeEvent) => { - const selectedColumns = event.value; - console.log(selectedColumns); - const orderedSelectedColumns = columns?.filter((col) => - selectedColumns.some((sCol: any) => sCol.column_name === col.column_name), - ); - - setVisibleColumns(orderedSelectedColumns); - }; - - const header = ( - - ); - - const { data, isFetching } = useTableDataQuery({ - tableName, - dbName, - perPage: pageSize, - page: Math.floor(offset / pageSize), - sortDesc: sorting?.sortOrder === -1, - sortField: sorting?.sortField, - }); - - return ( -
-
-

- {tableName} -

-

- Rows: {data?.count} -

-
-
- { - if (e.rows !== pageSize) { - onPageSizeChange(e.rows); - } else if (e.first !== offset) { - onPageIndexChange(e.first); - } - }} - onSort={setSorting} - sortField={sorting?.sortField} - sortOrder={sorting?.sortOrder} - paginator - totalRecords={data?.count} - rowsPerPageOptions={paginationOptions} - stripedRows - columnResizeMode="expand" - resizableColumns - showGridlines - size="small" - value={data?.data} - tableStyle={{ minWidth: "100%" }} - scrollable - scrollHeight="flex" - loading={isFetching} - removableSort - stateStorage="local" - stateKey={`dt-state-${dbName}-${tableName}`} - > - {visibleColumns?.map((col) => ( - - ))} - -
-
- ); -}; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index ddc81f6..0df4cb6 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,10 +1,6 @@ import { RouterProvider, createRouter } from "@tanstack/react-router"; import { StrictMode } from "react"; import ReactDOM from "react-dom/client"; - -import { PrimeReactProvider } from "primereact/api"; -import Tailwind from "primereact/passthrough/tailwind"; -import { twMerge } from "tailwind-merge"; import "@fontsource/inter/300.css"; import "@fontsource/inter/400.css"; import "@fontsource/inter/500.css"; @@ -13,8 +9,6 @@ import "@fontsource/inter/700.css"; import "@fontsource/inter/800.css"; import "./index.css"; import { Toaster } from "@/components/ui"; -import { datatable } from "@/styles/datatable"; -import { multiselect } from "@/styles/multiselect"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; // Import the generated route tree @@ -37,12 +31,6 @@ const queryClient = new QueryClient({ }, }); -const PrimeStyles = { - ...Tailwind, - datatable, - multiselect, -}; - // Render the app const rootElement = document.getElementById("root"); if (rootElement && !rootElement.innerHTML) { @@ -54,20 +42,8 @@ if (rootElement && !rootElement.innerHTML) { initialIsOpen={false} buttonPosition={"bottom-left"} /> - - - - + + , ); diff --git a/frontend/src/routes/db/$dbName/tables/$tableName/data.tsx b/frontend/src/routes/db/$dbName/tables/$tableName/data.tsx index e3a72d8..a46f1e7 100644 --- a/frontend/src/routes/db/$dbName/tables/$tableName/data.tsx +++ b/frontend/src/routes/db/$dbName/tables/$tableName/data.tsx @@ -1,5 +1,4 @@ import { DataTable } from "@/components/db-table-view/data-table"; -import { DataTablePrime } from "@/components/db-table-view/data-table-prime"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { z } from "zod"; @@ -32,12 +31,12 @@ function TableView() { return (
- diff --git a/frontend/src/styles/datatable.tsx b/frontend/src/styles/datatable.tsx deleted file mode 100644 index 397ecaf..0000000 --- a/frontend/src/styles/datatable.tsx +++ /dev/null @@ -1,379 +0,0 @@ -import { cn } from "@/lib/utils"; -import type { DataTablePassThroughOptions } from "primereact/datatable"; - -const TRANSITIONS = { - overlay: { - timeout: 150, - classNames: { - enter: "opacity-0 scale-75", - enterActive: - "opacity-100 !scale-100 transition-transform transition-opacity duration-150 ease-in", - exit: "opacity-100", - exitActive: "!opacity-0 transition-opacity duration-150 ease-linear", - }, - }, -}; - -export const datatable: DataTablePassThroughOptions = { - root: ({ props }) => ({ - className: cn("relative", { - "flex flex-col h-full": props.scrollable && props.scrollHeight === "flex", - }), - }), - loadingoverlay: { - className: cn( - "fixed w-full h-full t-0 l-0 bg-gray-100/40", - "transition duration-200", - "absolute flex items-center justify-center z-10", - "dark:bg-gray-950/40", // Dark Mode - ), - }, - loadingicon: "w-8 h-8", - wrapper: ({ props }) => ({ - className: cn({ - relative: props.scrollable, - "flex flex-col grow h-full": - props.scrollable && props.scrollHeight === "flex", - }), - }), - header: ({ props }) => ({ - className: cn( - "font-bold p-4", - "dark:border-blue-900/40 dark:text-white/80 dark:bg-gray-900", // Dark Mode - props.showGridlines - ? "border-x border-t border-b-0" - : "border-y border-x-0", - ), - }), - table: "w-full border-spacing-0 text-sm", - thead: ({ context }) => ({ - className: cn({ - "top-0 z-[1]": context.scrollable, - }), - }), - tbody: ({ props, context }) => ({ - className: cn({ - "sticky z-[1]": props.frozenRow && context.scrollable, - }), - }), - tfoot: ({ context }) => ({ - className: cn({ - "bg-slate-50 bottom-0 z-[1]": context.scrollable, - }), - }), - footer: { - className: cn( - "bg-slate-50 text-slate-700 border-t-0 border-b border-x-0 border-gray-300 font-bold p-4", - "dark:border-blue-900/40 dark:text-white/80 dark:bg-gray-900", // Dark Mode - ), - }, - column: { - headercell: ({ context, props }) => ({ - className: cn( - "text-left border-0 border-b border-solid font-bold", - "transition duration-200", - context?.size === "small" - ? "p-2" - : context?.size === "large" - ? "p-5" - : "p-4", // Size - context.sorted - ? "bg-blue-50 text-blue-700" - : "bg-muted/50 text-slate-700", // Sort - context.sorted - ? "dark:text-white/80 dark:bg-blue-300" - : "dark:text-white/80 dark:bg-gray-900", // Dark Mode - { - "sticky z-[1]": props.frozen || props.frozen === "", // Frozen Columns - "border-x border-y": context?.showGridlines, - "overflow-hidden space-nowrap border-y relative bg-clip-padding": - context.resizable, // Resizable - }, - ), - }), - headercontent: "flex items-center font-medium text-muted-foreground", - bodycell: ({ props, context }) => ({ - className: cn( - "text-left border-0 border-b border-solid border-gray-300", - context?.size === "small" - ? "p-2" - : context?.size === "large" - ? "p-5" - : "p-4", // Size - "dark:text-white/80 dark:border-blue-900/40", // Dark Mode - { - "sticky bg-inherit": props && (props.frozen || props.frozen === ""), // Frozen Columns - "border-x border-y": context.showGridlines, - }, - ), - }), - footercell: ({ context }) => ({ - className: cn( - "text-left border-0 border-b border-solid border-gray-300 font-bold", - "bg-slate-50 text-slate-700", - "transition duration-200", - context?.size === "small" - ? "p-2" - : context?.size === "large" - ? "p-5" - : "p-4", // Size - "dark:text-white/80 dark:bg-gray-900 dark:border-blue-900/40", // Dark Mode - { - "border-x border-y": context.showGridlines, - }, - ), - }), - sorticon: ({ context }) => ({ - className: cn( - "ml-2", - context.sorted - ? "text-blue-700 dark:text-white/80" - : "text-slate-700 dark:text-white/70", - ), - }), - sortbadge: { - className: cn( - "flex items-center justify-center align-middle", - "rounded-[50%] w-[1.143rem] leading-[1.143rem] ml-2", - "text-blue-700 bg-blue-50", - "dark:text-white/80 dark:bg-blue-400", // Dark Mode - ), - }, - columnfilter: "inline-flex items-center ml-auto", - filteroverlay: { - className: cn( - "bg-white text-gray-600 border-0 rounded-md min-w-[12.5rem]", - "dark:bg-gray-900 dark:border-blue-900/40 dark:text-white/80", //Dark Mode - ), - }, - filtermatchmodedropdown: { - root: "min-[0px]:flex mb-2", - }, - filterrowitems: "m-0 p-0 py-3 list-none ", - filterrowitem: ({ context }) => ({ - className: cn( - "m-0 py-3 px-5 bg-transparent", - "transition duration-200", - context?.highlighted - ? "text-blue-700 bg-blue-100 dark:text-white/80 dark:bg-blue-300" - : "text-gray-600 bg-transparent dark:text-white/80 dark:bg-transparent", - ), - }), - filteroperator: { - className: cn( - "px-5 py-3 border-b border-solid border-gray-300 text-slate-700 bg-slate-50 rounded-t-md", - "dark:border-blue-900/40 dark:text-white/80 dark:bg-gray-900", // Dark Mode - ), - }, - filteroperatordropdown: { - root: "min-[0px]:flex", - }, - filterconstraint: - "p-5 border-b border-solid border-gray-300 dark:border-blue-900/40", - filteraddrule: "py-3 px-5", - filteraddrulebutton: { - root: "justify-center w-full min-[0px]:text-sm", - label: "flex-auto grow-0", - icon: "mr-2", - }, - filterremovebutton: { - root: "ml-2", - label: "grow-0", - }, - filterbuttonbar: "flex items-center justify-between p-5", - filterclearbutton: { - root: "w-auto min-[0px]:text-sm border-blue-500 text-blue-500 px-4 py-3", - }, - filterapplybutton: { - root: "w-auto min-[0px]:text-sm px-4 py-3", - }, - filtermenubutton: ({ context }) => ({ - className: cn( - "inline-flex justify-center items-center cursor-pointer no-underline overflow-hidden relative ml-2", - "w-8 h-8 rounded-[50%]", - "transition duration-200", - "hover:text-slate-700 hover:bg-gray-300/20", // Hover - "focus:outline-0 focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)]", // Focus - "dark:text-white/70 dark:hover:text-white/80 dark:bg-gray-900", // Dark Mode - { - "bg-blue-50 text-blue-700": context.active, - }, - ), - }), - headerfilterclearbutton: ({ context }) => ({ - className: cn( - "inline-flex justify-center items-center cursor-pointer no-underline overflow-hidden relative", - "text-left bg-transparent m-0 p-0 border-none select-none ml-2", - { - invisible: !context.hidden, - }, - ), - }), - columnresizer: - "block absolute top-0 right-0 m-0 w-2 h-full p-0 cursor-col-resize border border-transparent", - rowreordericon: "cursor-move", - roweditorinitbutton: { - className: cn( - "inline-flex items-center justify-center overflow-hidden relative", - "text-left cursor-pointer select-none", - "w-8 h-8 border-0 rounded-[50%]", - "transition duration-200", - "text-slate-700 border-transparent", - "focus:outline-0 focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)]", //Focus - "hover:text-slate-700 hover:bg-gray-300/20", //Hover - "dark:text-white/70", // Dark Mode - ), - }, - roweditorsavebutton: { - className: cn( - "inline-flex items-center justify-center overflow-hidden relative", - "text-left cursor-pointer select-none", - "w-8 h-8 border-0 rounded-[50%]", - "transition duration-200", - "text-slate-700 border-transparent", - "focus:outline-0 focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)]", //Focus - "hover:text-slate-700 hover:bg-gray-300/20", //Hover - "dark:text-white/70", // Dark Mode - ), - }, - roweditorcancelbutton: { - className: cn( - "inline-flex items-center justify-center overflow-hidden relative", - "text-left cursor-pointer select-none", - "w-8 h-8 border-0 rounded-[50%]", - "transition duration-200", - "text-slate-700 border-transparent", - "focus:outline-0 focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)]", //Focus - "hover:text-slate-700 hover:bg-gray-300/20", //Hover - "dark:text-white/70", // Dark Mode - ), - }, - radioButton: { - className: cn( - "relative inline-flex cursor-pointer select-none align-bottom", - "w-6 h-6", - ), - }, - radioButtonInput: { - className: cn( - "w-full h-full top-0 left-0 absolute appearance-none select-none", - "p-0 m-0 opacity-0 z-[1] rounded-[50%] outline-none", - "cursor-pointer peer", - ), - }, - radioButtonBox: ({ context }) => ({ - className: cn( - "flex items-center justify-center", - "h-6 w-6 rounded-full border-2 text-gray-700 transition duration-200 ease-in-out", - context.checked - ? "border-blue-500 bg-blue-500 dark:border-blue-400 dark:bg-blue-400 peer-hover:bg-blue-700 peer-hover:border-blue-700" - : "border-gray-300 bg-white dark:border-blue-900/40 dark:bg-gray-900 peer-hover:border-blue-500", - { - "hover:border-blue-500 focus:shadow-input-focus focus:outline-none focus:outline-offset-0 dark:hover:border-blue-400 dark:focus:shadow-[inset_0_0_0_0.2rem_rgba(147,197,253,0.5)]": - !context.disabled, - "cursor-default opacity-60": context.disabled, - }, - ), - }), - radioButtonIcon: ({ context }) => ({ - className: cn( - "transform rounded-full", - "block h-3 w-3 bg-white transition duration-200 dark:bg-gray-900", - { - "backface-hidden scale-10 invisible": context.checked === false, - "visible scale-100 transform": context.checked === true, - }, - ), - }), - headercheckboxwrapper: { - className: cn( - "cursor-pointer inline-flex relative select-none align-bottom", - "w-6 h-6", - ), - }, - headercheckbox: ({ context }) => ({ - className: cn( - "flex items-center justify-center", - "border-2 w-6 h-6 text-gray-600 rounded-lg transition-colors duration-200", - context.checked - ? "border-blue-500 bg-blue-500 dark:border-blue-400 dark:bg-blue-400" - : "border-gray-300 bg-white dark:border-blue-900/40 dark:bg-gray-900", - { - "hover:border-blue-500 dark:hover:border-blue-400 focus:outline-none focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] dark:focus:shadow-[inset_0_0_0_0.2rem_rgba(147,197,253,0.5)]": - !context.disabled, - "cursor-default opacity-60": context.disabled, - }, - ), - }), - headercheckboxicon: - "w-4 h-4 transition-all duration-200 text-white text-base dark:text-gray-900", - checkboxwrapper: { - className: cn( - "cursor-pointer inline-flex relative select-none align-bottom", - "w-6 h-6", - ), - }, - checkbox: ({ context }) => ({ - className: cn( - "flex items-center justify-center", - "border-2 w-6 h-6 text-gray-600 rounded-lg transition-colors duration-200", - context.checked - ? "border-blue-500 bg-blue-500 dark:border-blue-400 dark:bg-blue-400" - : "border-gray-300 bg-white dark:border-blue-900/40 dark:bg-gray-900", - { - "hover:border-blue-500 dark:hover:border-blue-400 focus:outline-none focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] dark:focus:shadow-[inset_0_0_0_0.2rem_rgba(147,197,253,0.5)]": - !context.disabled, - "cursor-default opacity-60": context.disabled, - }, - ), - }), - checkboxicon: - "w-4 h-4 transition-all duration-200 text-white text-base dark:text-gray-900", - transition: TRANSITIONS.overlay, - }, - bodyrow: ({ context }) => ({ - className: cn( - context.selected - ? "bg-blue-50 text-blue-700 dark:bg-blue-300" - : "bg-white text-foreground dark:bg-gray-900", - context.stripedRows && - (context.index % 2 === 0 - ? "bg-white text-foreground dark:bg-gray-900" - : "bg-muted/50 text-foreground dark:bg-gray-950"), - "transition duration-200", - "focus:outline focus:outline-[0.15rem] focus:outline-blue-200 focus:outline-offset-[-0.15rem]", // Focus - "dark:text-white/80 dark:focus:outline dark:focus:outline-[0.15rem] dark:focus:outline-blue-300 dark:focus:outline-offset-[-0.15rem]", // Dark Mode - { - "cursor-pointer": context.selectable, - "hover:bg-gray-300/20 hover:text-gray-600": - context.selectable && !context.selected, // Hover - }, - ), - }), - rowexpansion: "bg-white text-gray-600 dark:bg-gray-900 dark:text-white/80", - rowgroupheader: { - className: cn( - "sticky z-[1]", - "bg-white text-gray-600", - "transition duration-200", - ), - }, - rowgroupfooter: { - className: cn( - "sticky z-[1]", - "bg-white text-gray-600", - "transition duration-200", - ), - }, - rowgrouptoggler: { - className: cn( - "text-left m-0 p-0 cursor-pointer select-none", - "inline-flex items-center justify-center overflow-hidden relative", - "w-8 h-8 text-gray-500 border-0 bg-transparent rounded-[50%]", - "transition duration-200", - "dark:text-white/70", // Dark Mode - ), - }, - rowgrouptogglericon: "inline-block w-4 h-4", - resizehelper: "absolute hidden w-px z-10 bg-blue-500 dark:bg-blue-300", -}; diff --git a/frontend/src/styles/multiselect.ts b/frontend/src/styles/multiselect.ts deleted file mode 100644 index f9c38c8..0000000 --- a/frontend/src/styles/multiselect.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { cn } from "@/lib/utils"; -import type { MultiSelectPassThroughOptions } from "primereact/multiselect"; - -const TRANSITIONS = { - overlay: { - timeout: 150, - classNames: { - enter: "opacity-0 scale-75", - enterActive: - "opacity-100 !scale-100 transition-transform transition-opacity duration-150 ease-in", - exit: "opacity-100", - exitActive: "!opacity-0 transition-opacity duration-150 ease-linear", - }, - }, -}; - -export const multiselect: MultiSelectPassThroughOptions = { - root: ({ props }) => ({ - className: cn( - "inline-flex cursor-pointer select-none", - "bg-white dark:bg-gray-900 border border-gray-400 dark:border-blue-900/40 transition-colors duration-200 ease-in-out rounded-md", - "w-full md:w-80", - { - "opacity-60 select-none pointer-events-none cursor-default": - props.disabled, - }, - ), - }), - labelContainer: "overflow-hidden flex flex-auto cursor-pointer", - label: ({ props }) => ({ - className: cn( - "block overflow-hidden whitespace-nowrap cursor-pointer overflow-ellipsis", - "text-gray-800 dark:text-white/80", - "p-3 transition duration-200", - { - "!p-3": - props.display !== "chip" && - (props.value == null || props.value === undefined), - "!py-1.5 px-3": props.display === "chip" && props.value !== null, - }, - ), - }), - token: { - className: cn( - "py-1 px-2 mr-2 bg-gray-300 dark:bg-gray-700 text-gray-700 dark:text-white/80 rounded-full", - "cursor-default inline-flex items-center", - ), - }, - removeTokenIcon: "ml-2", - trigger: { - className: cn( - "flex items-center justify-center shrink-0", - "bg-transparent text-gray-600 dark:text-white/70 w-12 rounded-tr-lg rounded-br-lg", - ), - }, - panel: { - className: cn( - "bg-white dark:bg-gray-900 text-gray-700 dark:text-white/80 border-0 rounded-md shadow-lg", - ), - }, - header: { - className: cn( - "p-3 border-b border-gray-300 dark:border-blue-900/40 text-gray-700 dark:text-white/80 bg-gray-100 dark:bg-gray-800 rounded-t-lg", - "flex items-center justify-between", - ), - }, - headerCheckboxContainer: { - className: cn( - "inline-flex cursor-pointer select-none align-bottom relative", - "mr-2", - "w-6 h-6", - ), - }, - headerCheckbox: { - root: ({ props }) => ({ - className: cn( - "asdfasdf flex items-center justify-center [&>div]:shrink-0", - "border-2 w-6 h-6 text-gray-600 dark:text-white/70 rounded-lg transition-colors duration-200", - "hover:border-blue-500 focus:outline-none focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] dark:focus:shadow-[0_0_0_0.2rem_rgba(147,197,253,0.5)]", - { - "border-gray-300 dark:border-blue-900/40 bg-white dark:bg-gray-900": - !props?.checked, - "border-blue-500 bg-blue-500": props?.checked, - }, - ), - }), - }, - headerCheckboxIcon: - "w-4 h-4 transition-all duration-200 text-white text-base", - closeButton: { - className: cn( - "flex items-center justify-center overflow-hidden relative", - "w-8 h-8 text-gray-500 dark:text-white/70 border-0 bg-transparent rounded-full transition duration-200 ease-in-out mr-2 last:mr-0", - "hover:text-gray-700 dark:hover:text-white/80 hover:border-transparent hover:bg-gray-200 dark:hover:bg-gray-800/80 ", - "focus:outline-none focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] dark:focus:shadow-[0_0_0_0.2rem_rgba(147,197,253,0.5)]", - ), - }, - closeIcon: "w-4 h-4 inline-block", - wrapper: { - className: cn( - "max-h-[200px] overflow-auto", - "bg-white text-gray-700 border-0 rounded-md shadow-lg", - "dark:bg-gray-900 dark:text-white/80", - ), - }, - list: "py-3 list-none m-0", - item: ({ context }) => ({ - className: cn( - "cursor-pointer font-normal overflow-hidden relative whitespace-nowrap", - "m-0 p-3 border-0 transition-shadow duration-200 rounded-none", - { - "text-gray-700 hover:text-gray-700 hover:bg-gray-200 dark:text-white/80 dark:hover:bg-gray-800": - !context?.focused && !context?.selected, - "bg-gray-300 text-gray-700 dark:text-white/80 dark:bg-gray-800/90 hover:text-gray-700 hover:bg-gray-200 dark:text-white/80 dark:hover:bg-gray-800": - context?.focused && !context?.selected, - "bg-blue-100 text-blue-700 dark:bg-blue-400 dark:text-white/80": - context?.focused && context?.selected, - "bg-blue-50 text-blue-700 dark:bg-blue-300 dark:text-white/80": - !context?.focused && context?.selected, - }, - ), - }), - checkboxContainer: { - className: cn( - "inline-flex cursor-pointer select-none align-bottom relative", - "mr-2", - "w-6 h-6", - ), - }, - checkbox: ({ context }) => ({ - className: cn( - "flex items-center justify-center shrink-0", - "border-2 w-6 h-6 text-gray-600 dark:text-white/80 rounded-lg transition-colors duration-200", - "hover:border-blue-500 focus:outline-none focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] dark:focus:shadow-[0_0_0_0.2rem_rgba(147,197,253,0.5)]", - { - "border-gray-300 dark:border-blue-900/40 bg-white dark:bg-gray-900": - !context?.selected, - "border-blue-500 bg-blue-500": context?.selected, - }, - ), - }), - checkboxIcon: "w-4 h-4 transition-all duration-200 text-white text-base", - itemGroup: { - className: cn( - "m-0 p-3 text-gray-800 bg-white font-bold", - "dark:bg-gray-900 dark:text-white/80", - "cursor-auto", - ), - }, - filterContainer: "relative", - filterInput: { - root: { - className: cn( - "pr-7 -mr-7", - "w-full", - "font-sans text-base text-gray-700 bg-white py-3 px-3 pr-6 border border-gray-300 transition duration-200 rounded-lg appearance-none", - "dark:bg-gray-900 dark:border-blue-900/40 dark:hover:border-blue-300 dark:text-white/80", - "hover:border-blue-500 focus:outline-none focus:outline-offset-0 focus:shadow-[0_0_0_0.2rem_rgba(191,219,254,1)] dark:focus:shadow-[0_0_0_0.2rem_rgba(147,197,253,0.5)]", - ), - }, - }, - filterIcon: "-mt-2 absolute top-1/2 right-2", - clearIcon: "text-gray-500 right-12 -mt-2 absolute top-1/2", - transition: TRANSITIONS.overlay, -}; diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index 59afa9f..a6dbb40 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -7,7 +7,6 @@ module.exports = { "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}", - "./node_modules/primereact/**/*.{js,ts,jsx,tsx}", ], prefix: "", theme: {