diff options
| -rw-r--r-- | app/globals.css | 46 | ||||
| -rw-r--r-- | app/layout.tsx | 23 | ||||
| -rw-r--r-- | middleware.ts | 2 | ||||
| -rw-r--r-- | next.config.ts | 6 |
4 files changed, 72 insertions, 5 deletions
diff --git a/app/globals.css b/app/globals.css index 9cd22397..590a32a8 100644 --- a/app/globals.css +++ b/app/globals.css @@ -150,12 +150,20 @@ body { } .container-wrapper { - @apply min-[1800px]:max-w-[1536px] min-[1800px]:border-x border-border/30 dark:border-border mx-auto w-full; + @apply min-[1800px]:max-w-[1800px] min-[1800px]:border-x border-border/30 dark:border-border mx-auto w-full; + + /* 추가 breakpoint */ + @apply min-[2200px]:max-w-[2000px]; + @apply min-[2600px]:max-w-[2400px]; } + .container { - @apply px-4 xl:px-6 2xl:px-4 mx-auto max-w-[1536px]; + @apply px-4 xl:px-6 2xl:px-4 mx-auto max-w-[1800px]; + + } + } @@ -165,4 +173,38 @@ body { .pdftron-container { all: unset !important; +} + + +/* 읽기 전용 셀 기본 스타일 */ +.read-only-cell { + background-color: #f5f5f5; + color: #666; + cursor: not-allowed; + border-left: 2px solid #ddd; + user-select: none; +} + +/* 읽기 전용 셀 호버 효과 */ +.read-only-cell:hover { + background-color: #eaeaea; +} + +/* 테이블 헤더에서 읽기 전용 컬럼 표시 (선택 사항) */ +th[data-read-only="true"] { + background-color: #f0f0f0; + font-style: italic; +} + +/* 읽기 전용 필드를 색상으로 구분 - 폼에서도 사용 가능 */ +.form-field-read-only { + background-color: #f5f5f5 !important; + border-color: #ddd !important; + cursor: not-allowed !important; + opacity: 0.8; +} + +/* 선택적: 편집 화면으로 이동 시 읽기 전용 필드 강조 */ +.edit-mode .read-only-cell { + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); }
\ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index 19021360..c83c1a7e 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -8,10 +8,29 @@ import { cn } from "@/lib/utils" import { META_THEME_COLORS, siteConfig } from "@/config/site" import { LicenseInfo } from '@mui/x-license'; import { ToasterSonner } from "@/components/ui/toasterSonner"; +import localFont from "next/font/local"; LicenseInfo.setLicenseKey(process.env.NEXT_PUBLIC_MUI_KEY as string); -// const inter = Inter({ subsets: ['latin'] }); +const inter = localFont({ + src: [ + { + path: '../public/fonts/Inter-Regular.woff2', + weight: '400', + style: 'normal', + }, + { + path: '../public/fonts/Inter-Medium.woff2', + weight: '500', + style: 'normal', + }, + { + path: '../public/fonts/Inter-Bold.woff2', + weight: '700', + style: 'normal', + }, + ] +}) export const generateStaticParams = async () => { return languages.map((lng) => ({ lng })); @@ -61,7 +80,7 @@ export default async function RootLayout({ <body className={cn( "min-h-svh bg-slate-100 font-sans antialiased", - // inter.className, + inter.className, )} > <ThemeProvider diff --git a/middleware.ts b/middleware.ts index 88d30b2d..85acc71c 100644 --- a/middleware.ts +++ b/middleware.ts @@ -189,6 +189,6 @@ if (token) { */ export const config = { matcher: [ - '/((?!_next|.*\\..*|api).*)', // API 경로 전체 제외 + '/((?!_next|.*\\..*|api|viewer).*)', // API 경로 전체 제외 ], };
\ No newline at end of file diff --git a/next.config.ts b/next.config.ts index b86ea42c..cd6fc0c3 100644 --- a/next.config.ts +++ b/next.config.ts @@ -2,6 +2,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { serverExternalPackages: ['pino', 'pino-pretty'], + reactStrictMode: false, eslint: { ignoreDuringBuilds: true, @@ -13,6 +14,11 @@ const nextConfig: NextConfig = { serverActions: { bodySizeLimit: '5mb', }, + turbo: { + treeShaking: false, + minify: false, + unstablePersistentCaching: false, + } }, }; |
