+
+
+
+
+
+
사이트 목록
+
-
-
-
사이트 목록
-
-
-
-
-
+
+
-
+
);
}
diff --git a/apps/cs/src/shared/config/api.ts b/apps/cs/src/shared/config/api.ts
index ff519b649..4430285d8 100644
--- a/apps/cs/src/shared/config/api.ts
+++ b/apps/cs/src/shared/config/api.ts
@@ -3,6 +3,9 @@ import { PROXY_HOST } from "./env";
export const BASE_URL = `${PROXY_HOST}/server`;
export const ENDPOINT = {
+ ATTACH_SERVICE: {
+ TUS_UPLOAD: "/attach-service/api/v1/tus/upload",
+ },
USER_SERVICE: {
LOGIN: "/user-service/login",
USERS: "/user-service/api/v1/users",
@@ -14,8 +17,10 @@ export const ENDPOINT = {
IPS: "/cms-service/api/v1/site-ips",
DOMAINS: "/cms-service/api/v1/site-dmns",
MENUS: "/cms-service/api/v1/menus",
+ MENU_ROLES: "/cms-service/api/v1/menu-roles",
CONTENTS: "/cms-service/api/v1/contents",
USER_OGNZ: "/cms-service/api/v1/user-ognz",
+ IMAGES: "/cms-service/api/v1/images",
},
BOARD_SERVICE: {
BBS: "/board-service/api/v1/bbs",
diff --git a/apps/cs/src/shared/lib/index.ts b/apps/cs/src/shared/lib/index.ts
index 259525de6..bfbe51702 100644
--- a/apps/cs/src/shared/lib/index.ts
+++ b/apps/cs/src/shared/lib/index.ts
@@ -1,2 +1,3 @@
export { getCookie, setCookie, removeCookie } from "./cookie";
+export { useMenuStore } from "./use-menu-store";
export { useUserStore } from "./use-user-store";
diff --git a/apps/cs/src/shared/lib/use-menu-store.ts b/apps/cs/src/shared/lib/use-menu-store.ts
new file mode 100644
index 000000000..66e41c76c
--- /dev/null
+++ b/apps/cs/src/shared/lib/use-menu-store.ts
@@ -0,0 +1,14 @@
+import { useStore } from "zustand";
+import { useContext } from "react";
+import type { MenuStore } from "../store/menu-store";
+import { StoreContext } from "../providers/store-provider";
+
+export const useMenuStore =
(selector: (store: MenuStore) => T): T => {
+ const storeContext = useContext(StoreContext);
+
+ if (!storeContext) {
+ throw new Error("useMenuStore must be used within StoreProvider");
+ }
+
+ return useStore(storeContext.menuStore, selector);
+};
diff --git a/apps/cs/src/shared/providers/store-provider.tsx b/apps/cs/src/shared/providers/store-provider.tsx
index 4814705ab..82783bdac 100644
--- a/apps/cs/src/shared/providers/store-provider.tsx
+++ b/apps/cs/src/shared/providers/store-provider.tsx
@@ -1,11 +1,11 @@
"use client";
import { createContext, useRef } from "react";
-import { createAlertStore } from "../store/alert-store";
-import { createUserStore } from "../store/user-store";
+import { createAlertStore, createMenuStore, createUserStore } from "../store";
type StoreContextType = {
alertStore: ReturnType;
+ menuStore: ReturnType;
userStore: ReturnType;
};
@@ -18,6 +18,7 @@ export const StoreProvider = ({ children }: { children: React.ReactNode }) => {
if (storeRef.current === null) {
storeRef.current = {
alertStore: createAlertStore(),
+ menuStore: createMenuStore(),
userStore: createUserStore(),
};
}
diff --git a/apps/cs/src/shared/store/index.ts b/apps/cs/src/shared/store/index.ts
index 4dae19ced..73c608f05 100644
--- a/apps/cs/src/shared/store/index.ts
+++ b/apps/cs/src/shared/store/index.ts
@@ -1 +1,3 @@
+export { createAlertStore } from "./alert-store";
+export { createMenuStore } from "./menu-store";
export { createUserStore, type IUserInfo } from "./user-store";
diff --git a/apps/cs/src/shared/store/menu-store.ts b/apps/cs/src/shared/store/menu-store.ts
new file mode 100644
index 000000000..f0c6340c9
--- /dev/null
+++ b/apps/cs/src/shared/store/menu-store.ts
@@ -0,0 +1,23 @@
+import { createStore } from "zustand/vanilla";
+import type { MenuItem } from "@common/components/api";
+
+export type MenuState = {
+ currentMenuInfo: MenuItem | null;
+};
+
+export type MenuActions = {
+ setCurrentMenuInfo: (menu: MenuItem) => void;
+};
+
+export type MenuStore = MenuState & MenuActions;
+
+export const defaultInitState: MenuState = {
+ currentMenuInfo: null,
+};
+
+export const createMenuStore = (initState: MenuState = defaultInitState) => {
+ return createStore()((set) => ({
+ ...initState,
+ setCurrentMenuInfo: (menu: MenuItem) => set({ currentMenuInfo: menu }),
+ }));
+};
diff --git a/apps/cs/src/shared/ui/page-layout.tsx b/apps/cs/src/shared/ui/page-layout.tsx
index e4f11141b..6813173a1 100644
--- a/apps/cs/src/shared/ui/page-layout.tsx
+++ b/apps/cs/src/shared/ui/page-layout.tsx
@@ -1,15 +1,19 @@
-function PageLayout({
- children,
- pageTitle,
-}: {
- children: React.ReactNode;
- pageTitle: string;
-}) {
+import { PageTitle } from "@common/components";
+import { useMenuStore } from "../lib/use-menu-store";
+
+function PageLayout({ children }: { children: React.ReactNode }) {
+ const { currentMenuInfo } = useMenuStore((state) => state);
+
+ const menuPaths = currentMenuInfo?.menuPath
+ ?.split(">")
+ .map((path) => path.trim());
+
return (
-
- {pageTitle}
-
+
{children}
);
diff --git a/packages/common/components/.storybook/main.ts b/packages/common/components/.storybook/main.ts
index 87a748dfd..4b70a4aed 100644
--- a/packages/common/components/.storybook/main.ts
+++ b/packages/common/components/.storybook/main.ts
@@ -16,15 +16,38 @@ const config: StorybookConfig = {
},
viteFinal: async (config) => {
config.define = {
- "process.env.BASE_ASSETS_PATH": JSON.stringify(
- process.env.BASE_ASSETS_PATH,
- ),
+ "process.env": {
+ BASE_ASSETS_PATH: JSON.stringify(process.env.BASE_ASSETS_PATH),
+ PORT: JSON.stringify(process.env.PORT || "3000"),
+ PROXY_HOST: JSON.stringify(
+ process.env.PROXY_HOST || "http://localhost:3000",
+ ),
+ SERVER_API_URL: JSON.stringify(process.env.SERVER_API_URL),
+ SITE_ID: JSON.stringify(process.env.SITE_ID || "CS"),
+ CLAIM_NAME: JSON.stringify(process.env.CLAIM_NAME || "Authorization"),
+ ACCESS_TOKEN: JSON.stringify(
+ process.env.ACCESS_TOKEN || "access-token",
+ ),
+ REFRESH_TOKEN: JSON.stringify(
+ process.env.REFRESH_TOKEN || "refresh-token",
+ ),
+ AUTH_USER_ID: JSON.stringify(process.env.AUTH_USER_ID || "token-id"),
+ },
};
config.plugins?.push(
tsconfigPaths({
projects: [path.resolve(path.dirname(__dirname), "tsconfig.json")],
}),
);
+ config.server = {
+ proxy: {
+ "/server": {
+ target: process.env.SERVER_API_URL,
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/server/, ""),
+ },
+ },
+ };
return config;
},
diff --git a/packages/common/components/package.json b/packages/common/components/package.json
index ca2986403..d9ba2a55e 100644
--- a/packages/common/components/package.json
+++ b/packages/common/components/package.json
@@ -35,6 +35,7 @@
"@radix-ui/react-dropdown-menu": "^2.1.6",
"@radix-ui/react-label": "^2.1.2",
"@radix-ui/react-popover": "^1.1.6",
+ "@radix-ui/react-progress": "^1.1.2",
"@radix-ui/react-radio-group": "^1.2.2",
"@radix-ui/react-select": "^2.1.6",
"@radix-ui/react-separator": "^1.1.2",
diff --git a/packages/common/components/src/api/menu.ts b/packages/common/components/src/api/menu.ts
index e9899c111..4855718a2 100644
--- a/packages/common/components/src/api/menu.ts
+++ b/packages/common/components/src/api/menu.ts
@@ -13,9 +13,11 @@ export interface MenuItem {
urlPath: string;
menuLnkgTypeCd: string;
menuLnkgSn: number;
+ menuPath: string;
qrcd: string;
useYn: string;
otptYn: string;
+ newWndwYn: string;
requiredUrlPath: boolean;
}
diff --git a/packages/common/components/src/api/site.ts b/packages/common/components/src/api/site.ts
index 77ed968e4..2ca35bd26 100644
--- a/packages/common/components/src/api/site.ts
+++ b/packages/common/components/src/api/site.ts
@@ -20,7 +20,7 @@ export interface SiteInfo {
mdfcnDt: string;
mdFr: string;
rgTrNm: string;
- mdFrNm: string;
+ mdfrNm: string;
}
export const getSiteInfo = async (siteId: string) => {
diff --git a/packages/common/components/src/config/env.ts b/packages/common/components/src/config/env.ts
index d75d108a3..dfe49efdb 100644
--- a/packages/common/components/src/config/env.ts
+++ b/packages/common/components/src/config/env.ts
@@ -1,12 +1,10 @@
-export const PORT = import.meta.env.VITE_PORT || "3000";
-export const PROXY_HOST =
- import.meta.env.VITE_PROXY_HOST || `http://localhost:${PORT}`;
+export const PORT = process.env.PORT || "3000";
+export const PROXY_HOST = process.env.PROXY_HOST || `http://localhost:${PORT}`;
-export const SERVER_API_URL = import.meta.env.VITE_SERVER_API_URL;
-export const SITE_ID = import.meta.env.VITE_SITE_ID || "CS";
+export const SERVER_API_URL = process.env.SERVER_API_URL;
+export const SITE_ID = process.env.SITE_ID || "CS";
-export const CLAIM_NAME = import.meta.env.VITE_CLAIM_NAME || "Authorization";
-export const ACCESS_TOKEN = import.meta.env.VITE_ACCESS_TOKEN || "access-token";
-export const REFRESH_TOKEN =
- import.meta.env.VITE_REFRESH_TOKEN || "refresh-token";
-export const AUTH_USER_ID = import.meta.env.VITE_AUTH_USER_ID || "token-id";
+export const CLAIM_NAME = process.env.CLAIM_NAME || "Authorization";
+export const ACCESS_TOKEN = process.env.ACCESS_TOKEN || "access-token";
+export const REFRESH_TOKEN = process.env.REFRESH_TOKEN || "refresh-token";
+export const AUTH_USER_ID = process.env.AUTH_USER_ID || "token-id";
diff --git a/packages/common/components/src/lib/index.ts b/packages/common/components/src/lib/index.ts
index 04f69ba83..e00099877 100644
--- a/packages/common/components/src/lib/index.ts
+++ b/packages/common/components/src/lib/index.ts
@@ -1,2 +1,3 @@
-export * from "./utils";
export * from "./cookie";
+export * from "./utils";
+export * from "./use-mobile";
diff --git a/packages/common/components/src/provider/query-provider.tsx b/packages/common/components/src/provider/query-provider.tsx
index 5781919f1..e06880255 100644
--- a/packages/common/components/src/provider/query-provider.tsx
+++ b/packages/common/components/src/provider/query-provider.tsx
@@ -2,13 +2,17 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
export function QueryProvider({
children,
- client,
+ queryClient,
}: {
children: React.ReactNode;
- client?: QueryClient;
+ queryClient?: QueryClient;
}) {
- const queryClient = client ?? new QueryClient();
- return (
- {children}
- );
+ if (!queryClient) {
+ const queryClient = new QueryClient();
+ return (
+ {children}
+ );
+ }
+
+ return <>{children}>;
}
diff --git a/packages/common/components/src/ui/data-table/index.tsx b/packages/common/components/src/ui/data-table/index.tsx
index 8dc30c701..7e3af5602 100644
--- a/packages/common/components/src/ui/data-table/index.tsx
+++ b/packages/common/components/src/ui/data-table/index.tsx
@@ -3,6 +3,7 @@ import {
type RowData,
type Table as TableType,
} from "@tanstack/react-table";
+import { cn } from "../../lib";
import { Table, TableCell, TableHead, TableHeader, TableRow } from "../table";
declare module "@tanstack/react-table" {
@@ -38,19 +39,24 @@ function THead({ table }: { table: TableType }) {
type TableProps = {
table: TableType;
+ variant?: "default" | "secondary" | "line";
onRowClick?: (row: T) => void;
};
-function DataTable({ table, onRowClick }: TableProps) {
+function DataTable({
+ table,
+ variant = "default",
+ onRowClick,
+}: TableProps) {
return (
-
+
{table.getRowModel().rows.map((row) => (
onRowClick?.(row.original)}
- className={onRowClick ? "cursor-pointer hover:bg-muted" : ""}
+ className={cn(onRowClick && "cursor-pointer hover:bg-accent")}
>
{row.getVisibleCells().map((cell) => {
const { meta } = cell.column.columnDef;
diff --git a/packages/common/components/src/ui/file-search/file-search.css b/packages/common/components/src/ui/file-search/file-search.css
deleted file mode 100644
index c8a1e3975..000000000
--- a/packages/common/components/src/ui/file-search/file-search.css
+++ /dev/null
@@ -1,13 +0,0 @@
-@tailwind components;
-
-@layer components {
- .file-search-container {
- @apply flex w-full max-w-sm items-center gap-2;
- }
- .file-search-preview {
- @apply h-12 w-full min-w-56 overflow-x-auto whitespace-nowrap rounded-md border border-input bg-background px-3 py-2 text-[1.2rem];
- }
- .file-search-label {
- @apply flex-shrink-0 cursor-pointer rounded-sm border border-input bg-muted px-4 py-2 text-[1.2rem] font-medium text-muted-foreground;
- }
-}
diff --git a/packages/common/components/src/ui/file-search/file-search.stories.tsx b/packages/common/components/src/ui/file-search/file-search.stories.tsx
deleted file mode 100644
index fdef8da99..000000000
--- a/packages/common/components/src/ui/file-search/file-search.stories.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import type { Meta, StoryObj } from "@storybook/react";
-import { FileSearch } from ".";
-
-const meta: Meta = {
- title: "UI/FileSearch",
- component: FileSearch,
- parameters: {
- docs: {
- description: {
- component: `
-- [Docs](https://ui.shadcn.com/docs/components/input#file)
-`,
- },
- },
- },
-};
-
-export default meta;
-type Story = StoryObj;
-
-export const Default: Story = {
- render: () => ,
-};
diff --git a/packages/common/components/src/ui/file-search/index.tsx b/packages/common/components/src/ui/file-search/index.tsx
deleted file mode 100644
index 9c9043b60..000000000
--- a/packages/common/components/src/ui/file-search/index.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import "./file-search.css";
-
-import { Input } from "../input";
-import { cn } from "../../lib/utils";
-import { combineFileName, validFileType } from "./utils";
-
-type FileSearchProps = React.InputHTMLAttributes & {
- id: string;
- files?: ReadonlyArray;
-};
-
-export function FileSearch({
- id,
- className,
- files,
- ...props
-}: FileSearchProps) {
- return (
-
-
-
- {files?.filter(validFileType).map(combineFileName).join(", ")}
-
-
-
- );
-}
diff --git a/packages/common/components/src/ui/file-uploader/file-uploader.css b/packages/common/components/src/ui/file-uploader/file-uploader.css
new file mode 100644
index 000000000..4dd70bc7f
--- /dev/null
+++ b/packages/common/components/src/ui/file-uploader/file-uploader.css
@@ -0,0 +1,13 @@
+@tailwind components;
+
+@layer components {
+ .file-uploader-container {
+ @apply flex h-[3.2rem] w-full max-w-sm items-center gap-2;
+ }
+ .file-uploader-preview {
+ @apply h-full w-full min-w-56 overflow-x-auto whitespace-nowrap rounded-md border border-input bg-background px-3 py-2 text-[1.2rem];
+ }
+ .file-uploader-label {
+ @apply inline-flex h-full flex-shrink-0 cursor-pointer items-center rounded-sm border border-input bg-muted px-4 py-2 text-[1.2rem] font-medium text-muted-foreground;
+ }
+}
diff --git a/packages/common/components/src/ui/file-uploader/file-uploader.stories.tsx b/packages/common/components/src/ui/file-uploader/file-uploader.stories.tsx
new file mode 100644
index 000000000..a849f2b14
--- /dev/null
+++ b/packages/common/components/src/ui/file-uploader/file-uploader.stories.tsx
@@ -0,0 +1,14 @@
+import type { Meta, StoryObj } from "@storybook/react";
+import { FileUploader } from ".";
+
+const meta: Meta = {
+ title: "UI/FileUploader",
+ component: FileUploader,
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const Default: Story = {
+ render: () => {}} />,
+};
diff --git a/packages/common/components/src/ui/file-uploader/index.tsx b/packages/common/components/src/ui/file-uploader/index.tsx
new file mode 100644
index 000000000..da3e04b67
--- /dev/null
+++ b/packages/common/components/src/ui/file-uploader/index.tsx
@@ -0,0 +1,42 @@
+import "./file-uploader.css";
+
+import { cn } from "../../lib/utils";
+import { Input } from "../input";
+import { Label } from "../label";
+import { combineFileName, validFileType } from "./utils";
+
+type FileUploaderProps = React.InputHTMLAttributes & {
+ id: string;
+ files?: ReadonlyArray;
+ customPreview?: React.ReactNode;
+ onUpload: (e: React.ChangeEvent) => void;
+};
+
+export function FileUploader({
+ id,
+ files,
+ customPreview,
+ className,
+ onUpload,
+ ...props
+}: FileUploaderProps) {
+ return (
+
+
+ {customPreview || (
+
+ {files?.filter(validFileType).map(combineFileName).join(", ")}
+
+ )}
+
+
+ );
+}
diff --git a/packages/common/components/src/ui/file-search/utils.ts b/packages/common/components/src/ui/file-uploader/utils.ts
similarity index 100%
rename from packages/common/components/src/ui/file-search/utils.ts
rename to packages/common/components/src/ui/file-uploader/utils.ts
diff --git a/packages/common/components/src/ui/index.ts b/packages/common/components/src/ui/index.ts
index 650eb30e1..c3aad6220 100644
--- a/packages/common/components/src/ui/index.ts
+++ b/packages/common/components/src/ui/index.ts
@@ -7,13 +7,15 @@ export * from "./data-table";
export * from "./date-picker";
export * from "./dialog";
export * from "./dropdown-menu";
-export * from "./file-search";
+export * from "./file-uploader";
export * from "./icon-finder";
export * from "./input";
export * from "./label";
export * from "./layout";
export * from "./loading";
+export * from "./page-title";
export * from "./popover";
+export * from "./progress";
export * from "./radio-group";
export * from "./select";
export * from "./slider";
diff --git a/packages/common/components/src/ui/layout/base.tsx b/packages/common/components/src/ui/layout/base.tsx
index b48e2d9d9..21d2ca7c6 100644
--- a/packages/common/components/src/ui/layout/base.tsx
+++ b/packages/common/components/src/ui/layout/base.tsx
@@ -1,30 +1,30 @@
+import type { QueryClient } from "@tanstack/react-query";
+import type { MenuItem } from "../../api";
import { QueryProvider } from "../../provider/query-provider";
-import { SidebarProvider } from "../sidebar";
import { LNB } from "../lnb";
import { Header } from "../header";
import { Footer } from "./footer";
-
+import { SidebarProvider } from "../sidebar";
import "./common.css";
-import type { QueryClient } from "@tanstack/react-query";
export function BaseLayout({
children,
queryClient,
currentPath,
- routeHandler,
+ handleMenuClick,
}: {
children: React.ReactNode;
queryClient?: QueryClient;
currentPath?: string;
- routeHandler?: (path: string) => void;
+ handleMenuClick?: (item: MenuItem) => void;
}) {
return (
-
+
-
+
{children}
diff --git a/packages/common/components/src/ui/lnb/index.tsx b/packages/common/components/src/ui/lnb/index.tsx
index 197a44a9e..41dc06bfd 100644
--- a/packages/common/components/src/ui/lnb/index.tsx
+++ b/packages/common/components/src/ui/lnb/index.tsx
@@ -22,11 +22,11 @@ import { getParentIds } from "./lib";
export function LNB({
viewOnly,
currentPath,
- routeHandler,
+ handleMenuClick,
}: {
viewOnly?: boolean;
currentPath?: string;
- routeHandler?: (path: string) => void;
+ handleMenuClick?: (item: MenuItem) => void;
}) {
const { data: menuList } = useQuery({
queryKey: [ENDPOINT.CMS_SERVICE.MENU_ROLES],
@@ -37,7 +37,7 @@ export function LNB({
const [openMenuIds, setOpenMenuIds] = useState
([]);
function isPathMatched(path: string) {
- return currentPath === path || currentPath?.startsWith(`${path}/`);
+ return currentPath === path;
}
function MenuItem({ item }: { item: MenuItem }) {
@@ -45,7 +45,7 @@ export function LNB({
const handleClick = () => {
setCookie("menu-code-key", item.menuCd.toString());
- routeHandler?.(item.urlPath);
+ handleMenuClick?.(item);
};
if (item.children) {
@@ -57,7 +57,7 @@ export function LNB({
@@ -90,15 +90,15 @@ export function LNB({
-
+
-
+
{item.menuKornNm}
diff --git a/packages/common/components/src/ui/page-title/index.tsx b/packages/common/components/src/ui/page-title/index.tsx
new file mode 100644
index 000000000..5190f1a48
--- /dev/null
+++ b/packages/common/components/src/ui/page-title/index.tsx
@@ -0,0 +1,30 @@
+import React from "react";
+
+const PageTitle = ({
+ title,
+ menuPaths,
+}: {
+ title: string;
+ menuPaths: string[];
+}) => {
+ return (
+
+
{title}
+ {menuPaths.length > 0 && (
+
+
+ {menuPaths?.map((path, i) => (
+
+ {i !== 0 && (
+
+ )}
+ {path}
+
+ ))}
+
+ )}
+
+ );
+};
+
+export { PageTitle };
diff --git a/packages/common/components/src/ui/page-title/page-title.stories.tsx b/packages/common/components/src/ui/page-title/page-title.stories.tsx
new file mode 100644
index 000000000..127e2a0fa
--- /dev/null
+++ b/packages/common/components/src/ui/page-title/page-title.stories.tsx
@@ -0,0 +1,17 @@
+import type { Meta, StoryObj } from "@storybook/react";
+import { PageTitle } from ".";
+
+const meta: Meta
= {
+ title: "UI/PageTitle",
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const Default: Story = {
+ render: () => (
+
+ ),
+};
diff --git a/packages/common/components/src/ui/progress/index.tsx b/packages/common/components/src/ui/progress/index.tsx
new file mode 100644
index 000000000..edb9b92af
--- /dev/null
+++ b/packages/common/components/src/ui/progress/index.tsx
@@ -0,0 +1,28 @@
+"use client";
+
+import * as React from "react";
+import * as ProgressPrimitive from "@radix-ui/react-progress";
+
+import { cn } from "../../lib/utils";
+
+const Progress = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, value, ...props }, ref) => (
+
+
+
+));
+Progress.displayName = ProgressPrimitive.Root.displayName;
+
+export { Progress };
diff --git a/packages/common/components/src/ui/sidebar/index.tsx b/packages/common/components/src/ui/sidebar/index.tsx
index 317fb46de..bce00bb84 100644
--- a/packages/common/components/src/ui/sidebar/index.tsx
+++ b/packages/common/components/src/ui/sidebar/index.tsx
@@ -3,8 +3,7 @@ import { Slot } from "@radix-ui/react-slot";
import { type VariantProps, cva } from "class-variance-authority";
import { PanelLeft } from "lucide-react";
-import { useIsMobile } from "../../lib/use-mobile";
-import { cn } from "../../lib/utils";
+import { cn, useIsMobile } from "../../lib";
import { Button } from "../button";
import { Input } from "../input";
import { Separator } from "../separator";
diff --git a/packages/common/components/src/ui/table/index.tsx b/packages/common/components/src/ui/table/index.tsx
index 46c8db39c..ba50e9d75 100644
--- a/packages/common/components/src/ui/table/index.tsx
+++ b/packages/common/components/src/ui/table/index.tsx
@@ -9,7 +9,7 @@ interface TableProps extends React.HTMLAttributes {
}
const Table = React.forwardRef(
- ({ className, variant, ...props }, ref) => (
+ ({ className, variant = "default", ...props }, ref) => (
= 0.8'}
@@ -4422,6 +4455,10 @@ packages:
/csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ /custom-error-instance@2.1.1:
+ resolution: {integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==}
+ dev: false
+
/d3-array@3.2.4:
resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
engines: {node: '>=12'}
@@ -5715,7 +5752,6 @@ packages:
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- dev: true
/graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
@@ -5993,6 +6029,11 @@ packages:
call-bound: 1.0.3
dev: true
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: false
+
/is-string@1.1.1:
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
engines: {node: '>= 0.4'}
@@ -6097,6 +6138,10 @@ packages:
engines: {node: '>=10'}
dev: true
+ /js-base64@3.7.7:
+ resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==}
+ dev: false
+
/js-cookie@3.0.5:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
@@ -6219,6 +6264,37 @@ packages:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: true
+ /lodash._baseiteratee@4.7.0:
+ resolution: {integrity: sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==}
+ dependencies:
+ lodash._stringtopath: 4.8.0
+ dev: false
+
+ /lodash._basetostring@4.12.0:
+ resolution: {integrity: sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==}
+ dev: false
+
+ /lodash._baseuniq@4.6.0:
+ resolution: {integrity: sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==}
+ dependencies:
+ lodash._createset: 4.0.3
+ lodash._root: 3.0.1
+ dev: false
+
+ /lodash._createset@4.0.3:
+ resolution: {integrity: sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==}
+ dev: false
+
+ /lodash._root@3.0.1:
+ resolution: {integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==}
+ dev: false
+
+ /lodash._stringtopath@4.8.0:
+ resolution: {integrity: sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==}
+ dependencies:
+ lodash._basetostring: 4.12.0
+ dev: false
+
/lodash.add@3.7.0:
resolution: {integrity: sha512-/uxUZkB6vYiPoGSXADJJE+Ee4W2vU+bxZOFdvJdx+mDgv+qyAO76sWD84Q4FxsMgTjC1+gVFC9YNhdG243QRDw==}
dev: false
@@ -6248,6 +6324,17 @@ packages:
resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
dev: true
+ /lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+ dev: false
+
+ /lodash.uniqby@4.5.0:
+ resolution: {integrity: sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==}
+ dependencies:
+ lodash._baseiteratee: 4.7.0
+ lodash._baseuniq: 4.6.0
+ dev: false
+
/lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
@@ -6905,6 +6992,14 @@ packages:
object-assign: 4.1.1
react-is: 16.13.1
+ /proper-lockfile@4.1.2:
+ resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
+ dependencies:
+ graceful-fs: 4.2.11
+ retry: 0.12.0
+ signal-exit: 3.0.7
+ dev: false
+
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: false
@@ -6914,6 +7009,10 @@ packages:
engines: {node: '>=6'}
dev: true
+ /querystringify@2.2.0:
+ resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
+ dev: false
+
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -7272,6 +7371,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+ dev: false
+
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -7304,6 +7407,11 @@ packages:
supports-preserve-symlinks-flag: 1.0.0
dev: true
+ /retry@0.12.0:
+ resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+ engines: {node: '>= 4'}
+ dev: false
+
/reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -7517,6 +7625,10 @@ packages:
side-channel-weakmap: 1.0.2
dev: true
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: false
+
/signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
@@ -8089,6 +8201,19 @@ packages:
turbo-windows-arm64: 2.4.2
dev: true
+ /tus-js-client@4.3.1:
+ resolution: {integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==}
+ engines: {node: '>=18'}
+ dependencies:
+ buffer-from: 1.1.2
+ combine-errors: 3.0.3
+ is-stream: 2.0.1
+ js-base64: 3.7.7
+ lodash.throttle: 4.1.1
+ proper-lockfile: 4.1.2
+ url-parse: 1.5.10
+ dev: false
+
/type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -8221,6 +8346,13 @@ packages:
punycode: 2.3.1
dev: true
+ /url-parse@1.5.10:
+ resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+ dependencies:
+ querystringify: 2.2.0
+ requires-port: 1.0.0
+ dev: false
+
/use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1):
resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
engines: {node: '>=10'}
@@ -8306,7 +8438,7 @@ packages:
debug: 4.4.0
globrex: 0.1.2
tsconfck: 3.1.5(typescript@5.6.3)
- vite: 6.2.0(@types/node@22.13.9)
+ vite: 6.2.0(@types/node@22.13.5)
transitivePeerDependencies:
- supports-color
- typescript