From 947751431ec2d9e01a9d42d4ce06a3a97a21a448 Mon Sep 17 00:00:00 2001 From: bicochan Date: Wed, 25 Feb 2026 14:42:16 +0900 Subject: [PATCH 01/15] =?UTF-8?q?[as]=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/.env.example | 5 + apps/as/.eslintrc.json | 3 + apps/as/.gitignore | 36 +++ apps/as/.gitkeep | 0 apps/as/.prettierrc | 8 + apps/as/README.md | 89 ++++++ apps/as/app/globals.css | 27 ++ apps/as/app/layout.tsx | 22 ++ apps/as/app/page.tsx | 10 + apps/as/app/providers.tsx | 18 ++ apps/as/entities/README.md | 43 +++ apps/as/eslint.config.mjs | 18 ++ apps/as/features/README.md | 36 +++ apps/as/next.config.ts | 8 + apps/as/package.json | 34 +++ apps/as/postcss.config.mjs | 8 + apps/as/shared/api/client.ts | 9 + apps/as/shared/api/index.ts | 1 + apps/as/shared/config/env.ts | 11 + apps/as/shared/config/index.ts | 1 + apps/as/shared/lib/dayjs.ts | 12 + apps/as/shared/lib/index.ts | 2 + apps/as/shared/lib/query-client.ts | 11 + apps/as/shared/types/index.ts | 29 ++ apps/as/shared/ui/button.tsx | 36 +++ apps/as/shared/ui/index.ts | 1 + apps/as/tailwind.config.ts | 23 ++ apps/as/tsconfig.json | 35 +++ apps/as/widgets/README.md | 35 +++ pnpm-lock.yaml | 420 ++++++++++++++++++----------- 30 files changed, 832 insertions(+), 159 deletions(-) create mode 100644 apps/as/.env.example create mode 100644 apps/as/.eslintrc.json create mode 100644 apps/as/.gitignore delete mode 100644 apps/as/.gitkeep create mode 100644 apps/as/.prettierrc create mode 100644 apps/as/README.md create mode 100644 apps/as/app/globals.css create mode 100644 apps/as/app/layout.tsx create mode 100644 apps/as/app/page.tsx create mode 100644 apps/as/app/providers.tsx create mode 100644 apps/as/entities/README.md create mode 100644 apps/as/eslint.config.mjs create mode 100644 apps/as/features/README.md create mode 100644 apps/as/next.config.ts create mode 100644 apps/as/package.json create mode 100644 apps/as/postcss.config.mjs create mode 100644 apps/as/shared/api/client.ts create mode 100644 apps/as/shared/api/index.ts create mode 100644 apps/as/shared/config/env.ts create mode 100644 apps/as/shared/config/index.ts create mode 100644 apps/as/shared/lib/dayjs.ts create mode 100644 apps/as/shared/lib/index.ts create mode 100644 apps/as/shared/lib/query-client.ts create mode 100644 apps/as/shared/types/index.ts create mode 100644 apps/as/shared/ui/button.tsx create mode 100644 apps/as/shared/ui/index.ts create mode 100644 apps/as/tailwind.config.ts create mode 100644 apps/as/tsconfig.json create mode 100644 apps/as/widgets/README.md diff --git a/apps/as/.env.example b/apps/as/.env.example new file mode 100644 index 000000000..f5cfcfb89 --- /dev/null +++ b/apps/as/.env.example @@ -0,0 +1,5 @@ +# apps/as/shared/config/env.ts 참고 +NEXT_PUBLIC_PORT=3000 +NEXT_PUBLIC_PROXY_HOST=http://localhost:3000 +NEXT_PUBLIC_SITE_ID=AS +NEXT_PUBLIC_SERVER_API_URL=http://192.168.0.102:8000 diff --git a/apps/as/.eslintrc.json b/apps/as/.eslintrc.json new file mode 100644 index 000000000..ea782d70a --- /dev/null +++ b/apps/as/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/apps/as/.gitignore b/apps/as/.gitignore new file mode 100644 index 000000000..fd3dbb571 --- /dev/null +++ b/apps/as/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/as/.gitkeep b/apps/as/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/as/.prettierrc b/apps/as/.prettierrc new file mode 100644 index 000000000..059b4e33c --- /dev/null +++ b/apps/as/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "trailingComma": "all", + "singleQuote": false, + "printWidth": 100, + "tabWidth": 2, + "plugins": ["prettier-plugin-tailwindcss"] +} diff --git a/apps/as/README.md b/apps/as/README.md new file mode 100644 index 000000000..95a9b7a31 --- /dev/null +++ b/apps/as/README.md @@ -0,0 +1,89 @@ +# AS Application + +Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 + +## 기술 스택 + +- **프레임워크**: Next.js 15 + TypeScript +- **스타일링**: Tailwind CSS +- **상태관리**: Zustand +- **데이터 페칭**: TanStack Query (React Query) +- **폼 관리**: React Hook Form + Zod +- **테이블**: TanStack Table +- **HTTP 클라이언트**: Axios +- **날짜 처리**: Day.js + +## 프로젝트 구조 (FSD) + +``` +as/ +├── app/ # Next.js App Router (라우팅) +│ ├── layout.tsx +│ ├── page.tsx +│ ├── globals.css +│ └── providers.tsx +├── shared/ # 공통 코드 레이어 +│ ├── api/ # API 클라이언트 설정 +│ ├── config/ # 환경 설정 +│ ├── lib/ # 유틸리티 라이브러리 +│ ├── types/ # 공통 타입 정의 +│ └── ui/ # 공통 UI 컴포넌트 +├── entities/ # 비즈니스 엔티티 +├── features/ # 비즈니스 기능 +└── widgets/ # 복합 UI 블록 +``` + +## FSD 레이어 설명 + +### 1. Shared +- 프로젝트 전체에서 재사용되는 코드 +- 비즈니스 로직 없음 +- API 클라이언트, 유틸리티, UI 컴포넌트 등 + +### 2. Entities +- 비즈니스 엔티티 (예: User, Product, Order) +- 엔티티 모델, 타입, API 호출 + +### 3. Features +- 사용자 시나리오와 기능 (예: 로그인, 상품 검색) +- 한 가지 기능에 집중 + +### 4. Widgets +- 여러 features와 entities를 조합한 복잡한 UI 블록 +- 독립적으로 작동 가능한 UI 컴포넌트 + +### 5. App +- Next.js App Router +- 라우팅 및 전역 providers 설정 + +## 시작하기 + +```bash +# 의존성 설치 +npm install + +# 개발 서버 실행 +npm run dev + +# 프로덕션 빌드 +npm run build + +# 프로덕션 서버 실행 +npm start +``` + +## 환경 변수 + +`.env.local` 파일 생성: + +```env +NEXT_PUBLIC_API_URL=http://localhost:3000/api +``` + +## 코드 규칙 + +- TypeScript 사용 (strict mode) +- 함수형 컴포넌트 사용 +- Named exports 선호 +- Tailwind CSS 사용 +- ESLint + Prettier 적용 diff --git a/apps/as/app/globals.css b/apps/as/app/globals.css new file mode 100644 index 000000000..13d40b892 --- /dev/null +++ b/apps/as/app/globals.css @@ -0,0 +1,27 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --background: #ffffff; + --foreground: #171717; +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +body { + color: var(--foreground); + background: var(--background); + font-family: Arial, Helvetica, sans-serif; +} + +@layer utilities { + .text-balance { + text-wrap: balance; + } +} diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx new file mode 100644 index 000000000..719c143d3 --- /dev/null +++ b/apps/as/app/layout.tsx @@ -0,0 +1,22 @@ +import type { Metadata } from "next"; +import { Providers } from "./providers"; +import "./globals.css"; + +export const metadata: Metadata = { + title: "AS Application", + description: "Next.js application with FSD architecture", +}; + +interface RootLayoutProps { + children: React.ReactNode; +} + +export default function RootLayout({ children }: RootLayoutProps) { + return ( + + + {children} + + + ); +} diff --git a/apps/as/app/page.tsx b/apps/as/app/page.tsx new file mode 100644 index 000000000..7e739afaa --- /dev/null +++ b/apps/as/app/page.tsx @@ -0,0 +1,10 @@ +export default function HomePage() { + return ( +
+
+

AS Application

+

Feature Sliced Design Architecture with Next.js

+
+
+ ); +} diff --git a/apps/as/app/providers.tsx b/apps/as/app/providers.tsx new file mode 100644 index 000000000..bc12c443b --- /dev/null +++ b/apps/as/app/providers.tsx @@ -0,0 +1,18 @@ +"use client"; + +import { QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { queryClient } from "@/shared/lib"; + +interface ProvidersProps { + children: React.ReactNode; +} + +export function Providers({ children }: ProvidersProps) { + return ( + + {children} + + + ); +} diff --git a/apps/as/entities/README.md b/apps/as/entities/README.md new file mode 100644 index 000000000..bf042e60a --- /dev/null +++ b/apps/as/entities/README.md @@ -0,0 +1,43 @@ +# Entities Layer + +비즈니스 엔티티를 정의하는 레이어입니다. + +## 구조 + +각 엔티티는 다음 구조를 따릅니다: + +``` +entities/ +└── [entity-name]/ + ├── api/ # API 호출 함수 + ├── model/ # 상태 관리 (zustand) + ├── types/ # 타입 정의 + ├── ui/ # UI 컴포넌트 (선택적) + └── index.ts # Public API +``` + +## 예시 + +```typescript +// entities/user/types/index.ts +export interface User { + id: string; + name: string; + email: string; +} + +// entities/user/api/index.ts +export async function getUser(id: string): Promise { + // API 호출 +} + +// entities/user/index.ts +export { type User } from "./types"; +export { getUser } from "./api"; +``` + +## 규칙 + +1. 엔티티는 다른 엔티티에 의존할 수 있습니다 +2. Features나 Widgets에 의존하면 안 됩니다 +3. 비즈니스 로직은 최소화하고 데이터 관리에 집중합니다 diff --git a/apps/as/eslint.config.mjs b/apps/as/eslint.config.mjs new file mode 100644 index 000000000..05e726d1b --- /dev/null +++ b/apps/as/eslint.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), +]); + +export default eslintConfig; diff --git a/apps/as/features/README.md b/apps/as/features/README.md new file mode 100644 index 000000000..37b83407e --- /dev/null +++ b/apps/as/features/README.md @@ -0,0 +1,36 @@ +# Features Layer + +사용자 인터랙션과 비즈니스 기능을 구현하는 레이어입니다. + +## 구조 + +각 기능은 다음 구조를 따릅니다: + +``` +features/ +└── [feature-name]/ + ├── api/ # API 호출 (선택적) + ├── model/ # 상태 관리 + ├── ui/ # UI 컴포넌트 + ├── lib/ # 유틸리티 함수 + └── index.ts # Public API +``` + +## 예시 + +```typescript +// features/auth-login/ui/login-form.tsx +export function LoginForm() { + // 로그인 폼 UI +} + +// features/auth-login/index.ts +export { LoginForm } from "./ui/login-form"; +``` + +## 규칙 + +1. 하나의 기능에만 집중합니다 +2. Entities와 Shared에만 의존할 수 있습니다 +3. 다른 Features에 직접 의존하면 안 됩니다 +4. 재사용 가능한 기능으로 설계합니다 diff --git a/apps/as/next.config.ts b/apps/as/next.config.ts new file mode 100644 index 000000000..8864de0e7 --- /dev/null +++ b/apps/as/next.config.ts @@ -0,0 +1,8 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + reactStrictMode: true, + transpilePackages: ["@common/assets"], +}; + +export default nextConfig; diff --git a/apps/as/package.json b/apps/as/package.json new file mode 100644 index 000000000..c50f002ea --- /dev/null +++ b/apps/as/package.json @@ -0,0 +1,34 @@ +{ + "name": "as", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@common/assets": "workspace:*", + "@common/components": "workspace:*", + "@common/network": "workspace:*", + "@hookform/resolvers": "^4.1.3", + "@tanstack/react-query": "^5.75.5", + "@tanstack/react-query-devtools": "^5.75.5", + "@tanstack/react-table": "^8.21.2", + "axios": "^1.8.1", + "dayjs": "^1.11.13", + "next": "15.3.8", + "react-hook-form": "^7.54.2", + "zod": "^3.24.2" + }, + "devDependencies": { + "eslint": "^9.0.0", + "eslint-config-next": "15.4.0", + "postcss": "^8.4.49", + "prettier": "^3.4.2", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^3.4.14", + "typescript": "^5.7.2" + } +} diff --git a/apps/as/postcss.config.mjs b/apps/as/postcss.config.mjs new file mode 100644 index 000000000..1a69fd2a4 --- /dev/null +++ b/apps/as/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/apps/as/shared/api/client.ts b/apps/as/shared/api/client.ts new file mode 100644 index 000000000..d7c4a8f1d --- /dev/null +++ b/apps/as/shared/api/client.ts @@ -0,0 +1,9 @@ +import { Client } from "@common/network"; +import { PROXY_HOST, SITE_ID } from "@/shared/config/env"; + +const BASE_URL = `${PROXY_HOST}/server`; + +export const apiClient = Client.getInstance({ + baseURL: BASE_URL, + siteId: SITE_ID, +}); diff --git a/apps/as/shared/api/index.ts b/apps/as/shared/api/index.ts new file mode 100644 index 000000000..c5eb98066 --- /dev/null +++ b/apps/as/shared/api/index.ts @@ -0,0 +1 @@ +export { apiClient } from "./client"; diff --git a/apps/as/shared/config/env.ts b/apps/as/shared/config/env.ts new file mode 100644 index 000000000..4f08c722a --- /dev/null +++ b/apps/as/shared/config/env.ts @@ -0,0 +1,11 @@ +export const PORT = process.env.NEXT_PUBLIC_PORT || "3000"; +export const PROXY_HOST = + process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; +export const SERVER_API_URL = process.env.NEXT_PUBLIC_SERVER_API_URL; +export const SITE_ID = process.env.NEXT_PUBLIC_SITE_ID || "AS"; +export const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; +export const ACCESS_TOKEN = + process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; +export const REFRESH_TOKEN = + process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; +export const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/as/shared/config/index.ts b/apps/as/shared/config/index.ts new file mode 100644 index 000000000..c76f8cd47 --- /dev/null +++ b/apps/as/shared/config/index.ts @@ -0,0 +1 @@ +export * from "./env"; diff --git a/apps/as/shared/lib/dayjs.ts b/apps/as/shared/lib/dayjs.ts new file mode 100644 index 000000000..28b3f908b --- /dev/null +++ b/apps/as/shared/lib/dayjs.ts @@ -0,0 +1,12 @@ +import dayjs from "dayjs"; +import "dayjs/locale/ko"; +import utc from "dayjs/plugin/utc"; +import timezone from "dayjs/plugin/timezone"; +import relativeTime from "dayjs/plugin/relativeTime"; + +dayjs.extend(utc); +dayjs.extend(timezone); +dayjs.extend(relativeTime); +dayjs.locale("ko"); + +export { dayjs }; diff --git a/apps/as/shared/lib/index.ts b/apps/as/shared/lib/index.ts new file mode 100644 index 000000000..51e9c2c5d --- /dev/null +++ b/apps/as/shared/lib/index.ts @@ -0,0 +1,2 @@ +export { queryClient } from "./query-client"; +export { dayjs } from "./dayjs"; diff --git a/apps/as/shared/lib/query-client.ts b/apps/as/shared/lib/query-client.ts new file mode 100644 index 000000000..0da2fb899 --- /dev/null +++ b/apps/as/shared/lib/query-client.ts @@ -0,0 +1,11 @@ +import { QueryClient } from "@tanstack/react-query"; + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: 1, + refetchOnWindowFocus: false, + staleTime: 60 * 1000, + }, + }, +}); diff --git a/apps/as/shared/types/index.ts b/apps/as/shared/types/index.ts new file mode 100644 index 000000000..15ddf4254 --- /dev/null +++ b/apps/as/shared/types/index.ts @@ -0,0 +1,29 @@ +export interface BaseEntity { + id: string; + createdAt: string; + updatedAt: string; +} + +export interface PaginationParams { + page: number; + limit: number; +} + +export interface PaginationResponse { + data: T[]; + total: number; + page: number; + limit: number; +} + +export interface ApiResponse { + success: boolean; + data: T; + message?: string; +} + +export interface ApiError { + message: string; + code?: string; + status?: number; +} diff --git a/apps/as/shared/ui/button.tsx b/apps/as/shared/ui/button.tsx new file mode 100644 index 000000000..3d9fb0bf5 --- /dev/null +++ b/apps/as/shared/ui/button.tsx @@ -0,0 +1,36 @@ +import { ButtonHTMLAttributes, forwardRef } from "react"; + +interface ButtonProps extends ButtonHTMLAttributes { + variant?: "primary" | "secondary" | "outline"; + size?: "sm" | "md" | "lg"; +} + +export const Button = forwardRef( + ({ className = "", variant = "primary", size = "md", children, ...props }, ref) => { + const baseStyles = "rounded-md font-medium transition-colors focus:outline-none focus:ring-2"; + + const variantStyles = { + primary: "bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500", + secondary: "bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500", + outline: "border border-gray-300 bg-transparent hover:bg-gray-50 focus:ring-gray-500", + }; + + const sizeStyles = { + sm: "px-3 py-1.5 text-sm", + md: "px-4 py-2 text-base", + lg: "px-6 py-3 text-lg", + }; + + return ( + + ); + }, +); + +Button.displayName = "Button"; diff --git a/apps/as/shared/ui/index.ts b/apps/as/shared/ui/index.ts new file mode 100644 index 000000000..812a8ab55 --- /dev/null +++ b/apps/as/shared/ui/index.ts @@ -0,0 +1 @@ +export { Button } from "./button"; diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts new file mode 100644 index 000000000..24811c1a4 --- /dev/null +++ b/apps/as/tailwind.config.ts @@ -0,0 +1,23 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./shared/**/*.{js,ts,jsx,tsx,mdx}", + "./entities/**/*.{js,ts,jsx,tsx,mdx}", + "./features/**/*.{js,ts,jsx,tsx,mdx}", + "./widgets/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: { + colors: { + background: "var(--background)", + foreground: "var(--foreground)", + }, + }, + }, + plugins: [], +}; + +export default config; diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json new file mode 100644 index 000000000..1668155c8 --- /dev/null +++ b/apps/as/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"], + "@/app/*": ["./app/*"], + "@/shared/*": ["./shared/*"], + "@/entities/*": ["./entities/*"], + "@/features/*": ["./features/*"], + "@/widgets/*": ["./widgets/*"], + "@/pages/*": ["./pages/*"], + "@common/components": ["../../../packages/common/components/dist/"], + "@common/network": ["../../../packages/common/network/"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/apps/as/widgets/README.md b/apps/as/widgets/README.md new file mode 100644 index 000000000..7da206bc5 --- /dev/null +++ b/apps/as/widgets/README.md @@ -0,0 +1,35 @@ +# Widgets Layer + +여러 features와 entities를 조합한 독립적인 UI 블록입니다. + +## 구조 + +각 위젯은 다음 구조를 따릅니다: + +``` +widgets/ +└── [widget-name]/ + ├── ui/ # UI 컴포넌트 + ├── model/ # 상태 관리 (선택적) + ├── lib/ # 유틸리티 함수 (선택적) + └── index.ts # Public API +``` + +## 예시 + +```typescript +// widgets/header/ui/header.tsx +export function Header() { + // 헤더 UI (로고, 네비게이션, 사용자 메뉴 등) +} + +// widgets/header/index.ts +export { Header } from "./ui/header"; +``` + +## 규칙 + +1. 여러 Features와 Entities를 조합할 수 있습니다 +2. 다른 Widgets에 직접 의존하면 안 됩니다 +3. 독립적으로 작동할 수 있어야 합니다 +4. 페이지 레벨 레이아웃 컴포넌트로 사용됩니다 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb4b94fd8..18702cf33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,6 +51,67 @@ importers: specifier: 2.4.2 version: 2.4.2 + apps/as: + dependencies: + '@common/assets': + specifier: workspace:* + version: link:../../packages/common/assets + '@common/components': + specifier: workspace:* + version: link:../../packages/common/components + '@common/network': + specifier: workspace:* + version: link:../../packages/common/network + '@hookform/resolvers': + specifier: ^4.1.3 + version: 4.1.3(react-hook-form@7.68.0(react@19.2.3)) + '@tanstack/react-query': + specifier: ^5.75.5 + version: 5.90.12(react@19.2.3) + '@tanstack/react-query-devtools': + specifier: ^5.75.5 + version: 5.91.1(@tanstack/react-query@5.90.12(react@19.2.3))(react@19.2.3) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + axios: + specifier: ^1.8.1 + version: 1.8.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.19 + next: + specifier: 15.3.8 + version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-hook-form: + specifier: ^7.54.2 + version: 7.68.0(react@19.2.3) + zod: + specifier: ^3.24.2 + version: 3.25.76 + devDependencies: + eslint: + specifier: ^9.0.0 + version: 9.39.2(jiti@1.21.7) + eslint-config-next: + specifier: 15.4.0 + version: 15.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + postcss: + specifier: ^8.4.49 + version: 8.5.6 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(prettier@3.7.4) + tailwindcss: + specifier: ^3.4.14 + version: 3.4.19(yaml@2.8.2) + typescript: + specifier: ^5.7.2 + version: 5.9.3 + apps/cm: dependencies: '@common/assets': @@ -1542,7 +1603,7 @@ importers: version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3) '@storybook/react-vite': specifier: ^8.5.3 - version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) '@storybook/test': specifier: ^8.5.3 version: 8.6.14(storybook@8.6.14(prettier@3.7.4)) @@ -1554,22 +1615,22 @@ importers: version: 22.19.2 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) autoprefixer: specifier: ^10.4.20 version: 10.4.22(postcss@8.5.6) eslint: specifier: ^9.17.0 - version: 9.39.2(jiti@1.21.7) + version: 9.39.2(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.0.0 - version: 5.2.0(eslint@9.39.2(jiti@1.21.7)) + version: 5.2.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.16 - version: 0.4.24(eslint@9.39.2(jiti@1.21.7)) + version: 0.4.24(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-storybook: specifier: ^0.11.2 - version: 0.11.6(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + version: 0.11.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) globals: specifier: ^15.14.0 version: 15.15.0 @@ -1590,19 +1651,19 @@ importers: version: 3.4.19(yaml@2.8.2) tsup: specifier: 8.3.6 - version: 8.3.6(jiti@1.21.7)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2) + version: 8.3.6(jiti@2.6.1)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2) typescript: specifier: ~5.6.2 version: 5.6.3 typescript-eslint: specifier: ^8.18.2 - version: 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + version: 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) vite: specifier: ^6.0.5 - version: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) + version: 6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) + version: 5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) packages/common/config: devDependencies: @@ -7886,15 +7947,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - glob: 10.5.0 - magic-string: 0.27.0 - react-docgen-typescript: 2.4.0(typescript@5.6.3) - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - optionalDependencies: - typescript: 5.6.3 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: glob: 10.5.0 @@ -8788,14 +8840,6 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.7.4)) - browser-assert: 1.2.1 - storybook: 8.6.14(prettier@3.7.4) - ts-dedent: 2.2.0 - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.7.4)) @@ -8865,28 +8909,6 @@ snapshots: react-dom: 19.2.3(react@19.2.3) storybook: 8.6.14(prettier@3.7.4) - '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) - '@rollup/pluginutils': 5.3.0(rollup@4.53.3) - '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3) - find-up: 5.0.0 - magic-string: 0.30.21 - react: 19.2.3 - react-docgen: 7.1.1 - react-dom: 19.2.3(react@19.2.3) - resolve: 1.22.11 - storybook: 8.6.14(prettier@3.7.4) - tsconfig-paths: 4.2.0 - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - optionalDependencies: - '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.7.4)) - transitivePeerDependencies: - - rollup - - supports-color - - typescript - '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) @@ -9177,19 +9199,19 @@ snapshots: dependencies: xlsx: 0.18.5 - '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.49.0 - '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.49.0 eslint: 9.39.2(jiti@1.21.7) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9225,15 +9247,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/types': 8.49.0 - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.49.0 debug: 4.4.3 eslint: 9.39.2(jiti@1.21.7) - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9292,15 +9314,15 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.49.0 - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2(jiti@1.21.7) - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9360,14 +9382,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7)) '@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/types': 8.49.0 - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) eslint: 9.39.2(jiti@1.21.7) - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9457,18 +9479,6 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.27 - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 @@ -10497,8 +10507,8 @@ snapshots: '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@2.6.1)) @@ -10509,6 +10519,26 @@ snapshots: - eslint-plugin-import-x - supports-color + eslint-config-next@15.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 15.4.0 + '@rushstack/eslint-patch': 1.15.0 + '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@1.21.7)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + eslint-config-next@15.4.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: '@next/eslint-plugin-next': 15.4.0 @@ -10537,6 +10567,36 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.2(jiti@2.6.1) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.2(jiti@1.21.7) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 @@ -10552,6 +10612,28 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 @@ -10563,6 +10645,64 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.2(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.2(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 @@ -10592,6 +10732,25 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.2(jiti@1.21.7)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.11.0 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.2(jiti@1.21.7) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.2(jiti@2.6.1)): dependencies: aria-query: 5.3.2 @@ -10619,14 +10778,32 @@ snapshots: dependencies: eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-react-refresh@0.4.24(eslint@9.39.2(jiti@1.21.7)): - dependencies: - eslint: 9.39.2(jiti@1.21.7) - eslint-plugin-react-refresh@0.4.24(eslint@9.39.2(jiti@2.6.1)): dependencies: eslint: 9.39.2(jiti@2.6.1) + eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@1.21.7)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.39.2(jiti@1.21.7) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@2.6.1)): dependencies: array-includes: 3.1.9 @@ -10649,16 +10826,6 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.11.6(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3): - dependencies: - '@storybook/csf': 0.1.13 - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - eslint: 9.39.2(jiti@1.21.7) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - - typescript - eslint-plugin-storybook@0.11.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@storybook/csf': 0.1.13 @@ -12734,33 +12901,6 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.6(jiti@1.21.7)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2): - dependencies: - bundle-require: 5.1.0(esbuild@0.24.2) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.3 - esbuild: 0.24.2 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2) - resolve-from: 5.0.0 - rollup: 4.53.3 - source-map: 0.7.6 - sucrase: 3.35.1 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - optionalDependencies: - postcss: 8.5.6 - typescript: 5.6.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsup@8.3.6(jiti@2.6.1)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2): dependencies: bundle-require: 5.1.0(esbuild@0.24.2) @@ -12891,17 +13031,6 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - eslint: 9.39.2(jiti@1.21.7) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - typescript-eslint@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) @@ -13028,17 +13157,6 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)): - dependencies: - debug: 4.4.3 - globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.6.3) - optionalDependencies: - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - - typescript - vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)): dependencies: debug: 4.4.3 @@ -13061,22 +13179,6 @@ snapshots: lightningcss: 1.30.2 terser: 5.44.1 - vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2): - dependencies: - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.53.3 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.19.2 - fsevents: 2.3.3 - jiti: 1.21.7 - lightningcss: 1.30.2 - terser: 5.44.1 - yaml: 2.8.2 - vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2): dependencies: esbuild: 0.25.12 From 6e7b3dd5395f7de231c850ff5b446010312096ad Mon Sep 17 00:00:00 2001 From: bicochan Date: Wed, 25 Feb 2026 17:10:56 +0900 Subject: [PATCH 02/15] =?UTF-8?q?[as]=20feat:=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=EC=9D=B8=EA=B0=80=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/README.md | 219 +- apps/as/app/README.md | 169 + apps/as/entities/README.md | 101 +- apps/as/entities/instl-sncn/api/index.ts | 23 + .../instl-sncn/api/instl-sncn-service-impl.ts | 222 + apps/as/entities/instl-sncn/api/queries.ts | 312 ++ apps/as/entities/instl-sncn/index.ts | 61 + apps/as/entities/instl-sncn/lib/format.ts | 47 + apps/as/entities/instl-sncn/lib/index.ts | 18 + apps/as/entities/instl-sncn/lib/validation.ts | 73 + .../as/entities/instl-sncn/model/constants.ts | 30 + apps/as/entities/instl-sncn/model/index.ts | 22 + .../instl-sncn/model/instl-sncn-service.ts | 151 + apps/as/entities/instl-sncn/model/types.ts | 158 + apps/as/features/README.md | 120 +- apps/as/package.json | 4 +- apps/as/shared/README.md | 149 + apps/as/shared/{types => model}/index.ts | 0 apps/as/widgets/README.md | 126 +- apps/cs/docs/표준단어정의서.md | 831 --- docs/IIPBS_단어목록.md | 4760 +++++++++++++++++ pnpm-lock.yaml | 68 +- 22 files changed, 6701 insertions(+), 963 deletions(-) create mode 100644 apps/as/app/README.md create mode 100644 apps/as/entities/instl-sncn/api/index.ts create mode 100644 apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts create mode 100644 apps/as/entities/instl-sncn/api/queries.ts create mode 100644 apps/as/entities/instl-sncn/index.ts create mode 100644 apps/as/entities/instl-sncn/lib/format.ts create mode 100644 apps/as/entities/instl-sncn/lib/index.ts create mode 100644 apps/as/entities/instl-sncn/lib/validation.ts create mode 100644 apps/as/entities/instl-sncn/model/constants.ts create mode 100644 apps/as/entities/instl-sncn/model/index.ts create mode 100644 apps/as/entities/instl-sncn/model/instl-sncn-service.ts create mode 100644 apps/as/entities/instl-sncn/model/types.ts create mode 100644 apps/as/shared/README.md rename apps/as/shared/{types => model}/index.ts (100%) delete mode 100644 apps/cs/docs/표준단어정의서.md create mode 100644 docs/IIPBS_단어목록.md diff --git a/apps/as/README.md b/apps/as/README.md index 95a9b7a31..46a8536a5 100644 --- a/apps/as/README.md +++ b/apps/as/README.md @@ -15,46 +15,131 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 ## 프로젝트 구조 (FSD) +이 프로젝트는 **Feature-Sliced Design v2.1**을 따르며, 계층적 아키텍처로 구성되어 있습니다. + ``` as/ -├── app/ # Next.js App Router (라우팅) -│ ├── layout.tsx -│ ├── page.tsx -│ ├── globals.css -│ └── providers.tsx -├── shared/ # 공통 코드 레이어 -│ ├── api/ # API 클라이언트 설정 -│ ├── config/ # 환경 설정 -│ ├── lib/ # 유틸리티 라이브러리 -│ ├── types/ # 공통 타입 정의 -│ └── ui/ # 공통 UI 컴포넌트 -├── entities/ # 비즈니스 엔티티 -├── features/ # 비즈니스 기능 -└── widgets/ # 복합 UI 블록 +├── app/ # App 레이어 (Next.js App Router) +│ ├── (routes)/ # 라우트 구조 +│ ├── layout.tsx # 루트 레이아웃 +│ ├── page.tsx # 홈 페이지 +│ ├── globals.css # 글로벌 스타일 +│ └── providers.tsx # 전역 providers +│ +├── widgets/ # Widgets 레이어 +│ └── [widget-name]/ # 큰 독립적 UI 블록 (여러 페이지에서 재사용) +│ ├── ui/ +│ ├── model/ +│ └── index.ts +│ +├── features/ # Features 레이어 +│ └── [feature-name]/ # 사용자 상호작용 기능 (여러 페이지에서 재사용) +│ ├── ui/ +│ ├── api/ +│ ├── model/ +│ └── index.ts +│ +├── entities/ # Entities 레이어 +│ └── [entity-name]/ # 비즈니스 엔티티 (User, Product 등) +│ ├── model/ +│ ├── api/ +│ ├── ui/ +│ └── index.ts +│ +└── shared/ # Shared 레이어 + ├── ui/ # UI Kit (비즈니스 로직 없는 공통 컴포넌트) + ├── api/ # API 클라이언트 설정 + ├── lib/ # 내부 라이브러리 (dates, colors 등) + ├── config/ # 환경 설정, feature flags + ├── types/ # 공통 타입 정의 + └── routes/ # 라우트 상수 ``` +### 계층 구조 이해하기 + +FSD는 **3단계 계층**으로 구성됩니다: + +1. **Layers (레이어)**: 책임과 의존성에 따른 수평적 분리 (app, pages, widgets, features, entities, shared) +2. **Slices (슬라이스)**: 비즈니스 도메인에 따른 수직적 분리 (user, product, auth-login 등) +3. **Segments (세그먼트)**: 기술적 목적에 따른 분리 (ui, api, model, lib 등) + +> 📚 각 레이어의 자세한 설명은 해당 폴더의 README.md를 참고하세요. + ## FSD 레이어 설명 -### 1. Shared -- 프로젝트 전체에서 재사용되는 코드 -- 비즈니스 로직 없음 -- API 클라이언트, 유틸리티, UI 컴포넌트 등 +FSD는 계층적 아키텍처로, 각 레이어는 책임의 범위와 의존성의 정도에 따라 구분됩니다. 7개의 표준화된 레이어가 있으며, 프로젝트에 필요한 레이어만 사용하면 됩니다. -### 2. Entities -- 비즈니스 엔티티 (예: User, Product, Order) -- 엔티티 모델, 타입, API 호출 +### 레이어 계층 구조 (위에서 아래로) -### 3. Features -- 사용자 시나리오와 기능 (예: 로그인, 상품 검색) -- 한 가지 기능에 집중 +``` +app/ ↑ 가장 높은 책임, 가장 많은 의존성 +pages/ | +widgets/ | +features/ | +entities/ | +shared/ ↓ 가장 낮은 책임, 의존성 없음 +``` -### 4. Widgets -- 여러 features와 entities를 조합한 복잡한 UI 블록 -- 독립적으로 작동 가능한 UI 컴포넌트 +### 1. App +- **목적**: 앱 전체에 영향을 주는 기술적/비즈니스적 사항 +- **내용**: Context providers, 글로벌 스타일, 스토어 설정, 라우터 설정, 애널리틱스 +- **특징**: 슬라이스가 없고 세그먼트로만 구성 +- **의존성**: 모든 하위 레이어 사용 가능 -### 5. App -- Next.js App Router -- 라우팅 및 전역 providers 설정 +### 2. Pages (app 디렉토리) +- **목적**: 웹사이트나 애플리케이션을 구성하는 페이지/화면 +- **내용**: 페이지 UI, 로딩 상태, 에러 바운더리, 데이터 fetching +- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능) +- **의존성**: `widgets`, `features`, `entities`, `shared` 사용 가능 + +> 💡 **FSD v2.1 권장사항**: "pages-first" 접근 방식을 따라, 재사용되지 않는 큰 UI 블록과 비즈니스 로직은 페이지 슬라이스에 유지하세요. + +### 3. Widgets +- **목적**: 큰 규모의 독립적인 UI 블록 +- **내용**: 여러 features와 entities를 조합한 복합 UI +- **사용 시기**: 여러 페이지에서 재사용되거나, 페이지에 여러 개의 큰 독립적 블록이 있을 때 +- **의존성**: `features`, `entities`, `shared` 사용 가능 (다른 `widgets` 불가) + +### 4. Features +- **목적**: 사용자가 수행하는 주요 상호작용과 비즈니스 기능 +- **내용**: 사용자 시나리오 (예: 로그인, 상품 검색, 댓글 작성) +- **사용 시기**: 여러 페이지에서 재사용되는 기능 +- **의존성**: `entities`, `shared` 사용 가능 (다른 `features` 불가) + +### 5. Entities +- **목적**: 비즈니스가 다루는 실제 개념 (User, Product, Order 등) +- **내용**: 데이터 모델, 타입, API 요청, 엔티티의 시각적 표현 +- **특징**: 비즈니스 용어로 명명 +- **의존성**: 다른 `entities`, `shared` 사용 가능 + +### 6. Shared +- **목적**: 애플리케이션의 기반 제공 +- **내용**: API 클라이언트, UI Kit, 유틸리티 라이브러리, 글로벌 설정 +- **특징**: 비즈니스 로직 없음, 슬라이스가 없고 세그먼트로만 구성 +- **의존성**: 외부 라이브러리만 사용 가능 (다른 레이어 불가) + +## 레이어 간 Import 규칙 + +> **핵심 규칙**: 슬라이스 내의 모듈(파일)은 **오직 하위 레이어**에 있는 다른 슬라이스만 import할 수 있습니다. + +예시: +- `features/auth-login/ui/form.tsx`는 `entities/user`와 `shared/ui`를 import 가능 +- 하지만 다른 `features/post-create`나 상위 레이어인 `widgets`는 import 불가 +- 같은 슬라이스 내부(`features/auth-login/`)의 다른 파일들은 자유롭게 import 가능 + +## Public API 규칙 + +> **슬라이스 외부의 모듈은 슬라이스의 Public API만 참조할 수 있으며, 내부 파일 구조에 직접 접근할 수 없습니다.** + +모든 슬라이스(및 슬라이스가 없는 레이어의 세그먼트)는 반드시 `index.ts`를 통해 Public API를 정의해야 합니다. + +```typescript +// ✅ 올바른 import +import { LoginForm } from 'features/auth-login'; + +// ❌ 잘못된 import (내부 구조 직접 접근) +import { LoginForm } from 'features/auth-login/ui/login-form'; +``` ## 시작하기 @@ -80,6 +165,69 @@ npm start NEXT_PUBLIC_API_URL=http://localhost:3000/api ``` +## FSD 핵심 규칙 + +### 1. Import 규칙 + +> **슬라이스 내의 모듈(파일)은 오직 하위 레이어에 있는 슬라이스만 import할 수 있습니다.** + +```typescript +// ✅ 올바른 import (하위 레이어) +// features/auth-login/ui/form.tsx +import { User } from 'entities/user'; +import { Button } from 'shared/ui/button'; + +// ❌ 잘못된 import (같은 레이어) +// features/auth-login/ui/form.tsx +import { PostForm } from 'features/post-create'; // 금지! + +// ❌ 잘못된 import (상위 레이어) +// features/auth-login/ui/form.tsx +import { Header } from 'widgets/header'; // 금지! +``` + +### 2. Public API 규칙 + +> **슬라이스 외부에서는 Public API(index.ts)를 통해서만 접근해야 합니다.** + +```typescript +// ✅ 올바른 import (Public API 사용) +import { LoginForm } from 'features/auth-login'; + +// ❌ 잘못된 import (내부 구조 직접 접근) +import { LoginForm } from 'features/auth-login/ui/login-form'; +``` + +**Public API 작성 시 주의사항**: +- 와일드카드 re-export(`export * from`) 사용 지양 +- 필요한 것만 명시적으로 export +- 슬라이스의 인터페이스를 명확하게 표현 + +```typescript +// ❌ 나쁜 예시 +export * from './ui/Comment'; +export * from './model/comments'; + +// ✅ 좋은 예시 +export { Comment } from './ui/comment'; +export { CommentForm } from './ui/comment-form'; +export { useComments } from './model/use-comments'; +export type { Comment, CommentFormData } from './model/types'; +``` + +### 3. 슬라이스 독립성 + +- **Zero Coupling**: 같은 레이어의 슬라이스들은 서로 독립적이어야 합니다 +- **High Cohesion**: 슬라이스는 주요 목표와 관련된 대부분의 코드를 포함해야 합니다 +- 예외: Entities 레이어에서 필요한 경우 `@x` 표기법으로 cross-import 가능 + +### 4. 세그먼트 명명 규칙 + +세그먼트 이름은 **목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다: + +- ❌ **나쁜 이름**: `components`, `hooks`, `types` (무엇인지만 설명) +- ✅ **좋은 이름**: `ui`, `api`, `model`, `lib` (왜 있는지 설명) + ## 코드 규칙 - TypeScript 사용 (strict mode) @@ -87,3 +235,14 @@ NEXT_PUBLIC_API_URL=http://localhost:3000/api - Named exports 선호 - Tailwind CSS 사용 - ESLint + Prettier 적용 +- Public API는 명시적으로 정의 (와일드카드 export 지양) + +## 아키텍처 린팅 + +코드베이스의 FSD 규칙 준수를 자동으로 검증하려면 [Steiger](https://github.com/feature-sliced/steiger)를 사용하세요. + +```bash +# Steiger 설치 및 실행 +npm install -D @feature-sliced/steiger +npx steiger src +``` diff --git a/apps/as/app/README.md b/apps/as/app/README.md new file mode 100644 index 000000000..5ab63ea34 --- /dev/null +++ b/apps/as/app/README.md @@ -0,0 +1,169 @@ +# App Layer + +**App**은 애플리케이션 전체에 영향을 미치는 기술적, 비즈니스적 사항을 다루는 최상위 레이어입니다. + +## 목적 + +- 애플리케이션의 진입점(entrypoint) 제공 +- 전역 Context Providers 설정 +- 라우터 구성 +- 글로벌 스타일 정의 +- 전역 상태 저장소 설정 +- 애널리틱스 및 모니터링 설정 + +## 특징 + +- **슬라이스 없음**: App 레이어는 Shared처럼 슬라이스가 없고 세그먼트로만 구성됩니다 +- **전체 앱 관심사**: 특정 비즈니스 도메인이 아닌 앱 전체와 관련된 코드만 포함 +- **최상위 레이어**: 모든 하위 레이어의 모듈을 자유롭게 import 가능 + +## 구조 (Next.js App Router) + +Next.js를 사용하는 경우, App 레이어는 주로 `app/` 디렉토리로 표현됩니다: + +``` +app/ +├── (routes)/ # 라우트 그룹 및 페이지 +│ ├── (auth)/ +│ │ ├── login/ +│ │ │ └── page.tsx +│ │ └── register/ +│ │ └── page.tsx +│ └── (main)/ +│ ├── dashboard/ +│ │ └── page.tsx +│ └── settings/ +│ └── page.tsx +├── layout.tsx # 루트 레이아웃 +├── page.tsx # 홈 페이지 +├── globals.css # 글로벌 스타일 +├── providers.tsx # 전역 Providers 설정 +└── error.tsx # 글로벌 에러 핸들러 +``` + +### 일반적인 FSD 세그먼트 구조 + +FSD 표준 세그먼트를 사용하는 경우: + +``` +app/ +├── entrypoint/ # 애플리케이션 진입점 (프레임워크별) +│ └── index.tsx +├── providers/ # Context Providers +│ ├── query-provider.tsx +│ ├── theme-provider.tsx +│ └── index.tsx +├── styles/ # 글로벌 스타일 +│ ├── globals.css +│ └── theme.css +├── store/ # 글로벌 상태 저장소 설정 +│ └── index.ts +└── routes/ # 라우터 설정 + └── index.tsx +``` + +## 예시 + +### Next.js Providers 설정 + +```typescript +// app/providers.tsx +'use client'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { ThemeProvider } from 'next-themes'; +import { useState } from 'react'; + +export function Providers({ children }: { children: React.ReactNode }) { + const [queryClient] = useState(() => new QueryClient({ + defaultOptions: { + queries: { + staleTime: 60 * 1000, + }, + }, + })); + + return ( + + + {children} + + + ); +} + +// app/layout.tsx +import { Providers } from './providers'; +import './globals.css'; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + {children} + + + + ); +} +``` + +### 글로벌 설정 + +```typescript +// app/config/analytics.ts +export function initAnalytics() { + if (typeof window !== 'undefined') { + // 애널리틱스 초기화 + } +} + +// app/config/monitoring.ts +export function initMonitoring() { + // 에러 모니터링 설정 +} +``` + +## Next.js App Router와 FSD + +Next.js의 `app/` 디렉토리는 FSD의 **App 레이어**와 **Pages 레이어**를 동시에 담당합니다: + +- **루트 레벨 파일들** (`layout.tsx`, `providers.tsx`, `globals.css`): App 레이어 +- **라우트 폴더들** (`dashboard/`, `login/` 등): Pages 레이어 + +각 페이지별 비즈니스 로직은: +- 재사용되지 않는 UI는 페이지 슬라이스(`app/dashboard/` 등) 안에 유지 +- 재사용되는 기능은 `features/` 레이어로 분리 +- 여러 페이지에서 재사용되는 큰 UI 블록은 `widgets/` 레이어로 분리 + +## 레이어 의존성 규칙 + +✅ **허용되는 의존성**: +- 모든 하위 레이어 (`pages`, `widgets`, `features`, `entities`, `shared`) +- 같은 `app` 레이어 내의 다른 세그먼트 +- 외부 라이브러리 + +❌ **금지된 의존성**: +- 없음 (App은 최상위 레이어) + +## 주의사항 + +1. **비대화 방지**: App 레이어가 너무 커지면 관리가 어려워집니다. 대부분의 로직은 하위 레이어에 배치하세요 +2. **전역 관심사만**: 특정 페이지나 기능에만 관련된 코드는 해당 레이어로 이동 +3. **라우터 레벨 로직**: 라우터 및 서버 레벨 로직은 이 레이어에 유지 +4. **Processes 레이어 사용 지양**: Processes 레이어는 deprecated되었으므로 해당 로직은 `app`이나 `features`에 배치 + +## FSD v2.1 권장사항 + +최신 FSD 버전(v2.1)은 **"pages-first"** 접근 방식을 권장합니다: + +- 더 많은 코드를 페이지 슬라이스에 유지 +- 큰 UI 블록과 재사용되지 않는 비즈니스 로직은 즉시 추출하지 말고 페이지에 보관 +- 실제로 재사용이 필요할 때만 `features`나 `widgets`로 분리 + +이 접근 방식은 과도한 추상화를 방지하고 코드를 더 쉽게 탐색할 수 있게 합니다. diff --git a/apps/as/entities/README.md b/apps/as/entities/README.md index bf042e60a..b28c10790 100644 --- a/apps/as/entities/README.md +++ b/apps/as/entities/README.md @@ -1,43 +1,114 @@ # Entities Layer -비즈니스 엔티티를 정의하는 레이어입니다. +**Entities**는 프로젝트가 다루는 실제 비즈니스 개념을 나타내는 레이어입니다. 비즈니스에서 제품을 설명할 때 사용하는 용어들(예: User, Product, Order)이 주로 엔티티가 됩니다. + +## 목적 + +- 비즈니스 엔티티의 데이터 모델 및 타입 정의 +- 엔티티 관련 API 요청 함수 관리 +- 엔티티의 시각적 표현 제공 (재사용 가능한 UI) +- 여러 페이지에서 동일한 외관을 재사용할 수 있도록 지원 ## 구조 -각 엔티티는 다음 구조를 따릅니다: +각 엔티티 슬라이스는 다음 세그먼트로 구성됩니다: ``` entities/ └── [entity-name]/ - ├── api/ # API 호출 함수 - ├── model/ # 상태 관리 (zustand) - ├── types/ # 타입 정의 - ├── ui/ # UI 컴포넌트 (선택적) + ├── model/ # 데이터 저장소, 검증 스키마, 상태 관리 + ├── api/ # 엔티티 관련 API 요청 함수 + ├── ui/ # 엔티티 시각적 표현 (선택적) + ├── lib/ # 엔티티 관련 유틸리티 (선택적) + ├── @x/ # 다른 엔티티로부터의 cross-import용 Public API (선택적) └── index.ts # Public API ``` +### 세그먼트 설명 + +- **model**: 데이터 모델, 타입 정의, 상태 저장소 (Zustand 등) +- **api**: 백엔드 API 호출 함수 +- **ui**: 엔티티를 표시하는 UI 컴포넌트 (완전한 UI 블록이 아니라 재사용 가능한 표현) +- **lib**: 엔티티 관련 유틸리티 함수 +- **@x**: 다른 엔티티가 이 엔티티를 import할 때 사용하는 명시적 cross-import API +- **index.ts**: 슬라이스의 Public API (외부에서 사용할 수 있는 것만 export) + ## 예시 ```typescript -// entities/user/types/index.ts +// entities/user/model/user.ts export interface User { id: string; name: string; email: string; + role: 'admin' | 'user'; } -// entities/user/api/index.ts +// entities/user/api/get-user.ts +import type { User } from '../model/user'; + export async function getUser(id: string): Promise { - // API 호출 + const response = await fetch(`/api/users/${id}`); + return response.json(); +} + +// entities/user/ui/user-card.tsx +import type { User } from '../model/user'; + +interface UserCardProps { + user: User; + onClick?: () => void; +} + +export function UserCard({ user, onClick }: UserCardProps) { + return ( +
+

{user.name}

+

{user.email}

+
+ ); } // entities/user/index.ts -export { type User } from "./types"; -export { getUser } from "./api"; +export { type User } from './model/user'; +export { getUser } from './api/get-user'; +export { UserCard } from './ui/user-card'; ``` -## 규칙 +## 엔티티 간 관계 -1. 엔티티는 다른 엔티티에 의존할 수 있습니다 -2. Features나 Widgets에 의존하면 안 됩니다 -3. 비즈니스 로직은 최소화하고 데이터 관리에 집중합니다 +엔티티가 서로 연결되어 있을 때는 `@x` 표기법을 사용하여 명시적으로 cross-import를 관리하는 것이 권장됩니다: + +```typescript +// entities/artist/model/artist.ts +import type { Song } from 'entities/song/@x/artist'; + +export interface Artist { + name: string; + songs: Array; +} + +// entities/song/@x/artist.ts +export type { Song } from '../model/song'; +``` + +> `@x` 폴더를 사용하면 엔티티 간 연결을 명확하게 만들어 함께 리팩터링이 필요한 코드를 쉽게 찾을 수 있습니다. + +## 레이어 의존성 규칙 + +✅ **허용되는 의존성**: +- `shared` 레이어의 모듈 +- 같은 엔티티 슬라이스 내의 다른 세그먼트 +- 다른 엔티티 슬라이스 (필요한 경우, `@x` 표기법 권장) + +❌ **금지된 의존성**: +- `features` 레이어 +- `widgets` 레이어 +- `pages` 레이어 +- `app` 레이어 + +## 주의사항 + +1. **UI 컴포넌트는 완전한 비즈니스 로직을 포함하지 않음**: UI는 주로 props나 slots를 통해 다양한 비즈니스 로직을 연결할 수 있도록 설계 +2. **엔티티 간 비즈니스 로직은 상위 레이어에**: 엔티티 간 상호작용의 비즈니스 로직은 Features나 Pages 레이어에서 처리 +3. **데이터 관리에 집중**: 복잡한 비즈니스 로직보다는 데이터 모델, 검증, 저장에 집중 diff --git a/apps/as/entities/instl-sncn/api/index.ts b/apps/as/entities/instl-sncn/api/index.ts new file mode 100644 index 000000000..2e4d9c20b --- /dev/null +++ b/apps/as/entities/instl-sncn/api/index.ts @@ -0,0 +1,23 @@ +export { instlSncnService } from "./instl-sncn-service-impl"; +export { + instlSncnKeys, + useListPageLoadCnfm, + useRegistPageLoadCnfm, + useViewPageLoadCnfm, + useSelectInstlCnfmListCnt, + useSelectInstlCnfmList, + useSelectInstlCnfmDtl, + useInsertInstlCnfm, + useMergeInstlCnfm, + useDeleteInstlCnfm, + useUpdatePrgrsSttusCnfm, + useSaveInstlCnfmPrgrsStts, + useSaveInstlCnfmSanctnPrgrsStts, + useInsertInstlCnfmSpl, + useSelectEssntlInstlCnfmAtchFileList, + useSelectInstlCnfmExmntFile, + useSelectInstlCnfmEtcFile, + useSelectInstlCnfmSpl, + useSelectInstlCnfmExmntResult, + useSelectInstlCnfmOpinionList, +} from "./queries"; diff --git a/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts b/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts new file mode 100644 index 000000000..356f8a033 --- /dev/null +++ b/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts @@ -0,0 +1,222 @@ +import { apiClient } from "@/shared/api"; +import type { + InstlSncnService, + FnrscVO, + ListPageResult, + RegistPageData, + ViewPageData, + SplmntRqst, +} from "../model"; + +class InstlSncnServiceImpl implements InstlSncnService { + async selectInstlCnfmListCount(vo: FnrscVO): Promise { + const response = await apiClient.get<{ count: number }>( + "/fnrsc/cnfm/list/count", + { params: vo } + ); + return response.data.count; + } + + async selectInstlCnfmList(vo: FnrscVO): Promise { + const response = await apiClient.get("/fnrsc/cnfm/list", { + params: vo, + }); + return response.data; + } + + async listPageLoadCnfm(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/list/pageLoad.do", + { + params: { + ...vo, + pageIndex: vo.pageIndex || 1, + recordCountPerPage: vo.recordCountPerPage || 10, + pageSize: vo.pageSize || 10, + }, + } + ); + return response.data; + } + + async registPageLoadCnfm(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/regist/pageLoad.do", + { + params: vo, + } + ); + return response.data; + } + + async insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise { + const formData = new FormData(); + + Object.entries(vo).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + if (typeof value === "object") { + formData.append(key, JSON.stringify(value)); + } else { + formData.append(key, String(value)); + } + } + }); + + if (files && files.length > 0) { + files.forEach((file) => { + formData.append("uploadFile", file); + }); + } + + await apiClient.post("/fnrsc/cnfm/regist/insertFnrscCnfm.do", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }); + } + + async mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise { + const formData = new FormData(); + + Object.entries(vo).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + if (typeof value === "object") { + formData.append(key, JSON.stringify(value)); + } else { + formData.append(key, String(value)); + } + } + }); + + if (files && files.length > 0) { + files.forEach((file) => { + formData.append("uploadFile", file); + }); + } + + await apiClient.post("/fnrsc/cnfm/regist/mergeFnrscCnfm.do", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }); + } + + async selectInstlCnfmDetail(vo: FnrscVO): Promise { + const response = await apiClient.get("/fnrsc/cnfm/detail", { + params: vo, + }); + return response.data; + } + + async viewPageLoadCnfm(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/view/pageLoad.do", + { + params: vo, + } + ); + return response.data; + } + + async updateProgrsSttusCnfm(vo: FnrscVO): Promise { + await apiClient.post("/fnrsc/cnfm/update/updateProgrsSttus.do", vo); + } + + async saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise { + const formData = new FormData(); + + Object.entries(vo).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, String(value)); + } + }); + + if (file) { + formData.append("uploadFile", file); + } + + await apiClient.post( + "/fnrsc/cnfm/update/saveProgrsSttus.do", + formData, + { + headers: { + "Content-Type": "multipart/form-data", + }, + } + ); + } + + async saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise { + await apiClient.post( + "/fnrsc/cnfm/update/saveInstlCnfmSanctnProgrsSttus.do", + vo + ); + } + + async deleteInstlCnfm(vo: FnrscVO): Promise { + await apiClient.post("/fnrsc/cnfm/regist/deleteInstlCnfm.do", vo); + } + + async selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/files/essential", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmExmntFile(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/files/examination", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmEtcFile(vo: FnrscVO): Promise { + const response = await apiClient.get("/fnrsc/cnfm/files/etc", { + params: vo, + }); + return response.data; + } + + async selectInstlCnfmSanctnManage( + vo: FnrscVO + ): Promise> { + const response = await apiClient.get>( + "/fnrsc/cnfm/sanction/manage", + { params: vo } + ); + return response.data; + } + + async insertInstlCnfmSpl(vo: FnrscVO): Promise { + await apiClient.post("/fnrsc/cnfm/update/insertInstlCnfmSpl.do", vo); + } + + async selectInstlCnfmSpl(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/supplement", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmExmntResult(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/examination/result", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmOpinionList(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/opinion/list", + { params: vo } + ); + return response.data; + } +} + +export const instlSncnService = new InstlSncnServiceImpl(); diff --git a/apps/as/entities/instl-sncn/api/queries.ts b/apps/as/entities/instl-sncn/api/queries.ts new file mode 100644 index 000000000..26fa394da --- /dev/null +++ b/apps/as/entities/instl-sncn/api/queries.ts @@ -0,0 +1,312 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { instlSncnService } from "./instl-sncn-service-impl"; +import type { FnrscVO } from "../model"; + +export const instlSncnKeys = { + all: ["instl-sncn"] as const, + lists: () => [...instlSncnKeys.all, "list"] as const, + list: (vo: FnrscVO) => [...instlSncnKeys.lists(), vo] as const, + dtls: () => [...instlSncnKeys.all, "dtl"] as const, + dtl: (instlCnfmDocNo: string) => + [...instlSncnKeys.dtls(), instlCnfmDocNo] as const, + registPage: (jobSeSp: string) => + [...instlSncnKeys.all, "regist-page", jobSeSp] as const, + viewPage: (instlCnfmDocNo: string) => + [...instlSncnKeys.all, "view-page", instlCnfmDocNo] as const, +}; + +/** + * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) + */ +export function useListPageLoadCnfm(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.list(vo), + queryFn: () => instlSncnService.listPageLoadCnfm(vo), + }); +} + +/** + * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) + */ +export function useRegistPageLoadCnfm(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.registPage(vo.jobSeSp || ""), + queryFn: () => instlSncnService.registPageLoadCnfm(vo), + enabled: !!vo.jobSeSp, + }); +} + +/** + * 설치인가 상세/수정 페이지 로드 + */ +export function useViewPageLoadCnfm(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.viewPage(vo.instlCnfmDocNo || ""), + queryFn: () => instlSncnService.viewPageLoadCnfm(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 목록 카운트 조회 + */ +export function useSelectInstlCnfmListCnt(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.lists(), "count", vo], + queryFn: () => instlSncnService.selectInstlCnfmListCount(vo), + }); +} + +/** + * 설치인가 목록 조회 + */ +export function useSelectInstlCnfmList(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.list(vo), + queryFn: () => instlSncnService.selectInstlCnfmList(vo), + }); +} + +/** + * 설치인가 상세 조회 + */ +export function useSelectInstlCnfmDtl(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.dtl(vo.instlCnfmDocNo || ""), + queryFn: () => instlSncnService.selectInstlCnfmDetail(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 신규 등록 + */ +export function useInsertInstlCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => + instlSncnService.insertInstlCnfm(vo, files), + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + }, + }); +} + +/** + * 설치인가 수정 (병합) + */ +export function useMergeInstlCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => + instlSncnService.mergeInstlCnfm(vo, files), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.vo.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 삭제 + */ +export function useDeleteInstlCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => instlSncnService.deleteInstlCnfm(vo), + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + }, + }); +} + +/** + * 설치인가 진행상태 업데이트 + */ +export function useUpdatePrgrsSttusCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => + instlSncnService.updateProgrsSttusCnfm(vo), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 진행상태 저장 (검토의견 + 파일) + */ +export function useSaveInstlCnfmPrgrsStts() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ vo, file }: { vo: FnrscVO; file?: File }) => + instlSncnService.saveInstlCnfmProgrsSttus(vo, file), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.vo.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 기술검토 최종결재 + */ +export function useSaveInstlCnfmSanctnPrgrsStts() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => + instlSncnService.saveInstlCnfmSanctnProgrsSttus(vo), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 보완요청 등록 + */ +export function useInsertInstlCnfmSpl() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => instlSncnService.insertInstlCnfmSpl(vo), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 필수 첨부파일 목록 조회 + */ +export function useSelectEssntlInstlCnfmAtchFileList(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "essential-files", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectEssntlInstlCnfmAtchFileList(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 검토의견 첨부파일 조회 + */ +export function useSelectInstlCnfmExmntFile(vo: FnrscVO) { + return useQuery({ + queryKey: [ + ...instlSncnKeys.all, + "exmnt-files", + vo.instlCnfmDocNo, + vo.exmntOpinionSeqNo, + ], + queryFn: () => instlSncnService.selectInstlCnfmExmntFile(vo), + enabled: !!vo.instlCnfmDocNo && !!vo.exmntOpinionSeqNo, + }); +} + +/** + * 설치인가 기타 첨부파일 조회 + */ +export function useSelectInstlCnfmEtcFile(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "etc-files", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectInstlCnfmEtcFile(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 보완요청 조회 + */ +export function useSelectInstlCnfmSpl(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "supplement", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectInstlCnfmSpl(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 검토결과 조회 + */ +export function useSelectInstlCnfmExmntResult(vo: FnrscVO) { + return useQuery({ + queryKey: [ + ...instlSncnKeys.all, + "exmnt-result", + vo.instlCnfmDocNo, + vo.jobSe, + ], + queryFn: () => instlSncnService.selectInstlCnfmExmntResult(vo), + enabled: !!vo.instlCnfmDocNo && !!vo.jobSe, + }); +} + +/** + * 설치인가 담당자 목록 조회 + */ +export function useSelectInstlCnfmOpinionList(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "opinion-list", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectInstlCnfmOpinionList(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} diff --git a/apps/as/entities/instl-sncn/index.ts b/apps/as/entities/instl-sncn/index.ts new file mode 100644 index 000000000..40b412b7f --- /dev/null +++ b/apps/as/entities/instl-sncn/index.ts @@ -0,0 +1,61 @@ +export type { + PrgrsStts, + FnrscVO, + JobSeItem, + CeckVO, + AtchFile, + ExmntOpinion, + SplmntRqst, + ListPageResult, + RegistPageData, + ViewPageData, + InstlSncnService, +} from "./model"; + +export { + PRGRS_STTS_LABELS, + PRGRS_STTS_OPTIONS, + JOB_TYPE_CODE, + DEFAULT_PAGE_SIZE, + DEFAULT_RECORD_COUNT_PER_PAGE, +} from "./model"; + +export { + instlSncnService, + instlSncnKeys, + useListPageLoadCnfm, + useRegistPageLoadCnfm, + useViewPageLoadCnfm, + useSelectInstlCnfmListCnt, + useSelectInstlCnfmList, + useSelectInstlCnfmDtl, + useInsertInstlCnfm, + useMergeInstlCnfm, + useDeleteInstlCnfm, + useUpdatePrgrsSttusCnfm, + useSaveInstlCnfmPrgrsStts, + useSaveInstlCnfmSanctnPrgrsStts, + useInsertInstlCnfmSpl, + useSelectEssntlInstlCnfmAtchFileList, + useSelectInstlCnfmExmntFile, + useSelectInstlCnfmEtcFile, + useSelectInstlCnfmSpl, + useSelectInstlCnfmExmntResult, + useSelectInstlCnfmOpinionList, +} from "./api"; + +export { + fmtPrgrsStts, + fmtJobSeComma, + jobSeSpSummary, + parseJobSeSpArr, + fmtFileSize, + fmtDt, + vldtInstlSncnForm, + canAply, + canDel, + canMdfy, + canRqstSplmnt, + canAprv, + type VldtnErr, +} from "./lib"; diff --git a/apps/as/entities/instl-sncn/lib/format.ts b/apps/as/entities/instl-sncn/lib/format.ts new file mode 100644 index 000000000..3b16cff56 --- /dev/null +++ b/apps/as/entities/instl-sncn/lib/format.ts @@ -0,0 +1,47 @@ +import { PRGRS_STTS_LABELS, type PrgrsStts } from "../model"; + +export function fmtPrgrsStts(stts: PrgrsStts): string { + return PRGRS_STTS_LABELS[stts] || stts; +} + +export function fmtJobSeComma(jobSe: string): string { + if (!jobSe) return ""; + return jobSe.split("").join(","); +} + +export function jobSeSpSummary(jobSeSp: string): string { + if (!jobSeSp) return ""; + return jobSeSp.replace(/,/g, ""); +} + +export function parseJobSeSpArr(jobSeSp: string): string[] { + if (!jobSeSp) return []; + return jobSeSp.split(",").filter(Boolean); +} + +export function fmtFileSize(bytes: number): string { + if (bytes === 0) return "0 Bytes"; + + const k = 1024; + const sizes = ["Bytes", "KB", "MB", "GB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i]; +} + +export function fmtDt(dtString: string | undefined): string { + if (!dtString) return "-"; + + try { + const dt = new Date(dtString); + return new Intl.DateTimeFormat("ko-KR", { + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + }).format(dt); + } catch { + return dtString; + } +} diff --git a/apps/as/entities/instl-sncn/lib/index.ts b/apps/as/entities/instl-sncn/lib/index.ts new file mode 100644 index 000000000..9333d229e --- /dev/null +++ b/apps/as/entities/instl-sncn/lib/index.ts @@ -0,0 +1,18 @@ +export { + fmtPrgrsStts, + fmtJobSeComma, + jobSeSpSummary, + parseJobSeSpArr, + fmtFileSize, + fmtDt, +} from "./format"; + +export { + vldtInstlSncnForm, + canAply, + canDel, + canMdfy, + canRqstSplmnt, + canAprv, + type VldtnErr, +} from "./validation"; diff --git a/apps/as/entities/instl-sncn/lib/validation.ts b/apps/as/entities/instl-sncn/lib/validation.ts new file mode 100644 index 000000000..97860ccaa --- /dev/null +++ b/apps/as/entities/instl-sncn/lib/validation.ts @@ -0,0 +1,73 @@ +import type { FnrscVO } from "../model"; + +export interface VldtnErr { + field: string; + message: string; +} + +export function vldtInstlSncnForm(data: FnrscVO): VldtnErr[] { + const errors: VldtnErr[] = []; + + if (!data.jobSe) { + errors.push({ + field: "jobSe", + message: "업무구분을 선택해주세요.", + }); + } + + if (!data.bplcNm || data.bplcNm.trim() === "") { + errors.push({ + field: "bplcNm", + message: "사업장명을 입력해주세요.", + }); + } + + if (!data.fcltNm || data.fcltNm.trim() === "") { + errors.push({ + field: "fcltNm", + message: "시설명을 입력해주세요.", + }); + } + + return errors; +} + +export function canAply(data: FnrscVO): boolean { + const errors = vldtInstlSncnForm(data); + return errors.length === 0; +} + +export function canDel( + prgrsStts: string | undefined, + regId: string | undefined, + currentUsrId: string +): boolean { + return prgrsStts === "SV" && regId === currentUsrId; +} + +export function canMdfy( + prgrsStts: string | undefined, + regId: string | undefined, + currentUsrId: string +): boolean { + return ( + (prgrsStts === "SV" || prgrsStts === "SL") && regId === currentUsrId + ); +} + +export function canRqstSplmnt( + prgrsStts: string | undefined, + usrRole: string +): boolean { + return ( + (prgrsStts === "ER" || prgrsStts === "PR") && + (usrRole === "REVIEWER" || usrRole === "APPROVER") + ); +} + +export function canAprv( + prgrsStts: string | undefined, + usrRole: string +): boolean { + return prgrsStts === "PE" && usrRole === "APPROVER"; +} diff --git a/apps/as/entities/instl-sncn/model/constants.ts b/apps/as/entities/instl-sncn/model/constants.ts new file mode 100644 index 000000000..e8bea4018 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/constants.ts @@ -0,0 +1,30 @@ +import type { PrgrsStts } from "./types"; + +export const PRGRS_STTS_LABELS: Record = { + SV: "저장", + ST: "신청", + SL: "보완요청", + ER: "기술검토중", + EE: "기술검토완료", + PR: "환경청검토중", + PE: "환경청검토완료", + AP: "승인", + RJ: "반려", +} as const; + +export const PRGRS_STTS_OPTIONS = [ + { value: "SV", label: "저장" }, + { value: "ST", label: "신청" }, + { value: "SL", label: "보완요청" }, + { value: "ER", label: "기술검토중" }, + { value: "EE", label: "기술검토완료" }, + { value: "PR", label: "환경청검토중" }, + { value: "PE", label: "환경청검토완료" }, + { value: "AP", label: "승인" }, + { value: "RJ", label: "반려" }, +] as const; + +export const JOB_TYPE_CODE = "FNR01" as const; + +export const DEFAULT_PAGE_SIZE = 10 as const; +export const DEFAULT_RECORD_COUNT_PER_PAGE = 10 as const; diff --git a/apps/as/entities/instl-sncn/model/index.ts b/apps/as/entities/instl-sncn/model/index.ts new file mode 100644 index 000000000..7c8c73489 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/index.ts @@ -0,0 +1,22 @@ +export type { + PrgrsStts, + FnrscVO, + JobSeItem, + CeckVO, + AtchFile, + ExmntOpinion, + SplmntRqst, + ListPageResult, + RegistPageData, + ViewPageData, +} from "./types"; + +export { + PRGRS_STTS_LABELS, + PRGRS_STTS_OPTIONS, + JOB_TYPE_CODE, + DEFAULT_PAGE_SIZE, + DEFAULT_RECORD_COUNT_PER_PAGE, +} from "./constants"; + +export type { InstlSncnService } from "./instl-sncn-service"; diff --git a/apps/as/entities/instl-sncn/model/instl-sncn-service.ts b/apps/as/entities/instl-sncn/model/instl-sncn-service.ts new file mode 100644 index 000000000..74a35cef9 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/instl-sncn-service.ts @@ -0,0 +1,151 @@ +import type { + FnrscVO, + CeckVO, + AtchFile, + SplmntRqst, + ListPageResult, + RegistPageData, + ViewPageData, +} from "./types"; + +/** + * 설치인가 서비스 인터페이스 + * Java CnfmService.java의 TypeScript 버전 + */ +export interface InstlSncnService { + /** + * 설치인가 목록 카운트 조회 + * @param vo 검색 조건 + * @returns 목록 개수 + */ + selectInstlCnfmListCount(vo: FnrscVO): Promise; + + /** + * 설치인가 목록 조회 + * @param vo 검색 조건 + * @returns 설치인가 목록 + */ + selectInstlCnfmList(vo: FnrscVO): Promise; + + /** + * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) + * @param vo 검색 조건 + * @returns 목록 페이지 데이터 + */ + listPageLoadCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) + * @param vo jobSeSp 포함 + * @returns 등록 페이지 데이터 + */ + registPageLoadCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 데이터 저장 (신규) + * @param vo 설치인가 VO + * @param files 첨부파일 목록 + */ + insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise; + + /** + * 설치인가 데이터 병합 (수정) + * @param vo 설치인가 VO + * @param files 첨부파일 목록 + */ + mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise; + + /** + * 설치인가 상세 데이터 조회 + * @param vo instlCnfmDocNo 포함 + * @returns 설치인가 상세 정보 + */ + selectInstlCnfmDetail(vo: FnrscVO): Promise; + + /** + * 설치인가 상세/수정 페이지 로드 + * @param vo instlCnfmDocNo 포함 + * @returns 상세 페이지 데이터 + */ + viewPageLoadCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 진행상태 업데이트 + * @param vo instlCnfmDocNo, progrsSttus 포함 + */ + updateProgrsSttusCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 진행상태 저장 (검토의견 + 파일) + * @param vo instlCnfmDocNo, progrsSttus, exmntOpinionCn 포함 + * @param file 첨부파일 + */ + saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise; + + /** + * 설치인가 기술검토 최종결재 + * @param vo instlCnfmDocNo, progrsSttus 포함 + */ + saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise; + + /** + * 설치인가 삭제 + * @param vo instlCnfmDocNo 포함 + */ + deleteInstlCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 신청 첨부파일 목록 + * @param vo instlCnfmDocNo 포함 + * @returns 필수 첨부파일 목록 + */ + selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise; + + /** + * 설치인가 의견 첨부파일 + * @param vo instlCnfmDocNo, exmntOpinionSeqNo 포함 + * @returns 검토의견 첨부파일 목록 + */ + selectInstlCnfmExmntFile(vo: FnrscVO): Promise; + + /** + * 설치인가 기타 첨부파일 + * @param vo instlCnfmDocNo 포함 + * @returns 기타 첨부파일 목록 + */ + selectInstlCnfmEtcFile(vo: FnrscVO): Promise; + + /** + * 설치인가 결재권자 조회 + * @param vo instlCnfmDocNo, regId 포함 + * @returns 결재권자 정보 + */ + selectInstlCnfmSanctnManage(vo: FnrscVO): Promise>; + + /** + * 설치인가 보완요청 등록 + * @param vo instlCnfmDocNo, splCn 포함 + */ + insertInstlCnfmSpl(vo: FnrscVO): Promise; + + /** + * 설치인가 보완요청 조회 + * @param vo instlCnfmDocNo 포함 + * @returns 보완요청 정보 + */ + selectInstlCnfmSpl(vo: FnrscVO): Promise; + + /** + * 설치인가 검토결과 조회 + * @param vo instlCnfmDocNo, jobSe 포함 + * @returns 검토결과 목록 + */ + selectInstlCnfmExmntResult(vo: FnrscVO): Promise; + + /** + * 설치인가 담당자 정보 조회 + * @param vo instlCnfmDocNo 포함 + * @returns 담당자 목록 + */ + selectInstlCnfmOpinionList(vo: FnrscVO): Promise; +} diff --git a/apps/as/entities/instl-sncn/model/types.ts b/apps/as/entities/instl-sncn/model/types.ts new file mode 100644 index 000000000..ce61009c1 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/types.ts @@ -0,0 +1,158 @@ +export type PrgrsStts = + | "SV" // 저장 + | "ST" // 신청 + | "SL" // 보완요청 + | "ER" // 기술검토 + | "EE" // 기술검토완료 + | "PR" // 환경청검토 + | "PE" // 환경청검토완료 + | "AP" // 승인 + | "RJ"; // 반려 + +export interface FnrscVO { + fnrscDscssDocNo?: string; + instlCnfmDocNo?: string; + seqNo?: string; + yr?: string; + bzCd?: string; + bzNm?: string; + strtYr?: string; + edYr?: string; + dtlBzCd?: string; + untBzCd?: string; + rgnCd?: string; + rgnNm?: string; + rvbsnCd?: string; + adstDstrCd?: string; + adstDstrNm?: string; + bzSpec?: string; + aidRt?: string; + confBzCd?: string; + bzPd?: string; + bzCn?: string; + jobSe?: string; + jobSeSp?: string; + jobSeList?: Array; + jobSeNm?: string; + fcltyKnd?: string; + reusePrpos?: string; + progrsSttus?: PrgrsStts; + fileSeq?: number; + regId?: string; + regDt?: string; + udtId?: string; + udtDt?: string; + registMan?: string; + updtMan?: string; + registDe?: string; + updtDe?: string; + atchFileId?: string; + grpCd?: string; + bplcNm?: string; + fcltNm?: string; + lclgvrnmntNm?: string; + localCd?: string; + exmntOpinionSeqNo?: string; + exmntOpinionCn?: string; + scdExmntOpinionSeqNo?: string; + prmyExmntOpinionSeqNo?: string; + splCn?: string; + pageIndex?: number; + recordCountPerPage?: number; + pageSize?: number; + searchKeyword?: string; + searchCondition?: string; +} + +export interface JobSeItem { + jobSeCd: string; + jobSeNm: string; +} + +export interface CeckVO { + ceckSn: string; + ceckCn: string; + ceckResultAt?: "Y" | "N"; + ceckResultCn?: string; + jobSe: string; +} + +export interface AtchFile { + atchFileId: string; + fileSn: string; + fileStreCours: string; + streFileNm: string; + orignlFileNm: string; + fileExtsn: string; + fileMg: number; + fileType?: string; + essntlAt?: "Y" | "N"; +} + +export interface ExmntOpinion { + exmntOpinionSeqNo: string; + instlCnfmDocNo: string; + exmntOpinionCn: string; + exmntResultAt?: "Y" | "N"; + atchFileList?: AtchFile[]; + regId?: string; + regDt?: string; +} + +export interface SplmntRqst { + splSeqNo: string; + instlCnfmDocNo: string; + splCn: string; + splDt?: string; + regId?: string; + regDt?: string; +} + +export interface ListPageResult { + cnt: number; + list: FnrscVO[]; + pageIndex: number; + lastPage: number; + paginationInfo: { + currentPageNo: number; + recordCountPerPage: number; + pageSize: number; + totalRecordCount: number; + lastPageNo: number; + }; + searchVO: FnrscVO; +} + +export interface RegistPageData { + ceckEssntlArr: Array<{ + jobSeCd: string; + jobSeNm: string; + ceckForm1: CeckVO[]; + essntlList: FnrscVO[]; + }>; + jobSe: string; + jobSeSp: string; + grpCd: string; + adstDstrCd: string; + lclgvrnmntNm: string; + localCd: string; +} + +export interface ViewPageData { + view: FnrscVO; + jobSeSp: string; + ceckEssntlArr: Array<{ + jobSeCd: string; + jobSeNm: string; + ceckForm1: FnrscVO[]; + essntlList: FnrscVO[]; + }>; + prmyFileList: FnrscVO[]; + scdFileList: FnrscVO[]; + etcFileList: FnrscVO[]; + grpCd: string; + usrId: string; + sanctnChk: Record; + spl: SplmntRqst | null; + opinionList: FnrscVO[]; +} diff --git a/apps/as/features/README.md b/apps/as/features/README.md index 37b83407e..2be9a3e17 100644 --- a/apps/as/features/README.md +++ b/apps/as/features/README.md @@ -1,36 +1,130 @@ # Features Layer -사용자 인터랙션과 비즈니스 기능을 구현하는 레이어입니다. +**Features**는 앱의 주요 사용자 상호작용과 기능을 구현하는 레이어입니다. 사용자가 실제로 수행하는 작업들로, 주로 비즈니스 엔티티와 관련이 있습니다. + +## 목적 + +- 사용자가 중요하게 생각하는 주요 상호작용 구현 +- 재사용 가능한 비즈니스 기능 제공 +- 여러 페이지에서 사용되는 기능의 중복 제거 + +## Feature로 만들어야 하는 경우 + +> ⚠️ **중요**: 모든 것을 feature로 만들 필요는 없습니다. + +Feature로 만드는 것이 좋은 지표: +- **여러 페이지에서 재사용됨**: 예를 들어, 여러 에디터가 있고 모두 댓글 기능이 있다면, 댓글은 재사용 가능한 feature입니다 +- **중요한 비즈니스 기능**: 신규 프로젝트 참여자가 Features 폴더를 보고 앱의 주요 기능을 빠르게 파악할 수 있어야 합니다 + +Feature가 너무 많으면 중요한 기능이 묻히므로, 신규 참여자의 경험을 최적화하여 결정하세요. ## 구조 -각 기능은 다음 구조를 따릅니다: +각 feature 슬라이스는 다음 세그먼트로 구성됩니다: ``` features/ └── [feature-name]/ - ├── api/ # API 호출 (선택적) - ├── model/ # 상태 관리 - ├── ui/ # UI 컴포넌트 - ├── lib/ # 유틸리티 함수 + ├── ui/ # 상호작용을 수행하는 UI (폼, 버튼 등) + ├── api/ # 액션 수행에 필요한 API 호출 (선택적) + ├── model/ # 검증 및 내부 상태 관리 (선택적) + ├── lib/ # 유틸리티 함수 (선택적) + ├── config/ # feature flags (선택적) └── index.ts # Public API ``` +### 세그먼트 설명 + +- **ui**: 사용자 상호작용을 위한 UI 컴포넌트 (폼, 모달, 버튼 등) +- **api**: feature 실행에 필요한 API 요청 함수 +- **model**: 폼 검증, 내부 상태, 비즈니스 로직 +- **lib**: feature 내부에서만 사용되는 유틸리티 +- **config**: feature flags, feature별 설정값 +- **index.ts**: 슬라이스의 Public API (외부에서 사용할 수 있는 것만 export) + ## 예시 ```typescript // features/auth-login/ui/login-form.tsx +import { useState } from 'react'; +import { loginUser } from '../api/login-user'; +import type { LoginCredentials } from '../model/types'; + export function LoginForm() { - // 로그인 폼 UI + const [credentials, setCredentials] = useState({ + email: '', + password: '' + }); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + await loginUser(credentials); + }; + + return ( +
+ setCredentials({ ...credentials, email: e.target.value })} + /> + setCredentials({ ...credentials, password: e.target.value })} + /> + +
+ ); +} + +// features/auth-login/api/login-user.ts +import type { LoginCredentials } from '../model/types'; + +export async function loginUser(credentials: LoginCredentials) { + const response = await fetch('/api/auth/login', { + method: 'POST', + body: JSON.stringify(credentials), + }); + return response.json(); +} + +// features/auth-login/model/types.ts +export interface LoginCredentials { + email: string; + password: string; } // features/auth-login/index.ts -export { LoginForm } from "./ui/login-form"; +export { LoginForm } from './ui/login-form'; +export { loginUser } from './api/login-user'; +export type { LoginCredentials } from './model/types'; ``` -## 규칙 +## 레이어 의존성 규칙 -1. 하나의 기능에만 집중합니다 -2. Entities와 Shared에만 의존할 수 있습니다 -3. 다른 Features에 직접 의존하면 안 됩니다 -4. 재사용 가능한 기능으로 설계합니다 +✅ **허용되는 의존성**: +- `shared` 레이어의 모듈 +- `entities` 레이어의 모듈 +- 같은 feature 슬라이스 내의 다른 세그먼트 + +❌ **금지된 의존성**: +- 다른 `features` 슬라이스 (feature 간 직접 의존 금지) +- `widgets` 레이어 +- `pages` 레이어 +- `app` 레이어 + +> 💡 **팁**: 여러 features가 공통 기능을 필요로 한다면, 그 기능을 `shared` 레이어로 이동시키거나 `entities` 레이어에서 관리하세요. + +## 명명 규칙 + +- 소문자와 대시 사용: `auth-login`, `post-create`, `comment-edit` +- 동사 형태 권장: 사용자 액션을 나타내는 이름 사용 +- 명확하고 구체적으로: 기능의 목적이 명확하게 드러나도록 + +## 주의사항 + +1. **하나의 기능에만 집중**: 각 feature는 단일 사용자 시나리오를 구현해야 합니다 +2. **재사용성 고려**: 여러 페이지에서 사용될 수 있도록 설계 +3. **독립성 유지**: 다른 features에 의존하지 않고 독립적으로 작동 +4. **적절한 추상화**: 너무 많은 feature를 만들지 말고, 중요한 기능 위주로 구성 diff --git a/apps/as/package.json b/apps/as/package.json index c50f002ea..a39004940 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "lint:fsd": "steiger ." }, "dependencies": { "@common/assets": "workspace:*", @@ -28,6 +29,7 @@ "postcss": "^8.4.49", "prettier": "^3.4.2", "prettier-plugin-tailwindcss": "^0.6.11", + "steiger": "^0.5.11", "tailwindcss": "^3.4.14", "typescript": "^5.7.2" } diff --git a/apps/as/shared/README.md b/apps/as/shared/README.md new file mode 100644 index 000000000..2b247021d --- /dev/null +++ b/apps/as/shared/README.md @@ -0,0 +1,149 @@ +# Shared Layer + +**Shared**는 애플리케이션의 기반을 형성하는 레이어입니다. 외부 세계(백엔드, 서드파티 라이브러리, 환경)와의 연결을 생성하고, 높은 응집력을 가진 자체 라이브러리를 정의하는 곳입니다. + +## 목적 + +- 외부 시스템 및 라이브러리와의 통합 +- 프로젝트 전체에서 사용되는 공통 코드 제공 +- 비즈니스 로직이 없는 재사용 가능한 유틸리티 및 UI 제공 +- 글로벌 설정 및 환경 변수 관리 + +## 특징 + +- **슬라이스 없음**: Shared 레이어는 비즈니스 도메인이 없으므로 슬라이스로 나뉘지 않습니다 +- **세그먼트 구성**: 기술적 목적에 따라 세그먼트로 직접 구성됩니다 +- **자유로운 import**: Shared 내의 모든 파일은 서로를 참조하고 import할 수 있습니다 + +## 구조 + +``` +shared/ +├── ui/ # 애플리케이션 UI Kit +│ ├── button/ +│ ├── input/ +│ ├── modal/ +│ └── index.ts +├── api/ # API 클라이언트 및 백엔드 엔드포인트 함수 +│ ├── client.ts +│ └── index.ts +├── lib/ # 내부 라이브러리 모음 +│ ├── dates/ # 날짜 관련 유틸리티 +│ ├── colors/ # 색상 관련 유틸리티 +│ ├── text/ # 텍스트 처리 유틸리티 +│ └── index.ts +├── config/ # 환경 변수, 글로벌 feature flags +│ ├── env.ts +│ └── index.ts +├── types/ # 공통 타입 정의 +│ └── index.ts +├── i18n/ # 번역 설정, 글로벌 번역 문자열 +│ └── index.ts +└── routes/ # 라우트 상수 또는 패턴 + └── index.ts +``` + +## 세그먼트 설명 + +### 📁 ui +애플리케이션의 UI Kit로, 비즈니스 로직을 포함하지 않는 재사용 가능한 UI 컴포넌트들입니다. + +- Button, Input, Modal 같은 기본 컴포넌트 +- 비즈니스 로직은 없지만 UI 로직은 포함 가능 (예: Autocomplete, SearchBar) +- 비즈니스 테마 컴포넌트도 허용 (예: 회사 로고, 페이지 레이아웃) + +### 📁 api +API 클라이언트 및 특정 백엔드 엔드포인트 요청 함수입니다. + +- HTTP 클라이언트 설정 (Axios, Fetch 등) +- 인증 인터셉터 +- 공통 에러 핸들링 + +### 📁 lib +내부 라이브러리 모음으로, 각 라이브러리는 **하나의 관심사**에 집중해야 합니다. + +> ⚠️ **중요**: `helpers`나 `utils` 폴더처럼 덤프 폴더로 만들지 마세요. 각 라이브러리는 명확한 초점 영역(예: dates, colors, text)을 가져야 하며, README로 문서화해야 합니다. + +### 📁 config +환경 변수, 글로벌 feature flags 및 앱 전체 설정입니다. + +### 📁 types +프로젝트 전체에서 사용되는 공통 타입 정의입니다. + +### 📁 i18n +번역 설정 코드 및 글로벌 번역 문자열입니다. + +### 📁 routes +라우트 상수 또는 라우트 매칭 패턴입니다. + +## 예시 + +```typescript +// shared/ui/button/button.tsx +interface ButtonProps { + children: React.ReactNode; + variant?: 'primary' | 'secondary'; + onClick?: () => void; +} + +export function Button({ children, variant = 'primary', onClick }: ButtonProps) { + return ( + + ); +} + +// shared/api/client.ts +import axios from 'axios'; + +export const apiClient = axios.create({ + baseURL: process.env.NEXT_PUBLIC_API_URL, + timeout: 10000, +}); + +// shared/lib/dates/format-date.ts +import dayjs from 'dayjs'; + +export function formatDate(date: Date, format: string = 'YYYY-MM-DD'): string { + return dayjs(date).format(format); +} + +// shared/config/env.ts +export const ENV = { + apiUrl: process.env.NEXT_PUBLIC_API_URL!, + isDev: process.env.NODE_ENV === 'development', +} as const; +``` + +## 레이어 의존성 규칙 + +✅ **허용되는 의존성**: +- 같은 `shared` 레이어 내의 다른 세그먼트 (자유로운 cross-import) +- 외부 라이브러리 및 패키지 + +❌ **금지된 의존성**: +- `entities` 레이어 +- `features` 레이어 +- `widgets` 레이어 +- `pages` 레이어 +- `app` 레이어 + +> 💡 **원칙**: Shared는 가장 낮은 레이어이므로 상위 레이어에 의존하지 않습니다. + +## 세그먼트 명명 규칙 + +세그먼트 이름은 **내용의 목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다. + +❌ **나쁜 예시**: `components`, `hooks`, `types` (본질을 설명) +✅ **좋은 예시**: `ui`, `api`, `lib/dates`, `config` (목적을 설명) + +## 주의사항 + +1. **비즈니스 로직 없음**: Shared는 순수한 기술적 코드만 포함 +2. **높은 재사용성**: 앱 전체에서 사용될 수 있어야 함 +3. **명확한 라이브러리 구조**: `lib` 내부는 관심사별로 명확하게 분리 +4. **문서화**: 각 라이브러리는 README로 사용법과 목적을 문서화 diff --git a/apps/as/shared/types/index.ts b/apps/as/shared/model/index.ts similarity index 100% rename from apps/as/shared/types/index.ts rename to apps/as/shared/model/index.ts diff --git a/apps/as/widgets/README.md b/apps/as/widgets/README.md index 7da206bc5..cd160abd9 100644 --- a/apps/as/widgets/README.md +++ b/apps/as/widgets/README.md @@ -1,35 +1,135 @@ # Widgets Layer -여러 features와 entities를 조합한 독립적인 UI 블록입니다. +**Widgets**는 큰 규모의 독립적인 UI 블록을 위한 레이어입니다. 여러 features와 entities를 조합하여 완전한 기능을 제공하는 복합 컴포넌트를 담습니다. + +## 목적 + +- 큰 규모의 독립적인 UI 블록 구성 +- 여러 features와 entities를 하나의 응집력 있는 UI로 결합 +- 여러 페이지에서 재사용되는 복잡한 UI 제공 +- 페이지 레벨 레이아웃 및 섹션 관리 + +## Widget으로 만들어야 하는 경우 + +Widget은 다음 조건에 해당할 때 사용하세요: + +✅ **Widget으로 만들기 좋은 경우**: +- 여러 페이지에서 재사용되는 큰 UI 블록 +- 페이지에 여러 개의 큰 독립적 블록이 있고, 이것이 그 중 하나인 경우 +- 페이지 레벨 레이아웃 컴포넌트 (nested routing 시스템 사용 시) + +❌ **Widget으로 만들지 말아야 하는 경우**: +- UI 블록이 페이지의 대부분을 차지하고 재사용되지 않는 경우 → 페이지 슬라이스 내부에 직접 배치 +- 작은 재사용 컴포넌트 → `shared/ui`에 배치 ## 구조 -각 위젯은 다음 구조를 따릅니다: +각 widget 슬라이스는 다음 세그먼트로 구성됩니다: ``` widgets/ └── [widget-name]/ - ├── ui/ # UI 컴포넌트 - ├── model/ # 상태 관리 (선택적) - ├── lib/ # 유틸리티 함수 (선택적) + ├── ui/ # 위젯의 메인 UI 컴포넌트 + ├── model/ # 위젯 내부 상태 관리 (선택적) + ├── api/ # 위젯 전용 API 호출 (선택적) + ├── lib/ # 위젯 내부 유틸리티 (선택적) └── index.ts # Public API ``` +### 세그먼트 설명 + +- **ui**: 여러 features와 entities를 조합한 위젯 UI +- **model**: 위젯 내부 상태 및 로직 (선택적) +- **api**: 위젯이 필요로 하는 데이터 fetching (선택적) +- **lib**: 위젯 내부에서만 사용되는 헬퍼 함수 (선택적) +- **index.ts**: 슬라이스의 Public API (외부에서 사용할 수 있는 것만 export) + ## 예시 ```typescript // widgets/header/ui/header.tsx +import { Logo } from 'shared/ui/logo'; +import { Navigation } from 'shared/ui/navigation'; +import { UserMenu } from 'features/user-menu'; +import { NotificationBell } from 'features/notifications'; + export function Header() { - // 헤더 UI (로고, 네비게이션, 사용자 메뉴 등) + return ( +
+ + + + +
+ ); } -// widgets/header/index.ts -export { Header } from "./ui/header"; +// widgets/product-list/ui/product-list.tsx +import { useProducts } from '../api/use-products'; +import { ProductCard } from 'entities/product'; +import { AddToCartButton } from 'features/cart-add-item'; + +export function ProductList() { + const { data: products, isLoading } = useProducts(); + + if (isLoading) return
로딩 중...
; + + return ( +
+ {products.map((product) => ( +
+ + +
+ ))} +
+ ); +} + +// widgets/product-list/api/use-products.ts +import { useQuery } from '@tanstack/react-query'; +import { getProducts } from 'entities/product'; + +export function useProducts() { + return useQuery({ + queryKey: ['products'], + queryFn: getProducts, + }); +} + +// widgets/product-list/index.ts +export { ProductList } from './ui/product-list'; ``` -## 규칙 +## 레이어 의존성 규칙 -1. 여러 Features와 Entities를 조합할 수 있습니다 -2. 다른 Widgets에 직접 의존하면 안 됩니다 -3. 독립적으로 작동할 수 있어야 합니다 -4. 페이지 레벨 레이아웃 컴포넌트로 사용됩니다 +✅ **허용되는 의존성**: +- `shared` 레이어의 모듈 +- `entities` 레이어의 모듈 +- `features` 레이어의 모듈 +- 같은 widget 슬라이스 내의 다른 세그먼트 + +❌ **금지된 의존성**: +- 다른 `widgets` 슬라이스 (widget 간 직접 의존 금지) +- `pages` 레이어 +- `app` 레이어 + +## 명명 규칙 + +- 소문자와 대시 사용: `header`, `sidebar`, `product-list` +- 명사 형태 권장: UI 블록의 성격을 나타내는 이름 사용 +- 구체적으로: 위젯의 역할이 명확하게 드러나도록 + +## Nested Routing 사용 시 + +Remix 같은 nested routing 시스템을 사용한다면: +- Widgets 레이어를 flat routing의 Pages 레이어처럼 사용 가능 +- 완전한 라우터 블록 생성 (데이터 fetching, loading states, error boundaries 포함) +- 페이지 레이아웃을 이 레이어에 저장 가능 + +## 주의사항 + +1. **독립성 유지**: 각 위젯은 독립적으로 작동 가능해야 합니다 +2. **적절한 크기**: 너무 작은 컴포넌트는 `shared/ui`에, 재사용되지 않으면 `pages`에 배치 +3. **응집력**: 관련된 features와 entities를 의미 있게 조합 +4. **재사용 최적화**: 여러 페이지에서 동일한 방식으로 사용될 수 있도록 설계 diff --git a/apps/cs/docs/표준단어정의서.md b/apps/cs/docs/표준단어정의서.md deleted file mode 100644 index 6950eb84b..000000000 --- a/apps/cs/docs/표준단어정의서.md +++ /dev/null @@ -1,831 +0,0 @@ -# 표준단어정의서 - -AI 이해용으로 정리된 표준단어명, 영문약어명, 영문명 목록입니다. - -| 표준단어명 | 표준단어 영문약어명 | 표준단어 영문명 | -|-----------|-------------------|----------------| -| BOD | BOD | Biochemical Oxygen Demand | -| C/N비 | CNR | Carbon-Nitrogen Ratio | -| COD | COD | Chemical Oxygen Demand | -| F/M비 | FMR | Food-Microorganism Ratio | -| GISD | GISDATA | Geographic Information System Data | -| HTML | HTML | Hypertext Markup Language | -| ID | ID | Id | -| IP | IP | Internet Protocol | -| KEY | KEY | Key | -| ND | ND | Not Detected | -| NON | NON | Non | -| NTU | NTU | Nephelometry Turbidity Unit | -| OPT | OPT | Opt | -| PAC | PAC | Polyaluminium Chloride | -| PH | PH | Hydrogen Exponent | -| PKI | PKI | Public Key Infrastructure | -| POOL | POOL | Pool | -| SS | SS | Suspended Solids (Ss) | -| TCE | TCE | Trichloroethane | -| TM | TM | Transverse Mercator | -| T-N | TN | Total Nitrogen | -| TOC | TOC | Total Organic Carbon | -| T-P | TP | Total Phosphorus | -| URL | URL | Uniform Resource Locator | -| 가구 | HSHD | Household | -| 가능 | PSBL | Possible | -| 가동 | OPR | Operation | -| 가산 | ADTN | Addition | -| 가성소다 | NAOH | Caustic Soda(Nach) | -| 가축분뇨 | ANMA | Animal Manure | -| 값 | VAL | Value | -| 강도 | IN | Intensity | -| 강우 | RAIN | Rain | -| 개방 | OPN | Opening | -| 개별 | INDIV | Individual | -| 개보수비 | RPAFEE | Repair Fee | -| 개설 | ESTBL | Establishment | -| 개시 | STRT | Start | -| 개정 | RVSN | Revision | -| 개조 | REMDEL | Remodeling | -| 개체 | INDVD | Individual | -| 개체군 | POPU | Population | -| 개폐 | RORGN | Reorganization | -| 갱신 | UPDT | Update | -| 건물 | BLDG | Building | -| 건설 | CONC | Construction | -| 건수 | NOCS | The Number Of Cases | -| 건조 | DRY | Dry | -| 검사 | INSP | Inspection | -| 검사서 | EXRPT | Examination Report | -| 검정 | RCGN | Recognition | -| 검증 | VRFC | Verification | -| 검출 | DETECT | Detection | -| 검토 | RVW | Review | -| 격자 | LATTC | Lattice | -| 결과 | RSLT | Result | -| 결의 | DCIS | Decision | -| 결정 | DCSN | Decision | -| 경계 | BNDRY | Boundary | -| 경과 | PROC | Process | -| 경도 | LOT | Longitude | -| 경보 | ALARM | Alarm | -| 경사판 | ICNTPT | Inclination plate | -| 계 | SUM | Summation | -| 계량기 | MRNR | Measuring Instrument | -| 계량기분리 | METRSPRT | Meter Separation | -| 계면 | SGLV | Sludge Level | -| 계산식 | FMUL | Formula | -| 계약 | CTRT | Contract | -| 계약기간 | CNTRPD | Contract Period | -| 계절 | SEASON | Season | -| 계획 | PLAN | Plan | -| 고도처리 | AWTR | Advanced Water Treatment | -| 고시 | ANCMNT | Announcement | -| 고액분리 | SLSPRT | Solid-Liquid Separation | -| 고형물체류시간 | SRT | Solid Retention Time | -| 공간데이터 | SPCEDATA | Space Data | -| 공공 | PUBLIC | Public | -| 공급 | SPLY | Supply | -| 공기 | AIR | Air | -| 공기여과 | ARFT | Air Filter | -| 공문 | ODOC | Official Documnet | -| 공법 | MSRC | Method Of Construction | -| 공사 | CSTRN | Construction | -| 공사비 | CONSTEXPN | Construction Expenses | -| 공업지역 | MNFTR_ARA | Manufacturing Area | -| 공용면적 | CMAR | Common Area | -| 공통 | CMMN | Commonness | -| 관 | PP | Pipe | -| 관계 | REL | Relation | -| 관련 | RLTN | Relation | -| 관로 | PPLINE | Pipe Line | -| 관리 | MNG | Management | -| 관리기관 | MGC | Management Agency | -| 관리자 | MNGR | Manager | -| 관찰 | WTCH | Watch | -| 관측 | OBSR | Observation | -| 관측소 | OBSRVT | Observatory | -| 교반기 | AGITOR | Agirator | -| 교정 | CRRC | Correction | -| 구간 | SCTN | Section | -| 구동 | DRIVE | Drive | -| 구분 | SE | Section | -| 구성 | CMPSG | Composing | -| 구역 | ZONE | Zone | -| 구조 | STRCT | Structure | -| 권역 | DSTR | District | -| 권한 | AUTH | Authority | -| 규격 | STNDRD | Standard | -| 규모 | SCAL | Scale | -| 규제 | REGL | Regulation | -| 균등 | EQLTY | Equality | -| 금액 | AMT | Amount | -| 급수 | WSP | Water Supply | -| 기간 | WHL | While | -| 기관 | INST | Institution | -| 기록 | RECD | Recording | -| 기록부 | REGI | Register | -| 기밀 | SCRET | Secret | -| 기법 | TECQU | Techniques | -| 기본 | BSIC | Basics | -| 기본정보 | BASINF | Bassinfo | -| 기본키 | PK | Primary Key | -| 기상 | WETHER | Weather | -| 기안 | DRFTG | Drafting | -| 기재 | WRIT | Write | -| 기점 | CDPNT | Cardinal Point | -| 기존 | LGCY | Legacy | -| 기준 | CRTR | Criteria | -| 기타 | ETC | Etc | -| 기한 | TERM | Term | -| 기후 | CLMT | Climate | -| 긴급 | EMRG | Emergency | -| 날개벽 | WW | Wing Wall | -| 날씨 | WETHR | Weather | -| 날짜 | DATE | DATE | -| 남조류 | BLAL | Blue-Green Algae | -| 납 | PB | Plumbum | -| 내려받기 | DWLD | Download | -| 내부반송 | ITNRCC | Internal Recycl | -| 내용 | CN | Content | -| 내용연수 | SVLF | Service Life | -| 냄새 | SMELL | Smell | -| 년 | YY | Year | -| 년간 | FAYR | For A Year | -| 노즐 | NZL | Nozzle | -| 노출 | EXPSR | Exposure | -| 농도 | DNSTY | Density | -| 농축 | TKN | Thickened | -| 누적 | ACML | Accumulate | -| 누출 | LKG | Leakage | -| 눈 | SNW | Snow | -| 단가 | UNPRC | Unit Price | -| 단기 | SRTPD | Short Period | -| 단순 | SIMPL | Simplicity | -| 단위 | UNIT | Unit | -| 대구역 | LZONE | Large Zone | -| 대분류 | LCLAS | Large Classification | -| 대장 | REGSTR | Register | -| 대장균 | COLI | Coliform, Fecal Coliform | -| 대장균군 | COLIB | Coliform Bacteria | -| 대지면적 | SIAR | Site Area | -| 대체 | RPLC | Replace | -| 덮개 | COVR | Cover | -| 데이타 | DAT | Data | -| 도구 | UNT | Unit | -| 도래 | ADVNT | Advent | -| 도로 | ROAD | Road | -| 도로명 | RN | Road Name | -| 도시 | CTY | City | -| 도엽 | MAPDMC | Map Demarcation | -| 도표 | CHART | Chart | -| 독성 | TOXCTY | Toxicity | -| 동의 | AGRE | Agreement | -| 동절기 | WSESN | The Winter Season | -| 등급 | GRD | Grade | -| 등기 | RG | Registered | -| 등록 | REG | Registration | -| 디바이스 | DVICE | Device | -| 디코딩 | DCD | Decoding | -| 레이어 | LYR | Layer | -| 로그인 | LGN | Login | -| 로우 | ROW | Row | -| 마감 | DDLN | Deadline | -| 마이크로필터 | MCRFT | Micro Filter | -| 막 | MBRN | Membrane | -| 만족도 | STFDG | Satisfaction Degree | -| 맑음 | CLAR | Clear | -| 매각 | SAL | Sale | -| 맨홀 | MH | Manhole | -| 맵 | MAP | Map | -| 메인 | MAIN | Main | -| 메일 | EMAIL | Email | -| 메탄올 | MTN | Methanol(CH3OH) | -| 명 | NM | Name | -| 모니터링 | MTRG | Monitoring | -| 모델 | MODL | Model | -| 모델링 | MODLNG | Modeling | -| 모래 | SAND | Sand | -| 목 | MOK | Mok | -| 무산소 | ANX | Anoxic | -| 무산소조 | ANX_TANK | Anoxic Tank | -| 무인센서 | MNLSENSR | Manless Sensor | -| 문서 | DCMT | Document | -| 물 | WTR | Water | -| 미급수 | NONWTRSPL | Non Water Supply | -| 미생물 | BLGC | Biological | -| 미세먼지 | PM | Particulate Matter | -| 미세목 | MCRB | Micro Bar | -| 민간위탁 | ETSVN | Entrustment To Civilian | -| 민감 | SST | Sensitive | -| 민원 | CVLCPT | Civil Complaint | -| 바이러스 | VIRS | Virus | -| 반기 | HT | Half Term | -| 반류수 | SIDSWT | Side Stream Water | -| 반송 | SNDBK | Send Back | -| 반송수 | RCCWT | Recycled Water | -| 반송슬러지 | RTNSLG | Return Sludge | -| 반영 | RFLT | Reflection | -| 반응조 | RETNK | Reactant Tank | -| 반출 | EXPRT | Export | -| 반토 | ALUM | Alumina | -| 반환 | GVBK | Giving Back | -| 받이 | INL | Inlet | -| 발생 | OCRN | Occurrence | -| 발전 | PWGNRT | Power Generation | -| 발주기관 | ORNT | Order Institution | -| 방류 | DCWTR | Discharge Water Stock Etc | -| 방류구 | DSCHG | Discharge | -| 방류수 | EFLEC | Effluence | -| 방문 | VST | Visit | -| 방문자 | VSTR | Visitor | -| 방법 | MTHD | Method | -| 방사 | RLSE | Release | -| 배관 | PLINE | Pipeline | -| 배분 | DSTRB | Distirbution | -| 배설물 | EXCRTN | Excretion | -| 배수 | DRNG | Drainage | -| 배수구역 | DRANGZN | Drainage Zone | -| 배출 | EXHST | Exhaust | -| 배출가스 | EMGA | Emission Gases | -| 배출구 | VENT | Vent | -| 배출시설 | DHGP | Discharge Equipment | -| 배출시험 | EXHTST | Exhaust Test | -| 배출자 | DCHGR | Discharge Person | -| 밸브 | VALVE | Valve | -| 번호 | NO | Number | -| 법 | LAW | Law | -| 법적 | LGL | Legal | -| 법정 | STTY | Statutory | -| 법정동 | STDG | Statutory Dong(Administrative District) | -| 법정리 | STLI | Statutory Li(Administrative District) | -| 변경 | CHG | Change | -| 변동 | FLCTN | Fluctuation | -| 변속기 | TRMIS | Transmission | -| 보고 | RPT | Report | -| 보고서 | RPOT | Report | -| 보관 | STORG | Storage | -| 보수 | MEND | Mend | -| 보유 | HOLD | Hold | -| 보정 | RVSION | Revision | -| 보조 | ASSISC | Assistance | -| 보조금 | SBSIDY | Subsidy | -| 복개 | COVE | Cover | -| 복토 | CWTH | Covering With Soil | -| 본류 | MI_RV | Main River | -| 본번 | MNO | Main Number | -| 부검 | ATPSY | Autopsy | -| 부과 | LEVY | Levy | -| 부과금 | LVYAMT | Levy Amount | -| 부기 | BUKIP | Bookkeeping | -| 부담금 | ALOTM | Allotment | -| 부번 | SNO | Sub Number | -| 부산물 | BYPRD | By-Product | -| 부서 | DEPT | Department | -| 부숙화 | DECPZ | Decomposed ~Ize | -| 부적합 | IMPPRTY | Impropriety | -| 부착 | ASN | Adhesion | -| 부품 | CMPNT | Components | -| 부하량 | LOADQTY | Load Quantity | -| 분과 | DIVSN | Division | -| 분뇨 | ENSO | Excreta, Night Soil | -| 분류 | CL | Classification | -| 분류군 | TAXON | Taxon | -| 분리막 | SPRTMBR | Separation Membrane | -| 분배 | DTRBT | Distribution | -| 분배조 | DTRBT_TANK | Distribution Tank | -| 분야 | RLM | Realm | -| 분원성 | FECL | Fecal | -| 분원성대장균군 | FCOLI | Fecal Coliform | -| 분원성연쇄상구균 | FCSTRCCI | Fecal Streptococci | -| 분할 | PRTIN | Partition | -| 비밀번호 | PSWD | Password | -| 비상 | EMGNY | Emergency | -| 비정상 | ABNRM | Abnormality | -| 사양 | SPECS | Specification | -| 사업비 | WCT | Working Cost | -| 사업장 | BPLC | Business Place | -| 사여과지 | SAND_ FILTR | Sand Filter | -| 사용 | USE | Use | -| 사용가능 | USABLE | Usable | -| 사용권 | RIOUS | Right Of Using | -| 사용량 | USG | USAGE | -| 사용자 | USER | User | -| 사위 | FDG | Four Directions Girth | -| 사유 | RESN | Reason | -| 사이클 | CYCLE | Cycle | -| 사이트 | SITE | Site | -| 사진 | PHOT | Photograph | -| 사항 | MATTR | Matter | -| 사후 | AFTFAT | After Fact | -| 삭제 | DEL | Deletion | -| 산기관 | DFS | Diffuser | -| 산업 | INDUST | Industrial | -| 산화환원전위 | ORP | Oxidation Reduction Potential | -| 살모넬라 | SLMN | Salmonella | -| 삼원촉매장치 | TWCTLC | Three Way Catalytic Converter | -| 상세 | DTL | Details | -| 상세주소 | DADDR | Detailed Address | -| 상수 | WT | Water | -| 상업지역 | CMCL_ARA | Commercial Area | -| 상태 | STUS | Status | -| 상품 | GDS | Goods | -| 상향류 | UFW | Upflow | -| 상호 | CONM | Company Name | -| 색도 | CRMTY | Chromaticity | -| 생략 | OMS | Omission | -| 생물 | LVB | Living Being | -| 생물반응조 | BIRAT | Bioreactor | -| 생물서식처 | ORGNHBT | Organism Habitat | -| 생물종 | BISP | Biological Species | -| 생성 | CRT | Creation | -| 생슬러지 | RSLG | Raw Sludge | -| 생태 | ECLGY | Ecology | -| 생태독성 | ECTOX | ecotoxicity | -| 서류 | PAPE | Papers | -| 서명 | SIGN | Signing | -| 서버 | SRVR | Server | -| 서비스 | SRVC | Service | -| 설계 | DESGN | Design | -| 설계용량 | DESGN_CPCT | Design Capacity | -| 설립 | FNDN | Foundation | -| 설정 | STNG | Setting | -| 설치 | INSTL | Installation | -| 성격 | CHTR | Character | -| 성공 | SCS | Success | -| 성능 | PRFMNC | Performance | -| 성능검사 | EFTST | Efficiency Test | -| 성적서 | SCRRP | Score Report | -| 세균 | BCLS | Bacillus | -| 세목 | FB | Fine bar | -| 세부 | DETAIL | Detail | -| 세정 | WS | Washing | -| 세정제 | CNML | Cleaning Material | -| 소 | SML | Small | -| 소독 | DSNF | Disinfection | -| 소독제 | DSINF | Disinfectant | -| 소분류 | SCLAS | Small Classification | -| 소수점 | DCPT | Decimal Point | -| 소요 | REQ | Required | -| 소유 | OWN | Own | -| 소유역 | SBASIN | Sub Basin | -| 소재지 | PLAC | Place Of Location | -| 소포 | ATFM | Antifoaming | -| 소포수 | FBW | Foam Breaking Water | -| 소포제 | ANAG | Antifoaming Agent | -| 송부 | SENDNG | Sending | -| 송신 | SNDM | Send Message | -| 송풍기 | BLW | Blower | -| 수 | CNT | Count | -| 수거 | TKAWY | Take Away | -| 수계 | WWBH | Watershed, Water Basin, Hydrosphere | -| 수동 | HOPR | Hand Operation | -| 수리학적 체류시간 | HRT | Hydraulic Retention Time | -| 수문 | Gate | Gate | -| 수산화나트륨 | SOHY | Sodium Hydroxide | -| 수소이온 | HION | Hydrogen Ion | -| 수신 | RCPTN | Reception | -| 수용가 | RCPTR | Receptor | -| 수위 | WAL | Water Level | -| 수정 | MDFCN | Modification | -| 수정자 | MDFR | Modifier | -| 수제 | SPRDIKE | Superdike | -| 수조 | Tank | Tank | -| 수질 | QTWT | Quality Of Water | -| 수질개선 | WTRQLIMP | Water Quality Improvement | -| 수질기준 | WQST | Water Quality Standards | -| 수질배출정보 | WTDI | Water Discharge Information | -| 수집 | CLCT | Collection | -| 순환 | CCL | Cycling | -| 쉬겔라 | SHIGLA | Shigella | -| 스컴 | SCM | Scum | -| 스크린 | SCR | Screen | -| 슬러지 | SLG | Sludge | -| 슬러지 밀도지수 | SDI | sludge density index | -| 슬러지 용량 지표 | SVI | Sludge Volume Index | -| 습지 | WTLN | Wetland | -| 승인 | APRV | Approval | -| 승인권 | APPRVRGT | Right Of Approval | -| 시각 | TIME | Time | -| 시간 | HR | Hour | -| 시군구 | SGG | Si/Gun/Gu | -| 시나리오 | SCEN | Scenario | -| 시도 | CTPV | Cities And Provinces | -| 시료 | SMPL | Sample | -| 시설 | FCLT | Facility | -| 시설면적 | FCAR | Facility Area | -| 시설물 | FCLTS | Facilities | -| 시스템 | SYS | System | -| 시안 | CYN | Cyaan | -| 시운전 | TSTRN | Test Run | -| 시작 | BGNG | Beginning | -| 시점 | PTM | Point Time | -| 시행 | ENFC | Enforcement | -| 시험 | TEST | Test | -| 신고 | DCLR | Declaration | -| 신고자 | DCL | Declarer | -| 신규 | NEW | New | -| 신기술 | NTCH | New Technology | -| 신뢰 | CNFDNC | Confidence | -| 신뢰성 | CRDIBLTY | Credibility | -| 실시 | OPRT | Operation | -| 실적 | ACRS | Actual Result | -| 실행 | EXCN | Execution | -| 심사 | SRNG | Screening | -| 심의 | DLBR | Deliberation | -| 아황산환원혐기성포자형성균 | SFSRA | Spore Forming Sulfite Reducing Anaerobes | -| 안정화 | STBLZT | Stabilization | -| 암롤박스(컨테이너) | ARTCT | Arm roll type container | -| 암모니아성질소 | NHN | Ammonia Nitrogen | -| 압력 | PRESSR | Pressure | -| 압송 | PUMPNG | Pumping | -| 압축 | CMPRS | Compress | -| 액비 | LQFERTLZ | Liquid Fertilizer | -| 액상 | LIQD | Liquid | -| 약 | GENTLE | Gentle | -| 약품 | CMC | Chemical | -| 약품비 | MEDFEE | Medicine Fee | -| 약품사용 | USMD | Use Medicines | -| 업로드 | UPLD | Upload | -| 업무 | DTY | Duty | -| 없음 | NOT | Nothing | -| 에너지 | ENR | Energy | -| 에틸벤젠 | ETBNZN | Ethylbenzene | -| 여과 | FILTR | Filteration | -| 여과수 | FTWT | Filtered Water | -| 여과재 | FTMTRL | Filter Material | -| 여과형 | FILTRFOM | Filter Form | -| 여부 | YN | Yes or No | -| 여시니아균 | YERSNA | Yersinia | -| 역률 | PWRER_FCT | Power Factor | -| 역세척 | BWS | Back Wash | -| 연결 | CONN | Connection | -| 연계 | LINK | Link | -| 연도 | YR | Year | -| 연락 | CNTC | Contact | -| 연령 | AGE | Age | -| 연료화 | FUELZ | Fuelize | -| 연월 | YM | Year and Month | -| 염소 | CLRN | Chlorine | -| 염소소독 | CHDI | Chlorine Disinfection | -| 염소이온 | CLION | Chlorine Ion | -| 염화제이철 | IRCLD | Iron(III) Chloride | -| 예보 | FRCST | Forecast | -| 예비 | PRPT | Preparation | -| 예산 | BGT | Budget | -| 예상 | EXPCT | Expectation | -| 예약 | RSVT | Reservation | -| 예외 | EXCPT | Exception | -| 예정 | PRNG | Prearrangement | -| 예찰 | PRDICT | Prediction | -| 오류 | ERR | Error | -| 오수받이 | HUS_INL | House Inlet | -| 오염물질 | CNTMN | Contaminant | -| 오염원 | POLUSRC | Pollution Source | -| 오존 | OZN | Ozone | -| 오프로드 | OFFRD | Off Road | -| 옥살산 | OXACID | Oxalic Acid | -| 와류 | VORTEX | Vortex | -| 와류형 | VORTXFOM | Vortex From | -| 완결 | COMPLT | Completion | -| 완료 | CMPTN | Completion | -| 완전 | PRFECT | Perfection | -| 요건 | REQSIT | Requisite | -| 요막액 | ALLNTFLD | Allantoic Fluid | -| 요청 | DMND | Demand | -| 용량 | CPCT | Capacity | -| 용역 | SERVC | Service | -| 용존산소 | DO | Dissolved Oxygen | -| 용해 | DSLV | Dissolving | -| 우량 | EXLT | Excellent | -| 우수 | ST | Storm | -| 우수받이 | STRT_INL | Street Inlet | -| 우수토구 | STM_OVFL_MUT | Storm Overflow Mouth | -| 우회 | BP | BY PASS | -| 운반 | CNVY | Conveyance | -| 운영 | OPER | Operation | -| 운영비 | OPEXP | Operation Expense | -| 운행 | OPRAT | Operation | -| 원격 | RMRT | Rmrt | -| 원격감시체계 | TMS | Tele Monitoring System | -| 원료 | MTRAL | Material | -| 원수 | ORGWT | Origin'S Water | -| 원인자 | ORGPR | The Origin Person | -| 월 | MM | Month | -| 위도 | LAT | Latitude | -| 위반 | CNTR | Contravene | -| 위촉 | ENTRST | Entrusting | -| 위치 | LOC | Location | -| 위탁 | CNSG | Consign | -| 위탁자 | CONSGNR | Consignor | -| 유기인 | ORGP | Organic Phosphorus | -| 유량 | FLUX | Flux | -| 유량조정조 | EQLZT__TANK | Equalization Tank | -| 유입 | INFlOW | Inflow | -| 유입수 | INFWTR | Influent Water | -| 유주 | SWARMG | Swarming | -| 유지 | MNTNC | Maintenance | -| 유지용수공급 | MWRS | Maintenance Water Requirement Supply | -| 유체 | FLUID | Fluid | -| 유출 | EFFLUX | Efflux | -| 유충 | LAVL | Larval | -| 유형 | TY | Type | -| 유효 | VLD | Validity | -| 음용 | DKPS | For Drinking Purpose | -| 읍면동 | EMD | Eup/Myun/Dong | -| 응답 | RSPNS | Response | -| 응집제 | COAG | Cohesive Agents | -| 이관 | TRNSF | Transfer | -| 이동 | MVMN | Movement | -| 이력 | HST | History | -| 이메일 | EML | Email | -| 이상 | ABOVE | Above | -| 이송 | TRSF | Transfer | -| 이의 | OBJC | Objection | -| 이차 | SCDR | Secondary | -| 이차침전지 | SCDR_SDMT_TANK | Secondary Sedimaentation | -| 이행 | MIG | Migratation | -| 인건비 | PEXP | Personnel Expenses{Expenditure] | -| 인계 | HNDVR | Handover | -| 인계서 | HDOVDC | Handover Document | -| 인구 | POPL | Population | -| 인산 | PHACID | Phosphoric Acid | -| 인산염인 | POP | phosphate | -| 인양기 | LFT | Lifter | -| 인원수 | NOPE | The Number of Persons | -| 인증 | CERT | Certification | -| 인처리 | PPRCS | Phosphorus Process | -| 인허가 | APVL | Approval | -| 일 | DY | Day | -| 일련번호 | SN | Serial Number | -| 일반 | GNRL | General | -| 일별 | DALY | Daily | -| 일시 | DT | Date and Time | -| 일자 | YMD | YEAR Month Day | -| 일지 | DIARY | Diary | -| 일차 | PRM | Primary | -| 일차침전지 | PST_SDMT_TANK | Primary Sedimentation Tank | -| 일평균 | DYRG | Day Average | -| 임시 | TMPR | Temporary | -| 임의 | RNDM | Random | -| 입고 | WRHS | Warehousing | -| 입력 | INPT | Input | -| 잉여 | SPS | Surplus | -| 잉여슬러지 | EC_SLG | Excess Sludge | -| 자 | MAN | Man | -| 자갈 | GRAVEL | Gravel | -| 자료 | DATA | Data | -| 자리 | DIGIT | Digit | -| 자립화 | SLFRLI | Self Reliance | -| 자연형 | NATRLFOM | Natural Form | -| 자외선 | URLI | Ultraviolet Rays, Light | -| 자재 | MTRIL | Material | -| 자체 | ITSL | Itself | -| 작성 | WRT | Writing | -| 작업 | JOB | Job | -| 잠금 | LOCK | Lock | -| 장기 | LNGTR | Long Term | -| 장소 | PLCE | Place | -| 장착 | MNTNG | Mounting | -| 재 | RE | Re | -| 재이용 | REUSE | Reuse | -| 재이용수 | | Reuse Water | -| 재활용 | RUSE | Reuse | -| 저감 | REDUC | Reduction | -| 저류조 | DTT_TANK | Detention Tank | -| 저온 | LOWTMP | Low Temperature | -| 저장 | STRG | Storage | -| 저장소 | STORGE | Storage | -| 적발 | DSCL | Disclose | -| 적산 | ADD | Addition | -| 적용 | APLCN | Application | -| 적합 | STBLT | Suitability | -| 전기 | ELCTY | Electricity | -| 전기료 | ELFEE | Electricity Fee | -| 전력 | PWRER | Power | -| 전문 | SPCY | Specially | -| 전산 | CMPUTT | Computation | -| 전송 | TRSM | Transmission | -| 전압 | VLTGE | Voltage | -| 전용 | EXUSE | Exclusive Use | -| 전원 | SELCT | Source Of Electricity | -| 전처리 | PRETR | Pretreatment | -| 점검 | CHCK | Check | -| 접속 | CNTN | Connection | -| 정밀 | PRCIS | Precision | -| 정보 | INFO | Information | -| 정산 | CLCLN | Calculation | -| 정상 | NRMLT | Normality | -| 정수장 | WPPW | Water Purification Plant, Waterworks | -| 정제 | REFINE | Refining | -| 정지 | STP | Stop | -| 제거 | RMV | Removal | -| 제수변 | SL_VALVE | Sluice Valve | -| 제작 | MNFCT | Manufacture | -| 제조사 | MKR | Maker | -| 제출 | SBMSN | Submission | -| 제한 | LIMT | Limitation | -| 조류 | ALG | Algae | -| 조목 | CSB | Coarse Bar | -| 조사 | EXMN | Examination | -| 조성 | MAKE | Make | -| 조정 | EQLT | Equalization | -| 조치 | ACTN | Action | -| 조회 | INQ | Inquiry | -| 존재 | EXST | Existence | -| 종결 | TRMN | Termination | -| 종균제 | MICBA | Microbial Agent | -| 종료 | END | End | -| 종류 | KND | Kind | -| 종목 | IEM | Item | -| 종별 | ASORT | Assortment | -| 종사자 | ENFSN | Enfilade Person | -| 종점 | TMNL | Terminal | -| 좌표 | COOR | Coordinate | -| 주간 | WIK | Week | -| 주변 | CFR | Circumference | -| 주소 | ADDR | Address | -| 주입 | IJTN | Injection | -| 주파수 | FQNC | Frequency | -| 준공 | CMCN | Completion Of Construction | -| 중권역 | MDSTRC | Medium District | -| 중복 | DPCN | Duplication | -| 중분류 | MLSFC | Middle Classification | -| 중온 | MESPH | Mesophilic | -| 중첩 | RETRTN | Reiteration | -| 중화설비 | NUTEQP | Neutralization Equipment | -| 중화제 | CNTAG | Counteragent | -| 증가 | INCRS | Increase | -| 지도점검표사본 | CITBMR | Copy of Instruction Checklist | -| 지방자치단체 | LGOV | Local Governments | -| 지번 | LOTNO | Lot Number | -| 지상 | GRND | Ground | -| 지역 | ARA | Area | -| 지질 | NTRFS | Nature Of Soil | -| 지질도 | GEOMAP | Geological Map | -| 지하 | UDGD | Underground | -| 지하수 | GROU | Groundwater | -| 지형 | TPGRPH | Topography | -| 진공 | VCM | Vacuum | -| 진단 | DGNSS | Diagnosis | -| 진동 | VIBRAT | Vibration | -| 진행 | PRGRE | Progress | -| 질산 | NIACID | Nitric Acid. | -| 질산성질소 | NO3N | Nitrate Nitrogen | -| 집계 | TOT | Total | -| 집계구 | SUMDST | Summation District | -| 집행 | IMPL | Implementation | -| 찌꺼기 | LEES | Lees | -| 차아염소산 | NAOCL | Hypochlorous Acid | -| 차집 | ITCT | Intercepting | -| 착공 | BGNCST | Begin Construction | -| 채수 | SAMWT | Sampling Of Water | -| 채수기 | WTRSMPLR | Water Sampler | -| 채수병 | WTRBOTL | Water Bottle | -| 처리 | PRCS | Process | -| 처리비 | PSSFEE | Process Fee | -| 처리수 | TRT_WT | Treated Water | -| 처리수조 | TRT_WT_TANK | Treated Water Tank | -| 처리시설 | TRTMTFCLT | Treatment Facility | -| 처리자 | PRCR | Processor | -| 처분 | DSPS | Disposition | -| 철염 | FESLT | Ferric Salt | -| 첨부 | ATCH | Attachment | -| 첨부파일 | ATFI | Attachment File | -| 초과 | EXCS | Excess | -| 초기화 | INITL | Initialization | -| 촉매 | CTLY | Catalyst | -| 총계 | TSM | Summation | -| 총대장균군 | TCOLFGRP | Total Coliform Group | -| 총량 | TQT | Total Quantity | -| 총면적 | GFA | Gross Floor Area | -| 총사업비 | TPCO | Total Project Cost | -| 총인구 | TPOPLTN | Total Population | -| 총인처리시설 | TPFCT | Total Phosphorus facility | -| 최근 | RCNT | Recent | -| 최대값 | MAXV | Maximum Value | -| 최소값 | MINV | Minimum Value | -| 최적 | BMTB | Being The Most Suitable | -| 최종 | LAST | Last | -| 최초 | FRST | First | -| 추출 | EXTR | Extraction | -| 추출정보 | EXTRINFO | Extraction Information | -| 축 | AXS | Axis | -| 출력 | OTPT | Output | -| 출발 | LVE | Leave | -| 충전기 | CHRGR | Charger | -| 취득 | ACQS | Acquisition | -| 취소 | RTRCN | Retraction | -| 측정 | MSUR | Measurement | -| 측정기 | MSRR | Measurement Instrument | -| 측정소 | MSRSTN | Measurement Station | -| 침사지 | GTCB | Grit Chamber | -| 침전 | SDMT | Sediment | -| 침전지 | SDMT_TANK | sedimentation tank | -| 컨베이어 | CVY | Conveyor | -| 컬럼 | COL | Column | -| 코드 | CD | Code | -| 크기 | SZ | Size | -| 크실렌 | XYLEN | Xylene | -| 탄화 | CARB | Carbonization | -| 탈거 | CRYOFF | Carry Off | -| 탈리액 | SPNT | Supernatant | -| 탈수 | DWTR | Dewatering | -| 탈수기 | DEHYM | Dehydration Machine | -| 탈질 | DNTFCT | Denitrificatio | -| 탈취 | DODRZ | Deodorization | -| 탈취기 | DEODRZ | Deodorizer | -| 탈취제 | DEODR | Deodorant | -| 탈황제 | DSLFA | Desulfurizing Agent | -| 터널형 | YUNLTP | Tunnel Type | -| 테이블 | TBL | Table | -| 토구 | OTFL | Outfall | -| 토지 | LAD | Land | -| 토지면적 | LDAR | Land Area | -| 통계 | STATS | Statistics | -| 통보 | NTFCTN | Notification | -| 통신 | COMM | Communication | -| 통지 | AVTSMT | Avertissement | -| 통합 | UNTY | Unity | -| 특성 | CHRT | Character | -| 특수 | SPECL | Special | -| 특정유해물질 | SHCH | Specified Hazardous Chemicals | -| 파일 | FILE | File | -| 판정 | JGMT | Judgement | -| 펌프 | PUMP | Pump | -| 펌프장 | PUMP_STT | Pump Station | -| 페놀 | PHNL | Phenol | -| 평가 | EVL | Evaluation | -| 폐기 | DSCD | Discard | -| 폐기물 | WSTE | Waste | -| 폐쇄 | CLSG | Closing | -| 폐수 | WAWA | Waste Water | -| 폐수처리 | WSWT | Wastewater Treatment | -| 폐열 | WASTHET | Waste Heat | -| 포기 | ARTN | Aeration | -| 포트 | PORT | Port | -| 폭기조 | ARTN_TANK | Aeration Tank | -| 폴리머 | PLYMR | Polymer | -| 폴리철 | FRRCSU | Ferric Sulfate | -| 표고 | AL | Altitude | -| 표기 | MARK | Mark | -| 표시 | INDCT | Indication | -| 표준 | STD | Standard | -| 표출 | EPRSS | Expression | -| 플래그 | FLAG | Flag | -| 필드 | FILD | Field | -| 필수 | ESNTL | Essential | -| 필증 | CERFIN | Certificate Of Finishing | -| 필터 | FLTER | Filter | -| 하수 | SWGE | Sewage | -| 하수도 | DRNGSYS | Drainage System | -| 하수미처리 | SEWGUNTTM | Un Sewage Treatment | -| 하수처리 | SEWGTRTM | Sewage Treatment | -| 하수처리수 | STWTR | Sewage Treatment Water | -| 하위 | LOWR | Lower | -| 하향류 | DWFW | Downflow | -| 할인 | DSCNT | Discount | -| 함수율 | MISTR_CTNT | Moisture content | -| 합계 | SMM | Summation | -| 해당 | RLVT | Relevant | -| 해석 | INTRPRTT | Interpretation | -| 해양투기 | OCDU | Ocean Dumping | -| 행망 | ADMNW | Administration Network | -| 행정 | ADMN | Administration | -| 행정구역 | ADMI | Administrative District | -| 행정동 | DONG | Dong (Administrative District) | -| 허가 | PRMSN | Permission | -| 허용 | PERM | Permission | -| 현상 | PHNMN | Phenomenon | -| 혐기 | AARB | Anaerobic | -| 혐기조 | AARB_TANK | Anaerobic tank | -| 협잡물 | CCMT | Concomitant | -| 형태 | SHAP | Shape | -| 호기 | ARB | Aerobic | -| 호기조 | ARB_TANK | Aerobic Tank | -| 호소수 | LMSHWT | Lake And Marsh Water | -| 호수 | LKE | Lake | -| 호안 | RVTMNT | Revetment | -| 호이스트 | HIST | Hoist | -| 혼합 | CMPN | Compound | -| 혼합액현탁고형물 | MLSS | Mixed liquor suspended solids | -| 혼화지 | MXG_TNAK | Mixing tank | -| 홈페이지 | HMPG | Homepage | -| 홍수 | FLOOD | Flood | -| 확인 | IDNTY | Identify | -| 확인서 | CNFRMN | Confirmation | -| 확인자 | IDFR | Identifier | -| 확장자 | EXTN | Extension | -| 확정 | CFMTN | Confirmation | -| 환경 | ENVR | Environment | -| 환경기초시설 | ENINF | Environmental Infrastructure | -| 환원 | RSTORE | Restoration | -| 활성탄 | AC | Activated Carbon | -| 활성화 | PRMT | Promote/Facilitate | -| 활용 | PRUS | Practical Use | -| 황산 | ECCBT | Encyclopaedia Britannica (H2So4) | -| 회사 | CO | Company | -| 회수 | RTRVL | Retrieval | -| 회신 | RPLY | Reply | -| 효율 | EFC | Efficiency | -| 효율성 | EFFCTV | Effectiveness | -| 휴대 | MBL | Mobile | -| 흡수정 | EXTTW | Extraction Well | -| 흡착 | ADST | Adsorption | diff --git a/docs/IIPBS_단어목록.md b/docs/IIPBS_단어목록.md new file mode 100644 index 000000000..87cfba8cb --- /dev/null +++ b/docs/IIPBS_단어목록.md @@ -0,0 +1,4760 @@ +# 단어목록 + + +| 단어명 | 영문약어명 | 영문명 | +| ----------- | ------ | ----------------------------------------------------- | +| 값 | VL | Value | +| 강 | BICLSS | (Biological) Class | +| 건 | EVNTCS | (Event) Case | +| 계 | BIKNDM | (Biological) Kingdom | +| 과 | BIFMLY | (Biological) Family | +| 구 | OLD | Old | +| 국 | TELOFC | Telephone Office | +| 길 | | | +| 널 | NUL | Null | +| 논 | PDFLD | Paddy Field | +| 답 | | | +| 댐 | DM | Dam | +| 률 | | | +| 리 | LI | Li | +| 명 | NM | Name | +| 목 | BIORDR | (Biological) Order | +| 문 | BIPHLM | (Biological) Phylum | +| 물 | WTR | Water | +| 밭 | FILD | (Farm) Field | +| 법 | LAW | Law | +| 보 | WEIR | Weir | +| 분 | MI | Minute | +| 뷰 | VIEW | View | +| 산 | MTN | Mountain | +| 선 | LINE | Line | +| 속 | BIGNUS | (Biological) Genus | +| 수 | CNT | Count | +| 열 | HEAT | Heat | +| 원 | | | +| 월 | MM | Month | +| 웹 | WEB | Web | +| 율 | | | +| 일 | DAY | Day | +| 전 | | | +| 종 | BISPCS | (Biological) Species | +| 좌 | LFT | Left | +| 주 | MN | Main | +| 쪽 | PAGE | Page | +| 책 | | | +| 초 | SS | (Time) Second | +| 층 | FLR | Floor | +| 타 | OTHR | Other | +| 팀 | TEAM | Team | +| 폭 | WDT | Width | +| 호 | | | +| 후 | | | +| 가감 | ADSB | Addition And Subtraction | +| 가격 | PRC | Price | +| 가공 | MNFCT | Manufacture | +| 가구 | HSHD | Household | +| 가능 | PSBLTY | Possibility | +| 가동 | OPRTNG | Operating | +| 가로 | WDTH | Width | +| 가뭄 | DRGHT | Drought | +| 가산 | ADTN | Addition | +| 가상 | VR | Virtual | +| 가스 | GAS | Gas | +| 가액 | EQVL | Equivalent Value | +| 가용 | AVL | Available | +| 가입 | JOIN | Join | +| 가점 | | | +| 가족 | FAM | Family | +| 가치 | WRTH | Worth | +| 각도 | ANGL | Angle | +| 각서 | MRND | Memorandum | +| 각하 | RJTN | Rejection | +| 간격 | GAP | Gap | +| 간부 | EXCTV | Excutive | +| 간사 | ORGNZR | Organizer | +| 간이 | SMPLF | Simplified | +| 간접 | IDRT | Indirect | +| 간편 | SMP | Simplicity | +| 감독 | SUP | Supervision | +| 감리 | SPVS | Supervision | +| 감면 | RDCT | Reduction | +| 감사 | ADT | Audit | +| 감소 | DCRS | Decrease | +| 감시 | SVLNC | Surveillance | +| 감액 | RDAMT | Reduction Amount | +| 감점 | SBPT | Subtract Points | +| 감정 | APRS | Appraisal | +| 감지 | SNSNG | Sensing | +| 감축 | RDC | Reduction | +| 강도 | STRTH | Strength | +| 강변 | RVSD | Riverside | +| 강사 | INSTR | Instructor | +| 강수 | PRCP | Precipitation | +| 강우 | RAIN | Rain | +| 강의 | LCTR | Lecture | +| 강제 | FRC | Force | +| 개관 | OPNNG | Opening | +| 개도 | OPRAD | Opening The Road | +| 개량 | IMPRVM | Improvement | +| 개문 | OPGTE | Opening The Gate | +| 개발 | DVLP | Development | +| 개방 | OPN | Open | +| 개별 | INDIV | Individual | +| 개봉 | OPEN | Open | +| 개선 | IMPV | Improvement | +| 개설 | ESTBL | Establishment | +| 개수 | | | +| 개시 | STRT | Start | +| 개업 | OPBIZ | Opening Of Business | +| 개요 | OTLN | Outline | +| 개인 | INDV | Individuals | +| 개점 | OPSTR | Open Store | +| 개정 | RVSN | Revision | +| 개찰 | BDOPN | Bid Opening | +| 개체 | INDVL | Individual | +| 개최 | HDMT | Hold A Meeting | +| 개통 | OPNG | Opening | +| 개폐 | SWCHG | Switching | +| 객석 | ADTRM | Auditorium | +| 객실 | GSRM | Guest Room | +| 객체 | OBJT | Object | +| 갯벌 | MDF | Mud Flat | +| 갱생 | RGNR | Regeneration | +| 갱신 | UPDT | Update | +| 거래 | DLNG | Dealings | +| 거리 | DSTNC | Distance | +| 거부 | RFUS | Refuse | +| 거절 | RFSL | Refusal | +| 거점 | POSITN | Position | +| 거주 | HAB | Habitation | +| 거치 | DFMT | Deferment | +| 건강 | HLTH | Health | +| 건물 | BLDG | Building | +| 건설 | BLDP | Build Up | +| 건수 | NOCS | The Number Of Cases | +| 건의 | SGST | Suggestion | +| 건조 | DRY | Dry | +| 건축 | ARCH | Architecture | +| 검사 | INSP | Inspection | +| 검색 | SRCH | Search | +| 검수 | IGI | Incoming Goods Inspection | +| 검정 | RCGN | Recognition | +| 검증 | VRFC | Verification | +| 검진 | CKUP | Checkup | +| 검체 | SPCMN | Specimen | +| 검출 | DTCT | Detection | +| 검침 | MTRD | Meter Reading | +| 검토 | RVW | Review | +| 게시 | PSTG | Posting | +| 게임 | GAME | Game | +| 격자 | LATC | Lattice | +| 견적 | ESTMT | Estimate | +| 결과 | RSLT | Result | +| 결근 | ABSWK | Absence From Work | +| 결산 | SOA | Settlement Of Accounts | +| 결석 | ABSNC | Absence | +| 결의 | RSLTN | Resolution | +| 결재 | ATRZ | Authorization | +| 결정 | DCSN | Decision | +| 결제 | STLM | Settlement | +| 결측 | MSNG | Missing | +| 결함 | DFC | Defect | +| 결합 | COMB | Combination | +| 결혼 | MRG | Marriage | +| 겸업 | SDJB | Side Job | +| 겸직 | CCPS | Concurrent Position | +| 경감 | RDUCT | Reduction | +| 경계 | MGNL | Marginal | +| 경고 | WARN | Warning | +| 경과 | ELPS | Elapse | +| 경도 | LOT | Longitude | +| 경력 | CRR | Career | +| 경로 | PATH | Path | +| 경매 | AUCTN | Auction | +| 경보 | ART | Alert | +| 경비 | EPS | Expense | +| 경영 | MNGM | Management | +| 경위 | CHIST | Case History | +| 경작 | CLVT | Cultivation | +| 경쟁 | CMPET | Competition | +| 경제 | ECNM | Economy | +| 경조 | CGCD | Congratulations And Condolences | +| 경차 | LVHC | Light Vehicles | +| 경품 | GVW | Giveaway | +| 경향 | TNDNC | Tendency | +| 경험 | EXPRNC | Experience | +| 계급 | ECHLN | Echelon | +| 계단 | STAIR | Stair | +| 계대 | SCDNG | Succeeding | +| 계량 | MSR | Measuring | +| 계산 | CAL | Calculation | +| 계수 | CFC | Coefficient | +| 계약 | CTRT | Contract | +| 계열 | SERS | Series | +| 계절 | SSN | Season | +| 계정 | ACNT | Account | +| 계좌 | BACNT | Bank Account | +| 계측 | MSRG | Measuring | +| 계층 | LYR | Layer | +| 계통 | PSYS | Power System/Circuit | +| 계획 | PLAN | Plan | +| 고객 | CUST | Customer | +| 고교 | | | +| 고도 | ALTD | Altitude | +| 고발 | ACSTN | Accusation | +| 고시 | ANCMNT | Announcement | +| 고용 | EPM | Employment | +| 고유 | UNQ | Unique | +| 고장 | BKDN | Breakdown | +| 고정 | FIX | Fixation | +| 고지 | INFRM | Inform | +| 고철 | STSCP | Steel Scrap | +| 고충 | DSTRS | Distress | +| 곡선 | CURVE | Curve | +| 골재 | AGGRGT | Aggregates | +| 공간 | SPAC | Space | +| 공개 | RLS | Release | +| 공고 | PBANC | Public Announcement | +| 공공 | PUB | Public | +| 공급 | SPLY | Supply | +| 공기 | AIR | Air | +| 공단 | IDTCMP | Industrial Complex | +| 공동 | JNT | Joint | +| 공란 | BLNK | Blank | +| 공람 | PDSP | Public Display | +| 공매 | PBAC | Public Auction | +| 공모 | PBCNTS | Public Contest | +| 공문 | OFDOC | Official Document | +| 공백 | | | +| 공법 | MTCNS | Method Of Construction | +| 공부 | OFBK | Official Book | +| 공사 | CSTRN | Construction | +| 공시 | PBLNT | Public Notice | +| 공실 | EPRM | Empty Room | +| 공업 | MDSR | (Manufacturing) Industry | +| 공연 | PRFR | Performance | +| 공용 | CMNUS | Common Use | +| 공원 | PARK | Park | +| 공유 | SHRN | Sharing | +| 공인 | PBFG | Public Figure | +| 공장 | FCTRY | Factory | +| 공적 | CNTRB | Contribution | +| 공정 | PROCS | Process | +| 공제 | DDC | Deduction | +| 공지 | NTC | Notice | +| 공채 | ONTPM | Open invitation of applications for employment | +| 공탁 | DPOST | Deposit | +| 공통 | COM | Common | +| 공포 | PRMG | Promulgation | +| 공표 | OFANC | Official Announcement | +| 과거 | PAST | Past | +| 과락 | FLSBJ | Fail A Subject | +| 과목 | SBJCT | Subject | +| 과세 | TXTN | Taxation | +| 과정 | CRS | Course | +| 과제 | ASMT | Assignment | +| 과학 | SCNC | Science | +| 관경 | PDMT | Pipe Diameter | +| 관계 | REL | Relation | +| 관광 | TOURSM | Tourism | +| 관급 | GVSP | Government Supply | +| 관내 | WTJR | Within The Jurisdiction | +| 관람 | VWNG | Viewing | +| 관련 | | | +| 관로 | PPL | Pipe Line | +| 관리 | MNG | Management | +| 관목 | SHRUB | Shrub | +| 관서 | GVMNFC | Government Office | +| 관심 | ITRST | Interest | +| 관압 | PIPS | Pipe Press | +| 관정 | GWEL | Groundwater Well | +| 관찰 | OBSR | Observation | +| 관청 | GVMNTC | Government Office | +| 관측 | OBSRVN | Observation | +| 관할 | CMPTNC | Competence | +| 광역 | WAREA | Wide Area | +| 교과 | | | +| 교란 | DSTRB | Disturb | +| 교량 | BRG | Bridge | +| 교목 | CHPLAN | Chaplain | +| 교부 | DTBN | Distribution | +| 교수 | PRFSR | Professor | +| 교육 | EDU | Education | +| 교재 | TCMTR | Teaching Materials | +| 교점 | NODE | Node | +| 교정 | RCTF | Rectification | +| 교체 | RPLC | Replacement | +| 교통 | TRFC | Traffic | +| 교환 | EXCH | Exchange | +| 교훈 | LSSN | Lesson | +| 구간 | ISEG | Interval Segment | +| 구내 | PRMS | Premises | +| 구매 | PRCHS | Purchase | +| 구분 | SE | Section | +| 구성 | CPST | Composition | +| 구역 | ZONE | Zone | +| 구입 | | | +| 구제 | RLF | Relief | +| 구조 | STRC | Structure | +| 구축 | ETBL | Establish | +| 국가 | NTN | Nation | +| 국고 | NTTR | National Treasury | +| 국내 | DMST | Domestic | +| 국도 | NARO | National Road | +| 국비 | NLEP | National Expenditure | +| 국산 | DMPRD | Domestic Product | +| 국외 | OVRSEA | Oversea | +| 국장 | DRTR | Director | +| 국적 | NTNLTY | Nationality | +| 국정 | NTAD | National Administration | +| 국제 | INTL | International | +| 국회 | NLASM | The National Assembly | +| 군락 | CLN | Colony | +| 군집 | BCMNT | (Biotic) Community | +| 군필 | MSVCF | Military Service Fulfilled | +| 굴뚝 | CHMN | Chimney | +| 굴착 | DGG | Digging | +| 권고 | RCMND | Recommendation | +| 권리 | RGHT | Right | +| 권역 | SAREA | Sub-Area | +| 권한 | AUTHRT | Authority | +| 권호 | EDTN | Edition | +| 귀속 | BLN | Belonging | +| 규격 | SPCFCT | Specification | +| 규모 | SCL | Scale | +| 규정 | RULE | Rule | +| 규제 | RGL | Regulation | +| 규칙 | RUL | Rule | +| 균등 | EQLTY | Equality | +| 균주 | STN | Strain | +| 그룹 | GROUP | Group | +| 근거 | BSS | Basis | +| 근로 | LBR | Labor | +| 근무 | WORK | Work | +| 근속 | CNSVC | Continuous Service | +| 근태 | ATAB | Attendance And Absence | +| 글꼴 | FONT | Font | +| 금강 | GMRVR | Geum River | +| 금리 | IRT | Interest Rate | +| 금속 | MTAL | Metal | +| 금액 | AMT | Amount | +| 금연 | NSMK | No Smoking | +| 금융 | FNNC | Finance | +| 금회 | TSTM | This Time | +| 급속 | RAP | Rapid | +| 급수 | WATSUP | Water Supply | +| 급여 | SLRY | Salary | +| 기각 | RJC | Reject | +| 기간 | PRD | Period | +| 기계 | MCHN | Machine | +| 기고 | CTB | Contribution (From) | +| 기관 | INST | Institution | +| 기구 | ORGZN | Organization | +| 기금 | | | +| 기기 | ISTR | Instrument | +| 기념 | CMMRT | Commemoration | +| 기능 | FWK | Functional Work | +| 기대 | EXPT | Expectation | +| 기록 | RCD | Record | +| 기반 | BAS | BASE | +| 기본 | BSC | Basic | +| 기부 | DNTN | Donation | +| 기사 | ARTC | Article | +| 기산 | RCK | Reckoning | +| 기상 | WTH | Weather | +| 기술 | TECH | Technology | +| 기안 | DRFT | Drafting | +| 기압 | ATMPR | Atmospheric Pressure | +| 기업 | ENT | Enterprise | +| 기여 | CTRBT | Contribution | +| 기온 | ARTMP | Air Temperature | +| 기원 | ORGN | Origin | +| 기자 | JRNLST | Journalist | +| 기재 | FLLN | Filling In | +| 기저 | BASIS | Basis | +| 기존 | EXS | Existing | +| 기종 | MKND | Machine Kind (Model) | +| 기준 | CRTR | Criteria | +| 기초 | BSCS | Basics | +| 기출 | PVEX | Previous Examination | +| 기타 | ETC | Etc | +| 기통 | CYLN | Cylinder | +| 기표 | BLTG | Balloting | +| 기한 | TERM | Term | +| 기호 | SMBL | Symbol | +| 기획 | PLN | Planning | +| 기후 | CLIMT | Climate | +| 긴급 | EMRG | Emergency | +| 길이 | LEN | Length | +| 깊이 | DPTH | Depth | +| 나라 | | | +| 나쁨 | BD | Bad | +| 나이 | | | +| 나지 | BLD | Bare Land | +| 낙차 | FLHD | Fall Head | +| 낙찰 | SCSBD | Successful Bid | +| 난간 | HDRL | Handrail | +| 난방 | HTNG | Heating | +| 날씨 | WTHR | Weather | +| 남성 | ML | Male | +| 남쪽 | STHRN | Southern | +| 납기 | DUDT | Due Date | +| 납부 | PAY | Payment | +| 납입 | | | +| 납품 | DLVGDS | Delivery Of Goods | +| 낭비 | WASTE | Waste | +| 내륙 | INLND | Inland | +| 내부 | INSD | Inside | +| 내선 | EXT | Extension | +| 내성 | TLRNC | Tolerance | +| 내역 | DSCTN | Description | +| 내용 | CN | Content | +| 내원 | VSHSP | Visit A Hospital | +| 내일 | TMRW | Tomorrow | +| 내진 | ETRS | Earthquake Resistant | +| 냄새 | SMLL | Smell | +| 냉각 | CLNG | Cooling | +| 냉동 | REFRIG | Refrigeration | +| 냉매 | RERGRT | Refrigerant | +| 냉방 | COOL | Cooling | +| 너비 | | | +| 년도 | | | +| 년수 | YYCNT | Year Count | +| 년월 | | | +| 노드 | | | +| 노력 | EFFORT | Effort | +| 노선 | RTE | Route | +| 노인 | SNCTZ | Senior Citizen | +| 노임 | WGS | Wages | +| 노장 | OBSVF | Observation Field | +| 노점 | | | +| 노조 | | | +| 노출 | EXPSR | Exposure | +| 노트 | | | +| 노후 | OBSLT | Obsolete | +| 녹취 | TRSC | Transcript | +| 논리 | LGC | Logic | +| 논문 | THSS | Thesis | +| 농가 | FRMHS | Farmhouse | +| 농도 | DNST | Density | +| 농약 | AGRPST | Agricultural Pesticides | +| 농업 | FARM | Farming | +| 농장 | FARMS | Farms | +| 농지 | AGLN | Agricultural Land | +| 농축 | ERCT | Enrichment | +| 높이 | HGT | Height | +| 누가 | CMTAD | Cumulative Addition | +| 누계 | ACTOT | Accumulated Total | +| 누락 | OMIT | Omit | +| 누수 | WTLKG | Water Leakage | +| 누적 | ACML | Accumulation | +| 누출 | LKG | Leakage | +| 뉴스 | NEWS | News | +| 능력 | ABLT | Ability | +| 다량 | BULK | Bulk | +| 다음 | NEXT | Next | +| 다중 | MLT | Multiple | +| 단가 | UNTPRC | Unit Price | +| 단계 | STP | Step | +| 단기 | SRTPD | Short Period | +| 단독 | SNGL | Single | +| 단면 | CRSCN | Cross Section | +| 단속 | CRDN | Crackdown | +| 단수 | SPWTSP | Suspension of Water Supply | +| 단어 | WORD | Word | +| 단위 | UNIT | Unit | +| 단일 | SINGL | Singleness | +| 단지 | CMPX | Complex | +| 단체 | GRP | Group | +| 단축 | SHRTN | Shortening | +| 달력 | CLDR | Calendar | +| 달성 | ACHV | Achievement | +| 담당 | TKCG | Taking Charge | +| 담보 | CLTR | Collateral | +| 담수 | PLWT | Plain Water | +| 답글 | PRPLY | (Post) Reply | +| 답변 | ANS | Answer | +| 답안 | ANSW | Answer | +| 답장 | RPL | Reply | +| 당기 | THTM | This Term | +| 당시 | TTM | That Time | +| 당월 | TSMM | This Month | +| 당일 | THDY | This Day | +| 당직 | ONDT | On Duty | +| 당첨 | PRWN | Prize Winning | +| 당초 | OGN | Origin | +| 당해 | TYY | This Year | +| 대가 | PYMNT | Payment | +| 대금 | PYMT | Payment | +| 대기 | WTNG | Waiting | +| 대량 | LQTY | Large Quantity | +| 대륙 | CNTNT | Continent | +| 대리 | SBT | Substitution | +| 대면 | FTF | Face To Face | +| 대민 | FCVLN | (For) Civilians | +| 대변 | CRSD | The Credit Side | +| 대비 | CTRS | Contrast | +| 대상 | TRGT | Target | +| 대수 | CNTOM | Count Of Machines | +| 대여 | RNTL | Rental | +| 대역 | BAND | Band | +| 대원 | CRW | Crew | +| 대응 | CRSP | Correspondence | +| 대장 | LDGR | Ledger | +| 대지 | ERTH | Earth | +| 대책 | CTPN | Counterplan | +| 대체 | SBST | Substitution | +| 대출 | LOAN | Loan | +| 대치 | RPMNT | Replacement | +| 대표 | RPRS | Representation | +| 대행 | PRXY | Proxy | +| 대형 | LGSZ | Large Size | +| 대화 | CNVRS | Conversation | +| 대회 | CNFRN | Conference | +| 댓글 | CMNT | Comment | +| 덮개 | COVR | Cover | +| 도구 | TOOL | Tool | +| 도급 | CTRC | Contract | +| 도달 | RCHNG | Reaching | +| 도래 | MGRTR | Migratory | +| 도로 | ROAD | Road | +| 도면 | FLRPLN | Floor Plan | +| 도색 | PAINT | Painting | +| 도서 | BOOK | Book | +| 도시 | CTY | City | +| 도엽 | MAPSHT | Map Sheet | +| 도입 | INTR | Introduction | +| 도착 | ARVL | Arrival | +| 도출 | DDUC | Deduction | +| 독려 | ENCR | Encouragement | +| 독성 | TOXC | Toxicity | +| 독촉 | URG | Urge | +| 돌풍 | GUST | Gust | +| 동거 | CHBTN | Cohabitation | +| 동결 | FRZG | Freezing | +| 동기 | MTV | Motive | +| 동력 | POWER | Power | +| 동물 | ANML | Animal | +| 동반 | ACMP | Accompany | +| 동시 | SMLTN | Simultaneous | +| 동압 | DNMPRS | Dynamic Pressure | +| 동의 | AGRE | Agreement | +| 동일 | SAME | Same | +| 동작 | MOTN | Motion | +| 동쪽 | ESTRN | Eastern | +| 동파 | FRZBUR | Frozen To Burst | +| 동향 | | | +| 두께 | THICK | Thickness | +| 두수 | NOHD | The Number Of Heads | +| 둔치 | ESPD | Esplanade | +| 둘레 | CRCF | Circumference | +| 뒷면 | BKSD | Back Side | +| 드론 | DRN | Drone | +| 등급 | GRD | Grade | +| 등기 | RG | Registered | +| 등록 | REG | Registration | +| 등재 | REGST | Registration | +| 뚜껑 | LID | Lid | +| 라벨 | LBL | Label | +| 라틴 | LTN | Latin | +| 레벨 | LVL | Level | +| 로그 | LOG | Log | +| 로트 | LT | Lot | +| 리셋 | | | +| 링크 | | | +| 마감 | DDLN | Deadline | +| 마을 | VLG | Village | +| 만기 | MTRY | Maturity | +| 만료 | EXPRY | Expiry | +| 만족 | STFC | Satisfaction | +| 말소 | ERSR | Erasure | +| 맞춤 | CSTMZ | Custmizing | +| 매각 | DSPSL | Disposal | +| 매도 | SLL | Sell | +| 매립 | RCLM | Reclamation | +| 매매 | TRD | Trading | +| 매설 | LAYING | Laying | +| 매수 | BYNG | Buying | +| 매입 | | | +| 매장 | SHOP | Shop | +| 매출 | SLS | Sales | +| 매핑 | MPNG | Mapping | +| 맨홀 | MNHL | Manhole | +| 먼지 | DST | Dust | +| 메뉴 | MENU | Menu | +| 메모 | MEMO | Memo | +| 메인 | | | +| 메일 | | | +| 메타 | META | Meta | +| 메탄 | METHN | Methane | +| 면담 | ITVW | Interview | +| 면세 | TXEX | Tax Exemption | +| 면적 | AREA | Area | +| 면접 | INTV | Interview | +| 면제 | EXMPTN | Exemption | +| 면책 | EXRS | Exemption From Responsibility | +| 면허 | LCNS | License | +| 멸균 | STZ | Sterilization | +| 명령 | CMD | Command | +| 명명 | NMNG | Naming | +| 명세 | PRTCLR | Particulars | +| 명수 | | | +| 명예 | HNR | Honor | +| 명의 | NMNL | Nominal | +| 명칭 | | | +| 모델 | MDL | Model | +| 모듈 | MODL | Module | +| 모래 | SAND | Sand | +| 모레 | DATMRW | Day After Tomorrow | +| 모양 | SHAPE | Shape | +| 모집 | RCRT | Recruitment | +| 모형 | | | +| 목록 | LIST | List | +| 목재 | TIMBER | Timber | +| 목적 | PRPS | Purpose | +| 목차 | TOC | Table Of Contents | +| 목표 | GOAL | Goal | +| 묘지 | GRVYD | Graveyard | +| 무게 | | | +| 무료 | FREE | Free | +| 무상 | FRE | Free | +| 무선 | WRLS | (Network) Wireless | +| 무형 | ITN | Intangible | +| 무효 | INVLD | Invalidity | +| 묶음 | BNDL | Bundle | +| 문구 | PHRS | Phrase | +| 문서 | DOC | Document | +| 문의 | ENQY | Enquiry | +| 문자 | LTR | Letter | +| 문제 | PRBLM | Problem | +| 문항 | QITEM | Question Item | +| 문헌 | LTRT | Literature | +| 문화 | CTR | Culture | +| 물가 | PRCO | Prices Of Commodities | +| 물건 | THING | Thing | +| 물류 | LOGIS | Logistics | +| 물리 | PHYS | Physics | +| 물빛 | DYCLR | Dye Color | +| 물적 | SBSTE | Substance | +| 물질 | SBSTN | Substance | +| 물품 | CMDTY | Commodity | +| 미결 | PND | Pendency | +| 미납 | UNPAID | Unpaid | +| 미달 | BLSTD | BelowStandard | +| 미만 | UDR | Under | +| 미수 | UCLT | Uncollected | +| 미투 | METOO | Metoo Movement | +| 미필 | INCMP | Incompletion | +| 미흡 | INSF | Insufficiency | +| 민간 | PRVTO | Private (Non-Official) | +| 민감 | SST | Sensitive | +| 민원 | CVLCPT | Civil Complaint | +| 밀도 | SMPVM | Substance's Math Per Volume | +| 밀폐 | SEALG | Sealing | +| 바닥 | BTM | Bottom | +| 바람 | WIND | Wind | +| 반경 | RDIS | Radius | +| 반기 | HT | Half Term | +| 반납 | RTN | Return | +| 반대 | OPST | Opposition | +| 반려 | RJCT | Reject | +| 반복 | REPT | Repetition | +| 반송 | SNDBK | Send Back | +| 반영 | RFLT | Reflection | +| 반응 | RACT | Reaction | +| 반입 | CRYN | Carry In | +| 반출 | SHPGOT | Shipping Out | +| 반품 | RTGD | Returned Goods | +| 반환 | GVBK | Giving Back | +| 받는 | | | +| 발간 | PBLS | Publish | +| 발견 | DSCV | Discovery | +| 발광 | LMNS | Luminous | +| 발급 | ISSU | Issue | +| 발령 | APNT | Appoint | +| 발명 | INVN | Invention | +| 발병 | ONST | Onset | +| 발부 | ISUE | Issue | +| 발생 | OCRN | Occurrence | +| 발송 | SNDNG | Sending | +| 발신 | DSPTCH | Dispatch | +| 발암 | CCGS | Carcinogenesis | +| 발열 | FVR | Fever | +| 발의 | PRPSL | Proposal | +| 발전 | ETGT | Electricity Generation | +| 발주 | ORDER | Order | +| 발표 | PRSNTN | Presentation | +| 발행 | PBLCN | Publication | +| 발효 | EFCTN | Effectuation | +| 방류 | DSCHG | Discharge | +| 방문 | VST | Visit | +| 방법 | MTHD | Method | +| 방송 | BRDC | Broadcast | +| 방수 | WPROF | Waterproof | +| 방식 | MTH | Method | +| 방안 | MSRS | Measures | +| 방어 | DFS | Defense | +| 방위 | DRTN | Direction | +| 방재 | PVOD | Prevention Of Disasters | +| 방제 | INPS | Insect Pests | +| 방지 | PRV | Prevention | +| 방침 | PRCPL | Principle | +| 방향 | DCTN | Direction | +| 배경 | BKGR | Background | +| 배관 | PIPE | Pipe | +| 배너 | BNR | Banner | +| 배당 | ALCTN | Allocation | +| 배부 | HNDT | Handout | +| 배분 | APRT | Apportionment | +| 배상 | RPN | Reparation | +| 배송 | DLVR | Delivery | +| 배수 | | | +| 배양 | CLTVT | Cultivate | +| 배점 | SCOR | Scoring | +| 배정 | ALTMNT | Allotment | +| 배제 | EXCLU | Exclusion | +| 배지 | CTRMD | Culture Medium | +| 배차 | CRAL | Car Allocation | +| 배출 | EMSN | Emission | +| 배치 | BTCH | Batch | +| 배포 | CRLTN | Circulation | +| 백신 | VACN | Vaccine | +| 백업 | BKUP | Backup | +| 밸브 | VALVE | Valve | +| 버전 | VER | Version | +| 버튼 | BTN | Button | +| 번역 | TRSL | Translation | +| 번호 | NO | Number | +| 벌금 | FNE | Fine | +| 벌점 | DEM | Demerit Mark | +| 범례 | LGND | Legend | +| 범위 | SCP | Scope | +| 범주 | CTGRY | Category | +| 법규 | LWRG | Laws And Regulations | +| 법령 | STT | Statute | +| 법무 | JDAF | Judicial Affairs | +| 법안 | LBIL | (Law) Bill | +| 법원 | CT | Court | +| 법인 | CORP | Corporation | +| 법적 | LGL | Legal | +| 법정 | STTY | Statutory | +| 변경 | CHG | Change | +| 변동 | FLCTN | Fluctuation | +| 변수 | VRBL | Variable | +| 변이 | MTTN | Mutation | +| 변제 | REPAY | Repayment | +| 변종 | VRY | (Biological) Variety | +| 변형 | DFRMT | Deformation | +| 변화 | VARTN | Variation | +| 변환 | TRSF | Transformation | +| 별도 | APART | Apart | +| 별명 | | | +| 별칭 | NCNM | Nickname | +| 별표 | ASTK | Asterisk | +| 병가 | SKLV | Sick Leave | +| 병과 | BR | Branch (Of Service) | +| 병상 | SCKBD | Sickbed | +| 병설 | ESANX | Establish Sth As An Annex | +| 병원 | HSPTL | Hospital | +| 병합 | MRGER | Merger | +| 보강 | REINFC | Reinforcement | +| 보건 | HLTHCR | Health Care | +| 보고 | RPT | Report | +| 보관 | KPNG | Keeping | +| 보급 | PSPLY | Public Supply | +| 보기 | EXMCS | (Example) Case | +| 보도 | NSCVRG | News Coverage | +| 보류 | HLDOF | Hold Off | +| 보상 | CMPN | Compensation | +| 보세 | BOND | Bonded | +| 보수 | | | +| 보안 | SCRTY | Security | +| 보완 | SPLMNT | Supplementation | +| 보유 | HLD | Holding | +| 보전 | PRSRV | Preservation | +| 보정 | CRCT | Correction | +| 보조 | ASST | Assistance | +| 보존 | PRSV | Preservation | +| 보증 | GRNTE | Guarantee | +| 보직 | APPNT | Appointment | +| 보통 | USL | Usual / Neutral | +| 보험 | INSRNC | Insurance | +| 보호 | PRTC | Protection | +| 보훈 | PV | Patriots And Veterans | +| 복개 | RCVG | River Covering | +| 복구 | RSTR | Restoration | +| 복무 | SERVC | Service | +| 복본 | DPLC | Duplication | +| 복사 | COPY | Copy | +| 복원 | RSTRT | Restoration | +| 복지 | WLFR | Welfare | +| 복직 | RINST | Reinstatement | +| 복토 | CWTH | Covering With Soil | +| 복합 | MULTI | Multiplex | +| 본류 | MNSTM | The Main Stream | +| 본문 | MTXT | Main Text | +| 본번 | MNO | Main Number | +| 본부 | HQ | Headquarters | +| 본사 | HDOFC | Head Office | +| 본세 | MNTX | Main Tax | +| 본인 | ONSLF | Oneself | +| 본점 | MNBR | Main Branch | +| 봉사 | SVC | Service | +| 부가 | ADDTN | Addition | +| 부과 | LEVY | Levy | +| 부담 | BRDN | Burden | +| 부당 | UNFAR | Unfair | +| 부대 | SBSD | Subsidiary | +| 부도 | ISVC | Insolvency | +| 부모 | PRNT | Parent | +| 부문 | SECT | Sector | +| 부번 | SNO | Sub Number | +| 부분 | PART | Part | +| 부상 | INJR | Injury | +| 부서 | DEPT | Department | +| 부설 | LAY | Lay | +| 부속 | ANX | Annex | +| 부수 | NOCP | Number Of Copies | +| 부식 | CORRSN | Corrosion | +| 부양 | SPT | Support | +| 부여 | GRNT | Grant | +| 부위 | REGN | Region | +| 부임 | ACSN | Accession | +| 부재 | ABSN | Absence | +| 부제 | | | +| 부족 | SHTG | Shortage | +| 부지 | LND | Land | +| 부착 | STIK | Sticking | +| 부채 | LBLT | Liabilities | +| 부처 | MAO | Ministry And Office | +| 부품 | PRTS | Parts | +| 부호 | SYMBL | Symbol | +| 북쪽 | NRTRN | Northern | +| 분개 | JRNL | Journalizing | +| 분과 | SCMT | Subcommittee | +| 분기 | QTR | Quarter | +| 분납 | ISPY | Installment Payment | +| 분뇨 | HMN | Humanure | +| 분담 | SHARE | Share | +| 분당 | PRMI | Per Minute | +| 분류 | CLSF | Classification | +| 분리 | SPR | Separate | +| 분배 | | | +| 분석 | ANLS | Analysis | +| 분쇄 | CRSH | Crush | +| 분수 | WTRDVN | Water Diversion | +| 분실 | LOST | Lost | +| 분야 | FLD | Field | +| 분양 | LTOT | Lotting-Out | +| 분자 | MOCL | Molecule | +| 분쟁 | DISPT | Dispute | +| 분포 | DSTB | Distribution | +| 분할 | PRTTN | Partition | +| 분해 | DCOMP | Decomposition | +| 불가 | IMPS | Impossible | +| 불능 | INBL | Inability | +| 불량 | BAD | Bad | +| 불만 | DSCNTT | Discontent | +| 불법 | UNLAW | Unlawfulness | +| 불복 | DSBDNC | Disobedience | +| 불용 | DUSE | Disuse | +| 불입 | PAYMNT | Payment | +| 불참 | NATT | Nonattendance | +| 불출 | RELS | Release | +| 블록 | BLCK | Block | +| 비고 | RMRK | Remarks | +| 비교 | CMPR | Compare | +| 비닐 | VINYL | Vinyl | +| 비료 | FERT | Fertilizer | +| 비목 | ITMEXP | Item Of Expenditure | +| 비밀 | SCRET | Secret | +| 비산 | ASCTR | Air Scatter | +| 비상 | EMRGY | Emergency | +| 비용 | CST | Cost | +| 비위 | VIOL | Violation | +| 비율 | RT | Rate | +| 비중 | SPGR | Specific Gravity | +| 비치 | FRNSH | Furnishing | +| 비품 | FXTRS | Fixtures | +| 비행 | FLYNG | Flying | +| 빈도 | FREQ | Frequency | +| 사건 | INCDNT | Incident | +| 사고 | ACDNT | Accident | +| 사령 | DTOF | Duty Officer | +| 사례 | CASE | Case | +| 사료 | FEED | Feed | +| 사망 | DTH | Death | +| 사면 | PRDN | Pardon | +| 사무 | OFCW | Office Work | +| 사수 | DWTR | Dead Water | +| 사실 | FACT | Fact | +| 사업 | BIZ | Business | +| 사용 | USE | Use | +| 사원 | | | +| 사유 | RSN | Reason | +| 사육 | BRED | Breed | +| 사전 | BFHD | Beforehand | +| 사주 | SNDBR | Sand Bar | +| 사진 | PHOTO | Photograph | +| 사체 | CORPSE | Corpse | +| 사항 | MTTR | Matter | +| 사회 | SOCTY | Society | +| 사후 | EPFC | Ex Post Facto | +| 삭감 | CTBK | Cutback | +| 삭제 | DEL | Deletion | +| 산간 | MNTNS | Mountainous | +| 산림 | FORST | Forest | +| 산소 | OXYG | Oxygen | +| 산식 | FMLA | Formula | +| 산업 | INDST | Industry | +| 산입 | INCLSN | Inclusion | +| 산재 | IA | Industrial Accident | +| 산정 | CMPTTN | Computation | +| 산지 | MTLND | Mountain Land | +| 산출 | CALC | Calculation | +| 산하 | AFLTD | Affiliated | +| 살수 | SPRKL | Sprinkling | +| 살포 | SPRAY | Spray | +| 상가 | STORE | Store (Section) | +| 상각 | AMTZ | Amortization | +| 상계 | STFF | Setoff | +| 상관 | CRLT | Correlation | +| 상금 | AWARD | Award | +| 상단 | UPEND | Upper End | +| 상담 | DSCSN | Discussion | +| 상대 | RLT | Relative | +| 상류 | UPSTM | Upstream | +| 상벌 | RWPN | Reward And Punishment | +| 상부 | UPPRT | Upper Part | +| 상세 | DTL | Details | +| 상소 | APLH | Appeal To A Higher Court | +| 상속 | IHRT | Inheritance | +| 상쇄 | OFSTG | Offsetting | +| 상승 | ASND | Ascending | +| 상시 | ODTM | Ordinary Times | +| 상신 | RTSO | Report To Superior Official | +| 상실 | LOSE | Lose | +| 상압 | NMPS | Normal Pressure | +| 상업 | CMC | Commerce | +| 상영 | SCRG | Screening | +| 상온 | RMTMP | Room Temperature | +| 상용 | CMCUS | Commercial Use | +| 상위 | UP | Upper | +| 상장 | LSTG | Listing | +| 상주 | RESD | Reside | +| 상층 | UPCL | Upper Class | +| 상태 | STTS | Status | +| 상표 | TDMK | Trademark | +| 상품 | GDS | Goods | +| 상한 | UPLMT | The Upper Limit | +| 상해 | BHRM | Bodily Harm | +| 상향 | UPWRD | Upward | +| 상호 | CONM | Company Name | +| 상환 | RPMT | Repayment | +| 상황 | STTN | Situation | +| 상훈 | PZDC | Prizes And Decorations | +| 새창 | NPAG | New Page | +| 색도 | CRMTY | Chromaticity | +| 색맹 | ACHRM | Achromatopsia | +| 색상 | COLR | Color | +| 색인 | INDX | Index | +| 샘플 | SMPLE | Sample | +| 생물 | CRTURE | Creature | +| 생산 | PRDCTN | Production | +| 생성 | CRT | Creation | +| 생식 | PRTN | Procreation | +| 생존 | SRVL | Survival | +| 생태 | ECLG | Ecology | +| 생활 | LVNG | Living | +| 서가 | BKSH | Bookshelf | +| 서류 | DCMNT | Document | +| 서면 | WRTN | Written | +| 서명 | SIGN | Signature | +| 서무 | GNAFR | General Affairs | +| 서버 | SRVR | Server | +| 서식 | TMPLT | Template | +| 서약 | OATH | Oath | +| 서쪽 | WSTRN | Western | +| 서체 | | | +| 석면 | ABSTS | Asbestos | +| 석식 | DNNR | Dinner | +| 석축 | STNWRK | Stonework | +| 선고 | ADJ | Adjudication | +| 선납 | PRPY | Prepayment | +| 선로 | RLWY | Railway | +| 선박 | VSL | Vessel | +| 선발 | PICK | Pick | +| 선별 | SLCF | Select And Classify | +| 선원 | CREW | Crew | +| 선임 | | | +| 선장 | CPTN | Captain | +| 선적 | SHPG | Shipping | +| 선정 | SLCTN | Selection | +| 선택 | CHC | Choice | +| 선행 | PRCD | Preceding | +| 선호 | PRFRC | Preferance | +| 설계 | DESIGN | Design | +| 설립 | FNDN | Foundation | +| 설명 | EXPLN | Explanation | +| 설문 | SRVY | Survey | +| 설비 | FCL | (Equipment) Facility | +| 설정 | STNG | Setting | +| 설치 | INSTL | Installation | +| 섭식 | FED | Feeding | +| 성격 | PRSNL | Personality | +| 성공 | SCS | Success | +| 성과 | OTCM | Outcome | +| 성능 | PRFRNC | (Machine) Performance | +| 성명 | FLNM | Full Name | +| 성별 | GNDR | Gender | +| 성분 | IGRD | Ingredient | +| 성상 | TMPSTE | Temperamnet And State | +| 성인 | ADLT | Adult | +| 성장 | GROW | Growth | +| 성적 | PGRD | Performance Grade | +| 성향 | | | +| 세공 | CRFTS | Craftsmanship | +| 세관 | CSTMHS | Customs-House | +| 세균 | GERM | Germ | +| 세금 | TX | Tax | +| 세대 | HH | Households | +| 세로 | VRTC | Vertical | +| 세목 | TXITM | Tax Item | +| 세무 | TXBIZ | Taxation Business | +| 세부 | | | +| 세션 | SYSSN | System Session | +| 세액 | TXAMT | Tax Amount | +| 세입 | ANRVN | Annual Revenue | +| 세전 | BFTX | Before Tax | +| 세척 | CLNSG | Cleansing | +| 세출 | ANEXP | Annual Expenditure | +| 세포 | BCLL | Biology Cell | +| 센서 | SNSR | Sensor | +| 센터 | CNTR | Center | +| 소각 | INCNR | Incineration | +| 소개 | INTDC | Introducion | +| 소계 | STOT | Subtotal | +| 소관 | JRSD | Jurisdiction | +| 소급 | RTRCT | Retroactivity | +| 소독 | STLZ | Sterilze | +| 소득 | EARN | Earnings | +| 소량 | SMLQ | Small Quantity | +| 소리 | SOUND | Sound | +| 소멸 | EXTSH | Extinguishment | +| 소명 | VNDC | Vindicate | +| 소모 | CSMT | Consumption | +| 소방 | FRFG | Firefighting | +| 소비 | CNSM | Consume | +| 소생 | | | +| 소속 | OGDP | Organization/Department | +| 소송 | LWS | Lawsuit | +| 소액 | SAMT | Small Amount | +| 소요 | REQ | Required | +| 소유 | PSN | Possession | +| 소음 | NOIS | Noise | +| 소재 | | | +| 소집 | CNVC | Convocation | +| 소형 | STYP | Small Type | +| 속도 | SPD | Speed | +| 속성 | ATRB | Attribute | +| 손실 | LOSS | Loss | +| 손익 | PFLS | Profit And Loss | +| 손해 | HRM | Harm | +| 송금 | RMT | Remittance | +| 송달 | TMTL | Transmittal | +| 송부 | SNDG | Sending | +| 송수 | WTSUPL | Water Supply | +| 송신 | | | +| 송장 | INVC | Invoice | +| 송치 | TRNSR | Transference | +| 수강 | ATNLC | Attendance Lecture | +| 수거 | CLT | Collect | +| 수계 | WTST | Water System | +| 수관 | ASCTL | Assumption Of Control | +| 수급 | RECIPT | Receipt | +| 수기 | HWRT | Handwriting | +| 수납 | RCVMT | Receiving Money (Or Thing) | +| 수단 | MNS | Means | +| 수당 | ALW | Allowance | +| 수도 | | | +| 수동 | MANL | Manual | +| 수락 | ACPT | Acceptance | +| 수량 | QTY | Quantity | +| 수령 | RCV | Receive | +| 수로 | WTRWY | Waterway | +| 수료 | FNSH | Finish | +| 수리 | RPR | Repair | +| 수립 | FNDG | Founding | +| 수면 | WTSF | Water Surface | +| 수명 | LIFES | Lifespan | +| 수몰 | SBMRG | Be Submerged | +| 수문 | WTGT | Water Gate | +| 수변 | WTRSD | Waterside | +| 수분 | MSTR | Moisture | +| 수산 | MRP | Marine Products | +| 수상 | WNAWD | Winning Award | +| 수선 | MNDG | Mending | +| 수소 | HYDR | Hydrogen | +| 수술 | SRGR | Surgery | +| 수습 | PRBT | Probation | +| 수식 | | | +| 수신 | RCPTN | Reception | +| 수심 | WTDTH | Water Depth | +| 수압 | WTRPRS | Water Pressure | +| 수여 | CNFR | Conferment | +| 수역 | WTRS | Waters | +| 수온 | WTTM | Water Temperature | +| 수요 | DMD | Demand | +| 수용 | ACTC | Acceptance | +| 수원 | WTRSRC | Water Source | +| 수위 | WTLV | Water Level | +| 수은 | MRCR | Mercury | +| 수임 | ACAP | Acceptance Of Appointment | +| 수입 | INCM | Income | +| 수정 | MDFCN | Modification | +| 수조 | WATNK | Water Tank | +| 수종 | TRSPC | Tree Species | +| 수준 | LV | Level | +| 수직 | VTCL | Vertical | +| 수질 | WQ | Water Quality | +| 수집 | CLCT | Collection | +| 수차 | WTRBN | Water Turbine | +| 수출 | EXP | Export | +| 수치 | NVL | Numerical Value | +| 수탁 | TRST | Trust | +| 수표 | CHECK | Check | +| 수풀 | WDLND | Woodland | +| 수행 | FLFMT | Fulfillment | +| 수험 | TKEXM | Taking An Exam | +| 숙박 | LDG | Lodge | +| 숙소 | ACMD | Accommodations | +| 순간 | MMNT | Moment | +| 순도 | PURDG | Purity Degree | +| 순번 | | | +| 순서 | SEQ | Sequence | +| 순수 | PURE | Pure | +| 순위 | RNK | Ranking | +| 순찰 | PTL | Patrol | +| 순환 | CRCL | Circulation | +| 순회 | RNDS | Rounds | +| 숨김 | HIDE | Hide | +| 숫자 | NUM | Numeral | +| 쉼터 | SHLTR | Shelter | +| 스팸 | SPAM | Spam | +| 습도 | HUM | Humidity | +| 습지 | WTLND | Wetland | +| 승계 | SCSN | Succession | +| 승급 | ADVN | Advancement | +| 승선 | EMKT | Embarkation | +| 승용 | PSNGR | Passenger | +| 승인 | APRV | Approval | +| 승진 | PRMT | Promotion | +| 승차 | RIDE | Ride | +| 시가 | MPRC | Market Price | +| 시각 | TM | Time | +| 시간 | HR | Hour | +| 시공 | CNST | Construct | +| 시군 | SIGUN | Si/Gun | +| 시기 | TMNG | Timing | +| 시도 | CTPV | Cities And Provinces | +| 시료 | SPCM | Specimen | +| 시범 | DMSTR | Demonstration | +| 시분 | HM | Hour And Minute | +| 시상 | WNARD | Winning Award | +| 시설 | FCLT | Facilities | +| 시작 | BGNG | Beginning | +| 시장 | MRKT | Market | +| 시정 | CRC | Correction | +| 시추 | DRLL | Drilling | +| 시트 | SHEET | Sheet | +| 시행 | ENFC | Enforcement | +| 시험 | TEST | Test | +| 식단 | DIET | Diet | +| 식당 | RSTNT | Restaurants | +| 식물 | PLNT | Plant | +| 식별 | IDNTF | Identification | +| 식비 | FDEXP | Food Expenses | +| 식사 | MEAL | Meal | +| 식생 | VGTTN | Vegetation | +| 식성 | TASTE | Taste | +| 식수 | DRWT | Drinking Water | +| 식품 | FOOD | Food | +| 신고 | DCLR | Declaration | +| 신규 | NEW | New | +| 신뢰 | CNFDNC | Confidence | +| 신설 | NBLDP | New Build Up | +| 신속 | RPD | Rapid | +| 신용 | CRDT | Credit | +| 신원 | IDTY | Identity | +| 신청 | APLY | Apply | +| 신체 | BDY | Body | +| 신축 | NWCN | New Constuction | +| 신탁 | TRUST | Trust | +| 신호 | SGNL | Signal | +| 실내 | IND | Indoor | +| 실명 | RLNM | Real Name | +| 실무 | PWRK | Practical Work | +| 실사 | ACINSP | Actual Inspection | +| 실습 | PRCTC | Practice | +| 실시 | ENFRC | Enforcement | +| 실외 | TOSD | The Outside | +| 실장 | DVSLD | Division Leader | +| 실적 | PRFMNC | Performance | +| 실제 | ACTL | Actual | +| 실측 | RLMSR | Real Measurement | +| 실태 | ACCND | Actual Condition | +| 실패 | FAIL | Failure | +| 실행 | EXCN | Execution | +| 실황 | LIVE | Live | +| 실효 | ACEF | Actual Effect | +| 심각 | SRUS | Serious | +| 심사 | SRNG | Screening | +| 심의 | DLBR | Deliberation | +| 심층 | DEPTHS | The Depths | +| 아동 | CHLDRN | Children | +| 아종 | SSPECS | (Biological) Subspecies | +| 악성 | MLGN | Malignant | +| 악취 | ODOR | Odor | +| 안개 | FOG | Fog | +| 안건 | AGND | Agenda | +| 안내 | GD | Guide | +| 안분 | PRDV | Proportional Division | +| 안전 | SFTY | Safety | +| 알람 | ALRM | Alarm | +| 알림 | NTI | Notice | +| 암거 | UNDDRN | Underdrain | +| 암반 | BLOCK | Bedlock | +| 암석 | ROK | Rock | +| 압력 | PRSUR | Pressure | +| 압류 | SZR | Seizure | +| 압축 | CMPRS | Compression | +| 애로 | DFCL | Difficulty | +| 액비 | LIQFER | Liquid Fertilizer | +| 액상 | | | +| 액체 | LQD | Liquid | +| 야간 | NGHT | Night | +| 야생 | WLDNS | Wildness | +| 약관 | TRMS | Terms | +| 약국 | PMCY | Pharmacy | +| 약도 | RGHMP | Rough Map | +| 약식 | INFML | Informality | +| 약어 | ABBR | Abbreviation | +| 약정 | STPL | Stipulation | +| 약품 | MDCN | Medicine | +| 양도 | CNVYN | Conveyance | +| 양력 | SLCL | Solar Calendar | +| 양성 | NRTR | Nurture | +| 양수 | AQST | Acquisition | +| 양식 | FORM | Form | +| 양육 | BRUP | Bringing-Up | +| 어도 | FSHWY | A Fishway | +| 어류 | FSH | Fish | +| 어선 | FSBT | Fishing Boat | +| 어업 | FSHRY | Fishery | +| 어음 | PRMNT | Promissory Note | +| 어종 | KDFSH | Kind Of Fish | +| 언론 | MSSMD | Mass Media | +| 언어 | LANG | Language | +| 업무 | TASK | Task | +| 업소 | BIZEST | Business Establishment | +| 업종 | TPBIZ | Type Of Business | +| 업체 | BZENTY | Business Entity | +| 업태 | BZSTAT | Business Status | +| 엑셀 | EXCEL | Excel | +| 엔진 | ENGN | Engine | +| 여과 | FILTR | Filteration | +| 여부 | YN | Yes Or No | +| 여비 | TRVEXP | Traveling Expenses | +| 여성 | FML | Female | +| 여울 | RPDS | Rapids (Ina River) | +| 여유 | RLXD | Relaxed | +| 여행 | TRVL | Travel | +| 역량 | CPBL | Capability | +| 역률 | PWRFTR | Power Factor | +| 역할 | ROLE | Role | +| 연간 | ANL | Annual | +| 연결 | LNKG | Linkage | +| 연계 | LINK | Link | +| 연관 | | | +| 연구 | RSCH | Research | +| 연금 | PN | Pension | +| 연대 | SLDT | Solidarity | +| 연도 | YR | Year | +| 연동 | ITRCK | Interlock | +| 연락 | CNCT | Contact | +| 연령 | AGE | Age | +| 연료 | FUEL | Fuel | +| 연못 | POND | Pond | +| 연번 | | | +| 연보 | ANNLS | Annuals | +| 연봉 | ANLSL | Annual Salary | +| 연산 | ARTOPN | Arithmetic Operation | +| 연소 | BURN | Burning | +| 연속 | CNTIN | Continue | +| 연수 | STDTRN | Study And Training | +| 연식 | MDLYY | Model Year | +| 연안 | COAST | Coast | +| 연월 | YM | Year And Month | +| 연임 | RPNTM | Reappointment | +| 연장 | PRLG | Prolongation | +| 연차 | ORDYR | Order Of Year | +| 연체 | ARG | Arrearage | +| 연혁 | CRNCL | Chronicle | +| 열람 | PRSL | Perusal | +| 열차 | TRAIN | Train | +| 염도 | SLDNS | Salt Density | +| 염소 | CHLOR | Chlorine | +| 영구 | PRMCE | Permanence | +| 영농 | FARMG | Farming | +| 영문 | ENG | English | +| 영업 | SALS | Sales | +| 영역 | RLM | Realm | +| 영치 | CSDY | Custody | +| 영향 | IMPCT | Impact | +| 영화 | MOVIE | Movie | +| 예규 | ESTRL | Established Rule | +| 예금 | SVG | Savings | +| 예년 | AVRYR | Average Year | +| 예문 | EXSNT | Example Sentence | +| 예방 | PRVTN | Prevention | +| 예보 | FRCST | Forecast | +| 예비 | RSRV | Reserve | +| 예산 | BGT | Budget | +| 예상 | EXPC | Expect | +| 예시 | EXM | Example | +| 예약 | RSVT | Reservation | +| 예외 | EXCP | Exception | +| 예정 | PRNMNT | Prearrangement | +| 예제 | EXRC | Exercise | +| 예측 | PREDC | Prediction | +| 예치 | DEPST | Deposit | +| 예탁 | DPSTG | Depositing | +| 오너 | | | +| 오늘 | TD | Today | +| 오니 | | | +| 오류 | ERR | Error | +| 오수 | DRTW | Dirty Water | +| 오염 | PLLTN | Pollution | +| 오일 | OIL | Oil | +| 오전 | AM | Ante Meridiem | +| 오존 | OZON | Ozone | +| 오차 | EGAP | Error Gap | +| 오픈 | OP | Open | +| 오후 | AFN | Afternoon | +| 옥내 | INDR | Indoor | +| 옥외 | OTDR | Outdoor | +| 온도 | TP | Temperature | +| 와류 | VORTEX | Vortex | +| 완납 | FLPY | Full Payment | +| 완료 | CMPTN | Completion | +| 완성 | FNL | Finalization | +| 완제 | FLRPY | Full Repayment | +| 외관 | APPRNC | Appearance | +| 외국 | FRGN | Foreign Nation | +| 외기 | OTAIR | Outside Air | +| 외래 | FREGN | Foreign | +| 외부 | OTSD | Outside | +| 외상 | ONCR | On Credit | +| 외식 | EATOUT | Eat Out | +| 외자 | FRCPTL | Foreign Capital | +| 외출 | GNOT | Going Out | +| 외화 | FRCNCY | Foreign Currency | +| 왼쪽 | | | +| 요건 | RQMT | Requirement | +| 요구 | RQT | Request | +| 요금 | CRG | Charge | +| 요령 | TCK | Trick | +| 요소 | ELM | Element | +| 요약 | SMRY | Summary | +| 요양 | RCPR | Recuperation | +| 요율 | TRF | Tariff | +| 요인 | FCT | (Cause) Factor | +| 요일 | DOW | Day Of The Week | +| 요청 | DMND | Demand | +| 욕실 | BTHRM | Bathroom | +| 용기 | BOWL | Bowl | +| 용도 | USG | Usage | +| 용량 | CPCT | Capacity | +| 용수 | USWTR | Using Water | +| 용어 | TRM | Terminology | +| 용역 | LBSVC | Labor Service | +| 용지 | LDPL | Land Parcel | +| 용출 | RSRGN | Resurgence | +| 우려 | CNCRN | Concern | +| 우선 | PRRTY | Priority | +| 우수 | EXLN | Excellence | +| 우안 | RGTBK | Right Bank | +| 우점 | DMNC | Dominance | +| 우측 | RGSD | Right Side | +| 우편 | MAIL | Mail | +| 우화 | EMRN | Emergence | +| 운고 | HFTC | Height Of The Cloud | +| 운동 | MVM | Movement | +| 운량 | CLDQ | Cloud (Amount) | +| 운반 | CRRG | Carriage | +| 운송 | TRNSP | Transportation | +| 운수 | TRANSP | Transportation | +| 운영 | OPER | Operation | +| 운임 | FARE | Fare | +| 운전 | OPRN | Operation | +| 운항 | NVGT | Navigation | +| 운행 | OPR | Operation | +| 운형 | CLDS | Cloud Designs | +| 원가 | PRMCO | Prime Cost | +| 원격 | REMT | Remote | +| 원경 | DSTNVW | Distant View | +| 원고 | PLNTF | Plaintiff | +| 원금 | PRN | Principal | +| 원료 | BMTRL | Base Material | +| 원리 | PRNCP | Principle | +| 원문 | ORGTXT | Original Text | +| 원본 | ORGNL | Original | +| 원수 | ORGWT | Origin'S Water | +| 원시 | PRMTV | Primitive | +| 원인 | CS | Cause | +| 원장 | GNLGR | General Ledger | +| 원점 | TRGNPT | Trigon Point | +| 원천 | SOU | Source | +| 원화 | KCUR | Korean Currency | +| 월간 | MTHL | Monthly | +| 월류 | WORFLW | (Water) Overflow | +| 월별 | BMM | By Month To Month | +| 월세 | MRNT | Monthly Rent | +| 위도 | LAT | Latitude | +| 위반 | VLTN | Violation | +| 위배 | | | +| 위생 | HGEN | Hygiene | +| 위성 | STLT | Satellite | +| 위원 | MBCMT | Member Of Committee | +| 위임 | DLGT | Delegation | +| 위촉 | ENTRST | Entrusting | +| 위치 | PSTN | Position | +| 위탁 | CNSGN | Consign | +| 위험 | DNGR | Danger | +| 유가 | OILPRC | Oil Price | +| 유관 | | | +| 유량 | VLFL | Volume Of Flow | +| 유로 | FLWCNL | Flow Channel | +| 유료 | CHRG | Charged | +| 유리 | GLASS | Glass | +| 유무 | EN | Existence And Nonexistence | +| 유물 | RLC | Relic | +| 유발 | INDC | Induce | +| 유보 | DFR | Defer | +| 유사 | SMLR | Similar | +| 유상 | CMPNS | (Pay) Compensation | +| 유선 | WRD | Wired | +| 유속 | FVLC | Flow Velocity(Velocity Of A Moving Fluid) | +| 유실 | LSWTR | Loss In Water | +| 유압 | OLPRSR | Oil Pressure | +| 유역 | BSN | Basin | +| 유예 | PSTP | Postponement | +| 유의 | CTN | Caution | +| 유입 | INFLW | Inflow | +| 유저 | | | +| 유지 | KEEP | Keep | +| 유찰 | FLBD | Failure In Bidding | +| 유체 | FLUID | Fluid | +| 유출 | OTFLW | Outflow | +| 유통 | RTL | Retail | +| 유해 | HRMFL | Harmful | +| 유형 | TYPE | Type | +| 유효 | VLD | Validity | +| 육상 | OLAND | Overland | +| 윤달 | LPMM | Leap Month | +| 은행 | BANK | Bank | +| 음력 | LNCL | Lunar Calendar | +| 음성 | VOICE | Voice | +| 음식 | | | +| 음용 | DKPP | Drinking Purpose | +| 음원 | SDSRC | A Sound Source | +| 음주 | DRNK | Drinking | +| 응급 | EMGNCY | Emergency | +| 응답 | RSPNS | Response | +| 응모 | ENTRY | Entry | +| 응시 | TKEX | Take An Exam | +| 의견 | OPNN | Opinion | +| 의결 | DCS | Decision | +| 의뢰 | RQST | Request | +| 의료 | MDLCR | Medical Care | +| 의류 | CLTHS | Clothes | +| 의무 | OBLG | Obligation | +| 의미 | MNNG | Meaning | +| 의사 | DR | Doctor | +| 의안 | PBIL | (Proposal) Bill | +| 의제 | | | +| 이격 | SEPR | Separation (Clearance) | +| 이관 | TRNSF | Transfer | +| 이내 | WTHN | Within | +| 이동 | MVMN | Movement | +| 이력 | HSTRY | History | +| 이름 | | | +| 이사 | MVHS | Move House | +| 이상 | ANMLY | Anomaly | +| 이송 | TRNFR | Transferred | +| 이수 | CMCRS | Completion Of Course | +| 이슈 | ISSUE | Issue | +| 이연 | DFRD | Deferred | +| 이온 | ION | Ion | +| 이용 | UTZTN | Utilization | +| 이월 | CRFW | Carry Forward | +| 이유 | | | +| 이윤 | PRFT | Profit | +| 이율 | INRT | Interest Rate | +| 이의 | OBJC | Objection | +| 이익 | PRF | Profit | +| 이자 | INT | Interest Charge | +| 이전 | BFR | Before | +| 이주 | MV | Move | +| 이첩 | FRWD | Forwarding | +| 이체 | TFR | Transfer | +| 이하 | LSST | Less Than | +| 이행 | IMPLT | Implementation | +| 이혼 | DVRC | Divorce | +| 이후 | AFTR | After | +| 익명 | ANMT | Anonymity | +| 익일 | NXDD | Next Day | +| 인가 | SNCN | Sanction | +| 인계 | HNOV | Handover | +| 인공 | ARTFC | Artificial | +| 인구 | PPLTN | Population | +| 인근 | NRBY | Nearby | +| 인당 | PS | Person | +| 인도 | CNVYNC | Conveyance | +| 인력 | MNPW | Manpower | +| 인명 | HNL | Human Life | +| 인물 | PRSN | Personage | +| 인사 | HMRS | Human Resource | +| 인산 | PHACID | Phosphoric Acid | +| 인쇄 | PRINT | Print | +| 인수 | ACPTN | Acceptance | +| 인식 | AWRNS | Awareness | +| 인원 | PEPL | People | +| 인자 | FCTR | Factor | +| 인접 | ADJC | Adjacent | +| 인정 | RCG | Recognition | +| 인증 | CERT | Certification | +| 인지 | PRCPT | Perception | +| 인체 | HMBD | Human Body | +| 인허 | | | +| 일괄 | EBLC | En Bloc | +| 일기 | | | +| 일문 | JPNS | Japanese Sentence | +| 일반 | GNRL | General | +| 일별 | BDAY | By Day | +| 일본 | JPN | Japan | +| 일비 | DLYEXP | Daily Expenses | +| 일사 | SOLRD | Solar Radiation | +| 일선 | FRLN | First Line | +| 일시 | DT | Date And Time | +| 일일 | DAILY | Daily | +| 일자 | YMD | Year Month Day | +| 일정 | SCHDL | Schedule | +| 일조 | SNSH | Sunshine | +| 일지 | DLYD | Daily Report | +| 일치 | CCRNC | Concurrence | +| 일터 | | | +| 일할 | DBAS | Daily Basis | +| 임기 | TNR | Tenure | +| 임대 | RENT | Rent | +| 임명 | NMNT | Nomination | +| 임무 | MSSN | Mission | +| 임시 | TMPR | Temporary | +| 임신 | PRGN | Pregnancy | +| 임야 | FSTLND | Forest Land | +| 임업 | FSTR | Forestry | +| 임용 | APNTMN | Appointment | +| 임원 | EXC | Executive | +| 임의 | RNDM | Random | +| 임차 | HIRE | Hire | +| 입고 | WRHS | Warehousing | +| 입교 | ENTSCH | Entrance Into A School | +| 입국 | ENTCNY | Entering A Country | +| 입금 | DPST | Deposit | +| 입대 | ENLSTM | Enlistment | +| 입도 | GRNSZ | Grain Size | +| 입력 | INPT | Input | +| 입사 | JNCMP | Joining A Company | +| 입산 | MTCG | Mountain-Climbing | +| 입소 | ENTRC | Entrance | +| 입수 | OBTN | Obtain | +| 입실 | ENTRM | Entering A Room | +| 입양 | ADP | Adoption | +| 입원 | HSPTLZ | Hospitalization | +| 입자 | PARTCL | Particle | +| 입장 | ADMS | Admission | +| 입주 | MVN | Moving In | +| 입증 | PROV | Prove | +| 입지 | PSTST | (Site) Position | +| 입찰 | BID | Bid | +| 입학 | MTCLTN | Matriculation | +| 입항 | PTENT | Port Entry | +| 입회 | ATWT | Attend And Witness | +| 잉여 | SURPLS | Surplus | +| 자가 | OSLF | Oneself | +| 자갈 | GRVL | Gravel | +| 자격 | QLFC | Qualification | +| 자금 | FNDS | Funds | +| 자녀 | CHLD | Children | +| 자동 | AUTO | Automatic | +| 자료 | DATA | Data | +| 자립 | SRLNE | Self-Reliance | +| 자막 | CAPTN | Caption | +| 자문 | CNSTN | Consultation | +| 자본 | CPT | Capital | +| 자사 | MYCOMP | My Company | +| 자산 | AST | Asset | +| 자연 | NATR | Nature | +| 자원 | RSRC | Resources | +| 자율 | SLCR | Self-Control | +| 자재 | MTRL | Materials | +| 자체 | ONLF | Oneself | +| 자택 | HOME | Home | +| 작동 | OPRTG | Operating | +| 작물 | CROP | Crop | +| 작성 | WRT | Writing | +| 작업 | JOB | Job | +| 작품 | WRKS | Works | +| 잔금 | BALNC | Balance | +| 잔량 | RSDQNT | Residual Quantity | +| 잔류 | REMN | Remaining | +| 잔반 | LTVRS | Leftovers | +| 잔식 | UNTFD | Uneaten Food | +| 잔액 | BLNC | Balance | +| 잔여 | RMND | Remainder | +| 잔존 | RMN | Remain | +| 잠금 | LCK | Locking | +| 잠재 | LDRMNT | Lie Dormant | +| 잡비 | MSEXP | Miscellaneous Expenses | +| 잡종 | CRHY | Crossbreed Hybrid | +| 장관 | MNST | Minister | +| 장기 | LTRM | Long Term | +| 장내 | ITHL | In The Hall | +| 장부 | | | +| 장비 | EQPMNT | Equipment | +| 장소 | PLC | Place | +| 장애 | DSBLTY | Disability | +| 장외 | OTCNTR | Over The Counter | +| 장착 | MNTNG | Mounting | +| 장치 | DVC | Device | +| 재개 | RSMP | Resumption | +| 재결 | ADJD | Adjudication | +| 재고 | INVT | Inventory | +| 재난 | CLMTY | Calamity | +| 재료 | MATRL | Material | +| 재무 | FNNR | Financial Affair | +| 재물 | RCHS | Riches | +| 재발 | RECUR | Recur | +| 재배 | CTVT | Cultivation | +| 재산 | PRPT | Property | +| 재원 | FNRS | Financial Resource | +| 재정 | FNN | (Economy) Finance | +| 재직 | HDOF | Hold Office | +| 재진 | REXM | Re-Examination | +| 재질 | MQLT | Material Quality | +| 재택 | ATHM | At Home | +| 재학 | INSCH | In School | +| 재해 | DSTR | Disaster | +| 쟁점 | | | +| 저감 | MTGT | Mitigation | +| 저류 | IMPD | Impound | +| 저서 | WRBK | Writing Book | +| 저자 | AUT | Author | +| 저장 | STRG | Storage | +| 저항 | RS | Resistance | +| 적격 | ELGB | Eligibility | +| 적발 | DSCL | Disclose | +| 적산 | | | +| 적설 | DSNW | Deep Snow | +| 적요 | ABSTR | Abstract | +| 적용 | APLCN | Application | +| 적재 | LOAD | Load | +| 적정 | RSNB | Reasonable | +| 적중 | CMTR | Come True | +| 적합 | STBLT | Suitability | +| 전거 | | | +| 전결 | DCARB | Deciding Arbitrarily | +| 전공 | MJR | Major | +| 전국 | NTWDE | Nationwide | +| 전기 | PRVTM | Previous Term | +| 전년 | PRYY | Previous Year | +| 전단 | FRDED | Forward Edge | +| 전달 | CNVY | Convey | +| 전담 | EXCHG | Exclusive Charge | +| 전도 | CDTN | Conduction | +| 전등 | | | +| 전략 | STRTG | Strategy | +| 전력 | ELPWR | Electric Power | +| 전류 | ERCRT | Electric Current | +| 전망 | PRSPT | Prospect | +| 전문 | TELGM | Telegram | +| 전산 | EDP | Electronic Data Processing | +| 전세 | LODB | Lease Of Deposit Basis | +| 전송 | TRSM | Transmission | +| 전시 | EXHB | Exhibition | +| 전압 | VLTGE | Voltage | +| 전역 | DCRG | Discharge | +| 전용 | EXUSE | Exclusive Use | +| 전원 | SELCT | Source Of Electricity | +| 전월 | PRVMM | The Previous Month | +| 전일 | PRVDY | The Previous Day | +| 전입 | MVIN | Move In | +| 전자 | ELTR | Electron | +| 전주 | LSWEEK | Last Week | +| 전지 | BATT | Battery | +| 전체 | WHOL | Whole | +| 전출 | MVOUT | Moving Out | +| 전표 | SLIP | Slip | +| 전화 | TEL | Telephone | +| 전환 | SWTC | Switching | +| 전회 | PRTRN | Previous Turn | +| 절감 | RTRC | Retrenchment | +| 절대 | CMPLTL | Completely | +| 절사 | TRNC | Truncation | +| 절약 | ECNMY | Economy(Save) | +| 절차 | PROC | Procedure | +| 점검 | CHCK | Check | +| 점도 | VSC | Viscosity | +| 점수 | SCR | Score | +| 점용 | OCPY | Occupy | +| 점유 | | | +| 점포 | STOR | Store | +| 접근 | ACS | Access | +| 접속 | CNTN | Connection | +| 접수 | RCPT | Receipt | +| 접종 | INCLN | Inoculation | +| 접촉 | CNTC | Contact | +| 정격 | RGLT | Regularity | +| 정기 | REGL | Regular | +| 정년 | RTAG | Retirement Age | +| 정답 | CRANS | Correct Answer | +| 정당 | PLTPT | Political Party | +| 정도 | ABT | About | +| 정량 | QNTV | Quantitive | +| 정렬 | SORT | Sort | +| 정리 | ARNGMT | Arrangement | +| 정면 | FRNT | Front | +| 정밀 | PRCIS | Precision | +| 정보 | INFO | Information | +| 정부 | GOV | Government | +| 정비 | MTNC | Maintenance | +| 정산 | CLCLN | Calculation | +| 정상 | NML | Normal | +| 정수 | CLWR | Clean Water | +| 정액 | FXAMT | Fixed Amount | +| 정원 | PSCP | Personnel Capacity | +| 정의 | DEF | Definition | +| 정전 | OTG | Outage | +| 정정 | CRCTN | Correction | +| 정제 | REFINE | Refining | +| 정지 | STOP | Stop | +| 정책 | PLCY | Policy | +| 정체 | STGNTN | Stagnation | +| 정화 | PRFCTN | Purification | +| 제거 | RMVL | Removal | +| 제곱 | SQ | Square (Of) | +| 제공 | PVSN | Provision | +| 제기 | RAIS | Raise | +| 제도 | SYST | (Policy) System | +| 제목 | TTL | Title | +| 제방 | LEV | Levee | +| 제보 | TPOF | Tip Off | +| 제안 | PRP | Proposal | +| 제약 | RSTRCT | Restriction | +| 제어 | CNTL | Control | +| 제외 | EXCL | Exclusion | +| 제원 | SPEC | Specifications | +| 제작 | FBCTN | Fabrication | +| 제재 | RSTRC | Restriction | +| 제정 | ENCT | Enactment | +| 제조 | MNFTR | Manufacture | +| 제체 | LVBD | Levee Body | +| 제출 | SBMSN | Submission | +| 제품 | PRDCT | Product | +| 제한 | LMT | Limit | +| 제휴 | AFLT | Affiliation | +| 조건 | CND | Condition | +| 조경 | LDHC | Landscape Architecture | +| 조기 | ERLY | Early | +| 조달 | PRCM | Procurement | +| 조류 | BIRDS | Birds | +| 조명 | LGHT | Light | +| 조문 | LPRVS | Legal Provision | +| 조사 | EXMN | Examination | +| 조석 | TIDE | Tide | +| 조성 | MKNG | Making | +| 조식 | BRKF | Breakfast | +| 조위 | TDLV | Tide Level | +| 조작 | HNDLG | Handling | +| 조절 | RGLTE | Regulate | +| 조정 | AJMT | Adjustment | +| 조직 | OGNZ | Organization | +| 조치 | ACTN | Action | +| 조합 | ASCT | Association | +| 조항 | CLUS | Clause | +| 조회 | INQ | Inquiry | +| 존속 | CNEXS | Continue To Exist | +| 존재 | EXST | Existence | +| 존폐 | MTNABN | Maintenance Or Abolition | +| 졸업 | GRDTN | Graduation | +| 종결 | TRMN | Termination | +| 종교 | RLGN | Religion | +| 종료 | END | End | +| 종류 | KND | Kind | +| 종목 | CLS | Class | +| 종별 | BKND | By Kind | +| 종이 | PPR | Paper | +| 종일 | ALDY | All Day | +| 종자 | SEED | Seed | +| 종점 | EDPNT | End Point | +| 종합 | SNTHS | Synthesize | +| 좋음 | GOOD | Good | +| 좌석 | SEAT | Seat | +| 좌안 | LFTBK | Left Bank | +| 좌측 | LSD | Left Side | +| 주간 | DDTM | Daytime | +| 주거 | | | +| 주관 | SPRVSN | Supervision | +| 주기 | CYCLE | Cycle | +| 주말 | WKND | Weekend | +| 주무 | ICHG | In Charge Of | +| 주문 | ORDR | Order | +| 주민 | RSDR | Resident Person | +| 주변 | ARND | Around | +| 주석 | ANTN | Annotation | +| 주소 | ADDR | Address | +| 주수 | WKCNT | Week Count | +| 주식 | STCK | Stock | +| 주심 | CRFR | Chief Referee | +| 주요 | MAIN | Main | +| 주유 | RFL | Refueling | +| 주의 | CUTN | Caution | +| 주입 | INJCT | Injection | +| 주제 | TPC | Topic | +| 주주 | STHD | Stockholder | +| 주차 | PRK | Parking | +| 주체 | MNBD | Main Body | +| 주최 | HST | Host | +| 주키 | | | +| 주택 | HS | House | +| 준공 | CMCN | Completion Of Construction | +| 준비 | PREPR | Preparation | +| 준설 | DRDGN | Dredging | +| 준수 | CMPLY | Comply | +| 중간 | MD | Middle | +| 중개 | MDT | Mediation | +| 중계 | RLY | Relay | +| 중고 | USED | Used | +| 중국 | CHIN | China | +| 중기 | MLTRM | Middle Term | +| 중단 | ITRP | Interruption | +| 중도 | MDWY | Midway | +| 중량 | WGHT | Weight | +| 중문 | CHNS | Chinese Sentence | +| 중복 | DPCN | Duplication | +| 중식 | LUNCH | Lunch | +| 중심 | CEN | Central | +| 중앙 | CTRL | Central | +| 중요 | IMPT | Important | +| 중점 | EMPHS | Emphasis | +| 중증 | SVRLY | Severely | +| 중지 | HLT | Halt | +| 중층 | MDCL | Middle Class | +| 증가 | INCRS | Increase | +| 증감 | ICDC | Increase And Decrease | +| 증권 | SCRT | Securities | +| 증기 | STM | Steam | +| 증량 | AGMNT | Augmentation | +| 증명 | ECTFN | (Evidence) Certification | +| 증발 | VPRZN | Vaporization | +| 증빙 | EVDNC | Evidence | +| 증상 | SMPTM | Symptom | +| 증설 | XBLDP | Extension Build Up | +| 증식 | PRLRT | Proliferation | +| 증액 | ICAMT | Increased Amount | +| 지구 | DSTRCT | District | +| 지급 | GIVE | Give | +| 지도 | MAP | Map | +| 지령 | DRTV | Directive | +| 지로 | GIRO | Giro | +| 지류 | TRBTR | Tributary | +| 지면 | GROND | Ground | +| 지목 | LDCG | Land Category | +| 지반 | BSGR | Base Ground | +| 지방 | LCL | Local | +| 지번 | LOTNO | Lot Number | +| 지분 | SHR | Share | +| 지불 | DFRY | Defrayal | +| 지붕 | ROOF | Roof | +| 지사 | BROF | Branch Office | +| 지상 | GRND | Ground | +| 지세 | TPGPH | Topography | +| 지속 | SSTN | Sustain | +| 지수 | IDX | Index | +| 지시 | DRCTN | Direction | +| 지식 | KNWL | Knowledge | +| 지역 | RGN | Region | +| 지연 | DLY | Delay | +| 지열 | TRHT | Terrestrial Heat | +| 지원 | SPRT | Support | +| 지적 | PTOUT | Point Out | +| 지점 | BRNCH | Branch | +| 지정 | DSGN | Designation | +| 지진 | ERTHQK | Earthquake | +| 지질 | GEOLG | Geology | +| 지체 | | | +| 지출 | EXPND | Expenditure | +| 지침 | GUIDNC | Guidance | +| 지표 | IDCT | Indicator | +| 지하 | UDGD | Underground | +| 지형 | TRRN | Terrain | +| 직경 | DIA | Diameter | +| 직군 | JGRP | Job Group | +| 직급 | JBGD | Job Grade | +| 직렬 | JBSRS | Job Series | +| 직류 | TPOC | Type Of Occupation | +| 직무 | DUTY | Duty | +| 직업 | CR | Career | +| 직영 | DROPER | Direct Operation | +| 직원 | EMP | Employee | +| 직위 | JBPS | Job Position | +| 직인 | OFSL | Office Seal | +| 직장 | WRC | Workplace | +| 직접 | DRCT | Direct | +| 직제 | OFORG | Office Organization | +| 직종 | OCPT | Occupation | +| 직책 | JBTTL | Job Title | +| 직통 | DRLN | Direct Line | +| 진단 | DGNS | Diagnosis | +| 진도 | PRGD | Progress Degree | +| 진동 | VBRT | Vibration | +| 진료 | MDEXM | Medical Examination | +| 진입 | ACCS | Access | +| 진행 | PRGRS | Progress | +| 질량 | MSS | Mass | +| 질문 | QSTN | Question | +| 질병 | DSS | Disease | +| 질의 | INQRY | Inquiry | +| 집계 | TOT | Total | +| 집광 | CRTL | Concentrate Light | +| 집중 | FCUS | Focus | +| 집행 | IMPL | Implementation | +| 집회 | GTHR | Gathering | +| 징계 | DSPN | Disciplinary Punishment | +| 징구 | CLRQ | Collection Request | +| 징수 | CLCTN | Collection | +| 쪽지 | NOTE | Note | +| 차감 | SBTR | Subtraction | +| 차관 | VMNST | Vice-Minister | +| 차기 | NXTM | Next Term | +| 차단 | SHTOT | Shut Out | +| 차량 | VHCL | Vehicle | +| 차로 | LANE | Lane | +| 차변 | DBSD | The Debit Side | +| 차선 | TRFLN | Traffic Lane | +| 차수 | CYCL | Cycle | +| 차압 | PSD | Pressure Difference | +| 차액 | DFAMT | Difference Amount | +| 차이 | DIFF | Difference | +| 차입 | BRW | Borrowing | +| 차종 | CARMDL | Car Model | +| 차집 | ICPTG | Intercepting | +| 차축 | AXLE | An Axle | +| 차트 | CHRT | Chart | +| 착공 | BGNCST | Begin Construction | +| 착수 | OTST | Outset | +| 착정 | BRNG | Boring | +| 찬반 | FRAGN | For And Against | +| 참고 | REF | Reference | +| 참석 | ATND | Attendance | +| 참여 | PTCP | Participation | +| 참조 | RFRNC | Reference | +| 창고 | WRHUS | Warehouse | +| 창업 | STUP | Start Up | +| 채광 | BWL | Be Well-Lighted | +| 채권 | BND | Bond | +| 채널 | CHNL | Channel | +| 채무 | DBT | Debt | +| 채수 | WTSMP | Water Sampling | +| 채용 | RCRUT | Recruit | +| 채점 | GRDG | Grading | +| 채집 | CLLT | Collect | +| 채취 | PCKNG | Picking | +| 채택 | ADPT | Adoption | +| 채혈 | BLDGTH | Blood-Gathering | +| 책임 | RSP | Responsibility | +| 책자 | BKLET | Booklet | +| 처리 | PRCS | Process | +| 처방 | PRSC | Prescription | +| 처분 | DSPS | Disposition | +| 척도 | YDST | Yardstick | +| 철거 | DMLTN | Demolition | +| 철관 | IRPP | An Iron Pipe | +| 철회 | RCNTT | Recantation | +| 첨두 | PEAK | Peak | +| 첨부 | ATCH | Attachment | +| 청구 | CLM | Claim | +| 청렴 | INTGRT | Integrity | +| 청문 | HRNG | Hearing | +| 청소 | CLEAN | Cleaning | +| 청약 | SBSC | Subscription | +| 청정 | CLEN | Clean | +| 청취 | LSTN | Listening | +| 청탁 | SLCT | Solicitation | +| 체결 | CNCLS | Conclusion | +| 체계 | SYSTM | System | +| 체납 | NPMNT | Nonpayment | +| 체류 | STAY | Stay | +| 체적 | VLM | (Capacity) Volume | +| 체크 | BCHCK | (Basic) Check | +| 체험 | EXPRN | Experience | +| 초과 | EXCS | Excess | +| 초기 | INITL | Initial | +| 초당 | PRSEC | Per Second | +| 초록 | ABST | Abstract | +| 초상 | FRSTSS | First Frost Of Season | +| 초지 | GRSLND | Grassland | +| 초진 | FMEXM | First Medical Examination | +| 총계 | TSM | Summation | +| 총괄 | OVRL | Overall | +| 총서 | SRS | Series | +| 총액 | | | +| 총인 | TPH | Total Phosphorus | +| 총종 | TNSPCS | Total Species | +| 총쪽 | TPAGE | Total Pages | +| 촬영 | SHT | Shooting | +| 최고 | HGHST | Highest | +| 최근 | RCNT | Recent | +| 최대 | MAX | Maximum | +| 최소 | MIN | Minimum | +| 최신 | LTST | Latest | +| 최저 | LOWST | Lowest | +| 최적 | OPTMM | Optimum | +| 최종 | LAST | Last | +| 최초 | FRST | First | +| 추가 | ADD | Addition | +| 추계 | ESTM | Estimating | +| 추세 | TRND | Trend | +| 추심 | EXCT | Exaction | +| 추인 | CNFRM | Confirmation | +| 추적 | TRC | Trace | +| 추정 | PRSMP | Presumption | +| 추진 | PRPL | Propulsion | +| 추천 | RCMDTN | Recommendation | +| 추첨 | LTRY | Lottery | +| 추출 | EXTR | Extraction | +| 축냉 | CLDST | Cold Storage | +| 축분 | LIVEMR | Livestock Manure | +| 축사 | CTSHD | Cattle Shed | +| 축산 | LVST | Livestock | +| 축제 | FSTVL | Festival | +| 축종 | DASPCS | Domestic Animal Species | +| 축척 | RDSCL | Reduced Scale | +| 출고 | SPMT | Shipment | +| 출구 | EXIT | Exit | +| 출국 | DPTCNY | Departure From A Country | +| 출근 | GTWK | Go To Work | +| 출금 | TKMNY | Taking Out Money | +| 출동 | DSPT | Dispatched | +| 출력 | OTPT | Output | +| 출발 | DPTRE | Departure | +| 출산 | CHLDB | Childbirth | +| 출생 | BRTH | Birth | +| 출석 | ATNDC | Attendance | +| 출시 | RELSE | Release | +| 출연 | CTRB | Contribution | +| 출원 | APPL | Application | +| 출입 | ENEX | Entrance And Exit | +| 출자 | INVST | Investment | +| 출장 | BZTRP | Business Trip | +| 출제 | STXQ | Setting Exam Questions | +| 출처 | SRC | Source | +| 출판 | PBLSG | Publishing | +| 출하 | CON | Con | +| 출항 | DFPT | Departure From Port | +| 출현 | APRC | Appearance | +| 충당 | APRP | Appropriation | +| 충돌 | CRASH | Crash | +| 충전 | CHARG | Charging | +| 충족 | STSF | Satisfaction | +| 취급 | HNDL | Handling | +| 취득 | ACQS | Acquisition | +| 취미 | HBY | Hobby | +| 취소 | RTRCN | Retraction | +| 취수 | WTRIT | Water-Intake | +| 취약 | FRGLTY | Fragility | +| 취업 | EMPM | Employment | +| 취임 | INGR | Inauguration | +| 취지 | INTN | Intent | +| 취하 | DISCON | Discontinuance | +| 취합 | GTRG | Gathering | +| 측량 | SVY | Surveying | +| 측면 | SIDE | Side | +| 측선 | SDTRCK | Sidetrack | +| 측점 | MSREPT | A Measuring Point | +| 측정 | MSRMT | Measurement | +| 층수 | NOFL | The Number Of Floors | +| 치료 | MDTRT | Medical Treatment | +| 치어 | YGFISH | Young Of Fishes | +| 친수 | HDRPL | Hydrophile | +| 친화 | FRSHP | Friendship | +| 침수 | FLDNG | Flooding | +| 침하 | SSDCE | Subsidence | +| 침해 | INFR | Infringement | +| 카드 | CARD | Card | +| 커버 | | | +| 컬럼 | COL | Column | +| 코드 | CD | Code | +| 콘도 | CONDO | Condominium | +| 쿠폰 | CPN | Coupon | +| 쿼터 | QTA | Quota | +| 퀴즈 | QZ | Quiz | +| 크기 | SZ | Size | +| 클릭 | CLCK | Click | +| 타사 | OCMP | Other Company | +| 탁도 | TRBT | Turbidity | +| 탄소 | CRBN | Carbon | +| 탈거 | CRYOFF | Carry Off | +| 탈락 | ELMT | Elimination | +| 탈수 | DHDR | Dehydration | +| 탈착 | DPTN | Desorption | +| 탈퇴 | WHDWL | Withdrawal | +| 탐사 | EXPLR | Exploration | +| 탑승 | BRDG | Boarding | +| 태그 | TAG | Tag | +| 태풍 | TYPHN | Typhoon | +| 터널 | TNL | Tunnel | +| 토론 | DSCS | Discussion | +| 토목 | ENGRK | Engineering Works | +| 토사 | ETND | Earth And Sand | +| 토양 | SOIL | Soil | +| 토익 | TOEIC | Test Of English For International Communication | +| 토지 | LAND | Land | +| 톤수 | TON | Tonnage | +| 통계 | STATS | Statistics | +| 통과 | PAS | Pass | +| 통관 | CSCL | Customs Clearance | +| 통보 | NTFCTN | Notification | +| 통신 | CMN | Communication | +| 통일 | UNFCTN | Unification | +| 통제 | CNTRL | Control | +| 통지 | AVTSMT | Avertissement | +| 통합 | INTG | Integration | +| 통화 | CALL | Call | +| 퇴거 | EVCT | Eviction | +| 퇴근 | LVWK | Leave Work | +| 퇴비 | CMPS | Compost | +| 퇴사 | RSGNTN | Resignation | +| 퇴소 | DSCG | Discharge | +| 퇴실 | LVRM | Leaving The Room | +| 퇴원 | DFHSP | Discharged From Hospital | +| 퇴직 | RTRM | Retirement | +| 투과 | PENTR | Penetration | +| 투약 | MDCT | Medication | +| 투입 | INPUT | Input | +| 투자 | IVST | Investment | +| 투찰 | BDNG | Bidding | +| 투표 | VOTE | Vote | +| 트럭 | TRCK | Truck | +| 특기 | SPCLT | Specialty | +| 특례 | SPCS | Special Case | +| 특별 | SPC | Special | +| 특보 | SPNWS | Special News | +| 특성 | CHRTC | Characteristic | +| 특수 | SPCL | Special | +| 특약 | SPPRV | Special Provision | +| 특이 | EXCPTN | Exception | +| 특정 | PTCLR | Particular | +| 특징 | GNCHC | (General) Characteristic | +| 특허 | PTNT | Patent | +| 팀장 | TMLDR | Team Leader | +| 파견 | SND | Send | +| 파고 | WVHGT | Wave Height | +| 파기 | DSTRC | Destruction | +| 파산 | BNKRP | Bankruptcy | +| 파손 | BRKG | Breakage | +| 파일 | FILE | File | +| 판결 | JDGM | Judgment | +| 판독 | INTERP | Interpretation | +| 판매 | NTSL | Net Sales | +| 판정 | JGMT | Judgement | +| 팝업 | POPUP | Popup | +| 패류 | SHLFSH | Shellfish | +| 패소 | LSCS | Lose A Case | +| 패스 | | | +| 패턴 | PTTN | Pattern | +| 팩스 | FAX | Fax | +| 펀드 | FUND | Fund | +| 펌프 | PUMP | Pump | +| 페놀 | PHNL | Phenol | +| 편성 | FRMT | Formation | +| 편입 | ENRL | Enrollment | +| 편집 | EDIT | Edit/ Editing | +| 편차 | DVT | Deviation | +| 평가 | EVL | Evaluation | +| 평균 | AVG | Average | +| 평면 | PLANE | Plane | +| 폐간 | DSCT | Discontinuation | +| 폐강 | CLCTR | Closing Lecture | +| 폐국 | | | +| 폐기 | DSCD | Discard | +| 폐쇄 | CLSG | Closing | +| 폐수 | WWT | Waste Water | +| 폐업 | CLSBIZ | Closing Of Business | +| 폐열 | EXSH | Exhaust Heat | +| 폐지 | ABL | Abolition | +| 포괄 | CMPH | Comprehend | +| 포기 | ABND | Abandonment | +| 포럼 | FRUM | Forum | +| 포맷 | | | +| 포상 | RWRD | Reward | +| 포장 | PCKGN | Packaging | +| 포집 | SPCR | Speicherung | +| 포트 | PORT | Port | +| 포함 | INCL | Inclusion | +| 포화 | STRN | Saturation | +| 포획 | CPTR | Capture | +| 폭발 | EPLS | Explosion | +| 폰트 | FNT | Font | +| 폴더 | FLDR | Folder | +| 표고 | ELVTN | Elevation | +| 표기 | MARK | Marking | +| 표면 | SRFC | Surface | +| 표본 | SAMPLE | Sample | +| 표시 | INDCT | Indication | +| 표준 | STD | Standard | +| 표지 | CVR | Cover | +| 표출 | EXPRS | Expression | +| 품목 | ITEM | Item | +| 품의 | CNSL | Consultation | +| 품종 | VRTY | Variety | +| 품질 | QLT | Quality | +| 풍력 | WPWR | Wind Power | +| 풍속 | WSPD | Wind Speed | +| 풍정 | WDDST | Wind Drift Distance | +| 풍향 | WDRCT | Wind Direction | +| 피고 | DFND | Defendant | +| 피도 | CVRAGE | Cover (Age) | +| 피해 | DAM | Damage | +| 피혁 | LTHR | Leather | +| 픽셀 | PXL | Pixel | +| 필기 | NTTK | Note-Taking | +| 필수 | ESNTL | Essential | +| 필요 | NEED | Need | +| 필지 | LTLND | Lot Of Land | +| 필터 | FILT | Filter | +| 하구 | RVMTH | River Mouth | +| 하단 | LWND | Lower End | +| 하도 | RVCRS | River Course | +| 하류 | DNSTM | Downsteam | +| 하상 | RVBD | A River Bed | +| 하수 | SWAGE | Sewage | +| 하안 | RVRSD | Riverside | +| 하역 | LNL | Loading And Unloading | +| 하위 | LWR | Lower | +| 하자 | FLW | Flaw | +| 하천 | RVR | River | +| 하층 | LWCL | Lower Class | +| 하폭 | WR | Width Of River | +| 하한 | LLMT | The Lower Limit | +| 하향 | DWNWRD | Downward | +| 학과 | SCSBJT | School Subject | +| 학교 | SCHL | School | +| 학급 | CLAS | Class | +| 학년 | SCYR | School Year | +| 학력 | ACBG | Academic Background | +| 학명 | STNM | Scientific Name | +| 학생 | STDNT | Student | +| 학술 | ACDM | Academic | +| 학습 | LRN | Learning | +| 학원 | PEIT | Private Educational Institute | +| 학위 | DGR | Degree | +| 학회 | ACSCT | Academic Society | +| 한강 | HNRVR | Han River | +| 한계 | MLMT | (Max) Limit | +| 한국 | KOR | Korea | +| 한글 | KORN | Korean (Language) | +| 한도 | LIM | Limit | +| 한문 | CLSCHN | Classical Chinese | +| 한발 | | | +| 한자 | CHNCRT | Chinese Character | +| 할당 | ALOT | Allotment | +| 할부 | IS | Installment | +| 할인 | DSCNT | Discount | +| 할증 | EXCHRG | Extra Charge | +| 함량 | | | +| 함수 | FNC | Function | +| 함유 | CONTN | Contain | +| 합격 | PASS | Pass | +| 합계 | SUM | Sum | +| 합병 | MERG | Merger | +| 합산 | ADUP | Adding Up | +| 합숙 | LDTG | Lodge Together | +| 합의 | ACRD | Accord | +| 항공 | AVTN | Aviation | +| 항구 | PRT | Port | +| 항만 | HRBR | Harbor | +| 항목 | ARTCL | Article | +| 항소 | APL | Appeal | +| 항속 | CRSPD | Cruise Speed | +| 항차 | VYG | Voyage | +| 해당 | RLVT | Relevant | +| 해면 | SSRFC | Sea Surface | +| 해발 | ELVT | Elevation | +| 해산 | DSBND | Disband | +| 해석 | INTPR | Interpret | +| 해설 | EXPL | Explain | +| 해소 | RSLV | Resolve | +| 해수 | SEAW | Seawater | +| 해약 | CNCL | Cancellation | +| 해양 | OCEAN | Ocean | +| 해역 | OCE | Ocean | +| 해외 | OVSEA | Overseas | +| 해임 | DSMSL | Dismissal | +| 해제 | RMV | Remove | +| 해지 | CNCLTN | Cancellation | +| 해체 | DSMT | Dismantlement | +| 해촉 | DSMS | Dismissal | +| 핵심 | KPNT | Key Point | +| 행망 | | | +| 행사 | EVNT | Event | +| 행위 | ACT | Act | +| 행정 | PBADMS | Public Administration | +| 향후 | HCFH | Henceforth | +| 허가 | PRMSN | Permission | +| 허용 | PRM | Permit | +| 현금 | CASH | Cash | +| 현상 | PRSST | Present State | +| 현안 | PDISS | Pending Issue | +| 현원 | ACNO | Actual Number Of Employee | +| 현장 | GRNDS | Grounds | +| 현재 | NOW | Now | +| 현지 | LOCAL | Local | +| 현행 | EXSTN | Existing | +| 현황 | PRST | Present Situation | +| 혈압 | BDPR | Blood Pressure | +| 협력 | CLBR | Collaboration | +| 협약 | CVTN | Convention | +| 협의 | CNSLTN | Consultation | +| 협회 | ASOC | Association | +| 형사 | CMLC | Criminal Case | +| 형상 | CONF | Configuration | +| 형식 | FRM | Formality | +| 형태 | SHP | Shape | +| 호봉 | SLCLS | Salary Class | +| 호소 | LKMR | Lakes And Marshes | +| 호안 | RVTMNT | Revetment | +| 호우 | HRAIN | Heavy Rain | +| 호출 | CLOT | Call Out | +| 혼인 | | | +| 혼입 | MIXTR | Mixture | +| 혼합 | MIX | Mix | +| 홍보 | PBRL | Public Relations | +| 홍수 | FLOOD | Flood | +| 화력 | THPWR | Thermal Power | +| 화면 | SCRN | Screen | +| 화물 | FRGHT | Freight | +| 화소 | | | +| 화일 | | | +| 화재 | FIRE | Fire | +| 화주 | SHPPR | Shipper | +| 화폐 | CRNC | Currency | +| 화학 | CHEM | Chemistry | +| 확대 | EXPD | Expand | +| 확률 | PRBBT | Probability | +| 확보 | SECR | Secure | +| 확산 | DFFSN | Diffusion | +| 확인 | IDNTY | Identify | +| 확장 | EXTND | Extend | +| 확정 | CFMTN | Confirmation | +| 환경 | ENV | Environment | +| 환급 | RMBR | Reimbursement | +| 환기 | VNTL | Ventilation | +| 환매 | RPRCH | Repurchase | +| 환불 | RFND | Refundment | +| 환산 | CNVS | Conversion | +| 환수 | RDM | Redemption | +| 환원 | RVERT | Revert | +| 환율 | EXCHRT | Exchange Rate | +| 환입 | RTRN | Returns | +| 환자 | PTN | Patient | +| 환전 | CREX | Currency Exchange | +| 활동 | ACTV | Activity | +| 활성 | ACTVTN | Activation | +| 활용 | UTLZ | Utilize | +| 황사 | YLDST | Yellow Dust[Sand] | +| 회계 | ACNTG | Accounting | +| 회기 | SESN | Session | +| 회복 | RCVRY | Recovery | +| 회비 | MFEE | Membership Fee | +| 회사 | CO | Company | +| 회생 | RVVL | Revival | +| 회선 | CRCUT | (Telephone/Telegraph) Circuit | +| 회수 | RTRVL | Retrieval | +| 회신 | RPLY | Reply | +| 회원 | MBR | Member | +| 회의 | MTG | Meeting | +| 회장 | CHRMN | Chairman | +| 회차 | | | +| 횟수 | NMTM | Number Of Times | +| 효과 | EFCT | Effect | +| 효력 | EFECT | Effect | +| 효율 | EFFC | Efficiency | +| 후기 | LATP | The Latter Part | +| 후보 | CNDT | Candidate | +| 후원 | SPN | Sponsor | +| 훈련 | TRNG | Training | +| 훼손 | DMG | Damage | +| 휴가 | VCT | Vacation | +| 휴관 | CLSR | Closure | +| 휴대 | MBL | Mobile | +| 휴면 | DRMC | Dormancy | +| 휴무 | DYOFF | Day Off | +| 휴식 | RELX | Relax | +| 휴양 | RLX | Relax | +| 휴업 | TCBIZ | Temporary Close Of Business | +| 휴일 | HLDY | Holiday | +| 휴지 | PAUS | Pause | +| 휴직 | LVABSN | Leave Of Absence | +| 흡수 | ABSTN | Absorption | +| 흡연 | SMK | Smoking | +| 흡입 | INHL | Inhalation | +| 희망 | HOPE | Hope | +| 희석 | DLTN | Dilution | +| 힌트 | HNT | Hint | +| 가능량 | PSBQTY | Possible Quantity | +| 가능성 | PSBTY | Possibility | +| 가동률 | OPRT | Operation Rate | +| 가동보 | OPRWR | Operating Weir | +| 가두리 | CAGE | Cage | +| 가맹점 | FRCS | Franchise | +| 가산세 | ADDTX | Additional Tax | +| 가산점 | ADSC | Additional Score | +| 가속도 | ACCT | Acceleration | +| 가수금 | SPRCP | Suspense Receipt | +| 가압류 | PRAT | Provisional Attachment | +| 가연성 | CMBSTB | Combustibility | +| 가이드 | GUIDE | Guide | +| 가입자 | SBSR | Subscriber | +| 가정용 | HSHUS | Household Use | +| 가중치 | WGVL | Weighted Value | +| 가지급 | PRVPY | Provisional Payment | +| 가지불 | | | +| 가해자 | ASLNT | Assailant | +| 간소화 | SMPLFC | Simplification | +| 간접비 | IDRCO | Indirect Cost | +| 간접세 | IDTX | indirect tax | +| 간행물 | PBLC | Publication | +| 간호사 | NRS | Nurse | +| 갈수위 | DWTRLV | Droughty Water Level | +| 감독자 | SPVSR | Supervisor | +| 감리원 | SPVR | Supervisor | +| 감리자 | | | +| 감면율 | RDCRT | Reduction Rate | +| 감사인 | ADTR | Auditor | +| 감사자 | | | +| 감정가 | APPRC | Appraised Price | +| 감정값 | | | +| 감축량 | RQTY | Reduction Quantity | +| 강기슭 | RVRBNK | Riverbank | +| 강수량 | RN | Rainfall | +| 강우량 | AMRF | (The Amount Of) Rainfall | +| 강의실 | LCTRM | Lecture Room | +| 개발비 | DVLCO | Development Cost | +| 개발자 | DVLPR | Developer | +| 개월수 | MCNT | Month Count | +| 개인별 | BINDV | By Individuals | +| 객관식 | MLCH | Multiple Choice | +| 거래소 | STCNG | Stock Exchange | +| 거래자 | DLR | Dealer | +| 거래처 | CNPT | Counterparty | +| 거주지 | RSDC | Residence | +| 건강성 | HLTHY | Healthy | +| 건축물 | BDST | Buildings & Structures | +| 건축주 | OWNER | (Architecture) Owner | +| 건폐율 | BDCVRT | Building Coverage Ratio | +| 검보정 | CVACT | Cal/Val Activity | +| 검사소 | INSOFC | Inspection Office | +| 검사원 | INSPTR | Inspector | +| 검사자 | TSTR | Tester | +| 검색어 | SRWRD | Search Word | +| 검수자 | CHCKR | Checker | +| 검증자 | VRIFER | Verifier | +| 검토자 | RVWR | Reviewer | +| 게시글 | PSTAT | Post Article | +| 게시물 | PST | Post | +| 게시자 | PBLR | Publisher | +| 게시판 | BBS | Bulletin Board System | +| 격자선 | GLINE | Grid Line | +| 결과서 | RSTRPT | Results Report | +| 결의서 | RSDOC | Resolution Document | +| 결재선 | APLN | Approval Line | +| 결재자 | APRVR | Approver | +| 결측치 | MSVAL | Missing Value | +| 경년관 | AGPIP | Aged Pipes | +| 경사도 | GRAD | Gradient | +| 경상자 | SLIPR | Slightly Injured Person | +| 경영체 | BIZORG | Business Organization | +| 경유국 | TRCTRY | Transit Country | +| 경유지 | STPV | Stopover | +| 경작면 | | | +| 경제성 | ECNMFB | Economic Feasibility | +| 경찰서 | POLSTN | Police Station | +| 계곡수 | VLLWTR | Valley Water | +| 계근대 | | | +| 계량기 | MSINS | Measuring Instrument | +| 계량대 | SCAL | Scale | +| 계산서 | BLL | Bill | +| 계산식 | CALFM | Calculation Formula | +| 계수기 | COUNTR | Counter | +| 계약서 | CTRTD | Contract Document | +| 계약자 | CTRTR | Contractor | +| 계약직 | CTWK | Contract Work | +| 계측기 | MSRINS | Measuring Instrument | +| 계통도 | SDGRM | System Diagram | +| 계획량 | PLNQTY | Planned Quantity | +| 계획서 | PLDOC | Planning Document | +| 고농도 | HCNTR | High Concentration | +| 고수위 | HWL | High Water Level | +| 고유종 | ESP | Endemic Species | +| 고지서 | NTDOC | Notice Document | +| 고혈압 | HBPR | High Blood Pressure | +| 고형물 | SLD | Solid | +| 곡선식 | CRVFM | Curve Formula | +| 골프장 | GC | Golf Course | +| 공고자 | NOTIF | Notifier | +| 공급량 | SQTY | Supply Quantity | +| 공급원 | SRCSL | Source Of Supply | +| 공급자 | SPLR | Supplier | +| 공람자 | PDSPR | Public Display Person | +| 공모전 | CNTEXH | Contest Exhibit | +| 공무원 | PBOFC | Public Official | +| 공문서 | | | +| 공사비 | CNSCO | Construction Cost | +| 공시가 | OFPRC | Official Notice Price | +| 공용량 | EMPCPT | Empty Capacity | +| 공작물 | STRCT | Structures | +| 공정도 | PRCSDG | Process Diagram | +| 공정률 | PRCRT | Process Rate | +| 공휴일 | LHLDY | Legal Holiday | +| 과부족 | OVSRT | Overs And Shorts | +| 과수원 | OCD | Orchard | +| 과오납 | OEPY | Overpayment Or Erroneous Payment | +| 과징금 | SRCHG | Surcharge | +| 과태료 | FFNLG | Fine For Negligence | +| 관개전 | RFLD | Irrigation Field | +| 관계식 | RLEXP | Relational Expression | +| 관계인 | | | +| 관계자 | RLPR | Related Person | +| 관공서 | GVMNTF | Government Office | +| 관광지 | TRSPT | Tourist Spot | +| 관리비 | MNCO | Maintenance Cost | +| 관리자 | MNGR | Manager | +| 관리청 | MNAGC | Management Agency | +| 관서장 | CGO | Chief Of Government Office | +| 관세율 | TRFRT | Tariff Rate | +| 관측소 | OBSVTR | Observatory | +| 광화학 | PHTCH | Photochemistry | +| 교부세 | SHTX | Shared Tax | +| 교육비 | EDUCO | Educational Cost | +| 교육생 | TRNE | Trainee | +| 교육세 | EDUTX | Education Tax | +| 교직원 | TSTF | The Teaching Staff | +| 교통량 | TRFV | Traffic Volume | +| 교통비 | TRNSCO | Transportation Cost | +| 교통세 | TRTAX | Transportation Tax | +| 교환국 | | | +| 구매량 | PCHQTY | Purchased Quantity | +| 구매자 | PRCHR | Purchaser | +| 구매처 | PCPL | Purchasing Place | +| 구성원 | GMBR | (Group) Member | +| 구역내 | WTZN | Within Zone | +| 구조물 | STRTS | Structures | +| 구체성 | CCRTNS | Concreteness | +| 국고금 | NTFND | National Funds | +| 국내산 | | | +| 권리금 | PRMM | Premium | +| 권리자 | RTHDR | Rights Holder | +| 귀화종 | NTSPCS | Naturalized Species | +| 균등도 | EVNS | Evenness | +| 그리드 | GRID | Grid | +| 근로자 | WRKR | Worker | +| 근무일 | WRKDY | Working Day | +| 근무자 | STF | Staff | +| 근무조 | WKTM | Working Team | +| 근무지 | POWK | Place Of Work | +| 근무처 | OPLEMP | One'S Place Of Employment | +| 근저당 | FXCL | Fixed Collateral | +| 글쓴이 | | | +| 금수성 | WRPLCY | Water repellency (of waste) | +| 금요일 | FRI | Friday | +| 금칙어 | PHWRD | Prohibited Words | +| 급수관 | FEEDP | Feed Pipe | +| 급수량 | AMWTSP | Amount of Water Supply | +| 급수전 | WTSTP | Water Supply Tap | +| 기간별 | BPRD | By Period | +| 기계식 | MCNCL | Mechanical | +| 기관장 | INLDR | Institution Leader | +| 기납부 | PVPY | Previously Payment | +| 기념일 | ANVS | Anniversary | +| 기능직 | TCJB | Technical Service Jobs | +| 기록물 | RCDS | Records | +| 기록부 | REGI | Register | +| 기록자 | RCDR | Recorder | +| 기본도 | BSDG | Basic Diagram | +| 기본키 | PK | Primary Key | +| 기부금 | AOD | Amount Of Donation | +| 기부자 | CTBTR | Contributor | +| 기부처 | CTBPL | Contribution Place | +| 기상청 | KMA | Korea Meteorological Administration | +| 기수종 | BRSPC | Brackish Species | +| 기숙사 | DMTRY | Dormitory | +| 기술료 | RLTY | Royalty | +| 기술성 | TYFCY | Technology Efficiency | +| 기술자 | ENGNR | Engineer | +| 기술직 | ENJB | Engineering Jobs | +| 기안자 | DRFR | Drafter | +| 기압계 | MNMTR | Manometer | +| 기업체 | | | +| 기울기 | | | +| 기자재 | MCMTR | Machinery And Materials | +| 기준율 | STDRT | Standard Rate | +| 기준점 | CRLPT | Control Point | +| 기준치 | STDVAL | Standard Value | +| 기증자 | DNR | Donor | +| 기환급 | ARFND | Already Refund | +| 기후부 | | | +| 꼬리말 | FTR | Footer (Comment) | +| 끓는점 | BPNT | Boiling Point | +| 낙동강 | NDRVR | Nakdong River | +| 낙차공 | DSTC | Drop Structure | +| 낙찰률 | SCBRT | Successful Bid Rate | +| 낙찰자 | SCBDR | Successful Bidder | +| 난이도 | DFCTY | Difficulty (Degree) | +| 남북한 | SANK | South And North Korea | +| 남조류 | BLAL | Blue-Green Algae | +| 납부자 | RTPYR | Ratepayer | +| 납세자 | TXPR | Taxpayer | +| 내국인 | DOMPL | Domestic People | +| 내륙수 | INTWTR | Interior Waters | +| 내부망 | | | +| 내성종 | TRSPCS | Tolerance Species | +| 내역서 | DTSTMN | Detailed Statement | +| 냉각수 | CULWTR | Cooling Water | +| 냉난방 | HAC | Heating And Cooling | +| 노무비 | LBCO | Labor Cost | +| 노트북 | NTBK | Notebook (Computer) | +| 녹는점 | MPNT | Melting Point | +| 농경지 | FMLND | Farmland | +| 농어촌 | FFV | Farming And Fishing Villages | +| 농업인 | FRMR | Farmer | +| 농작물 | CRPS | Crops | +| 농장주 | FRMER | Farm Owner | +| 농축산 | AGST | Agriculture And Stockbreeding | +| 농축조 | THCKNR | Thickener | +| 누리집 | HMPG | Homepage | +| 누수량 | LKQTY | Leakage Quantity | +| 누출량 | LKGQTY | Leakage Quantity | +| 닉네임 | NICK | Nick Name | +| 다기능 | MTFN | Multifunctional | +| 다양성 | DVRST | Diversity | +| 다자녀 | MCHLD | Multi-Child | +| 단계별 | BSTP | By Step | +| 단답형 | SRQT | Short Questions | +| 단말기 | TRMNL | Terminal | +| 단면적 | CRSA | Cross Sectional Areas | +| 단백질 | PROTN | Protein | +| 단속자 | RGLTR | Regulator | +| 단위별 | BUNIT | By Unit | +| 달성도 | ACHDGR | Achievement Degree | +| 달성량 | ACHQTY | Achieved Quantity | +| 달성률 | ACMTRT | Achievement Rate | +| 담당인 | | | +| 담당자 | PIC | Person In Charge | +| 담수화 | WTCON | Water Conversion | +| 답변서 | ANSDOC | Answer Document | +| 답변자 | ANSWR | Answerer | +| 당사자 | CNCPR | Concerned Person | +| 당직자 | DTPR | Duty Person | +| 당첨자 | PZWNR | Prize Winner | +| 대국민 | TNATN | To The Nation | +| 대권역 | LSIRB | Large Sphere Of Influence In A River Basin | +| 대기업 | LCO | Large Company | +| 대기자 | WAITR | Waiting Person | +| 대기질 | ARQLT | Air Quality | +| 대리인 | AGT | Agent | +| 대리자 | | | +| 대리점 | AGNC | Agency | +| 대분류 | LCLSF | Large-Scale Classification | +| 대블록 | LBLK | Large Block | +| 대상자 | TRPR | Target Person | +| 대여자 | LNDR | Lender | +| 대장균 | CLBCL | Colon Bacillus | +| 대집행 | EBRXY | Execution By Proxy | +| 대표자 | RPRSV | Representative | +| 대학교 | UNIV | University | +| 대학생 | UNVST | University Student | +| 대학원 | GDSCHL | Graduate School | +| 데이터 | | | +| 도래지 | SSNH | Seasonal Home | +| 도메인 | DMN | Domain | +| 도서관 | LIB | Library | +| 도수관 | WCNVP | Water Conveyance Pipe | +| 도식도 | SCDG | Schema Diagram | +| 도움말 | HLP | Help | +| 도입종 | | | +| 도착지 | DEST | Destination | +| 도착항 | ARPT | Arrival Port | +| 돌망태 | WRCLDR | Wire Cylinder | +| 동거자 | RMMT | Roommate | +| 동기화 | SYNC | Synchronization | +| 동승자 | FLPS | Fellow Passenger | +| 동식물 | ANPL | Animals And Plants | +| 동영상 | VDO | Video | +| 동의서 | WTCS | Written Consent | +| 동의어 | SYNM | Synonym | +| 동의자 | ASNTR | Assentor | +| 동호회 | CLUB | Club | +| 드렛지 | DRDG | Dredge | +| 등기소 | RGOFC | Registry Office | +| 등록세 | RGTX | Registration Tax | +| 등록인 | | | +| 등록자 | RGTR | Registrant | +| 등록증 | REGC | Registration Certificate | +| 디자인 | DDSGN | (Drawing) Design | +| 디지털 | DGTL | Digital | +| 디폴트 | | | +| 레이더 | RADR | Radar | +| 레이어 | | | +| 레코드 | RCRD | Record | +| 레포트 | | | +| 로그인 | LGN | Login | +| 리소스 | RSC | Resource | +| 만수위 | FWTLV | Full Water Level | +| 만족도 | DGSTFN | Degree Of Satisfaction | +| 맞벌이 | DLICM | Dual Income | +| 매뉴얼 | MNL | Manual | +| 매립량 | LFDQTY | Landfilled Quantity | +| 매립장 | GRLNDF | Garbage Landfill | +| 매립지 | RCMLND | Reclaimed Land | +| 매수인 | | | +| 매수자 | BYR | Buyer | +| 머리말 | PRFC | Preface | +| 메모리 | MMRY | Memory | +| 메세지 | | | +| 메시지 | MSG | Message | +| 면담자 | ITVWR | Interviewer | +| 명명일 | NMCLT | Nomenclate | +| 명명자 | NMCLTR | Nomenclator | +| 명세서 | SPCFCD | Specification Document | +| 모니터 | MNT | Monitor | +| 모델링 | MDLN | Modelling | +| 모바일 | MOBL | Mobile | +| 모식도 | MIMIC | Mimic | +| 목요일 | THUR | Thursday | +| 목욕탕 | BTHHS | Bathhouse | +| 목적세 | | | +| 목적어 | OBJECT | Object | +| 목적지 | DSTNST | Destination | +| 목표량 | GLQTY | Goal Quantity | +| 목표물 | MRK | Mark | +| 무역업 | TRDB | Trade Business | +| 무응답 | NRPLY | No Reply | +| 무이자 | ZINT | Zero Interest | +| 무제한 | UNLMT | Unlimit | +| 무주택 | HMLS | Homeless | +| 무피해 | NDMGE | Nothing Damage | +| 문의처 | INQPL | Inquiring Place | +| 문제점 | PBPT | Problem Point | +| 문화재 | CLTPTY | Cultural Property | +| 물건지 | RELC | Real Estate Location | +| 물리적 | PHYSCL | Physical | +| 미가동 | NORUN | No Run | +| 미개설 | UDVLP | Undeveloped | +| 미개통 | UOPN | UnOpened | +| 미검사 | NINSP | No Inspection | +| 미구축 | NBULD | Unbuilt | +| 미급수 | NWSPLY | Non Water Supply | +| 미달성 | NCHV | Nonachievement | +| 미등록 | UNREG | Unregistration | +| 미디어 | CMDIA | (Content) Media | +| 미반영 | URFT | Unreflection | +| 미반출 | NSHPGT | Non Shipping Out | +| 미부과 | NLVY | Not Levy | +| 미부착 | NTASN | Not Adhesion | +| 미사용 | UNUSE | Unused | +| 미상각 | UAMTZ | Unamortized | +| 미상환 | NRPY | Non Repayment | +| 미생물 | MCROG | Microorganism | +| 미선정 | NSLCT | Non-Selection | +| 미설치 | NOINS | No Installation | +| 미수금 | ACNRCV | Accounts Receivable | +| 미수납 | NRCP | Non-Receipt | +| 미승인 | UNAPRV | Unapproved | +| 미신고 | UNDCLR | Undeclared | +| 미신청 | UNAPL | Unappplied | +| 미실행 | NEXCN | Non Execution | +| 미완료 | INCPL | Incomplete | +| 미운행 | NOPRTN | Non Operation | +| 미이행 | NFLFL | Non-Fulfillment | +| 미작성 | NOSPEC | Not Specified | +| 미적용 | DNAP | Does Not Apply | +| 미전송 | NTST | Not Sent | +| 미점검 | NPCTD | Uninspected | +| 미제출 | UNSBM | Unsubmitted | +| 미지급 | OTSPY | Outstanding Payment | +| 미지정 | NDSN | Not Designation | +| 미집행 | UNEX | Unexecuted | +| 미처리 | UNPRCS | Unprocessed | +| 미첨부 | UTCH | Unattachment | +| 미추진 | UPMT | Unpromoted | +| 미취득 | UCQS | Unacquisition | +| 미포함 | NINCLS | Noninclusion | +| 미허가 | UPRMSN | Un Permission | +| 미확정 | UDTM | Undetermined | +| 미환급 | UNRFND | Unrefunded | +| 미활용 | UNUTL | Unutilized | +| 미회수 | UNRT | Un-Retrieval | +| 민감종 | STSPCS | Sensitiveness Species | +| 민원인 | CVLPR | Civil Petitioner | +| 바이오 | BIO | Bio | +| 바코드 | BARCD | Bar-Code | +| 박물관 | MSM | Museum | +| 반송자 | RTRNR | Returner | +| 반영량 | RFLQTY | Reflected Quantity | +| 반올림 | ROUND | Rounding | +| 반응조 | RETNK | Reactant Tank | +| 반입량 | CIVLM | Carry-In Volume | +| 반출량 | COVLM | Carry-Out Volume | +| 반출입 | CRRYIO | Carry In And Out | +| 발간물 | | | +| 발견지 | DCVRST | Discovery Site | +| 발급자 | ISPR | Issuing Person | +| 발명자 | INVTR | Inventor | +| 발생량 | AMTGNR | Amount Generated | +| 발송인 | | | +| 발송자 | SNDR | Sender | +| 발신인 | | | +| 발신자 | SNDPTY | Sending Party | +| 발신처 | DSPL | Dispatch Place | +| 발열량 | CLRVAL | Calorific Value | +| 발원지 | SRCE | Source (Of A River) | +| 발전기 | GNRTR | Generator | +| 발전량 | ELTQTY | Electricity Generation Quantity | +| 발전소 | PWPL | Power Plant | +| 발주자 | ORDERR | Orderer | +| 발주처 | ORDPL | Ordering Place | +| 발표자 | PRSNTR | Presenter | +| 발행인 | | | +| 발행자 | ISR | Issuer | +| 발행처 | ISPL | Issue Place | +| 발화점 | IGPT | Ignition Point | +| 방류구 | DWOT | Dewatering Outlets | +| 방류량 | OTFL | Outflow | +| 방류수 | EFLNT | Effluent | +| 방문객 | | | +| 방문자 | VSTR | Visitor | +| 방법론 | MHDLG | Methodology | +| 방사능 | RDACT | Radioactivity | +| 방수로 | SPWY | A Spillway | +| 방수위 | WTELV | Tailwater Elevation | +| 방화벽 | FRWL | Firewall | +| 배기량 | DSVLM | Displacement Volume | +| 배달처 | DLDTN | Delivery Destination | +| 배당금 | DVDND | Dividend | +| 배송지 | DLVRPL | Delivery Place | +| 배수관 | DRNP | Drain Pipe | +| 배수문 | DRGT | Drainage Gate | +| 배수지 | DTBRSV | Distribution Reservoir | +| 배양체 | EBDY | Embryoid Body | +| 배우자 | SPS | Spouse | +| 배정자 | ALTMTR | Allotment Person | +| 배출구 | OTLT | Outlet | +| 배출권 | EMCRD | Emmision Credit | +| 배출량 | EHQTY | Exhaust Quantity | +| 배출수 | DCGWTR | Discharge Water | +| 배출원 | EMSRC | Emission Source | +| 배출자 | EMTR | Emitter | +| 배치도 | LSKC | Layout Sketch | +| 배터리 | BTRY | Battery | +| 번역문 | TRNSN | Translation Sentence | +| 번호판 | NOPLT | Number Plate | +| 범람원 | FLDPLN | Flood Plain | +| 법무사 | JDSCR | Judicial Scrivener | +| 법인세 | COTX | Corporate Tax | +| 법정동 | STDG | Statutory Dong(Administrative District) | +| 법정리 | STLI | Statutory Li(Administrative District) | +| 변경자 | CHNRG | Changer | +| 변동량 | FLCQTY | Fluctuation Quantity | +| 변동률 | FLCTNR | Fluctuation Rate | +| 변호사 | LWYR | Lawyer | +| 변화량 | CHQTY | Change Quantity | +| 변환기 | | | +| 병해충 | DIP | Disease And Insect Pest | +| 보건소 | PHC | Public Health Center | +| 보고량 | RPTQTY | Repoted Quantity | +| 보고서 | RPTP | Report Paper | +| 보고자 | RPTR | Reporter | +| 보관량 | HDQTY | Held Quantity | +| 보상금 | CPMNY | Compensation Money | +| 보수자 | MENDER | Mender | +| 보수적 | CSVT | Conservative | +| 보안성 | PSCRTY | (Property) Security | +| 보유량 | HLDQTY | Holding Quantity | +| 보일러 | BLR | Boiler | +| 보조금 | SBSIDY | Subsidy | +| 보조비 | SBSDY | Subsidy | +| 보좌관 | AIDE | Aide | +| 보증금 | GTN | Guaranty Money | +| 보증료 | GRFE | Guarantee Fee | +| 보증서 | WTGR | Written Guarantee | +| 보증인 | GRNR | Guarantor | +| 보험료 | ISPM | Insurance Premium | +| 보호자 | PRTCR | Protector | +| 보호종 | PRSPCS | Protected Species | +| 복잡성 | CMPXTY | Complexity | +| 복호화 | DECD | Decoding | +| 본거지 | STRHLD | Stronghold | +| 본예산 | MBGT | Main Budget | +| 봉사료 | SVCHG | Service Charge | +| 부과금 | LVYAMT | Levy Amount | +| 부과량 | BMCPT | Billed metered consumption | +| 부녀자 | WMAN | Woman | +| 부담금 | BDNC | Burden Charge | +| 부동산 | REST | Real Estate | +| 부산물 | BYPRD | By-Product | +| 부상자 | INJPSN | Injured Person | +| 부서별 | BDPT | By Department | +| 부서장 | DH | Department Head | +| 부속서 | ANXD | Annex Document | +| 부식성 | CRRS | Corrosiveness | +| 부유물 | | | +| 부유사 | SPDSMT | Suspended Sediment | +| 부적격 | INDQ | Inadequacy | +| 부적정 | IMPRTY | Impropriety | +| 부적합 | ICPT | Incompatibility | +| 부전공 | MNR | Minor | +| 부정당 | DSQ | Disqualified | +| 부제목 | SBTTL | Subtitle | +| 부존량 | PTTQTY | Potential Quantity | +| 부하량 | LDQTY | Loading Quantity | +| 부하율 | ALFT | A Load Factor | +| 북마크 | | | +| 분기별 | BQTR | By Quarte | +| 분류군 | TXGRP | Taxonomic Group | +| 분류식 | SPRSYS | Separate System | +| 분석서 | ANLRPT | Analysis Report | +| 분석자 | ANLSR | Analysis Person (Analyst) | +| 분야별 | BFLD | By Field | +| 분양가 | LTOTPR | Lotting-Out Price | +| 분자량 | MWT | Molecular Weight | +| 분자식 | MCFM | Molecular Formula | +| 불가능 | IMPSBL | Impossible | +| 불공정 | UNFAIR | Unfair | +| 불만족 | DSTF | Dissatisfaction | +| 불연성 | NFLY | Incombustibility, Noninflammability | +| 불완전 | IPRFCT | Imperfection | +| 불이행 | NFUFL | No Fulfill Or Execute | +| 불인정 | NRCG | Nonrecognition | +| 불일치 | NCNSN | Non-Consensus | +| 불투수 | IMPMB | Impermeable | +| 불합격 | FAL | Fail | +| 불확도 | UNCTDG | Uncertainty Degree | +| 불활성 | INCTVY | Inactivity | +| 블로그 | BLOG | Blog | +| 비공개 | PRVT | Private | +| 비과세 | TXFR | Tax-Free | +| 비관리 | UCTL | Uncontrolled | +| 비대상 | NTRGT | Non-Target | +| 비도로 | NROAD | Non Road | +| 비동의 | DSAG | Disagree | +| 비디오 | | | +| 비산업 | NINDS | No Industry | +| 비상용 | EUSE | Emergency Use | +| 비영리 | NPRF | Non-Profit | +| 비인가 | NAPR | Non Approval | +| 비정상 | ABNML | Abnormal | +| 비추천 | DCMD | Decommendation | +| 비포장 | UNPVD | Unpaved | +| 비표준 | NSTNRD | Non-Standard | +| 비할당 | USGN | Unassignment | +| 비활성 | IACTV | Inactive | +| 비회원 | NMBR | Non Member | +| 빈용기 | ECNTNR | Empty Container | +| 사망인 | | | +| 사망자 | DCSD | The Deceased | +| 사무소 | OFCE | Office | +| 사무실 | OFC | Office | +| 사무직 | OFJB | Office Jobs | +| 사분면 | QDRNT | Quadrant | +| 사상자 | CSLTS | Casualties | +| 사수량 | DWTVLM | Dead Water Volume | +| 사수위 | DSRL | Dead Storage Level | +| 사업비 | PJTCO | Project Cost | +| 사업소 | | | +| 사업자 | BZMN | Businessman | +| 사업장 | BPLC | Business Place | +| 사업체 | BZENT | Business Enterprise | +| 사용권 | TROU | The Right Of Using | +| 사용량 | USQTY | Usage Quantity | +| 사용료 | USFE | Use Fee | +| 사용률 | USGRT | Usage Rate | +| 사용인 | | | +| 사용자 | USER | User | +| 사용처 | PLCUS | Place Of Use | +| 사원증 | EMPC | Employee Card | +| 사유서 | LTFRSN | Letter For The Reason | +| 사이즈 | | | +| 사이트 | SITE | Site | +| 삭제자 | DLTR | Deleter | +| 산번지 | MLNO | Mountain Lot Number | +| 산소량 | OXYQTY | Oxygen Quantity | +| 산업군 | INDGRP | Industry Group | +| 산정식 | CCTFM | Calculating Formula | +| 산출물 | OTPTS | Outputs | +| 산출식 | CFML | Calculating Formula | +| 산화성 | OXDZ | Oxidizing | +| 살포자 | SEDER | Seeder | +| 살포지 | SPRPLC | Spray Place | +| 상담원 | CNSLR | Counselor | +| 상담자 | | | +| 상대방 | CNTPT | Counterpart | +| 상반기 | FRHFYR | First Half Of The Year | +| 상소인 | APLNT | Appellant | +| 상속인 | IHTR | Inheritor | +| 상수도 | WTSPL | Water Supply | +| 상수원 | WTSRC | Water Source | +| 상여금 | BONUS | Bonus | +| 상주종 | RSSPCS | Residing Species | +| 상품권 | GFTCD | Gift Card | +| 상호명 | | | +| 생물군 | BIOTA | Biota | +| 생물량 | CRTQTY | Creature Quantity | +| 생산량 | OUTTRN | Outturn | +| 생산자 | PRDCR | Producer | +| 생산지 | PRDLC | Production Location | +| 생산품 | PRDT | Product | +| 생성자 | CREATR | Creator | +| 생장형 | GRWFM | Growth Form | +| 생태계 | ESSTM | Ecosystem | +| 생활관 | DTUNIT | Dormitory Unit | +| 서명자 | SIGR | A Signer | +| 서비스 | SRVC | Service | +| 서술형 | DPTV | Descriptive | +| 서식지 | HBTAT | Habitat | +| 서약서 | WROT | Written Oath | +| 서한문 | EPST | Epistle | +| 선급금 | PRPAMT | Prepayments Amount | +| 선다형 | MTPC | Multiple-Choice | +| 선수금 | ADPYR | Advance Payment Received | +| 선순위 | PRORD | Prior Order | +| 선적항 | POL | Port Of Loading | +| 선정자 | CHCR | Choice Person | +| 선지급 | ADPY | Advance Payment | +| 선호도 | DPRFRC | Degree Of Preferance | +| 설계자 | DSGNR | Designer | +| 설명서 | | | +| 설명회 | BRFN | Briefing | +| 설문자 | SRVYR | Survey Person | +| 설문지 | SRVPP | Survey Paper | +| 설치자 | INSTLR | Installer | +| 성과물 | OUTCM | Outcome | +| 성수기 | PKSN | Peak Season | +| 성적서 | SCRPT | Score Report | +| 세대원 | FMBR | Family Members | +| 세대주 | HSHLDR | Householder | +| 세무서 | TXOFC | Tax Office | +| 세분류 | DCLSF | Detailed Classification | +| 세수입 | TXRVN | Tax Revenue | +| 세척수 | WSHWTR | Wash Water | +| 소각량 | INCQTY | Incineration Quantity | +| 소각로 | INCNRT | Incinerator | +| 소각열 | INCH | Incineration Heat | +| 소각재 | INCRSH | Incineration Ash | +| 소권역 | SSIRB | Small Sphere Of Influence In A River Basin | +| 소규모 | SMSCL | Small Scale | +| 소독제 | DSINF | Disinfectant | +| 소득세 | INCTX | Income Tax | +| 소득자 | INERN | Income Earner | +| 소모품 | CSGD | Consumable Goods | +| 소방서 | FRSTN | Fire Station | +| 소분류 | SCLSF | Small-Scale Classification | +| 소블록 | SBLK | Small Block | +| 소비량 | CNSQTY | Consumption Quantity | +| 소비자 | CNSMR | Consumer | +| 소송인 | LTGNT | Litigant | +| 소수력 | SMH | Small Hydro | +| 소수점 | DCPT | Decimal Point | +| 소유권 | OWNSHP | Ownership | +| 소유역 | SBBSN | Sub Basin | +| 소유인 | | | +| 소유자 | OWNR | Owner | +| 소유주 | | | +| 소장품 | CLCN | Collection | +| 소재지 | LCTN | Location | +| 소제기 | FLGLW | Filing A Lawsuit | +| 소하천 | SMLRVR | Small River | +| 송달지 | DLPL | Delivery Place | +| 송수관 | WPP | Water Pipe | +| 송수신 | TRRC | Transmit And Receive | +| 송신자 | | | +| 쇼핑몰 | SOPMAL | Shopping Mall | +| 수거식 | TASYS | Take Away System | +| 수검자 | EXAMNE | Examinee | +| 수계별 | BWTST | By Water System | +| 수급자 | RECPNT | Recipient | +| 수납인 | | | +| 수납자 | RCPN | Recipient | +| 수령자 | RCPNT | Recipient | +| 수령지 | RCPL | Receipt Place | +| 수료자 | CMPCSR | Completer | +| 수료장 | | | +| 수료증 | DPLM | Diploma | +| 수목원 | ARBRT | Arboretum | +| 수상자 | AWRDR | Awardee | +| 수상작 | AWRT | Award Art | +| 수생태 | AE | Aquatic Ecology | +| 수수료 | FEE | Fee | +| 수신인 | | | +| 수신자 | RCVR | Receiver | +| 수신처 | RCOFC | Receiving Office | +| 수업료 | TTFE | Tuition Fee | +| 수요일 | WED | Wednesday | +| 수용가 | RCPTR | Receptor | +| 수위계 | WTGG | A Water Gauge | +| 수위표 | WLTBL | Water Level Table | +| 수익률 | ERNRT | Earnings Rate | +| 수익자 | BNFR | Benefiter | +| 수입국 | ICNTRY | Importing Country | +| 수입량 | IMPQTY | Import Quantity | +| 수입자 | INCMR | Income Person | +| 수입항 | POE | Port Of Entry | +| 수자원 | WTRSC | Water Resource | +| 수작업 | HNWK | Hand Work | +| 수정인 | | | +| 수정자 | MDFR | Modifier | +| 수진자 | MDEXME | Medical Examinee | +| 수처리 | WTRMT | Water Treatment | +| 수출국 | ECNTRY | Exporting Country | +| 수출량 | EXPQTY | Export Quantity | +| 수출입 | IMPEXP | Imports And Exports | +| 수출자 | EXPR | Export Person | +| 수출항 | EPRT | Export Port | +| 수취인 | ADDRSE | Addressee | +| 수행사 | EXCMP | Execution Company | +| 수행자 | PRFMR | Performer | +| 수험자 | EXMNE | Examinee | +| 수혜자 | BNFCR | Beneficiary | +| 숙련도 | SKLVL | Skill Level | +| 순이익 | NETPF | Net Profit | +| 순자산 | NAST | Net Assets | +| 순찰자 | PTLR | Patroller | +| 쉬는날 | | | +| 스레드 | THRED | Thread | +| 스케줄 | | | +| 스크랩 | SCRP | Scrap | +| 스키마 | SCHM | Schema | +| 슬러지 | SLUDGE | Sludge | +| 승강기 | ELVTR | Elevator | +| 승용차 | PCAR | (Passenger) Car | +| 승인자 | AUTZR | Authorizer | +| 승하차 | GNGF | Get On Or Get Off | +| 승합차 | VAN | (Passenger) Van | +| 시가지 | CTYD | City District | +| 시가화 | UBNZTN | Urbanization | +| 시간당 | PRHR | Per Hour | +| 시간대 | TMZON | Time Zone | +| 시간별 | BHR | By Hour | +| 시간외 | OVTM | Overtime | +| 시공자 | BLDR | Builder | +| 시군구 | SGG | Si/Gun/Gu | +| 시료량 | SPCQTY | Specimen Quantity | +| 시멘트 | CEMT | Cement | +| 시설물 | FCLTY | Facility | +| 시설별 | BFCLTY | By Facility | +| 시스템 | SYS | System | +| 시운전 | TSTRN | Test Run | +| 시퀀스 | | | +| 시행자 | DVLR | Developer | +| 식물상 | FLORA | Flora | +| 식별자 | UID | Unique Identifier | +| 신고량 | DCLQTY | Declared Quantity | +| 신고서 | RPDCD | Report Or Declare Document | +| 신고인 | | | +| 신고자 | DCL | Declarer | +| 신기술 | NTCH | New Technology | +| 신뢰도 | CRRL | Credibility Reliability | +| 신뢰성 | RLBL | Reliability | +| 신용장 | LC | Letter Of Credit | +| 신인도 | RCGDGR | Recognition Degree | +| 신재생 | NRNW | New And Renewable | +| 신적설 | FSNCVR | Fresh Snow Cover | +| 신증설 | NBXB | New Build Up And Extension Build Up | +| 신청량 | APLQTY | Applied Quantity | +| 신청서 | APFR | Application Form | +| 신청인 | | | +| 신청자 | APLCNT | Applicant | +| 신호등 | SGNLG | Signal Light | +| 실린더 | | | +| 실무자 | HWKR | Hands-On Worker | +| 실수령 | RLRC | Real Receipt | +| 실시간 | RLTM | Realtime | +| 실업률 | UMRT | Unemployment Rate | +| 실적량 | PFMQTY | Performance Quantity | +| 실지급 | ACTPY | Actual Payment | +| 실행자 | OPERTR | Operator | +| 실험실 | LAB | Laboratory | +| 실효성 | EFTNS | Effectiveness | +| 심사자 | JDG | Judge | +| 심층수 | DPWT | Deep Water | +| 썸네일 | THMB | Thumbnail | +| 아이디 | ID | ID | +| 아이콘 | ICON | Icon | +| 아이템 | | | +| 아이피 | | | +| 아이핀 | IPN | IPIN | +| 아파트 | APT | Apartment | +| 아황산 | SLFAC | Sulfurous Acid | +| 안내문 | GDNTC | Guidance Notice | +| 안내소 | INFDSK | Information Desk | +| 안전모 | SFHM | Safety Helmet | +| 안전성 | SFT | Safety | +| 안정화 | STBZN | Stabilization | +| 알림창 | NTWIN | Notice Window | +| 암호화 | ENCPT | Encryption | +| 앙상블 | ESBL | Ensemble | +| 앞자리 | FRDGT | Front Digit | +| 액면가 | FVAL | Face Value | +| 액비화 | LIQFZR | Liquefaction for Fertilizer | +| 액세스 | | | +| 양도량 | TRSQTY | Transferred Quantity | +| 양도인 | TRSFR | Transferor | +| 양도자 | HNOVR | Hand Over Person | +| 양서류 | AMPHBN | Amphibian | +| 양성화 | LGLZTN | Legalization | +| 양수량 | RCVQTY | Received Quantity | +| 양수인 | GRNE | Grantee | +| 양수자 | | | +| 양수장 | PMPSTN | Pumping Station | +| 양식장 | NRSFM | Nursery Farm | +| 양어장 | FSHFM | Fishing Farm | +| 어린이 | CHILD | Child | +| 언론사 | PRESS | Press | +| 업로드 | ULD | Upload | +| 업무망 | BNSNW | Business Network | +| 에너지 | ENGY | Energy | +| 에디터 | | | +| 엔터티 | ENTTY | Entity | +| 엠바고 | EBRG | Embargo | +| 여과지 | FLTPR | Filter Paper | +| 여수로 | SPWAY | Spillway | +| 역분개 | RJRNL | Reverse Journalizing | +| 역삼투 | ROSMS | Reverse Osmosis | +| 연구비 | RSCO | Research Cost | +| 연구소 | RSINS | Research Institute | +| 연구원 | RSCR | Researcher | +| 연도별 | BYRG | By Year Group | +| 연락처 | CNPL | Contact Place | +| 연령대 | AGGR | Age Group | +| 연령별 | BAG | By Age | +| 연료량 | FLQTY | Fuel Quantity | +| 연료화 | FUELZ | Fuelize | +| 연면적 | | | +| 연체율 | DLQRT | Delinquent Rate | +| 연평균 | ANAVG | Annual Average | +| 연회비 | ANFE | Annual Fee | +| 열람자 | RDR | Reader | +| 엽록소 | CLO | Chiorophyll | +| 영문자 | | | +| 영산강 | YSRVR | Yeongsan River | +| 영상실 | THTR | Theater | +| 영수증 | RCET | Receipt | +| 영양염 | NTRNT | Nutrient | +| 영업비 | BIZEXP | Business Expenses | +| 영업소 | BIZOFC | Business Office | +| 영업점 | SLSBR | Sales Branch | +| 예금자 | | | +| 예금주 | DPSTR | Depositor | +| 예보관 | FRCSTR | Forecaster | +| 예상량 | EXDQTY | Expected Quantity | +| 예약자 | BKR | Booker | +| 예정지 | PSITE | Planned Site | +| 오른쪽 | | | +| 오염원 | PLTSRC | Pollution Sources | +| 온나라 | NNR | Onnara | +| 온라인 | ONLN | Online | +| 외국어 | FRLAN | Foreign Language | +| 외국인 | FRGNR | Foreigner | +| 외래종 | INSPCS | Introduced Species | +| 외부망 | | | +| 외수위 | EZWTL | External Water Level | +| 외필지 | BYLT | Bylot | +| 요주의 | ATNT | Attention | +| 요청서 | REQDOC | Request Document | +| 요청인 | | | +| 요청자 | RQSTR | Requester | +| 용수량 | USWQTY | Using Water Quantity | +| 용적률 | FART | Floor Area Ratio | +| 용천수 | SPRWTR | Spring Water | +| 용해도 | SLBL | Solubility | +| 우량계 | RNGUG | A Raingauge | +| 우선권 | PRTY | Priority | +| 우점도 | DMNCD | Dominance (Degree) | +| 우점종 | DSPCS | Dominant Species | +| 우체국 | PSTOFC | Post Office | +| 우편물 | POSTM | Postal Matter | +| 운동성 | MOTILE | Motile | +| 운반량 | CRDQTY | Carried Quantity | +| 운반업 | TRBIZ | Transportation Business | +| 운반자 | TRSPR | Transposer | +| 운반증 | TRNLCS | Transport License | +| 운송비 | LGCO | Logistics Cost | +| 운송장 | WYBL | Waybill | +| 운영자 | SYSOP | System Operator | +| 운전자 | DRVR | Driver | +| 원거래 | ORGDL | Original Deal | +| 원동기 | MTR | Motor | +| 원리금 | PNI | Principal And Interest | +| 원산지 | PLOR | The Place Of Origin | +| 원승인 | ORGAPR | Original Approval | +| 원인자 | ORGPR | The Origin Person | +| 원재료 | RAWM | Raw Materials | +| 원파일 | ORGNFL | Original File | +| 월류언 | OVFLWE | Overflow Weir | +| 월요일 | MON | Monday | +| 월평균 | MAVG | Month Average | +| 위약금 | PNLT | Penalty | +| 위원장 | CHRPR | Chairperson | +| 위원회 | CMT | Committee | +| 위치도 | LOCMP | Location Map | +| 위탁금 | TRMNY | Trust Money | +| 위탁자 | CSNR | Consignor | +| 위험물 | DGROB | A Dangerous Object | +| 위험성 | RSKNS | Riskiness | +| 유기인 | OGPS | Organic Phosphorus | +| 유량계 | FMT | Flowmeter | +| 유류비 | FLCO | Fuel Cost | +| 유사량 | SMTDC | Sediment Discharge | +| 유수성 | EPTMC | Eupotamic | +| 유수식 | RUNWTR | Running Water | +| 유원지 | AMMP | Amusement Park | +| 유입구 | INLET | Inlet | +| 유입량 | INFLR | Inflow Rate | +| 유입원 | INFCAU | Inflow Cause | +| 유전자 | GENE | Gene | +| 유지비 | MNTFE | Maintenance Fee | +| 유출량 | OTDRG | Outflow Discharge | +| 유출부 | EFXCTN | Efflux Section | +| 유형별 | BTYPE | By Type | +| 유효성 | VLDTY | Validity | +| 육식성 | CRNVRS | Carnivorous | +| 음식물 | FDNK | Food And Drink | +| 읍면동 | EMD | Eup/Myun/Dong | +| 응답자 | RSPDNT | Respondent | +| 의견서 | WROPN | Written Opinion | +| 의견자 | OPNR | Opinion Person | +| 의뢰인 | RQSR | Requestor | +| 의뢰자 | | | +| 의료비 | MDEXP | Medical Expenses | +| 의료인 | HCWKR | Healthcare Worker | +| 의무자 | OBLGR | Obligator | +| 이동량 | MVDQTY | Moved Quantity | +| 이동식 | RVGN | Rovingness | +| 이륜차 | BIKE | Bike | +| 이메일 | EML | Email | +| 이물질 | ALSBTN | Alien Substance | +| 이미지 | IMG | Image | +| 이벤트 | SEVNT | System Event | +| 이상치 | OUTLR | Outliers | +| 이송량 | TRQTY | Transfer Quantity | +| 이슬점 | DWPNT | Dewpoint | +| 이용량 | UTQTY | Utilization Quantity | +| 이재민 | DSVCTM | Disaster Victims | +| 이중화 | DPLX | Duplexing | +| 인건비 | LBRCO | Labor Cost | +| 인계서 | HDOVDC | Handover Document | +| 인계자 | HVPRSN | Handover Person | +| 인사말 | GRTG | Greeting | +| 인상률 | INCRT | Increase Rate | +| 인솔자 | LDR | Leader | +| 인쇄비 | PRNTC | Printing Cost | +| 인수인 | | | +| 인수자 | ACPTR | Acceptor | +| 인원수 | NOPE | The Number Of Persons | +| 인정량 | RCGQTY | Recognized Quantity | +| 인증량 | CRFQTY | Certification Quantity | +| 인증서 | CRTF | Certificate | +| 인지세 | STMTX | Stamp Tax | +| 인터넷 | ITNT | Internet | +| 인허가 | LCPMT | Licenses And Permits | +| 인화성 | FLMABT | Flammability | +| 인화점 | FSPN | Fiashing Point | +| 일기도 | WTHCT | Weather Chart | +| 일사량 | SRQTY | Solar Radiation Quantity | +| 일시금 | LSMPY | A Lump Sum Payment | +| 일시적 | MMTR | Momentary | +| 일요일 | SUN | Sunday | +| 일조량 | ASNSH | Amount Of Sunshine | +| 일치성 | CNFMTY | Conformity | +| 일평균 | DYRG | Day Average | +| 임대료 | RTFE | Rental Fee | +| 임대인 | LSR | Lessor | +| 임진강 | IJRV | Imjin River | +| 임차료 | LSFE | Lease Fee | +| 임차인 | HIRER | Hirer | +| 입고량 | WHSQTY | Warehousing Quantity | +| 입고자 | WRHSGR | Warehousing Person | +| 입금자 | PYR | Payer | +| 입력자 | KBRDR | Keyboarder | +| 입주자 | OCPNT | Occupant | +| 입찰자 | BDDER | Bidder | +| 입출고 | PIPO | Put-In, Put-Out | +| 입학금 | ADMFE | Admission Fee | +| 입회자 | OBSRVR | Observer | +| 잉여금 | SRAMT | Surplus Amount | +| 자격증 | CRTFCT | Certificate | +| 자국어 | OLANG | One'S Own Language | +| 자동차 | CAR | Car | +| 자동화 | ATMTN | Automation | +| 자료실 | RPSTR | Repository | +| 자릿수 | DGT | Digit | +| 자발적 | VLNTR | Voluntary | +| 자본금 | CPTL | Capital | +| 자부담 | PHW | Pay His Way | +| 자연성 | NTRLTY | Naturality | +| 자주식 | SFPRPL | Self-Propelled | +| 작성자 | WRTR | Writer | +| 작업자 | OPRTR | Operator | +| 잔반량 | LTRQTY | Leftover Quantity | +| 잔식량 | UNFQTY | Uneaten Food Quantity | +| 잔여량 | RMNQTY | Remainder | +| 잡식성 | OMNVRT | Omnivority | +| 잡종지 | MCLNAR | Miscellaneous Area | +| 장려금 | SUBSD | Subsidy | +| 장애인 | PWDBS | People With Disabilities | +| 장차관 | MAVM | A Minister And Vice Minister | +| 재개업 | ROBIZ | Reopening Of Business | +| 재검사 | RTST | Retest | +| 재검토 | REVLT | Re-Evaluation | +| 재계산 | RECAL | Recalculation | +| 재고량 | INVQTY | Inventory Quantity | +| 재공고 | RANC | Re-Announcement | +| 재교부 | RISU | Reissue | +| 재등록 | RRG | Re-Registration | +| 재료비 | MTCO | Material Cost | +| 재반입 | RCRYN | Re Carry In | +| 재발급 | RISSU | Reissuance | +| 재발송 | RSND | Resend | +| 재발행 | RPBLC | Republication | +| 재배부 | RDTBN | Redistribution | +| 재배종 | CULTVR | Cultivar | +| 재배지 | CLTLND | Cultivation Land | +| 재부착 | RMNT | Remount | +| 재사용 | RUSE | Reuse | +| 재산세 | PRPTX | Property Tax | +| 재산정 | RCTN | Recomputation | +| 재설문 | RSRVY | Resurvey | +| 재설정 | RSET | Reset | +| 재수신 | RCAG | Receiving Again | +| 재수행 | REDO | Redo | +| 재승인 | REAPR | Reapproval | +| 재시도 | RTRY | Retry | +| 재시험 | REEXM | Reexamination | +| 재신청 | RQAG | Request Again | +| 재심사 | REXAM | Reexamination | +| 재요청 | RDMND | Redemand | +| 재이용 | RTLZTN | Reutiliztion | +| 재입찰 | REBID | Rebid | +| 재작성 | REWRT | Rewrite | +| 재전송 | RTRSM | Retransmission | +| 재제출 | RSMN | Resubmission | +| 재처리 | RPRCS | Reprocess | +| 재판부 | JSDP | Justice Department | +| 재평가 | REVL | Revaluation | +| 재할당 | RSGN | Reassignment | +| 재해자 | DVCTM | Disaster Victim | +| 재확인 | RECFM | Reconfirmation | +| 재활용 | REUTIL | Reutilization | +| 저감량 | DCQTY | Decrease Quantity | +| 저공해 | LPOLU | Low Pollution | +| 저배출 | LESN | Low Emission | +| 저서종 | BTHSPC | Benthic Species | +| 저수량 | RSQTY | Reservoir Quantity | +| 저수로 | LWATCH | Low Water Channel | +| 저수위 | LWLV | Low-Water Level | +| 저수지 | RSRVR | Reservoir | +| 저작권 | CPRGT | Copyright | +| 저작물 | WRTS | Writings | +| 저작자 | AUTHR | Author | +| 저장량 | STRQTY | Stored Quantity | +| 저장소 | STRGP | Storage Place | +| 저장조 | REPO | Repository | +| 적립금 | RSEV | Reserve | +| 적설량 | SNWFL | Snowfall | +| 적절성 | APTNS | Appropriateness | +| 전광판 | ELTRD | Electronic Display (Board) | +| 전기료 | ELCHG | Electricity Charges | +| 전년도 | | | +| 전도식 | CDTNT | Conduction Type | +| 전력량 | ELCEG | Electric Energy | +| 전문가 | EXPRT | Expert | +| 전문성 | PFSNL | Professionality | +| 전송자 | TRSMR | Transmitter | +| 전송처 | TRSPL | Transmission Place | +| 전처리 | PRCSG | Preprocessing | +| 전화국 | | | +| 절감량 | SVQTY | Saving Quantity | +| 절차서 | PROCD | Procedure Document | +| 점검자 | INSCTR | Inspector | +| 점검표 | CKLST | Check List | +| 점유율 | PCSHR | Percentage Share | +| 접속자 | ACSR | Accessor | +| 접수인 | | | +| 접수자 | CLR | Clerk | +| 정규직 | PMEMP | Permanent Employee | +| 정밀도 | PRCDGR | Precision Degree | +| 정보화 | INFMZ | Informatization | +| 정수성 | LNTIC | Lentic | +| 정수장 | FTTP | A Filtration Plant | +| 정의서 | DEFDOC | Definition Document | +| 정착금 | RSTFND | Resettlement Funds | +| 정형화 | PTNG | Patterning | +| 정화조 | SPCTNK | Septic Tank | +| 정확도 | ACCR | Accuracy | +| 제개정 | ENAM | Enactment And Amendment | +| 제경비 | OVEXP | Overhead Expenses | +| 제공자 | OFFR | Offerer | +| 제내지 | PRLL | Protected Lowland | +| 제방고 | LVHGT | Levee Height | +| 제보자 | INFMT | Informant | +| 제삼자 | | | +| 제수당 | SALW | Sundry Allowances | +| 제안서 | PRPSD | Proposal Document | +| 제안자 | PRPSR | Proposer | +| 제어기 | CTRLR | Controller | +| 제외지 | RVRSL | River Side Land | +| 제작사 | MNFCTR | Manufacturer | +| 제작자 | PDCR | Producer | +| 제조물 | PRODCT | Product | +| 제조사 | MKR | Maker | +| 제조업 | MFBIZ | Manufacturing Business | +| 제출자 | PRSNR | Presenter | +| 제출처 | SMPL | Submission Place | +| 제품군 | PDGP | Product Group | +| 조건부 | CNDL | Conditional | +| 조달청 | PPS | Public Procuerment Service | +| 조사서 | INVD | Investigation Ducument | +| 조사원 | | | +| 조사자 | EXMNR | Examiner | +| 조정량 | ADJQTY | Adjustment Quantity | +| 조직도 | ORGCHT | Organization Chart | +| 조치자 | ACTPR | Action Person | +| 조합원 | MBRAS | Member Of Association | +| 조회자 | INQPR | Inquiry Person | +| 종량제 | MRST | The Meter-Rate System | +| 종사자 | PRCTR | Practicioner | +| 종업원 | | | +| 좋아요 | LIKES | Likes | +| 좋은물 | WSWTR | Wholesome Water | +| 좌표계 | CDSSTM | Coordinate System | +| 주관식 | SBJV | Subjective | +| 주문자 | ORDRR | Orderer | +| 주민세 | RSDTX | Resident Tax | +| 주부속 | MANX | Main Annex | +| 주소록 | ADBK | Address Book | +| 주유소 | GSTN | Gas Station | +| 주의보 | WTC | Watch | +| 주입량 | INJQTY | Injected Quantity | +| 주저자 | PRAUT | Primary Author | +| 주제도 | THEME | Thematic Map | +| 주차장 | PKLT | Parking Lot | +| 준비물 | SPPLS | Supplies | +| 중간종 | ITRMDM | Intermedium | +| 중권역 | MSIRB | Middle Sphere Of Influence In A River Basin | +| 중도금 | ITRPY | Interim Payment | +| 중분류 | MCLSF | Medium-Scale Classification | +| 중블록 | MBLK | Middle Block | +| 중상자 | SRIPR | Seriously Injured Person | +| 중수도 | RUSWTR | Reusing Water | +| 중요도 | IMPDG | Important Degree | +| 중장비 | HVEQP | Heavy Equipment | +| 중하층 | LMCL | Lower Middle Classes | +| 증가율 | GRWRT | Growth Rate | +| 증기압 | STPS | Steam Pressure | +| 증명서 | PRDOC | Proof Documentation | +| 증발량 | EVAMT | Evaporation Amount | +| 지급인 | PAYR | Payer | +| 지급자 | | | +| 지급처 | PMPL | Payment Place | +| 지방비 | LCEP | Local Expense | +| 지방세 | LCLTX | Local Tax | +| 지방채 | MCPBND | Municipal Bond | +| 지방청 | LGVOFC | Local Government Office | +| 지분율 | SHRT | Share Ratio | +| 지수식 | WTRBLK | Water Block | +| 지역별 | BRGN | By Region | +| 지은이 | | | +| 지자체 | | | +| 지적부 | | | +| 지정자 | ASNR | Assigner | +| 지표면 | LNDSF | Land Surface | +| 지표수 | SRFWTR | Surface Water | +| 지하수 | UGWTR | Underground Water | +| 직접비 | DRCO | Direct Cost | +| 직접세 | DRTX | direct tax | +| 진입로 | ACCRD | Access Road | +| 진행률 | PRGRT | Progress Rate | +| 질문자 | QSTNR | Questioner | +| 질의자 | | | +| 집약도 | INTSDG | Intensive Degree | +| 징수관 | CLTOR | Collector | +| 차감량 | SBDQTY | Subtracted Quantity | +| 차상위 | SHGHRK | The Second Highest Rank | +| 차수벽 | SDMBN | Shielding Membrane | +| 참가비 | ENTFE | Entry Fee | +| 참가자 | PRTPT | Participant | +| 참석자 | ATD | Attendee | +| 참여율 | PTRT | Participation Rate | +| 참여자 | PRTPNT | Participant | +| 참조자 | RFPR | Reference Person | +| 창업자 | FNDR | Founder | +| 채권자 | CRDTR | Creditor | +| 채무자 | DBTR | Debtor | +| 채수구 | WTRLT | Water Inlet | +| 채수병 | WSBT | Water Sample Bottle | +| 채집자 | CLTNR | Collecter | +| 채집지 | CLTNG | Collect Ground | +| 채취량 | CLTQTY | Collected Quantity | +| 채취자 | CLCTOR | Collector | +| 책임자 | RBPRSN | Responsible Person | +| 처리량 | PRCQTY | Processing Quantity | +| 처리율 | PRSRT | Processing Rate | +| 처리인 | | | +| 처리자 | PRCR | Processor | +| 처리장 | TMPLNT | Treatment Plant | +| 첨가제 | ADTV | Additive | +| 청구인 | CLMT | Claimant | +| 청구자 | | | +| 청구지 | BLADR | Billing Address | +| 체납자 | DFLTR | Defaulter | +| 초기화 | INIT | Initialization | +| 초식성 | HRBVR | Herbivory | +| 총가구 | THSHD | Total Household | +| 총개체 | TNINDV | TotalIndividual | +| 총거래 | TDLNG | Total Dealings | +| 총건수 | TNOCS | Total Number Of Cases | +| 총결제 | TSTLM | Total Settlement | +| 총계약 | TCTRT | Total Contract | +| 총공급 | TSPLY | Total Supply | +| 총공사 | TCSTRN | Total Construction | +| 총구매 | TPRCH | Total Purchase | +| 총군집 | TNCMNT | Total Communities | +| 총근무 | TWRK | Total Working | +| 총금액 | GRAMT | Gross Amount | +| 총급여 | TSL | Total Salary | +| 총길이 | TLEN | Total Length | +| 총납부 | TPY | Total Payment | +| 총대출 | TLOAN | Total Loan | +| 총매출 | TSLS | Total Sales | +| 총면적 | GFA | Gross Floor Area | +| 총명수 | | | +| 총배당 | TDVD | Total Dividends | +| 총배정 | TALTM | Total Allotment | +| 총보유 | THLD | Total Holding | +| 총보증 | TGRNT | Total Guarantee | +| 총부채 | TLBLT | Total Liabilities | +| 총비용 | TCO | Total Cost | +| 총사용 | TUSE | Total Use | +| 총상환 | TRPY | Total Repayment | +| 총세포 | TBCLL | Total Biology Cell | +| 총소요 | TREQ | Total Requirement | +| 총수납 | TPYRC | Total Payments Received | +| 총수입 | TICM | Total Income | +| 총승인 | TAPRV | Total Approval | +| 총시설 | TFCLT | Total Facilities | +| 총신청 | TRQST | Total Request | +| 총업소 | TBZEST | Total Business Establishments | +| 총여신 | TCRDT | Total Credit | +| 총예산 | TBGT | Total Budget | +| 총이익 | TPRF | Total Profit | +| 총자산 | TAST | Total Assets | +| 총정원 | TCPC | Total Capacity | +| 총조회 | TINQ | Total Inquiry | +| 총주차 | TPKCT | Total Parking Capacity | +| 총주행 | TDRVG | Total Driving | +| 총중량 | TWGHT | Total Weight | +| 총지급 | TPMT | Total Payment | +| 총지출 | TEXPND | Total Expenditure | +| 총차입 | TBRW | Total Borrowings | +| 총채권 | TRCVB | Total Receivables | +| 총채무 | TDBT | Total Debt | +| 총처리 | TPRCS | Total Processing | +| 총청구 | TCLM | Total Claims | +| 총투자 | TIVST | Total Investment | +| 총평가 | TEVL | Total Evaluation | +| 총품목 | TITEM | Total Items | +| 총환수 | TRDM | Total Redemption | +| 총회수 | TRTRVL | Total Retrieval | +| 최고가 | HGPRC | The Highest Price | +| 최상위 | HGHRK | The Highest Rank | +| 최저가 | LWPRC | The Lowest Price | +| 최하위 | LWTRK | The Lowest Rank | +| 추천인 | RCMDR | Recommender | +| 추천자 | | | +| 출고량 | OBDQTY | Outbound Quantity | +| 출력량 | OTPPW | Output Power | +| 출력물 | PRNOT | Printout | +| 출발지 | DPPL | Departure Place | +| 출원인 | APLT | Applicant | +| 출입구 | GATE | Gate | +| 출입증 | ADPS | Admission Pass | +| 출장비 | BTEXP | Business Trip Expenses | +| 출장소 | LCOFC | Local Office | +| 출장자 | BZTRVR | Business Traveler | +| 출장지 | BTDST | Business Trip Destination | +| 출제자 | STXQR | Setting Exam Questions Person | +| 출판사 | PBLCO | Publishing Company | +| 충당금 | APAMT | Appropriation Amount | +| 충식성 | INSCTS | Insectivorous | +| 충전소 | CHRS | Charging Station | +| 취급량 | HDLQTY | Handling Quantity | +| 취급자 | HDLR | Handler | +| 취소자 | CNCLR | Canceler | +| 취수량 | WITQTY | Water-Intake Quantity | +| 취수원 | SWSP | Resource of Water Supply | +| 취수장 | ITKPL | Intake Plant | +| 취업자 | EMPR | Employed Person | +| 측정기 | MSINST | Measuring Instrument | +| 측정량 | MSQTY | Measured Quantity | +| 측정망 | MNTNW | Monitoring Network | +| 측정소 | MSRSTN | Measuring Station | +| 측정자 | MSRPSN | Measurement Person | +| 친환경 | ECFRD | Eco-Friendly | +| 침사지 | GRCHMB | Grit Chamber | +| 침전수 | PRPW | Precipitation-Water | +| 침출수 | EFNT | Effluent | +| 침투수 | PCLTWT | Percolating Water | +| 카드뮴 | CDMM | Cadmium | +| 캐노피 | CNPY | Canopy | +| 캠페인 | CMPGN | Campaign | +| 컨버터 | CNVRTR | Converter | +| 컨설팅 | CNSLT | Consulting | +| 컨텐츠 | | | +| 컬러맵 | CRMP | Colormap | +| 컴퓨터 | PC | Personal Computer | +| 콘텐츠 | CONTS | Contents | +| 콜센터 | CLLR | Call Center | +| 쿼터량 | QTAQTY | Quota Quantity | +| 크롤링 | CRWLG | Crawling | +| 키워드 | KYWD | Keyword | +| 타기관 | OINST | Other Institution | +| 타당성 | WSDM | Wisdom | +| 타원체 | ELPSD | Ellipsoid | +| 탈수기 | DEHYM | Dehydration Machine | +| 탈퇴자 | SCDR | Seceder | +| 탐지기 | DTOR | Detector | +| 탑승자 | PSGR | Passenger | +| 태양광 | SLRLG | Solar Light | +| 태양열 | SLREG | Solar Energy | +| 테스트 | | | +| 테이블 | TBL | Table | +| 텍스트 | TXT | Text | +| 템플릿 | | | +| 토요일 | SAT | Saturday | +| 토지계 | LNDCRL | Land Circles | +| 토출관 | DELP | Delivery Pipe | +| 통계청 | NSO | National Statistical Office | +| 통보서 | NTFCTD | Notification Document | +| 통보자 | ANCR | Announcer | +| 통신사 | TLCMCO | Telecommunication Company | +| 통신실 | OPRRM | An Operating Room | +| 통제소 | CNRPT | Control Post | +| 통지서 | WRNTC | Written Notice | +| 통행량 | TRFVLM | Traffic Volume | +| 통화자 | CALR | Caller | +| 퇴비화 | CMPSTG | Composting | +| 퇴적물 | SDM | Sediment | +| 특별세 | SPTX | Special Tax | +| 특수지 | SPAREA | Special Area | +| 파충류 | RPTL | Reptile | +| 판결문 | RLNG | Ruling | +| 판매량 | SLQTY | Sales Quantity | +| 판매자 | SLR | Seller | +| 판매처 | SLPL | Sales Place | +| 팝업창 | | | +| 패키지 | PKG | Package | +| 팽창률 | EXPSRT | Expansion Rate | +| 펌웨어 | FW | Firmware | +| 펌프장 | PUMPST | Pump Station | +| 페이지 | | | +| 편집기 | EDTR | Editor | +| 평가군 | EVLGRP | Evaluation Group | +| 평가자 | EVLTR | Evaluator | +| 평가표 | EVLSHT | Evaluation Sheet | +| 평균량 | AVGQTY | Average Quantity | +| 폐기물 | WST | Waste | +| 폐사체 | DBDY | Dead Body | +| 폐쇄망 | CLSDNW | Closed Network | +| 포유류 | MNM | Manmal | +| 포장재 | PACKNG | Packing | +| 포지션 | | | +| 폭발성 | EXPSV | Explosiveness | +| 표류수 | SFCWT | Surface Water | +| 표준화 | STDZ | Standardize | +| 품목량 | ITMQTY | Item Quantity | +| 풍부도 | ABDNC | Abundance | +| 풍속계 | ANMTR | Anemometer | +| 풍향도 | WDDRM | Wind Direction Diagram | +| 프레임 | FRAME | Frame | +| 프로필 | PRFL | Profile | +| 플랫폼 | PLTFM | Platform | +| 피의자 | SSPCT | Suspect | +| 피해량 | DAMQTY | Damaged Quantity | +| 피해자 | VCTM | Victim | +| 하도급 | SBCTR | Subcontract | +| 하반기 | SHYR | Second Half Of The Year | +| 하수도 | SEWER | Sewer | +| 하수량 | SWQTY | Sewage Quantity | +| 하역항 | PULDG | Port Of Unloading | +| 하천수 | RWTR | River Water | +| 학술지 | ACJRNL | Academic Journal | +| 학습자 | LRNR | Learning Person (Learner) | +| 한부모 | SGPRN | Single Parent | +| 할당량 | QT | Quota | +| 할인율 | DSCRT | Discount Rate | +| 함수율 | MOSRT | Moisture Rate | +| 함유량 | CTQTY | Content Quantity | +| 합격자 | PASSR | Passed Person(Successful Candidate) | +| 합류식 | CBSYS | Combined Sewer System | +| 합류점 | CNFLN | Confluence | +| 합리화 | RTNZ | Rationalization | +| 항공기 | ARPLN | Airplane | +| 항공사 | ARLN | Airline | +| 해상도 | RSLU | (Display) Resolution | +| 해수면 | | | +| 해양수 | OCWTRS | Ocean Waters | +| 해조류 | SWD | Seaweed | +| 행정동 | DONG | Dong (Administrative District) | +| 허가량 | PRMQTY | Permitted Quantity | +| 허가서 | PERMD | Permit Document | +| 허가증 | PERMC | Permission Certificate | +| 허용량 | ALWQTY | Allowed Quantity | +| 현미경 | MCPE | Microscope | +| 현실화 | RLZTN | Realization | +| 혈액형 | BLDTY | Blood Type | +| 협의회 | CUNCL | Council | +| 협잡물 | CTMN | Contaminants | +| 협조자 | HLPR | Helper | +| 형태별 | BSHP | By Shape | +| 호소수 | PNWTR | Pond Water | +| 호스트 | HOST | (Facility) Host | +| 홍수기 | FLDSN | Flood Season | +| 홍수량 | FLDSC | Flood Discharge | +| 홍수위 | FLDEL | Flood Elevation | +| 화요일 | TUE | Tuesday | +| 확약서 | DFPRD | Definite Promise Document | +| 확인서 | CNFDOC | Confirmation Document | +| 확인자 | IDFR | Identifier | +| 확장자 | EXTN | Extension | +| 확정자 | DTMR | Determiner | +| 환경부 | MOE | Ministry Of Environment | +| 환경성 | ENVL | Environmental | +| 환경처 | OMOE | (Old) Ministry Of Environment | +| 환경청 | ENVO | Environmental Office | +| 환산량 | CNVQTY | Converted Quantity | +| 환승역 | TRFSTN | Transfer Station | +| 활성화 | VTLZ | Vitalization | +| 회수량 | RTVQTY | Retrieved Quantity | +| 회신자 | RPLYR | Reply Person | +| 회원사 | MBRCO | Member Company | +| 회의실 | CFRM | Conference Room | +| 회전율 | RTTRT | Rotation Rate | +| 효율성 | EFFCTV | Effectiveness | +| 후처리 | PSTC | Post-Cleaning | +| 휘발성 | VLATIL | Volatility | +| 휴폐업 | SCBIZ | Suspension Or Closing Of Business | +| 희귀종 | RSPCS | Rare Species | +| 가능면적 | PMSBAR | Permissible Area | +| 가성소다 | NAOH | Caustic Soda(NACH) | +| 가조시간 | PDOSN | Possible Duration Of Sunshine | +| 가중평균 | WGAVG | Weighted Average | +| 가축분뇨 | LVEXTN | Livestock Excretions | +| 간선시설 | ATLFCS | Arterial Facilities | +| 감가상각 | DPRC | Depreciation | +| 감시수량 | MTRWQT | Monitoring Water Quantity | +| 강수확률 | POR | Probability Of Rainfall | +| 개발면적 | DVLPAR | Developed Area | +| 개인식별 | PRIDTF | Personal Identification | +| 개인정보 | PRVC | Privacy | +| 객체면적 | OBJTAR | Object Area | +| 거주면적 | HABAR | Habitation Area | +| 거치연수 | DFYRS | Deferment Years | +| 건물면적 | | | +| 건물번호 | BNO | Building Number | +| 건물본번 | BMNO | Building Main Number | +| 건물부번 | BSNO | Building Sub Number | +| 건설기계 | CTCQ | Construction Equipment | +| 건축면적 | BDAR | Building Area | +| 검정곡선 | CLBCV | Calibration Curve | +| 겨울철새 | WNTVST | Winter Visitor | +| 결정계수 | RSQR | R-Squared | +| 경과연수 | ELYRS | Elapsed Years | +| 경로우대 | SNPR | Senior Preference | +| 경상이익 | ORDPF | Ordinary Profit | +| 경작면적 | CLTVAR | Cultivation Area | +| 경지정리 | ROEL | Readjustment Of Erable Land | +| 경합채권 | CMPCLM | Competition Claims | +| 계약면적 | CTRTAR | Contract Area | +| 계정과목 | ACNTL | Account Title | +| 계좌번호 | ACTNO | Account Number | +| 계좌이체 | ACTRSF | Account Transfer | +| 계획수량 | DSNWQT | Design Water Quantity | +| 고도처리 | AWTR | Advanced Water Treatment | +| 고등균류 | HGF | Higher Fungi | +| 고등학교 | HGSCHL | High School | +| 고속도로 | HWAY | Express Highway | +| 고수부지 | | | +| 고시면적 | NTFAR | Notified Area | +| 고용보험 | EPIS | Employment Insurance | +| 고정비율 | FARTO | Fixed Assets Ratio | +| 고체연료 | HTTBS | Heat Tabs | +| 공간정보 | SPTINF | Spatial Information | +| 공공기관 | PBNST | Public Institution | +| 공공누리 | KOGL | Korea Open Government License | +| 공공수량 | PBCWQT | public water quantity | +| 공급면적 | SPLYAR | Supply Area | +| 공급설비 | SPLFC | Supply Facilities | +| 공동명의 | JNTNM | Joint Name | +| 공동수급 | JSD | Joint Supply And Demand | +| 공동주택 | APTCPX | Apartment Complex | +| 공부면적 | PBRGAR | Public Register Area | +| 공시지가 | OALP | Officially Announced Land Price | +| 공업용수 | IWTR | Industrial Water | +| 공용면적 | CMAR | Common Area | +| 공원면적 | PRKAR | Park Area | +| 공유면적 | SHRAR | Shared Area | +| 공통비용 | | | +| 과세면적 | TXAR | Taxable Area | +| 과세표준 | TXBS | Tax Base | +| 과오납금 | OVPMNT | Overpayments | +| 관개용수 | WTFIR | Water For Irrigation | +| 관리기관 | MGC | Management Agency | +| 관리주체 | MNATH | Management Authority | +| 광역시도 | MCTPV | Metropolitan Cities And Provinces | +| 교류전류 | AC | Alternating Current | +| 교육과정 | CRCLM | Curriculum | +| 교육기관 | EDNST | Education Institution | +| 교육연수 | EDTRN | Education And Training | +| 구름저항 | RLGRS | Rolling Resistance | +| 구비서류 | RQDOC | Required Documents | +| 구상채권 | RIDNT | Right Of Indemnity | +| 국립공원 | NTPK | National Park | +| 국민연금 | NPN | National Pension | +| 국회의원 | MTNA | Member Of The National Assembly | +| 군립공원 | CNTRPK | Country Park | +| 규제개혁 | RGRF | Regulatory Reform | +| 그룹웨어 | GRPWR | Groupware | +| 근로소득 | ERICM | Earned Income | +| 근무연수 | SVCYRS | Service Years | +| 근속연수 | CSYRS | Continuous Service Years | +| 금융기관 | FNST | Financial Institution | +| 급속여과 | RPDFTR | Rapidity Filtration | +| 기능점수 | FP | Function_Point | +| 기록물철 | RCDSF | Records Files | +| 기말잔액 | EBLNC | Ending Balance | +| 기준면적 | RFAR | Reference Area | +| 기초잔액 | OPBLNC | Opening Balance | +| 기타면적 | OTHRAR | Other Area | +| 기후대기 | CLAIR | Climate And Air | +| 내부면적 | INTNAR | Internal Area | +| 내용년수 | | | +| 내용연수 | SVLF | Service Life | +| 네트워크 | NTWRK | Network | +| 노동조합 | LBUN | Labor Union | +| 노출면적 | EXPDAR | Exposed Area | +| 녹색제품 | GPRDC | Green Product | +| 녹지면적 | GRNAR | Green Area | +| 녹피면적 | GRCVAR | Green Covered Area | +| 뉴스레터 | NEWSL | Newsletter | +| 다면평가 | MSEVL | Multisource Evaluation | +| 다운로드 | DWNLD | Download | +| 단과대학 | CLG | College | +| 단기자금 | SRTF | Short Term Fund | +| 담수어류 | FWF | Freshwater Fish | +| 담수조류 | ALG | Algae | +| 당좌예금 | CKACNT | Checking Account | +| 대기발령 | PLWTLS | Being Placed On The Waiting List | +| 대기배출 | ATEMS | Atmospheric Emission | +| 대기오염 | ARPLT | Air Pollution | +| 대기환경 | ATENV | Atmospheric Environment | +| 대상업체 | TBET | Target Business Entity | +| 대위변제 | SBRG | Subrogation | +| 대장균군 | CLFG | Coliform Group | +| 대지면적 | SIAR | Site Area | +| 대표이사 | CEO | Chief Executive Officer | +| 데이터셋 | DTST | Data Set | +| 도서지역 | ISLND | Islands | +| 도전양식 | CCRF | Cultivation Of Carp In Rice Fields | +| 독성물질 | TOXST | Toxic Substance | +| 독성지수 | TXIDX | Toxicity Index | +| 등기원인 | RGCS | Registration Cause | +| 디바이스 | DVCE | Device | +| 라이선스 | LCS | License | +| 로그아웃 | LGT | Log Out | +| 마일리지 | MLG | Mileage | +| 매개변수 | PARM | Parameter | +| 매우만족 | HSTFY | Highly Satisfy | +| 매입세액 | IPTXAM | Input Tax Amount | +| 메인화면 | MSCRN | Main Screen | +| 멸종위기 | CRETN | Crisis Of Extinction | +| 명품마을 | MPVLLG | Myeongpum Village | +| 모니터링 | MNTR | Monitoring | +| 무기물질 | NRGNC | Nonorganic | +| 무수수량 | NRVWTR | Non Revenue Water | +| 무효수량 | INFWQT | Ineffective Water Quantity | +| 물가지수 | PRIDX | Price Index | +| 미리보기 | PRVW | Preview | +| 미성년자 | LMNR | Legally a Minor | +| 미세먼지 | PM | Particulate Matter | +| 미소입지 | MCRST | Micro Site | +| 민원서류 | CADOC | Civil Affair Documents | +| 바로가기 | SCUT | Shortcut | +| 바이러스 | VRS | Virus | +| 바탕시료 | BLSMPL | Blank Sample | +| 박테리아 | BCTR | Bacteria | +| 발행기관 | PBINS | Publish Institute | +| 방지시설 | PRVFCT | Prevention Facility | +| 배당요구 | DVDMND | Dividend Demand | +| 배수방식 | DRGPTN | Drainage Pattern | +| 배수암거 | DGCVT | Drainge Culvert | +| 배수통관 | CGC | Circular Gate Culvert | +| 배출수량 | DCWQTY | Discharge Water Qauntity | +| 배출수지 | EMTWTR | Emit Drain Water | +| 배출활동 | EMAT | Emission Activity | +| 배후습지 | RRSMLD | Rear Swampy Land | +| 백두대간 | BDMTRG | Baekdudaegan Mountain Range | +| 법인세율 | CPTXRT | Corporate Tax Rate | +| 베셀함수 | BSFUN | Bessel Function | +| 벤처기업 | VENT | Venture Enterprise | +| 벤치마크 | BCHM | Benchmark | +| 보수월액 | MRAMT | Monthly Remuneration Amount | +| 보정계수 | COFC | Correction Factor | +| 보증료율 | GRNRT | Guarantee Rate | +| 보험료율 | PMRT | Premium Rate | +| 보훈번호 | PVNO | Patriots And Veterans Number | +| 본류면적 | MNSTAR | The Main Stream Area | +| 부외자산 | NLAST | Non-Ledger Assets | +| 부유물질 | SPNS | Suspended Solid | +| 부재지주 | ABLD | Absentee Landlord | +| 부정수급 | ILRCP | Illegal Receipt | +| 부지면적 | PLTAR | Plottage Area | +| 부착조류 | ATAG | Attached Algae | +| 분류체계 | TXNM | Taxonomy | +| 분양면적 | LTOTAR | Lotting-Out Area | +| 불감수량 | URCWQT | Under Recognition Water Qauntity | +| 불납결손 | LSNPY | Loss By Nonpayment | +| 불이행량 | UFDQTY | Unfulfilled Quantity | +| 불쾌지수 | DCFIDX | Discomfort Index | +| 불투수면 | IVAREA | Impervious Area | +| 불확실도 | UCTMR | Uncertainty Of Measurement | +| 불활성화 | INCTVN | Inactivation | +| 브라우저 | BRWSR | Browser | +| 블랙박스 | BLBOX | Black Box | +| 비내식성 | NCNRT | Non Corrosion Resistant | +| 비밀번호 | PSWD | Password | +| 비시가지 | UCTARA | Un City Area | +| 비정규직 | IREMP | Irregular Employee | +| 사고수습 | ACDRES | Accident Response | +| 사업면적 | BZAR | Business Area | +| 사업분야 | BSR | Business Area | +| 사업유형 | BTYP | Biz Type | +| 사용수량 | USEWQT | Use Water Quantity | +| 산림면적 | FRSTAR | Forest Area | +| 산재보험 | IACI | Industrial Accident Compensation Insurance | +| 산하기관 | AFINS | Affiliated Institute | +| 상관계수 | CORR | Correlation Coefficient | +| 상류면적 | USTRAR | Upstream Area | +| 상세주소 | DADDR | Detailed Address | +| 상호명칭 | | | +| 상호작용 | INTRCN | Interaction | +| 상황전파 | STCM | Situation Communication | +| 생년월일 | BRDT | Birth Date | +| 생리학적 | PSLG | Physiologic | +| 생물학적 | BOIL | Biological | +| 생태관광 | ECTRSM | Eco-Tourism | +| 생활하수 | DSWAG | Domestic Sewage | +| 선수수익 | UNRV | Unearned Revenue | +| 선하증권 | BL | Bill Of Lading | +| 선화증권 | | | +| 성과지표 | PI | Performance Indicator | +| 세계은행 | WB | World Bank | +| 소득공제 | ICMDCT | Income Deduction | +| 소득세율 | ICTXRT | Income Tax Rate | +| 소득월액 | MINAMT | Monthly Income Amount | +| 소멸시효 | ETPRSC | Extinctive Prescription | +| 소상공인 | SBO | Small Business Owner | +| 수도꼭지 | SPGT | Spigot | +| 수량징수 | WQTCLT | Water Quantity Collection | +| 수로면적 | WTRAR | Waterway Area | +| 수리시설 | WTUF | Water Utilization Facilities | +| 수몰면적 | SBMGAR | Submerged Area | +| 수문곡선 | HDRGPH | Hydrograph | +| 수변식생 | RPVGTN | Riparian Vegetation | +| 수소이온 | HION | Hydrogen Ion | +| 수수료율 | CMRT | Commission Rate | +| 수의계약 | PVCT | Private Contract | +| 수입업체 | IMPTR | Importer | +| 수입인지 | RVSTM | Revenue Stamp | +| 수준거표 | LSTND | Level Standard | +| 수질오염 | WTPLT | Water Pollution | +| 수혜면적 | BNFAR | Benefitted Area | +| 순발열량 | NCFV | Net Calorific Value | +| 순환골재 | RCLAGT | Recycling Aggregate | +| 승차정원 | RDCPCT | Ride Capacity | +| 시나리오 | SCNR | Scenario | +| 시설면적 | FCAR | Facility Area | +| 시험회차 | TSCYCL | Test Cycle | +| 식물뿌리 | PLTRT | Plant Root | +| 식별정보 | | | +| 식생면적 | VGTNAR | Vegetation Area | +| 식생피복 | VGTCVR | Vegetation Cover | +| 신용카드 | CRCD | Credit Card | +| 신용평가 | CRDRTG | Credit Rating | +| 신적설량 | FSQTY | Fresh Snow Quantity | +| 실거주지 | RLRSD | Real Residence | +| 실효세율 | EFTXRT | Effective Tax Rate | +| 아스팔트 | ASPT | Asphalt | +| 아우점종 | SBSPCS | Subdominant Species | +| 아이디어 | IDEA | Idea | +| 아주좋음 | VRGD | Very Good | +| 알고리즘 | ALGR | Algorithm | +| 암거면적 | UDRAR | Underdrain Area | +| 액면가격 | | | +| 액티비티 | | | +| 야생동물 | WANMLS | Wild Animals | +| 야생생물 | WLDF | Wildlife | +| 양해각서 | MOU | Memorandum Of Understanding | +| 업데이트 | | | +| 업무분장 | TSKASN | Task Assignment | +| 여권번호 | PNO | Passport Number | +| 여성기업 | FOBIZ | Female-Owned Business | +| 여울면적 | RPDSAR | Rapids Area | +| 연립주택 | TNHS | Town House | +| 연말정산 | YTXADJ | Year-End Tax Adjustment | +| 연차휴가 | ANVCT | Annual Vacation | +| 염지하수 | SLTUGW | Salty Underground Water | +| 영점표고 | ZRELV | Zero Elevation | +| 예산전용 | DVSBGT | Diversion Of Budget | +| 오브젝트 | | | +| 오수처리 | SWGDPL | Sewage Disposal | +| 오염물질 | PLTT | Pollutant | +| 오프라인 | OFLN | Offline | +| 온실가스 | GRGS | Greenhouse Gas | +| 완료면적 | CMPTAR | Completed Area | +| 완료수량 | CMPWQT | Complete Water Quantity | +| 완속여과 | SLWFTR | Slow Filtration | +| 외래생물 | ALSP | Alien Species | +| 외부면적 | EXTNAR | External Area | +| 요금수량 | CRGWQT | Charge Water Quantity | +| 용도지역 | ZNG | Zoning | +| 용존산소 | DOX | Dissolved Oxygen | +| 용존총인 | DTP | Dissolved Total Phosphorus | +| 용지면적 | LANDAR | Land Area | +| 용해성철 | SI | Soluble Iron | +| 우편번호 | ZIP | Zip Code | +| 운영체제 | OS | Operating System | +| 원도급자 | ORGCTR | Original Contractor | +| 원소유자 | ORGOWN | Original Owner | +| 원천징수 | WTHD | Withholding | +| 웹사이트 | | | +| 유가증권 | MSCRT | Marketable Securities | +| 유기물질 | ORGMT | Organic Matter | +| 유기탄소 | ORGCB | Organic Carbon | +| 유동부채 | CRLBL | Current Liability | +| 유동비율 | CRRT | Current Ratio | +| 유동자산 | CRAST | Current Asset | +| 유류탱크 | OLTNK | Oil Tank | +| 유수수량 | RVNWTR | Revenue Water | +| 유역면적 | DRAR | Drainage Area | +| 유전자원 | GRSC | Genetic Resources | +| 유지관리 | MNTMNG | Maintenance Management | +| 유지보수 | MNTN | Maintenance | +| 유효수량 | EFTWQT | Effective Water Quantity | +| 육상면적 | LDBSAR | Land Based Area | +| 이격거리 | SPDST | Seperated Distance | +| 이노비즈 | INOBIZ | Innovation Business | +| 이용면적 | USGAR | Usage Area | +| 이자수익 | INTRV | Interest Revenues | +| 이전신청 | RCTAPL | Relocation Apllication | +| 이전연도 | PRVYR | Previous Year | +| 인공증식 | CPPGN | Captive Propagation | +| 인산염인 | PO4P | Phosphate Phosphorus | +| 인센티브 | ICNTV | Incentive | +| 인터넷망 | ITNTNW | Internet Network | +| 일기개황 | WTHST | Weather Situation | +| 일련번호 | SN | Serial Number | +| 일상감사 | DLADT | Daily Audit | +| 임대면적 | RNTAR | Rent Area | +| 임차면적 | LSAR | Leased Area | +| 자금이체 | FNDTR | Fund Transfer | +| 자기소개 | SLFINT | Self Introduction | +| 자기자본 | EQCPTL | Equity Capital | +| 자기평가 | SLFEVL | Self Evaluation | +| 자동이체 | ATTR | Automatic Transfer | +| 자동차세 | AMTX | Automobile Tax | +| 자본조정 | CPAD | Capital Adjustment | +| 자연보호 | CTNT | Conservation Of Nautre | +| 자원봉사 | VLTR | Volunteering | +| 자치단체 | | | +| 장바구니 | SHPBS | Shopping Basket | +| 장부가액 | BKVL | Book Value | +| 재무제표 | FNSTM | Financial Statements | +| 재배작물 | CRTLVN | Crops Of Cultivation | +| 재사용량 | RSDQTY | Reused Quantity | +| 재수출국 | RPGCNY | Reexporting Country | +| 재이용수 | RUSWT | Reuse Water | +| 재충전량 | RCRQTY | Recharged Quantity | +| 재택근무 | TLCM | Telecommuting | +| 재활용량 | RCYQTY | Recycled Quantity | +| 저소득층 | LINBR | Low Income Bracket | +| 저수면적 | IMPDAR | Impoundment Area | +| 저수용량 | RSCPT | Reservoir Capacity | +| 저작권자 | CPRGTR | Copyright Holder | +| 저장매체 | STRMDA | Storage Media | +| 적색목록 | RLST | Redlist | +| 적용세율 | APTXRT | Applied Tax Rates | +| 전기탐사 | ELCRST | Electrical Resistivity | +| 전문분야 | ARSP | Area Of Specialty | +| 전용면적 | XUAR | Exclusive Use Area | +| 전자결재 | ELAPR | Electronic Approval | +| 전자계약 | ELCT | Electronic Contract | +| 전자문서 | ELDOC | Electronic Document | +| 전자발행 | ELPBL | Electronic Publication | +| 전자서명 | ELSGN | Electronic Signature | +| 전자우편 | | | +| 전자접수 | ELRCP | Electronic Receipt | +| 전체면적 | WHLAR | Whole Area | +| 전통시장 | TRMKT | Traditional Market | +| 전화번호 | TELNO | Telephone Number | +| 점오염원 | PTPSRC | Point Pollution Source | +| 정격전압 | RVLT | Rating Voltage | +| 정격출력 | RTOPUT | Rated Output | +| 정량평가 | QTEVL | Quantitative Evaluation | +| 정성평가 | QLEVL | Qualitative Evaluation | +| 정수처리 | WTRTRM | Water Treatment | +| 정유공정 | RFPC | Refining Process | +| 제약시장 | PHMRKT | Pharmaceutical Market | +| 제조업체 | MNFCO | Manufacture Company | +| 제조회사 | | | +| 조경면적 | LAAR | Landscape Architecture Area | +| 조도계수 | RGHCF | Roughness Coefficient | +| 종사업장 | MRBPL | Minor Business Place | +| 주건축물 | MBLD | Main Building | +| 주계약자 | MCNTR | Main Contractor | +| 주담당자 | MPIC | Main Person In Charge | +| 주무관청 | CMPADG | Competent Administrative Agency/Office | +| 주민번호 | | | +| 주민세율 | RSTXRT | Residence Tax Rate | +| 주사업자 | MBPR | Main Business Person | +| 주사업장 | MBPL | Main Business Place | +| 주상복합 | MUBLD | Mixed-Use Buildings | +| 주생산품 | MPRD | Main Product | +| 주택면적 | HSAR | House Area | +| 주행모드 | DSCHDL | Drive Schedule | +| 중부원점 | CTRMRD | Central Meridian | +| 중소기업 | SME | Small And Medium Enterprise | +| 즐겨찾기 | BKMK | Bookmark | +| 증발산량 | EVTRTN | Evapotranspiration | +| 증발잠열 | LHOV | Latent Heat Of Vaporization | +| 지도교수 | ACAVSR | Academic Adviser | +| 지류면적 | TRBAR | Tributary Area | +| 지목면적 | LDCGAR | Land Category Area | +| 지번본번 | | | +| 지번부번 | | | +| 지역지구 | ZNDST | Zoning District | +| 지오서버 | GSVR | Geoserver | +| 지적대장 | | | +| 지적면적 | PBCDAR | Public Cadastre Area | +| 지중온도 | SLTMPR | Soil Temperature | +| 지체상금 | LQDMG | Liquidated Damages | +| 지형지물 | FTRE | Feature | +| 질의응답 | QNA | Question And Answer | +| 집수구역 | CHMARA | Catchment Area | +| 집합건물 | CNBD | Condominium Buildings | +| 차대번호 | VIN | Vehicle Identification Number | +| 차량번호 | | | +| 처리수량 | PRCWQT | Process Water Quantity | +| 처리효율 | DSPEFC | Disposal Efficiency | +| 청정연료 | CLNRFL | Cleaner Fuel | +| 체크카드 | CKCRD | Check Card | +| 초등학교 | ELSCHL | Elementary School | +| 총가입자 | TNSBSR | Total Subscribers | +| 총감축량 | TRNQTY | Total Reduction Quantity | +| 총경년관 | TNAGP | Total Aged Pipes | +| 총계획량 | TPLQTY | Total Planned Quantity | +| 총매립량 | TLFQTY | Total Landfilled Quantity | +| 총발열량 | TCLVL | Total Calorific Value | +| 총방류량 | TOTFL | Total Outflow | +| 총방문자 | TVSTR | Total Visitors | +| 총배출권 | TEMCRD | Total Emmision Credit | +| 총배출량 | TEHQTY | Total Exhaust Quantity | +| 총부존량 | TPTQTY | Total Potential Quantity | +| 총사업비 | TPCO | Total Project Cost | +| 총사용량 | TUQTY | Total Usage Quantity | +| 총세대수 | TNOHSH | Total Number Of Households | +| 총신청량 | TAPQTY | Total Applied Quantity | +| 총연구비 | TRSCO | Total Research Cost | +| 총이동량 | TMVQTY | Total Moved Quantity | +| 총인구수 | TPPL | Total Population | +| 총인원수 | TNOPE | Total Number Of People | +| 총인정량 | TRGQTY | Total Recognized Quantity | +| 총자본금 | TEQCP | Total Equity Capital | +| 총저수량 | TREQTY | Total Reservoir Quantity | +| 총직원수 | TNOEMP | Total Number Of Employees | +| 총하수량 | TSWQTY | Total Sewage Quantity | +| 총할당량 | TQTY | Total Quota | +| 총회수량 | TRVQTY | Total Retrieved Quantity | +| 출제회차 | SQCYCL | Set Exam Questions Cycle | +| 취득면적 | ACQAR | Acquired Area | +| 침수면적 | FLDAR | Flooded Area | +| 침엽수림 | CFF | Coniferous Forests | +| 카카오톡 | KATLK | Kakao Talk | +| 카탈로그 | CTLG | Catalog | +| 카테고리 | | | +| 캠벨선도 | CAMPDG | Campbell Diagram | +| 커뮤니티 | CMNTY | Community | +| 컨설턴트 | CNSLTT | Consultant | +| 컨트롤러 | PCTLR | (Program) Controllor | +| 콘크리트 | CNCRT | Concrete | +| 큐알코드 | | | +| 클라우드 | CLD | Cloud (Computing) | +| 토지대장 | LNDRG | Land Register | +| 토지면적 | LDAR | Land Area | +| 토지이동 | AOCR | Alteration Of Cadastral Record | +| 토지피복 | LCV | Land Cover | +| 통근버스 | CMBUS | Commuter Bus | +| 통상임금 | ORWG | Ordinary Wage | +| 투수면적 | PRMBAR | Permeable Area | +| 파라미터 | | | +| 파트너십 | PTNS | Partnership | +| 팝업메뉴 | | | +| 패스워드 | | | +| 팩스번호 | FXNO | Fax Number | +| 편의시설 | CVNFCL | Convenient Facilities | +| 편입면적 | ICLAR | Included Area | +| 폐수처리 | WSWT | Wastewater Treatment | +| 표준편차 | STDDV | Standard Deviation | +| 프로그램 | PRGRM | Program | +| 프로세스 | PRCSS | Process | +| 프로젝트 | | | +| 플라스틱 | PLSTIC | Plastic | +| 플랑크톤 | PLNKTN | Plankton | +| 피보험자 | ISRT | Insurant | +| 피승계인 | SCSR | Successor | +| 피신청인 | | | +| 피신청자 | RQPRSN | Requested Person | +| 필지면적 | LPAR | Land Parcel Area | +| 하구면적 | ESTNAR | Estuarine Area | +| 하드웨어 | HW | Hardware | +| 하상면적 | RVBDAR | Riverbed Area | +| 하수처리 | SWTRMT | Sewage Treatment | +| 하자보수 | WRP | Warranty Repair | +| 학술대회 | SMPSM | Symposium | +| 합계면적 | SUMAR | Sum Area | +| 합성수지 | SYRSN | Synthetic Resin | +| 해시태그 | HSTG | Hashtag | +| 해양투기 | OCDU | Ocean Dumping | +| 행정구역 | ADMDST | Administrative District | +| 행정기관 | ADMNST | Administrative Institution | +| 행정처분 | ADMDSP | Administrative Disposition | +| 허가면적 | PMTAR | Permitted Area | +| 현장소장 | STMGR | Site Manager | +| 홈페이지 | | | +| 홍수사상 | FLDEV | Flood Event | +| 환경매체 | ENVMDA | Environment Media | +| 환경청장 | AOEO | Administrator Of Environmental Office | +| 활동자료 | ATTD | Activity Data | +| 활엽수림 | BDF | A Broadleaf Forest | +| 회계연도 | FYR | Fiscal Year | +| 회수시설 | RTFT | Retrieval Facilities | +| 후기내용 | RVCN | Review Contents | +| 휴대전화 | MPHN | Mobilephone | +| 간접생산비 | | | +| 감가상각률 | DPRT | Depreciation Rate | +| 감가상각비 | DPCO | Depreciation Cost | +| 건강보험증 | HIC | Health Insurance Card | +| 건축물대장 | BDRG | Building Register | +| 계면활성제 | SRFCT | Surfactant | +| 계약보증금 | CRYMY | Contract Guaranty Money | +| 계획하상고 | PLNRB | Planned River Bed | +| 고도처리량 | AWTVLM | Advanced Water Treatment Volume | +| 고용보험료 | EPISPM | Employment Insurance Premium | +| 골재채취업 | AGPKBS | Aggregate Picking Business | +| 공간데이터 | SPCDT | Space Data | +| 공급받는자 | SPLRCP | Supply Recipient | +| 공인인증서 | PCRTF | Public Certificate | +| 과불화탄소 | PFCS | Perfluoro Carbon | +| 과학기술인 | SCEGNR | Scientists And Engineers | +| 구우편번호 | OZIP | Old Zip Code | +| 구조물면적 | STRTAR | Structures Area | +| 국가정보원 | NIS | National Intelligence Service | +| 국고보조금 | GVSBS | Government Subsidy | +| 기초배출량 | BSCEMS | Basic Emissions | +| 납세의무자 | | | +| 냉난방면적 | HACAR | Heating And Cooling Area | +| 농축수산물 | ARLSFS | Agricultural And Livestock And Fishery | +| 다세대주택 | MLTPHS | Multiplex House | +| 다양도지수 | DVRIDX | Diversity Index | +| 대권역면적 | LSRBAR | Large Sphere Of Influence In A River Basin Area | +| 대유역면적 | LRBAR | Large River Basin Area | +| 만수위면적 | FWLVAR | Full Water Level Area | +| 매우불만족 | HDSTFY | Highly Dissatisfy | +| 매출원가율 | COGSRT | Cost Of Goods Sold (Cogs) Ratio | +| 메타데이터 | MTDAT | Metadata | +| 멤버스카드 | MBSCR | Members Card | +| 면적강우량 | ARRF | Areal Rainfall | +| 멸종위기종 | EGSPCS | Endangered Species | +| 무척추동물 | INVTB | Invertebrates | +| 문자메시지 | TMSG | Text Message (Service) | +| 미구축면적 | UNBTAR | Unbuilt Area | +| 미수납수량 | NPDWQT | Non Paid Water Quantity | +| 바이오가스 | BGS | Biogas | +| 바이오매스 | BMSS | Biomass | +| 방사성물질 | RATSBT | Radioactive Substance | +| 배슬러지지 | EMSLDG | Emit Sludge | +| 배출허용량 | EMSALW | Emission Allowances | +| 법정보호종 | LPRSP | Legally Protected Species | +| 복리후생비 | WLFCO | Welfare Cost | +| 부가가치세 | VAT | Value Added Tax | +| 부유물질량 | SPNQTY | Suspended Solid Quantity | +| 부착돌말류 | ATTDM | Attached Diatom | +| 불투수면적 | IMPBAR | Impermeable Area | +| 비유동부채 | NCLBL | Non-Current Liabilities | +| 비유동자산 | NCAST | Non-Current Assets | +| 비점오염원 | NPTLS | Nonpoint Pollution Source | +| 사업소면적 | | | +| 사업자번호 | | | +| 사업장면적 | BZSTAR | Business Site Area | +| 사전할당량 | PRALC | Pre-Allocation | +| 사회적기업 | SCENT | Social Enterprise | +| 상쇄배출권 | KCU | Korean Credit Unit | +| 상시만수위 | NHWL | Normal High Water Level | +| 생물다양성 | BODVS | Biodiversity | +| 생물측정망 | AEM | Aquatic Ecology Monitering Network | +| 생태자연도 | ENM | Ecological And Natural Map | +| 섭식기능군 | FFG | Funtional Feeding Groups | +| 세계측지계 | WGS84 | World Geodetic System | +| 세금계산서 | TXIV | Tax Invoice | +| 소수력발전 | SMHPWR | Small Hydropower | +| 소유권이전 | OWNTRS | Ownership Transfer | +| 소유역면적 | SBAREA | Sub Basin Area | +| 소프트웨어 | SW | Software | +| 수리모델링 | MTMD | Mathematical Modeling | +| 수리안전답 | IRPDY | Irrigated Rice Paddy | +| 수리전도도 | HYDCON | Hydraulic Conductivity | +| 수질측정망 | WQMN | Water Quality Monitoring Network | +| 숙련도시험 | PFTSTG | Proficiency Testing | +| 스트레이너 | STRENE | Strainer | +| 시뮬레이션 | SMLT | Simulation | +| 시장조성자 | MRMKR | Market Maker | +| 아산화질소 | NTRXD | Nitrous Oxide | +| 아이핀번호 | IPIN | Internet Personal Identification Number | +| 아황산가스 | SPDX | Sulphur Dioxide | +| 양서파충류 | AMPHRP | Amphibian Reptile | +| 업그레이드 | UPGRAD | Upgrade | +| 연속지적도 | CCDM | Continuous Cadastral Map | +| 열병합발전 | CHP | Combined Heat And Power | +| 영업외비용 | NOCO | Non-Operating Cost | +| 영업외수익 | NOICM | Non-Operating Income | +| 오수처리량 | SWDQTY | Sewage Disposal Quantity | +| 외국인번호 | | | +| 용존고형물 | TDS | Total Dissolved Solide | +| 용존산소량 | DOQTY | Dissolved Oxygen Quantity | +| 용존총질소 | DTN | Dissolved Total Nitrogen | +| 우점종면적 | DMSPAR | Dominant Species Area | +| 워크플로우 | WFLW | Workflow | +| 웹맵서비스 | WMS | Web Map Service | +| 유기물질량 | OMQTY | Organic Matter Quantity | +| 이산화질소 | NTDX | Nitrogen Dioxide | +| 이산화탄소 | CBDX | Carbon Dioxide | +| 이해관계인 | | | +| 이해관계자 | STHDR | Stakeholder | +| 인증배출량 | CRTEMS | Certified Emissions | +| 인터페이스 | IF | Interface | +| 일산화탄소 | CBMX | Carbon Monoxide | +| 임금피크제 | SLPK | Salary Peak | +| 임대차계약 | LSCT | Lease Contract | +| 잉여배출권 | SPSEMP | Supplus Emission Permits | +| 자본적지출 | CPEX | Capital Expenditure | +| 자연발화성 | PYHRC | Pyropholic | +| 전기자동차 | ELCAR | Electric Car | +| 전기전도도 | ELCD | Electrical Conductivity | +| 전자기록물 | ERCDS | Electronic Records | +| 정수여과지 | WTFB | Water Treatment Filter Basin | +| 조류측정망 | SWMN | Sea Weed Mesure Network | +| 주거래은행 | MBNK | Main Bank | +| 주차장면적 | PKLTAR | Parking Lot Area | +| 중권역면적 | MSRBAR | Middle Sphere Of Influence In A River Basin Area | +| 지식재산권 | IPR | Intellectual Property Rights | +| 질소산화물 | NOX | Nitrogen Oxide | +| 차상위계층 | LICLS | Low Income Class | +| 채무불이행 | DFOBL | Default On An Obligation | +| 천연기념물 | NTM | Natural Monument | +| 체크리스트 | | | +| 초미세먼지 | FPM | Fine Particulate Matter | +| 총교육시간 | TTRHR | Total Training Hours | +| 총근로자수 | TNOWK | Total Number Of Workers | +| 총근무시간 | TWKHR | Total Work Hours | +| 총대장균군 | CFBCTR | Coliform Bacteria | +| 총등록건수 | TRGCNT | Total Registration Count | +| 총사업비용 | | | +| 총유기탄소 | TORGCB | Total Organic Carbon | +| 총재사용량 | TRDQTY | Total Reused Quantity | +| 총저수용량 | TRSCPT | Total Reservoir Capacity | +| 최심하상고 | LRB | The Lowest River Bed | +| 최종할당량 | FNALC | Final Allocation | +| 추가할당량 | ADDALC | Additional Allocation | +| 추곡수매량 | AGPQTY | Autumn Grain Purchase Quantity | +| 측정망면적 | MTNTAR | Monitoring Network Area | +| 친환경마을 | ECVL | Eco-Friendly Village | +| 클라이언트 | CLNT | Client | +| 테스트베드 | TSTBD | Test Bed | +| 투수량계수 | TRSMI | Transmissivity | +| 평가배출량 | ASDEMS | Assessed Emissions | +| 평균하상고 | AVGRB | Average River Bed | +| 평형하상고 | EBRB | Equilibrium River Bed | +| 폐기물처리 | WSTDSP | Waste Disposal | +| 풍부도지수 | RCNIDX | Richness Index | +| 하수미처리 | USWTMT | Un Sewage Treatment | +| 하수처리량 | SWTQTY | Sewage Treatment Quantity | +| 하수처리수 | STWTR | Sewage Treatment Water | +| 하수처리장 | STPLNT | Sewage Treatment Plant | +| 하이브리드 | HYB | Hybrid | +| 할당배출권 | KAU | Korean Allownce Unit | +| 할당취소량 | ALCRVC | Allocation Revocation | +| 해산어류종 | MFSPCS | Marine Fishes Species | +| 헬프데스크 | HDESK | Helpdesk | +| 현금매도율 | CSSRT | Cash Selling Rate | +| 현금영수증 | CSRT | Cash Receipt | +| 환경주제도 | ENVTHM | Environmental Thematic Map | +| 활동자료량 | ADQTY | Activity Data Quantity | +| 회유성어종 | DRMSPC | Diadromous Species | +| 경사면일사량 | SRDINC | Solar Radiation Quantity On Inclined Surface | +| 고유식별정보 | UII | Unique Identifier Information | +| 과불화탄소량 | PFCQTY | Perfluoro Carbon Quantity | +| 국지수집장치 | LAU | Local Area Observation Unit | +| 굴뚝자동측정 | CMAM | Chimney Automatic Measurement | +| 기초구역번호 | | | +| 기한이익상실 | TRGCLS | Trigger Clause | +| 기후변화협약 | UNFCCC | United Nations Framework Convention On Climate Change | +| 놀이시설면적 | PFCAR | Play Facility Area | +| 농어촌특별세 | ASRDTX | ACT ON SPECIAL RURAL DEVELOPMENT TAX | +| 대기오염물질 | ARPLTS | Air Pollutants | +| 데이터베이스 | DB | Database | +| 동물플랑크톤 | ZPLKTN | Zooplankton | +| 명품마을면적 | MPVAR | Myeongpum Village Area | +| 물이용부담금 | WUALMT | Water Utilization Allotment | +| 미활용확약서 | LCNM | Letter of Commitment on Nullification of Mitigations | +| 바이오에너지 | BENRG | Bioenergy | +| 배출권이월량 | BKEMP | Banking of Emission Permits | +| 배출권제출량 | SRDEMP | surrender of emission permits | +| 배출권차입량 | BRWEMP | Borrowing of Emission Permits | +| 배출권총수량 | TEA | Total Emission Allowances | +| 배출허용기준 | EQS | Effluent Quality Standard | +| 배출허용총량 | EMSCAP | (Emission) Cap | +| 법인등록번호 | CRNO | Corporation Registration Number | +| 보호구역면적 | RTNAR | Retention Area | +| 부가가치세율 | VATRT | Value Added Tax Rate | +| 부대시설면적 | SFAR | Subsidiary Facilities Area | +| 비점오염물질 | NPLTS | Nonpoint Pollutions | +| 산림보호구역 | FRSTPA | Forest Protection Area | +| 생태계교란종 | DISP | Ecological Disruption Species | +| 수관그늘면적 | WPSHAR | Water Pipe Shade Area | +| 수리불안전답 | PIRPDY | Partially Irrigated Rice Paddy | +| 수소이온농도 | PH | Hydrogen Ion Concentration | +| 수질오염물질 | WTPLTS | Water Pollutants | +| 수질평가지수 | WQI | Water Quality Index | +| 슬러지케이크 | SLDGCK | Sludge Cake | +| 식물플랑크톤 | PTPKTN | Phytoplankton | +| 신용평가기관 | CRBU | Credit Bureau | +| 애프터서비스 | AS | After-Sales Service | +| 애플리케이션 | APP | Application (App) | +| 어류평가지수 | FAI | Fish Assessment Index | +| 어플리케이션 | | | +| 우편일련번호 | | | +| 운전면허번호 | DLN | Driver'S License Number | +| 율리우스날짜 | JLSDY | Julius Day | +| 일제관측수위 | SWL | Simultanous Water Level | +| 저서동물지수 | BMI | Benthic Macroinvrtebrates Index | +| 전도식가동보 | RVOPW | Reversal Operating Weir | +| 전문처리분야 | SPCFLD | Specialized Field | +| 전신환매도율 | TTSRT | Telegraphic Transfer Selling Rate | +| 전신환매입률 | TTBRT | Telegraphic Transfer Buying Rate | +| 전자납부번호 | EPAYNO | Electronic Payment Number | +| 전자수입인지 | ERSTP | E-Revenue Stamp | +| 조정감액수량 | DCMWQT | Decrement Water Quantity | +| 종합주가지수 | KOSPI | Korean Composite Stock Price Index | +| 주거공용면적 | DCAR | Dwelling Common Area | +| 주민등록번호 | RRNO | Resident Registration Number | +| 주요생산제품 | | | +| 지방자치단체 | LCLGV | Local Government | +| 지역내총생산 | GRDP | Gross Regional Domestic Product | +| 총발행주식수 | TSHOSD | Total Shares Outstanding | +| 토양오염물질 | SLCTMS | Soil Contaminants | +| 토지이용규제 | LURGLT | Land Use Regulation | +| 토지피복면적 | LCVAR | Land Cover Area | +| 토지피복지도 | LCM | Land Cover Map | +| 특정유해물질 | SHCH | Specified Hazardous Chemicals | +| 하수종말처리 | FNTRMT | Final Treatment | +| 하수처리구역 | STAA | Sewage Treatment Area | +| 핵심성과지표 | KPI | Key Performance Indicator | +| 행정구역면적 | ADSTAR | Administrative District Area | +| 환경생태유량 | ENVFLW | Environmental Flow | +| 환경영향평가 | EIA | Environmental Impact Assessment | +| 공간정보데이터 | GEOM | (Data) Geometry | +| 국외반출승인종 | OEASP | Overseas Export Approval Species | +| 기초생활수급자 | ROBL | Recipients Of Basic Livelihood | +| 도로명상세주소 | | | +| 분원성대장균군 | FCFS | Fecal Coliforms | +| 사업자등록번호 | BRNO | Business Registration Number | +| 사회적협동조합 | SCCP | Social Cooperative | +| 생태계교란생물 | | | +| 스마트워크센터 | SWC | Smart Work Center | +| 식생자연도지수 | VNI | Vegetation Naturalness Index | +| 암모니아성질소 | AMNG | Ammonium Nitrogen | +| 암호화계좌번호 | ENACNO | Encrypted Account Number | +| 암호화비밀번호 | ENPSWD | Encrypted Password | +| 외국인등록번호 | FRNO | Foreigner Registration Number | +| 자동기상관측소 | AWS | Automatic Weather Station | +| 자동차등록번호 | VHRNO | Vehicle Registration Number | +| 전자세금계산서 | ETXIV | Electronic Tax Invoice | +| 지구온난화지수 | GWPTN | Global Warming Potential | +| 지상기상관측소 | MTRST | Meteorological Station | +| 철새도래지면적 | MBDHAR | Migratory Bird Habitat Area | +| 총트리할로메탄 | THMS | Total Trihalomethane | +| 탄소중립포인트 | CNPNT | Carbon Neutral Point | +| 트리클로로에탄 | TCRN | Trichloroethane | +| 표준지공시지가 | | | +| 하수미처리구역 | RSAA | Raw Sewage Area | +| 하수처리장면적 | STPAR | Sewage Treatment Plant Area | +| 한국십진분류법 | KDC | Korea Decimal Classification | +| 항공화물운송장 | AIRBL | Air Waybill | +| 국제적멸종위기종 | CSPCS | Cites Species | +| 국제표준도서번호 | ISBN | International Standard Book Number | +| 기초생활수급권자 | | | +| 기후에너지환경부 | MCEE | Ministry of Climate, Energy and Environment | +| 배출량산정계획서 | ECPD | Emission Computation Plan Document | +| 상쇄배출권전환량 | KCUCVT | KCUS Converted | +| 서식수변환경지수 | HRI | Haitat And Riparian Index | +| 서식지적합도지수 | HIS | Habitat Suitability Indexes | +| 석면함유가능물질 | ACM | Asbestos Containing Materials | +| 선행토양함수조건 | AMC | Antecedent Moisture Condition | +| 옥탄올물분배계수 | OWPC | Octanol-Water Partition Coefficient | +| 외부사업인증실적 | KOC | Korean Offset Credit | +| 우편번호일련번호 | | | +| 최소검출가능농도 | MDA | Minimum Detectable Activity | +| 한국표준산업분류 | KSIC | Korean Standard Industrial Classification | +| 행정정보공동이용 | ADINSR | Administrative Information Sharing | +| 화학적산소요구량 | COD | Chemical Oxygen Demand | +| 환경기초조사사업 | EBSP | Environmental Basis Survey Project | +| 휘발성유기화합물 | VOCS | Volatile Organic Compounds | +| 미국연방통신위원회 | FCC | Federal Communications Commission | +| 암호화법인등록번호 | ENCRNO | Encrypted Corporation Registration Number | +| 암호화주민등록번호 | ENRRNO | Encrypted Resident Registration Number | +| 개인정보수집이용동의 | PICUC | Personal Information Collection/Use Consent | +| 생물화학적산소요구량 | BOD | Biochemical Oxygen Demand | +| 생태계교란야생동식물 | | | +| 암호화사업자등록번호 | ENBRNO | Encrypted Business Registration Number | +| 저서성대형무척추동물 | BMCRIB | Benthic Macroinvertebrate | +| 국제표준연속간행물번호 | ISSN | International Standard Serial Number | +| 총생물화학적산소요구량 | TBOD | Total Biochemical Oxygen Demand | +| 1회섭취참고량 | RAFOS | Reference Amount For One Serving | +| 14세 | YO14 | 14 Years Old | +| 코로나19 | COVID | Covid19 | +| 차량2부제 | ATNDS | Alternate No-Driving System | +| 2차원 | DMS2 | Two Dimensions | +| 제3자 | TDPTY | Third Party | +| 제3채무자 | GRNS | Garnishee | +| 3차원 | DMS3 | Three Dimensions | +| 4대강 | FMRVR | Four Major Rivers | +| 오픈API | OPAPI | Open Application Programming Interface | +| API | API | Application Programming Interface | +| ARS | ARS | Automatic Response System | +| CAS | CAS | Chemical Abstract Service | +| CCTV | CCTV | Closed Circuit Television | +| CI | CI | Connecting Information | +| CMS | CMS | Cash Management Service | +| COP | COP | Community Of Practice | +| CP | CP | Capacity Parameter | +| CPU | CPU | Central Processing Unit | +| DB | | | +| DI | DI | Duplicated Joining Verification Information | +| DN | DN | Distinguish Name | +| DRM | DRM | Digital Rights Management | +| EAI | EAI | Enterprise Application Integration | +| e-mail | | | +| EMAIL | | | +| FAQ | FAQ | Frequently Asked Question | +| FAX번호 | | | +| FILE | | | +| G2B | G2B | Government-To-Business | +| GIS | GIS | Geographic Information System | +| GOTP | GOTP | Government One Time Password | +| GPKI | GPKI | Government Public Key Infrastructure | +| GPS | GPS | Global Positioning System | +| GVPN | GVPN | Government Virtual Private Network | +| HS | HSYS | Harmonized System | +| HSK | HSK | Harmonized System Korea | +| HTML | HTML | Hypertext Markup Language | +| ID | | | +| IEA | IEA | International Energy Agency | +| IP | IP | Internet Protocol | +| IPCC | IPCC | Intergovernmental Panel On Climate Change | +| ISBN | | | +| JSON | JSON | Javascript Object Notation | +| KTSN | KTSN | Korea Taxonomic Serial Number | +| LAN | LAN | Local Area Network | +| LULUCF | LULUCF | Land Use, Land Use Change And Forestry | +| MAC | MAC | Medium Access Control | +| MMS | MMS | Multimedia Messaging Service | +| MOU | | | +| NCBI | NCBI | National Center For Biotechnology Information | +| NULL | | | +| OCR | OCR | Optical Character Reader | +| OECD | OECD | Organization For Economic Cooperation And Development | +| PC | | | +| PDF | PDF | Portable Document Format | +| PG | PG | Payment Gateway | +| PK | | | +| POS | POS | Point Of Sales | +| QA | QA | Quality Assurance | +| QC | QC | Quality Control | +| QR코드 | QRCD | Quick Response Code | +| RFID | RFID | Radio Frequency Identification | +| RPA | RPA | Robotics Process Automation | +| RSS | RSS | Really Simple Syndication | +| RSSI | RSSI | Received Signal Strength Indication | +| SMS | SMS | Short Message Service | +| SNS | SNS | Social Networking Service | +| SQL | SQL | Structured Query Language | +| SSID | SSID | Service Set Identifier | +| SSL | SSL | Secure Sockets Layer | +| TMS | TMS | Tele Monitoring System | +| TV수신료 | TVSFE | TV Subscription Fee | +| UID | | | +| UPS | UPS | Uninterruptible Power Supply | +| URI | URI | Uniform Resource Identifier | +| URL | URL | Uniform Resource Locator | +| USB | USB | Universial Serial Bus | +| UUID | UUID | Universal Unique Identifier | +| VOC | VOC | Voice Of Customer | +| VOD | VOD | Video On Demand | +| WBS | WBS | Work Breakdown Structure | +| WRI | WRI | World Resource Institute | +| WSI | WSI | Water Safety Index | +| X좌표 | XCRD | X-Coordinate | +| XML | XML | Extensible Mark-Up Language | +| Y좌표 | YCRD | Y-Coordinate | +| Z좌표 | ZCRD | Z-Coordinate | + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18702cf33..f78691690 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,6 +105,9 @@ importers: prettier-plugin-tailwindcss: specifier: ^0.6.11 version: 0.6.14(prettier@3.7.4) + steiger: + specifier: ^0.5.11 + version: 0.5.11(typescript@5.9.3) tailwindcss: specifier: ^3.4.14 version: 3.4.19(yaml@2.8.2) @@ -10507,8 +10510,8 @@ snapshots: '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@2.6.1)) @@ -10528,7 +10531,7 @@ snapshots: eslint: 9.39.2(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@1.21.7)) @@ -10567,21 +10570,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - get-tsconfig: 4.13.0 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.15 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)): dependencies: '@nolyfill/is-core-module': 1.0.39 @@ -10593,7 +10581,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)) transitivePeerDependencies: - supports-color @@ -10623,17 +10611,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 @@ -10645,7 +10622,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -10674,35 +10651,6 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.39.2(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 From 26d01a7032689ea05b29bf86c39622bca8532698 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 10:49:33 +0900 Subject: [PATCH 03/15] =?UTF-8?q?[as]=20feat:=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/.env.example | 8 ++--- apps/as/app/(with-base-layout)/layout.tsx | 35 ++++++++++++++++++++++ apps/as/app/(with-base-layout)/page.tsx | 9 ++++++ apps/as/app/globals.css | 26 +++++----------- apps/as/app/layout.tsx | 16 +++++++--- apps/as/app/page.tsx | 10 ------- apps/as/entities/menu/index.ts | 1 + apps/as/entities/menu/model/index.ts | 1 + apps/as/entities/menu/model/types.ts | 19 ++++++++++++ apps/as/package.json | 2 +- apps/as/shared/ui/button.tsx | 36 ----------------------- apps/as/shared/ui/index.ts | 2 +- apps/as/shared/ui/page-layout.tsx | 35 ++++++++++++++++++++++ apps/as/tailwind.config.ts | 4 +++ packages/common/components/package.json | 4 +-- 15 files changed, 131 insertions(+), 77 deletions(-) create mode 100644 apps/as/app/(with-base-layout)/layout.tsx create mode 100644 apps/as/app/(with-base-layout)/page.tsx delete mode 100644 apps/as/app/page.tsx create mode 100644 apps/as/entities/menu/index.ts create mode 100644 apps/as/entities/menu/model/index.ts create mode 100644 apps/as/entities/menu/model/types.ts delete mode 100644 apps/as/shared/ui/button.tsx create mode 100644 apps/as/shared/ui/page-layout.tsx diff --git a/apps/as/.env.example b/apps/as/.env.example index f5cfcfb89..b2d706024 100644 --- a/apps/as/.env.example +++ b/apps/as/.env.example @@ -1,5 +1,5 @@ # apps/as/shared/config/env.ts 참고 -NEXT_PUBLIC_PORT=3000 -NEXT_PUBLIC_PROXY_HOST=http://localhost:3000 -NEXT_PUBLIC_SITE_ID=AS -NEXT_PUBLIC_SERVER_API_URL=http://192.168.0.102:8000 +NEXT_PUBLIC_PORT= +NEXT_PUBLIC_PROXY_HOST= +NEXT_PUBLIC_SITE_ID= +NEXT_PUBLIC_SERVER_API_URL= diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx new file mode 100644 index 000000000..fd8cee5bd --- /dev/null +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; +import { useQueryClient } from "@tanstack/react-query"; +import { BaseLayout } from "@common/components"; +import type { MenuItem } from "@/entities/menu"; +import { PageLayout } from "@/shared/ui/page-layout"; + +export default function WithBaseLayout({ + children, +}: { + children: React.ReactNode; +}) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx new file mode 100644 index 000000000..e118e732e --- /dev/null +++ b/apps/as/app/(with-base-layout)/page.tsx @@ -0,0 +1,9 @@ +"use client"; + +export default function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/as/app/globals.css b/apps/as/app/globals.css index 13d40b892..60bc92fb6 100644 --- a/apps/as/app/globals.css +++ b/apps/as/app/globals.css @@ -1,27 +1,15 @@ +@import "@common/assets/styles/base.css"; +@import "@common/assets/styles/diveicon.css"; +@import "@common/components/index.css"; + @tailwind base; @tailwind components; @tailwind utilities; -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - +html, body { color: var(--foreground); background: var(--background); - font-family: Arial, Helvetica, sans-serif; -} - -@layer utilities { - .text-balance { - text-wrap: balance; - } + font-family: var(--font-noto-sans-kr), sans-serif; + font-size: 10px; } diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index 719c143d3..d152e0da3 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,10 +1,18 @@ import type { Metadata } from "next"; +import { Noto_Sans_KR } from "next/font/google"; import { Providers } from "./providers"; import "./globals.css"; +const notoSansKR = Noto_Sans_KR({ + subsets: ["latin"], + weight: ["100", "300", "400", "500", "700", "900"], + display: "swap", + variable: "--font-noto-sans-kr", +}); + export const metadata: Metadata = { - title: "AS Application", - description: "Next.js application with FSD architecture", + title: "행정지원시스템", + description: "행정지원시스템", }; interface RootLayoutProps { @@ -13,8 +21,8 @@ interface RootLayoutProps { export default function RootLayout({ children }: RootLayoutProps) { return ( - - + + {children} diff --git a/apps/as/app/page.tsx b/apps/as/app/page.tsx deleted file mode 100644 index 7e739afaa..000000000 --- a/apps/as/app/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -export default function HomePage() { - return ( -
-
-

AS Application

-

Feature Sliced Design Architecture with Next.js

-
-
- ); -} diff --git a/apps/as/entities/menu/index.ts b/apps/as/entities/menu/index.ts new file mode 100644 index 000000000..03aed8131 --- /dev/null +++ b/apps/as/entities/menu/index.ts @@ -0,0 +1 @@ +export { type MenuItem } from "./model"; diff --git a/apps/as/entities/menu/model/index.ts b/apps/as/entities/menu/model/index.ts new file mode 100644 index 000000000..89ebe7381 --- /dev/null +++ b/apps/as/entities/menu/model/index.ts @@ -0,0 +1 @@ +export { type MenuItem } from "./types"; diff --git a/apps/as/entities/menu/model/types.ts b/apps/as/entities/menu/model/types.ts new file mode 100644 index 000000000..9692821e3 --- /dev/null +++ b/apps/as/entities/menu/model/types.ts @@ -0,0 +1,19 @@ +export interface MenuItem { + menuCd: number; + menuKornNm: string; + menuEngNm: string; + parentId: number | null; + sortSeq: number; + iconNm?: string; + children: MenuItem[] | null; + levelNo: number; + urlPath: string; + menuLnkgTypeCd: string; + menuLnkgSn: number; + menuPath: string; + qrcd: string; + useYn: string; + otptYn: string; + newWndwYn: string; + requiredUrlPath: boolean; +} diff --git a/apps/as/package.json b/apps/as/package.json index a39004940..fb27f8af7 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -33,4 +33,4 @@ "tailwindcss": "^3.4.14", "typescript": "^5.7.2" } -} +} \ No newline at end of file diff --git a/apps/as/shared/ui/button.tsx b/apps/as/shared/ui/button.tsx deleted file mode 100644 index 3d9fb0bf5..000000000 --- a/apps/as/shared/ui/button.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { ButtonHTMLAttributes, forwardRef } from "react"; - -interface ButtonProps extends ButtonHTMLAttributes { - variant?: "primary" | "secondary" | "outline"; - size?: "sm" | "md" | "lg"; -} - -export const Button = forwardRef( - ({ className = "", variant = "primary", size = "md", children, ...props }, ref) => { - const baseStyles = "rounded-md font-medium transition-colors focus:outline-none focus:ring-2"; - - const variantStyles = { - primary: "bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500", - secondary: "bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500", - outline: "border border-gray-300 bg-transparent hover:bg-gray-50 focus:ring-gray-500", - }; - - const sizeStyles = { - sm: "px-3 py-1.5 text-sm", - md: "px-4 py-2 text-base", - lg: "px-6 py-3 text-lg", - }; - - return ( - - ); - }, -); - -Button.displayName = "Button"; diff --git a/apps/as/shared/ui/index.ts b/apps/as/shared/ui/index.ts index 812a8ab55..460542995 100644 --- a/apps/as/shared/ui/index.ts +++ b/apps/as/shared/ui/index.ts @@ -1 +1 @@ -export { Button } from "./button"; +export { PageLayout } from "./page-layout"; diff --git a/apps/as/shared/ui/page-layout.tsx b/apps/as/shared/ui/page-layout.tsx new file mode 100644 index 000000000..ecefc36bd --- /dev/null +++ b/apps/as/shared/ui/page-layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { PageTitle } from "@common/components"; + +const mockCurrentMenuInfo = { + menuCd: 0, + menuKornNm: "메인", + menuEngNm: "Main", + parentId: null, + sortSeq: 0, + children: null, + levelNo: 0, + urlPath: "/", + menuLnkgTypeCd: "", + menuLnkgSn: 0, + menuPath: "메인", + qrcd: "", + useYn: "Y", + otptYn: "Y", + newWndwYn: "N", + requiredUrlPath: false, +}; + +function PageLayout({ children }: { children: React.ReactNode }) { + const menuPaths = mockCurrentMenuInfo.menuPath.split(">").map((path) => path.trim()); + + return ( +
+ + {children} +
+ ); +} + +export { PageLayout }; diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index 24811c1a4..ff6042e10 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -8,6 +8,7 @@ const config: Config = { "./features/**/*.{js,ts,jsx,tsx,mdx}", "./widgets/**/*.{js,ts,jsx,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/common/components/dist/**/*.{js,ts,jsx,tsx,mdx}", ], theme: { extend: { @@ -15,6 +16,9 @@ const config: Config = { background: "var(--background)", foreground: "var(--foreground)", }, + fontFamily: { + sans: ["var(--font-noto-sans-kr)", "Noto Sans KR", "sans-serif"], + }, }, }, plugins: [], diff --git a/packages/common/components/package.json b/packages/common/components/package.json index 3cef3b0f0..bd06e3402 100644 --- a/packages/common/components/package.json +++ b/packages/common/components/package.json @@ -5,7 +5,7 @@ "sideEffects": false, "type": "module", "main": "./dist/index.js", - "module": "./dist/index.mjs", + "module": "./dist/index.js", "types": "./dist/index.d.ts", "files": [ "dist/**" @@ -13,7 +13,7 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", + "import": "./dist/index.js", "require": "./dist/index.js" }, "./index.css": "./dist/index.css" From b34d131c1a91de04a32a17a0a4225f9d5247465d Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 11:17:25 +0900 Subject: [PATCH 04/15] =?UTF-8?q?[as]=20chore:=20tailwind=20preset=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/app/(with-base-layout)/layout.tsx | 6 +----- apps/as/tailwind.config.ts | 2 ++ apps/as/tsconfig.json | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx index fd8cee5bd..1d182a0ee 100644 --- a/apps/as/app/(with-base-layout)/layout.tsx +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -7,11 +7,7 @@ import { BaseLayout } from "@common/components"; import type { MenuItem } from "@/entities/menu"; import { PageLayout } from "@/shared/ui/page-layout"; -export default function WithBaseLayout({ - children, -}: { - children: React.ReactNode; -}) { +export default function WithBaseLayout({ children }: { children: React.ReactNode }) { const router = useRouter(); const pathname = usePathname(); const queryClient = useQueryClient(); diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index ff6042e10..c02405aca 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -1,6 +1,8 @@ import type { Config } from "tailwindcss"; +import presetConfig from "../../tailwind.config.preset"; const config: Config = { + presets: [presetConfig], content: [ "./pages/**/*.{js,ts,jsx,tsx,mdx}", "./shared/**/*.{js,ts,jsx,tsx,mdx}", diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json index 1668155c8..15b023415 100644 --- a/apps/as/tsconfig.json +++ b/apps/as/tsconfig.json @@ -26,8 +26,8 @@ "@/features/*": ["./features/*"], "@/widgets/*": ["./widgets/*"], "@/pages/*": ["./pages/*"], - "@common/components": ["../../../packages/common/components/dist/"], - "@common/network": ["../../../packages/common/network/"] + "@common/components": ["../../packages/common/components/dist/"], + "@common/network": ["../../packages/common/network/"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], From 717732aad3bad05fb43c906a2d15287f278f6fe3 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 13:56:32 +0900 Subject: [PATCH 05/15] =?UTF-8?q?[as]=20feat:=20=EC=BF=A0=ED=82=A4=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/app/layout.tsx | 11 +++++++++-- apps/as/package.json | 2 ++ apps/as/shared/lib/cookie.ts | 22 ++++++++++++++++++++++ apps/as/shared/lib/index.ts | 1 + pnpm-lock.yaml | 6 ++++++ 5 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 apps/as/shared/lib/cookie.ts diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index d152e0da3..f08c67ca7 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,6 +1,9 @@ import type { Metadata } from "next"; +import { cookies } from "next/headers"; import { Noto_Sans_KR } from "next/font/google"; import { Providers } from "./providers"; +import { setCookie } from "@/shared/lib"; +import { SITE_ID } from "@/shared/config"; import "./globals.css"; const notoSansKR = Noto_Sans_KR({ @@ -19,9 +22,13 @@ interface RootLayoutProps { children: React.ReactNode; } -export default function RootLayout({ children }: RootLayoutProps) { +setCookie("site-id-key", SITE_ID); + +export default async function RootLayout({ children }: RootLayoutProps) { + const theme = (await cookies()).get("site-theme-key"); + return ( - + {children} diff --git a/apps/as/package.json b/apps/as/package.json index fb27f8af7..3806f73ee 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -19,11 +19,13 @@ "@tanstack/react-table": "^8.21.2", "axios": "^1.8.1", "dayjs": "^1.11.13", + "js-cookie": "^3.0.5", "next": "15.3.8", "react-hook-form": "^7.54.2", "zod": "^3.24.2" }, "devDependencies": { + "@types/js-cookie": "^3.0.6", "eslint": "^9.0.0", "eslint-config-next": "15.4.0", "postcss": "^8.4.49", diff --git a/apps/as/shared/lib/cookie.ts b/apps/as/shared/lib/cookie.ts new file mode 100644 index 000000000..6557cb81d --- /dev/null +++ b/apps/as/shared/lib/cookie.ts @@ -0,0 +1,22 @@ +import Cookies from "js-cookie"; + +export function getCookie(name: string): string | undefined { + if (typeof window === "undefined") { + return undefined; + } + return Cookies.get(name); +} + +export function setCookie(name: string, value: string, options?: Cookies.CookieAttributes): void { + if (typeof window === "undefined") { + return; + } + Cookies.set(name, value, options); +} + +export function removeCookie(name: string, options?: Cookies.CookieAttributes): void { + if (typeof window === "undefined") { + return; + } + Cookies.remove(name, options); +} diff --git a/apps/as/shared/lib/index.ts b/apps/as/shared/lib/index.ts index 51e9c2c5d..26a6d4551 100644 --- a/apps/as/shared/lib/index.ts +++ b/apps/as/shared/lib/index.ts @@ -1,2 +1,3 @@ export { queryClient } from "./query-client"; export { dayjs } from "./dayjs"; +export { getCookie, setCookie, removeCookie } from "./cookie"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f78691690..569437868 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,9 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.19 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 next: specifier: 15.3.8 version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -90,6 +93,9 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 eslint: specifier: ^9.0.0 version: 9.39.2(jiti@1.21.7) From 98d53fb4bdbe7fd12aff7ca5a6072f34c2f0305f Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 14:04:20 +0900 Subject: [PATCH 06/15] =?UTF-8?q?[=5Ftemplate,=20as]=20chore:=20middleware?= =?UTF-8?q?.ts=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/middleware.ts | 50 ++++++++++++++++++++++ apps/as/middleware.ts | 50 ++++++++++++++++++++++ pnpm-lock.yaml | 82 ++++++++++++++++++++++++++++++------ 3 files changed, 168 insertions(+), 14 deletions(-) create mode 100644 apps/_template/middleware.ts create mode 100644 apps/as/middleware.ts diff --git a/apps/_template/middleware.ts b/apps/_template/middleware.ts new file mode 100644 index 000000000..da09c5840 --- /dev/null +++ b/apps/_template/middleware.ts @@ -0,0 +1,50 @@ +import { NextRequest, NextResponse } from "next/server"; +import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; + +const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; + +// CSP 헤더 설정 함수 (img-src만) +function addSecurityHeaders(response: NextResponse): NextResponse { + response.headers.set("Content-Security-Policy", "img-src 'self' data: https: blob:;"); + return response; +} + +export function middleware(req: NextRequest) { + const pathname = req.nextUrl.pathname; + const searchParams = req.nextUrl.searchParams; + + const logMessages: string[] = [ + `[Middleware Request] ${new Date().toISOString()}`, + `[Environment]\n Mode: ${process.env.NODE_ENV}\n Port: ${PORT}\n Proxy Host: ${PROXY_HOST}\n Server API URL: ${SERVER_API_URL}\n Site ID: ${SITE_ID}`, + `[Request]\n Original Pathname: ${pathname}`, + ]; + + if (pathname.startsWith("/server")) { + const queryParams = searchParams.toString(); + const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${ + queryParams ? `?${queryParams}` : "" + }`; + + logMessages.push(` Rewritten URL: ${newUrl}`); + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.rewrite(new URL(newUrl)); + return addSecurityHeaders(response); + } + + // if (pathname === "/") { + // const response = NextResponse.redirect(new URL("/dashboard", req.url)); + // return addSecurityHeaders(response); + // } + + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.next(); + return addSecurityHeaders(response); +} + +export const config = { + matcher: ["/server/:path*", "/"], +}; diff --git a/apps/as/middleware.ts b/apps/as/middleware.ts new file mode 100644 index 000000000..da09c5840 --- /dev/null +++ b/apps/as/middleware.ts @@ -0,0 +1,50 @@ +import { NextRequest, NextResponse } from "next/server"; +import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; + +const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; + +// CSP 헤더 설정 함수 (img-src만) +function addSecurityHeaders(response: NextResponse): NextResponse { + response.headers.set("Content-Security-Policy", "img-src 'self' data: https: blob:;"); + return response; +} + +export function middleware(req: NextRequest) { + const pathname = req.nextUrl.pathname; + const searchParams = req.nextUrl.searchParams; + + const logMessages: string[] = [ + `[Middleware Request] ${new Date().toISOString()}`, + `[Environment]\n Mode: ${process.env.NODE_ENV}\n Port: ${PORT}\n Proxy Host: ${PROXY_HOST}\n Server API URL: ${SERVER_API_URL}\n Site ID: ${SITE_ID}`, + `[Request]\n Original Pathname: ${pathname}`, + ]; + + if (pathname.startsWith("/server")) { + const queryParams = searchParams.toString(); + const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${ + queryParams ? `?${queryParams}` : "" + }`; + + logMessages.push(` Rewritten URL: ${newUrl}`); + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.rewrite(new URL(newUrl)); + return addSecurityHeaders(response); + } + + // if (pathname === "/") { + // const response = NextResponse.redirect(new URL("/dashboard", req.url)); + // return addSecurityHeaders(response); + // } + + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.next(); + return addSecurityHeaders(response); +} + +export const config = { + matcher: ["/server/:path*", "/"], +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03c2fb60c..d7b788c19 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,11 +51,7 @@ importers: specifier: 2.4.2 version: 2.4.2 -<<<<<<< HEAD - apps/as: -======= - apps/(template): ->>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9 + apps/_template: dependencies: '@common/assets': specifier: workspace:* @@ -84,12 +80,6 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.19 -<<<<<<< HEAD - js-cookie: - specifier: ^3.0.5 - version: 3.0.5 -======= ->>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9 next: specifier: 15.3.8 version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -100,12 +90,76 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: -<<<<<<< HEAD + eslint: + specifier: ^9.0.0 + version: 9.39.2(jiti@2.6.1) + eslint-config-next: + specifier: 15.4.0 + version: 15.4.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + postcss: + specifier: ^8.4.49 + version: 8.5.6 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(prettier@3.7.4) + steiger: + specifier: ^0.5.11 + version: 0.5.11(typescript@5.9.3) + tailwindcss: + specifier: ^3.4.14 + version: 3.4.19(yaml@2.8.2) + typescript: + specifier: ^5.7.2 + version: 5.9.3 + + apps/as: + dependencies: + '@common/assets': + specifier: workspace:* + version: link:../../packages/common/assets + '@common/components': + specifier: workspace:* + version: link:../../packages/common/components + '@common/network': + specifier: workspace:* + version: link:../../packages/common/network + '@hookform/resolvers': + specifier: ^4.1.3 + version: 4.1.3(react-hook-form@7.68.0(react@19.2.3)) + '@tanstack/react-query': + specifier: ^5.75.5 + version: 5.90.12(react@19.2.3) + '@tanstack/react-query-devtools': + specifier: ^5.75.5 + version: 5.91.1(@tanstack/react-query@5.90.12(react@19.2.3))(react@19.2.3) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + axios: + specifier: ^1.8.1 + version: 1.8.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.19 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + next: + specifier: 15.3.8 + version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-hook-form: + specifier: ^7.54.2 + version: 7.68.0(react@19.2.3) + zod: + specifier: ^3.24.2 + version: 3.25.76 + devDependencies: '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 -======= ->>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9 eslint: specifier: ^9.0.0 version: 9.39.2(jiti@1.21.7) From f788a1ae08c3c39e0ccfe3969277e1cb5e998144 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 14:11:21 +0900 Subject: [PATCH 07/15] =?UTF-8?q?fix:=20template=20name=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/_template/package.json b/apps/_template/package.json index fb27f8af7..f56c904c6 100644 --- a/apps/_template/package.json +++ b/apps/_template/package.json @@ -1,5 +1,5 @@ { - "name": "as", + "name": "template", "version": "0.1.0", "private": true, "scripts": { From 240311e540e5d605f44902573d67916e3a05688e Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 14:14:04 +0900 Subject: [PATCH 08/15] =?UTF-8?q?fix:=20pre-push=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/pre-push | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.husky/pre-push b/.husky/pre-push index 82c73e102..5d858c3ae 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,3 +1,8 @@ #!/bin/sh BRANCH=$(git rev-parse --abbrev-ref HEAD) -pnpm turbo run build --filter="...[origin/$BRANCH]" +REMOTE_REF="origin/$BRANCH" +if git rev-parse --verify "$REMOTE_REF" >/dev/null 2>&1; then + pnpm turbo run build --filter="...[$REMOTE_REF]" +else + pnpm turbo run build +fi From bd53c17fecedb01a9433638ad5e4fb8c5f6d55b1 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 15:14:19 +0900 Subject: [PATCH 09/15] =?UTF-8?q?[as]=20refactor:=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD(src)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/README.md | 66 +++++++++---------- apps/as/app/(with-base-layout)/layout.tsx | 36 ++-------- apps/as/app/(with-base-layout)/page.tsx | 10 +-- apps/as/app/layout.tsx | 4 +- apps/as/next-env.d.ts | 1 + apps/as/pages/README.md | 9 +++ apps/as/src/app/layouts/base-layout.tsx | 35 ++++++++++ .../app/providers/index.tsx} | 0 apps/as/{app => src/app/styles}/globals.css | 30 ++++----- apps/as/{ => src}/entities/README.md | 0 .../entities/instl-sncn/api/index.ts | 0 .../instl-sncn/api/instl-sncn-service-impl.ts | 0 .../entities/instl-sncn/api/queries.ts | 0 .../as/{ => src}/entities/instl-sncn/index.ts | 0 .../entities/instl-sncn/lib/format.ts | 0 .../entities/instl-sncn/lib/index.ts | 0 .../entities/instl-sncn/lib/validation.ts | 0 .../entities/instl-sncn/model/constants.ts | 0 .../entities/instl-sncn/model/index.ts | 0 .../instl-sncn/model/instl-sncn-service.ts | 0 .../entities/instl-sncn/model/types.ts | 0 apps/as/{ => src}/entities/menu/index.ts | 0 .../as/{ => src}/entities/menu/model/index.ts | 0 .../as/{ => src}/entities/menu/model/types.ts | 0 apps/as/{ => src}/features/README.md | 0 apps/as/src/pages/home/index.ts | 1 + apps/as/src/pages/home/ui/main-page.tsx | 9 +++ apps/as/{ => src}/shared/README.md | 0 apps/as/{ => src}/shared/api/client.ts | 0 apps/as/{ => src}/shared/api/index.ts | 0 apps/as/{ => src}/shared/config/env.ts | 0 apps/as/{ => src}/shared/config/index.ts | 0 apps/as/{ => src}/shared/lib/cookie.ts | 0 apps/as/{ => src}/shared/lib/dayjs.ts | 0 apps/as/{ => src}/shared/lib/index.ts | 0 apps/as/{ => src}/shared/lib/query-client.ts | 0 apps/as/{ => src}/shared/model/index.ts | 0 apps/as/{ => src}/shared/ui/index.ts | 0 apps/as/{ => src}/shared/ui/page-layout.tsx | 0 apps/as/{ => src}/widgets/README.md | 0 apps/as/tsconfig.json | 14 +--- 41 files changed, 112 insertions(+), 103 deletions(-) create mode 100644 apps/as/pages/README.md create mode 100644 apps/as/src/app/layouts/base-layout.tsx rename apps/as/{app/providers.tsx => src/app/providers/index.tsx} (100%) rename apps/as/{app => src/app/styles}/globals.css (95%) rename apps/as/{ => src}/entities/README.md (100%) rename apps/as/{ => src}/entities/instl-sncn/api/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/api/instl-sncn-service-impl.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/api/queries.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/lib/format.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/lib/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/lib/validation.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/constants.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/instl-sncn-service.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/types.ts (100%) rename apps/as/{ => src}/entities/menu/index.ts (100%) rename apps/as/{ => src}/entities/menu/model/index.ts (100%) rename apps/as/{ => src}/entities/menu/model/types.ts (100%) rename apps/as/{ => src}/features/README.md (100%) create mode 100644 apps/as/src/pages/home/index.ts create mode 100644 apps/as/src/pages/home/ui/main-page.tsx rename apps/as/{ => src}/shared/README.md (100%) rename apps/as/{ => src}/shared/api/client.ts (100%) rename apps/as/{ => src}/shared/api/index.ts (100%) rename apps/as/{ => src}/shared/config/env.ts (100%) rename apps/as/{ => src}/shared/config/index.ts (100%) rename apps/as/{ => src}/shared/lib/cookie.ts (100%) rename apps/as/{ => src}/shared/lib/dayjs.ts (100%) rename apps/as/{ => src}/shared/lib/index.ts (100%) rename apps/as/{ => src}/shared/lib/query-client.ts (100%) rename apps/as/{ => src}/shared/model/index.ts (100%) rename apps/as/{ => src}/shared/ui/index.ts (100%) rename apps/as/{ => src}/shared/ui/page-layout.tsx (100%) rename apps/as/{ => src}/widgets/README.md (100%) diff --git a/apps/as/README.md b/apps/as/README.md index 46a8536a5..79d0b2e2a 100644 --- a/apps/as/README.md +++ b/apps/as/README.md @@ -13,46 +13,40 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 - **HTTP 클라이언트**: Axios - **날짜 처리**: Day.js -## 프로젝트 구조 (FSD) +## 프로젝트 구조 (FSD + Next.js App Router) -이 프로젝트는 **Feature-Sliced Design v2.1**을 따르며, 계층적 아키텍처로 구성되어 있습니다. +이 프로젝트는 **Feature-Sliced Design v2.1**과 **FSD 공식 Next.js 가이드**에 맞춰 구성되어 있습니다. Next.js `app/`은 라우트만 담당하고, 실제 레이어는 `src/` 아래에 있습니다. ``` as/ -├── app/ # App 레이어 (Next.js App Router) -│ ├── (routes)/ # 라우트 구조 -│ ├── layout.tsx # 루트 레이아웃 -│ ├── page.tsx # 홈 페이지 -│ ├── globals.css # 글로벌 스타일 -│ └── providers.tsx # 전역 providers +├── app/ # Next.js App Router (루트) — 라우트·레이아웃 진입점만 +│ ├── layout.tsx # 루트 레이아웃 (src/app에서 providers, styles import) +│ └── (with-base-layout)/ +│ ├── layout.tsx # BaseLayout 래퍼 (src/app/layouts에서 import) +│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' │ -├── widgets/ # Widgets 레이어 -│ └── [widget-name]/ # 큰 독립적 UI 블록 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── model/ -│ └── index.ts +├── pages/ # 빈 폴더 + README (Next.js가 src/pages를 Pages Router로 쓰지 않도록) +│ └── README.md │ -├── features/ # Features 레이어 -│ └── [feature-name]/ # 사용자 상호작용 기능 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── api/ -│ ├── model/ -│ └── index.ts -│ -├── entities/ # Entities 레이어 -│ └── [entity-name]/ # 비즈니스 엔티티 (User, Product 등) -│ ├── model/ -│ ├── api/ -│ ├── ui/ -│ └── index.ts -│ -└── shared/ # Shared 레이어 - ├── ui/ # UI Kit (비즈니스 로직 없는 공통 컴포넌트) - ├── api/ # API 클라이언트 설정 - ├── lib/ # 내부 라이브러리 (dates, colors 등) - ├── config/ # 환경 설정, feature flags - ├── types/ # 공통 타입 정의 - └── routes/ # 라우트 상수 +└── src/ # FSD 레이어 (실제 코드) + ├── app/ # App 레이어 (슬라이스 없음, 세그먼트만) + │ ├── providers/ # 전역 Providers (QueryClient 등) + │ ├── styles/ # 글로벌 스타일 (globals.css) + │ └── layouts/ # 공통 레이아웃 컴포넌트 (BaseLayoutWrapper) + │ + ├── pages/ # Pages 레이어 (페이지 슬라이스) + │ └── home/ + │ ├── ui/ + │ └── index.ts # Public API + │ + ├── widgets/ # Widgets 레이어 + ├── features/ # Features 레이어 + ├── entities/ # Entities 레이어 + └── shared/ # Shared 레이어 + ├── ui/ + ├── api/ + ├── lib/ + └── config/ ``` ### 계층 구조 이해하기 @@ -86,10 +80,10 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 모든 하위 레이어 사용 가능 -### 2. Pages (app 디렉토리) +### 2. Pages (src/pages) - **목적**: 웹사이트나 애플리케이션을 구성하는 페이지/화면 - **내용**: 페이지 UI, 로딩 상태, 에러 바운더리, 데이터 fetching -- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능) +- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능). Next.js `app/`의 route 파일에서 re-export - **의존성**: `widgets`, `features`, `entities`, `shared` 사용 가능 > 💡 **FSD v2.1 권장사항**: "pages-first" 접근 방식을 따라, 재사용되지 않는 큰 UI 블록과 비즈니스 로직은 페이지 슬라이스에 유지하세요. diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx index 1d182a0ee..24e6e7276 100644 --- a/apps/as/app/(with-base-layout)/layout.tsx +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -1,31 +1,9 @@ -"use client"; +import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; -import { useCallback } from "react"; -import { usePathname, useRouter } from "next/navigation"; -import { useQueryClient } from "@tanstack/react-query"; -import { BaseLayout } from "@common/components"; -import type { MenuItem } from "@/entities/menu"; -import { PageLayout } from "@/shared/ui/page-layout"; - -export default function WithBaseLayout({ children }: { children: React.ReactNode }) { - const router = useRouter(); - const pathname = usePathname(); - const queryClient = useQueryClient(); - - const handleMenuClick = useCallback( - (item: MenuItem) => { - router.push(item.urlPath); - }, - [router], - ); - - return ( - - {children} - - ); +interface WithBaseLayoutProps { + children: React.ReactNode; +} + +export default function WithBaseLayout({ children }: WithBaseLayoutProps) { + return {children}; } diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx index e118e732e..82a918b59 100644 --- a/apps/as/app/(with-base-layout)/page.tsx +++ b/apps/as/app/(with-base-layout)/page.tsx @@ -1,9 +1 @@ -"use client"; - -export default function MainPage() { - return ( -
-

Home

-
- ); -} +export { MainPage as default } from "@/pages/home"; diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index f08c67ca7..05858ffe8 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,10 +1,10 @@ import type { Metadata } from "next"; import { cookies } from "next/headers"; import { Noto_Sans_KR } from "next/font/google"; -import { Providers } from "./providers"; +import { Providers } from "@/app/providers"; import { setCookie } from "@/shared/lib"; import { SITE_ID } from "@/shared/config"; -import "./globals.css"; +import "@/app/styles/globals.css"; const notoSansKR = Noto_Sans_KR({ subsets: ["latin"], diff --git a/apps/as/next-env.d.ts b/apps/as/next-env.d.ts index 1b3be0840..3cd7048ed 100644 --- a/apps/as/next-env.d.ts +++ b/apps/as/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/as/pages/README.md b/apps/as/pages/README.md new file mode 100644 index 000000000..287ea7ddb --- /dev/null +++ b/apps/as/pages/README.md @@ -0,0 +1,9 @@ +# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) + +Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, +프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. + +- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. +- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. + +[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) diff --git a/apps/as/src/app/layouts/base-layout.tsx b/apps/as/src/app/layouts/base-layout.tsx new file mode 100644 index 000000000..72b95709f --- /dev/null +++ b/apps/as/src/app/layouts/base-layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; +import { useQueryClient } from "@tanstack/react-query"; +import { BaseLayout } from "@common/components"; +import type { MenuItem } from "@/entities/menu"; +import { PageLayout } from "@/shared/ui/page-layout"; + +interface BaseLayoutWrapperProps { + children: React.ReactNode; +} + +export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/as/app/providers.tsx b/apps/as/src/app/providers/index.tsx similarity index 100% rename from apps/as/app/providers.tsx rename to apps/as/src/app/providers/index.tsx diff --git a/apps/as/app/globals.css b/apps/as/src/app/styles/globals.css similarity index 95% rename from apps/as/app/globals.css rename to apps/as/src/app/styles/globals.css index 60bc92fb6..2b1b139cf 100644 --- a/apps/as/app/globals.css +++ b/apps/as/src/app/styles/globals.css @@ -1,15 +1,15 @@ -@import "@common/assets/styles/base.css"; -@import "@common/assets/styles/diveicon.css"; -@import "@common/components/index.css"; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -html, -body { - color: var(--foreground); - background: var(--background); - font-family: var(--font-noto-sans-kr), sans-serif; - font-size: 10px; -} +@import "@common/assets/styles/base.css"; +@import "@common/assets/styles/diveicon.css"; +@import "@common/components/index.css"; + +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, +body { + color: var(--foreground); + background: var(--background); + font-family: var(--font-noto-sans-kr), sans-serif; + font-size: 10px; +} diff --git a/apps/as/entities/README.md b/apps/as/src/entities/README.md similarity index 100% rename from apps/as/entities/README.md rename to apps/as/src/entities/README.md diff --git a/apps/as/entities/instl-sncn/api/index.ts b/apps/as/src/entities/instl-sncn/api/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/api/index.ts rename to apps/as/src/entities/instl-sncn/api/index.ts diff --git a/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts b/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts similarity index 100% rename from apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts rename to apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts diff --git a/apps/as/entities/instl-sncn/api/queries.ts b/apps/as/src/entities/instl-sncn/api/queries.ts similarity index 100% rename from apps/as/entities/instl-sncn/api/queries.ts rename to apps/as/src/entities/instl-sncn/api/queries.ts diff --git a/apps/as/entities/instl-sncn/index.ts b/apps/as/src/entities/instl-sncn/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/index.ts rename to apps/as/src/entities/instl-sncn/index.ts diff --git a/apps/as/entities/instl-sncn/lib/format.ts b/apps/as/src/entities/instl-sncn/lib/format.ts similarity index 100% rename from apps/as/entities/instl-sncn/lib/format.ts rename to apps/as/src/entities/instl-sncn/lib/format.ts diff --git a/apps/as/entities/instl-sncn/lib/index.ts b/apps/as/src/entities/instl-sncn/lib/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/lib/index.ts rename to apps/as/src/entities/instl-sncn/lib/index.ts diff --git a/apps/as/entities/instl-sncn/lib/validation.ts b/apps/as/src/entities/instl-sncn/lib/validation.ts similarity index 100% rename from apps/as/entities/instl-sncn/lib/validation.ts rename to apps/as/src/entities/instl-sncn/lib/validation.ts diff --git a/apps/as/entities/instl-sncn/model/constants.ts b/apps/as/src/entities/instl-sncn/model/constants.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/constants.ts rename to apps/as/src/entities/instl-sncn/model/constants.ts diff --git a/apps/as/entities/instl-sncn/model/index.ts b/apps/as/src/entities/instl-sncn/model/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/index.ts rename to apps/as/src/entities/instl-sncn/model/index.ts diff --git a/apps/as/entities/instl-sncn/model/instl-sncn-service.ts b/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/instl-sncn-service.ts rename to apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts diff --git a/apps/as/entities/instl-sncn/model/types.ts b/apps/as/src/entities/instl-sncn/model/types.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/types.ts rename to apps/as/src/entities/instl-sncn/model/types.ts diff --git a/apps/as/entities/menu/index.ts b/apps/as/src/entities/menu/index.ts similarity index 100% rename from apps/as/entities/menu/index.ts rename to apps/as/src/entities/menu/index.ts diff --git a/apps/as/entities/menu/model/index.ts b/apps/as/src/entities/menu/model/index.ts similarity index 100% rename from apps/as/entities/menu/model/index.ts rename to apps/as/src/entities/menu/model/index.ts diff --git a/apps/as/entities/menu/model/types.ts b/apps/as/src/entities/menu/model/types.ts similarity index 100% rename from apps/as/entities/menu/model/types.ts rename to apps/as/src/entities/menu/model/types.ts diff --git a/apps/as/features/README.md b/apps/as/src/features/README.md similarity index 100% rename from apps/as/features/README.md rename to apps/as/src/features/README.md diff --git a/apps/as/src/pages/home/index.ts b/apps/as/src/pages/home/index.ts new file mode 100644 index 000000000..d11882ce5 --- /dev/null +++ b/apps/as/src/pages/home/index.ts @@ -0,0 +1 @@ +export { MainPage } from "./ui/main-page"; diff --git a/apps/as/src/pages/home/ui/main-page.tsx b/apps/as/src/pages/home/ui/main-page.tsx new file mode 100644 index 000000000..0370d5814 --- /dev/null +++ b/apps/as/src/pages/home/ui/main-page.tsx @@ -0,0 +1,9 @@ +"use client"; + +export function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/as/shared/README.md b/apps/as/src/shared/README.md similarity index 100% rename from apps/as/shared/README.md rename to apps/as/src/shared/README.md diff --git a/apps/as/shared/api/client.ts b/apps/as/src/shared/api/client.ts similarity index 100% rename from apps/as/shared/api/client.ts rename to apps/as/src/shared/api/client.ts diff --git a/apps/as/shared/api/index.ts b/apps/as/src/shared/api/index.ts similarity index 100% rename from apps/as/shared/api/index.ts rename to apps/as/src/shared/api/index.ts diff --git a/apps/as/shared/config/env.ts b/apps/as/src/shared/config/env.ts similarity index 100% rename from apps/as/shared/config/env.ts rename to apps/as/src/shared/config/env.ts diff --git a/apps/as/shared/config/index.ts b/apps/as/src/shared/config/index.ts similarity index 100% rename from apps/as/shared/config/index.ts rename to apps/as/src/shared/config/index.ts diff --git a/apps/as/shared/lib/cookie.ts b/apps/as/src/shared/lib/cookie.ts similarity index 100% rename from apps/as/shared/lib/cookie.ts rename to apps/as/src/shared/lib/cookie.ts diff --git a/apps/as/shared/lib/dayjs.ts b/apps/as/src/shared/lib/dayjs.ts similarity index 100% rename from apps/as/shared/lib/dayjs.ts rename to apps/as/src/shared/lib/dayjs.ts diff --git a/apps/as/shared/lib/index.ts b/apps/as/src/shared/lib/index.ts similarity index 100% rename from apps/as/shared/lib/index.ts rename to apps/as/src/shared/lib/index.ts diff --git a/apps/as/shared/lib/query-client.ts b/apps/as/src/shared/lib/query-client.ts similarity index 100% rename from apps/as/shared/lib/query-client.ts rename to apps/as/src/shared/lib/query-client.ts diff --git a/apps/as/shared/model/index.ts b/apps/as/src/shared/model/index.ts similarity index 100% rename from apps/as/shared/model/index.ts rename to apps/as/src/shared/model/index.ts diff --git a/apps/as/shared/ui/index.ts b/apps/as/src/shared/ui/index.ts similarity index 100% rename from apps/as/shared/ui/index.ts rename to apps/as/src/shared/ui/index.ts diff --git a/apps/as/shared/ui/page-layout.tsx b/apps/as/src/shared/ui/page-layout.tsx similarity index 100% rename from apps/as/shared/ui/page-layout.tsx rename to apps/as/src/shared/ui/page-layout.tsx diff --git a/apps/as/widgets/README.md b/apps/as/src/widgets/README.md similarity index 100% rename from apps/as/widgets/README.md rename to apps/as/src/widgets/README.md diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json index 15b023415..8428fd5c2 100644 --- a/apps/as/tsconfig.json +++ b/apps/as/tsconfig.json @@ -13,19 +13,9 @@ "isolatedModules": true, "jsx": "preserve", "incremental": true, - "plugins": [ - { - "name": "next" - } - ], + "plugins": [{ "name": "next" }], "paths": { - "@/*": ["./*"], - "@/app/*": ["./app/*"], - "@/shared/*": ["./shared/*"], - "@/entities/*": ["./entities/*"], - "@/features/*": ["./features/*"], - "@/widgets/*": ["./widgets/*"], - "@/pages/*": ["./pages/*"], + "@/*": ["./src/*"], "@common/components": ["../../packages/common/components/dist/"], "@common/network": ["../../packages/common/network/"] } From b7e343b24f8ecb0ff19537e9fa3cc771f3013f61 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 15:31:22 +0900 Subject: [PATCH 10/15] =?UTF-8?q?[=5Ftemplate]=20refactor:=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD(src)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/README.md | 149 ++++++------------ .../app/(with-base-layout)/layout.tsx | 41 ++--- .../_template/app/(with-base-layout)/page.tsx | 10 +- apps/_template/app/layout.tsx | 4 +- apps/{as => _template}/pages/README.md | 18 +-- .../_template/src/app/layouts/base-layout.tsx | 35 ++++ .../app/providers/index.tsx} | 36 ++--- .../{app => src/app/styles}/globals.css | 0 apps/_template/{ => src}/entities/README.md | 0 .../{ => src}/entities/menu/index.ts | 0 .../{ => src}/entities/menu/model/types.ts | 0 apps/_template/{ => src}/features/README.md | 0 .../{as => _template}/src/pages/home/index.ts | 2 +- .../src/pages/home/ui/main-page.tsx | 18 +-- apps/_template/{ => src}/shared/README.md | 0 apps/_template/{ => src}/shared/api/client.ts | 0 apps/_template/{ => src}/shared/api/index.ts | 0 apps/_template/{ => src}/shared/config/env.ts | 0 .../{ => src}/shared/config/index.ts | 0 apps/_template/{ => src}/shared/lib/dayjs.ts | 0 apps/_template/{ => src}/shared/lib/index.ts | 0 .../{ => src}/shared/lib/query-client.ts | 0 .../_template/{ => src}/shared/model/index.ts | 0 apps/_template/{ => src}/shared/ui/index.ts | 0 .../{ => src}/shared/ui/page-layout.tsx | 0 apps/_template/{ => src}/widgets/README.md | 0 apps/_template/tsconfig.json | 8 +- 27 files changed, 130 insertions(+), 191 deletions(-) rename apps/{as => _template}/pages/README.md (98%) create mode 100644 apps/_template/src/app/layouts/base-layout.tsx rename apps/_template/{app/providers.tsx => src/app/providers/index.tsx} (96%) rename apps/_template/{app => src/app/styles}/globals.css (100%) rename apps/_template/{ => src}/entities/README.md (100%) rename apps/_template/{ => src}/entities/menu/index.ts (100%) rename apps/_template/{ => src}/entities/menu/model/types.ts (100%) rename apps/_template/{ => src}/features/README.md (100%) rename apps/{as => _template}/src/pages/home/index.ts (97%) rename apps/{as => _template}/src/pages/home/ui/main-page.tsx (95%) rename apps/_template/{ => src}/shared/README.md (100%) rename apps/_template/{ => src}/shared/api/client.ts (100%) rename apps/_template/{ => src}/shared/api/index.ts (100%) rename apps/_template/{ => src}/shared/config/env.ts (100%) rename apps/_template/{ => src}/shared/config/index.ts (100%) rename apps/_template/{ => src}/shared/lib/dayjs.ts (100%) rename apps/_template/{ => src}/shared/lib/index.ts (100%) rename apps/_template/{ => src}/shared/lib/query-client.ts (100%) rename apps/_template/{ => src}/shared/model/index.ts (100%) rename apps/_template/{ => src}/shared/ui/index.ts (100%) rename apps/_template/{ => src}/shared/ui/page-layout.tsx (100%) rename apps/_template/{ => src}/widgets/README.md (100%) diff --git a/apps/_template/README.md b/apps/_template/README.md index 7e14528f8..c48c1534a 100644 --- a/apps/_template/README.md +++ b/apps/_template/README.md @@ -1,4 +1,4 @@ -# AS Application +# Template Application Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 @@ -13,46 +13,40 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 - **HTTP 클라이언트**: Axios - **날짜 처리**: Day.js -## 프로젝트 구조 (FSD) +## 프로젝트 구조 (FSD + Next.js App Router) -이 프로젝트는 **Feature-Sliced Design v2.1**을 따르며, 계층적 아키텍처로 구성되어 있습니다. +이 프로젝트는 **Feature-Sliced Design v2.1**과 **FSD 공식 Next.js 가이드**에 맞춰 구성되어 있습니다. Next.js `app/`은 라우트만 담당하고, 실제 레이어는 `src/` 아래에 있습니다. ``` -as/ -├── app/ # App 레이어 (Next.js App Router) -│ ├── (routes)/ # 라우트 구조 -│ ├── layout.tsx # 루트 레이아웃 -│ ├── page.tsx # 홈 페이지 -│ ├── globals.css # 글로벌 스타일 -│ └── providers.tsx # 전역 providers +_template/ +├── app/ # Next.js App Router (루트) — 라우트·레이아웃 진입점만 +│ ├── layout.tsx # 루트 레이아웃 (src/app에서 providers, styles import) +│ └── (with-base-layout)/ +│ ├── layout.tsx # BaseLayout 래퍼 (src/app/layouts에서 import) +│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' │ -├── widgets/ # Widgets 레이어 -│ └── [widget-name]/ # 큰 독립적 UI 블록 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── model/ -│ └── index.ts +├── pages/ # 빈 폴더 + README (Next.js가 src/pages를 Pages Router로 쓰지 않도록) +│ └── README.md │ -├── features/ # Features 레이어 -│ └── [feature-name]/ # 사용자 상호작용 기능 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── api/ -│ ├── model/ -│ └── index.ts -│ -├── entities/ # Entities 레이어 -│ └── [entity-name]/ # 비즈니스 엔티티 (User, Product 등) -│ ├── model/ -│ ├── api/ -│ ├── ui/ -│ └── index.ts -│ -└── shared/ # Shared 레이어 - ├── ui/ # UI Kit (비즈니스 로직 없는 공통 컴포넌트) - ├── api/ # API 클라이언트 설정 - ├── lib/ # 내부 라이브러리 (dates, colors 등) - ├── config/ # 환경 설정, feature flags - ├── types/ # 공통 타입 정의 - └── routes/ # 라우트 상수 +└── src/ # FSD 레이어 (실제 코드) + ├── app/ # App 레이어 (슬라이스 없음, 세그먼트만) + │ ├── providers/ # 전역 Providers (QueryClient 등) + │ ├── styles/ # 글로벌 스타일 (globals.css) + │ └── layouts/ # 공통 레이아웃 컴포넌트 (BaseLayoutWrapper) + │ + ├── pages/ # Pages 레이어 (페이지 슬라이스) + │ └── home/ + │ ├── ui/ + │ └── index.ts # Public API + │ + ├── widgets/ # Widgets 레이어 + ├── features/ # Features 레이어 + ├── entities/ # Entities 레이어 + └── shared/ # Shared 레이어 + ├── ui/ + ├── api/ + ├── lib/ + └── config/ ``` ### 계층 구조 이해하기 @@ -86,10 +80,10 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 모든 하위 레이어 사용 가능 -### 2. Pages (app 디렉토리) +### 2. Pages (src/pages) - **목적**: 웹사이트나 애플리케이션을 구성하는 페이지/화면 - **내용**: 페이지 UI, 로딩 상태, 에러 바운더리, 데이터 fetching -- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능) +- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능). Next.js `app/`의 route 파일에서 re-export - **의존성**: `widgets`, `features`, `entities`, `shared` 사용 가능 > 💡 **FSD v2.1 권장사항**: "pages-first" 접근 방식을 따라, 재사용되지 않는 큰 UI 블록과 비즈니스 로직은 페이지 슬라이스에 유지하세요. @@ -118,29 +112,6 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 비즈니스 로직 없음, 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 외부 라이브러리만 사용 가능 (다른 레이어 불가) -## 레이어 간 Import 규칙 - -> **핵심 규칙**: 슬라이스 내의 모듈(파일)은 **오직 하위 레이어**에 있는 다른 슬라이스만 import할 수 있습니다. - -예시: -- `features/auth-login/ui/form.tsx`는 `entities/user`와 `shared/ui`를 import 가능 -- 하지만 다른 `features/post-create`나 상위 레이어인 `widgets`는 import 불가 -- 같은 슬라이스 내부(`features/auth-login/`)의 다른 파일들은 자유롭게 import 가능 - -## Public API 규칙 - -> **슬라이스 외부의 모듈은 슬라이스의 Public API만 참조할 수 있으며, 내부 파일 구조에 직접 접근할 수 없습니다.** - -모든 슬라이스(및 슬라이스가 없는 레이어의 세그먼트)는 반드시 `index.ts`를 통해 Public API를 정의해야 합니다. - -```typescript -// ✅ 올바른 import -import { LoginForm } from 'features/auth-login'; - -// ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; -``` - ## 시작하기 ```bash @@ -174,16 +145,16 @@ NEXT_PUBLIC_API_URL=http://localhost:3000/api ```typescript // ✅ 올바른 import (하위 레이어) // features/auth-login/ui/form.tsx -import { User } from 'entities/user'; -import { Button } from 'shared/ui/button'; +import { User } from "entities/user"; +import { Button } from "shared/ui/button"; // ❌ 잘못된 import (같은 레이어) // features/auth-login/ui/form.tsx -import { PostForm } from 'features/post-create'; // 금지! +import { PostForm } from "features/post-create"; // 금지! // ❌ 잘못된 import (상위 레이어) // features/auth-login/ui/form.tsx -import { Header } from 'widgets/header'; // 금지! +import { Header } from "widgets/header"; // 금지! ``` ### 2. Public API 규칙 @@ -192,10 +163,10 @@ import { Header } from 'widgets/header'; // 금지! ```typescript // ✅ 올바른 import (Public API 사용) -import { LoginForm } from 'features/auth-login'; +import { LoginForm } from "features/auth-login"; // ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; +import { LoginForm } from "features/auth-login/ui/login-form"; ``` **Public API 작성 시 주의사항**: @@ -205,44 +176,12 @@ import { LoginForm } from 'features/auth-login/ui/login-form'; ```typescript // ❌ 나쁜 예시 -export * from './ui/Comment'; -export * from './model/comments'; +export * from "./ui/Comment"; +export * from "./model/comments"; // ✅ 좋은 예시 -export { Comment } from './ui/comment'; -export { CommentForm } from './ui/comment-form'; -export { useComments } from './model/use-comments'; -export type { Comment, CommentFormData } from './model/types'; -``` - -### 3. 슬라이스 독립성 - -- **Zero Coupling**: 같은 레이어의 슬라이스들은 서로 독립적이어야 합니다 -- **High Cohesion**: 슬라이스는 주요 목표와 관련된 대부분의 코드를 포함해야 합니다 -- 예외: Entities 레이어에서 필요한 경우 `@x` 표기법으로 cross-import 가능 - -### 4. 세그먼트 명명 규칙 - -세그먼트 이름은 **목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다: - -- ❌ **나쁜 이름**: `components`, `hooks`, `types` (무엇인지만 설명) -- ✅ **좋은 이름**: `ui`, `api`, `model`, `lib` (왜 있는지 설명) - -## 코드 규칙 - -- TypeScript 사용 (strict mode) -- 함수형 컴포넌트 사용 -- Named exports 선호 -- Tailwind CSS 사용 -- ESLint + Prettier 적용 -- Public API는 명시적으로 정의 (와일드카드 export 지양) - -## 아키텍처 린팅 - -코드베이스의 FSD 규칙 준수를 자동으로 검증하려면 [Steiger](https://github.com/feature-sliced/steiger)를 사용하세요. - -```bash -# Steiger 설치 및 실행 -pnpm add -D @feature-sliced/steiger -npx steiger src +export { Comment } from "./ui/comment"; +export { CommentForm } from "./ui/comment-form"; +export { useComments } from "./model/use-comments"; +export type { Comment, CommentFormData } from "./model/types"; ``` diff --git a/apps/_template/app/(with-base-layout)/layout.tsx b/apps/_template/app/(with-base-layout)/layout.tsx index 1d182a0ee..1ff36f8ec 100644 --- a/apps/_template/app/(with-base-layout)/layout.tsx +++ b/apps/_template/app/(with-base-layout)/layout.tsx @@ -1,31 +1,10 @@ -"use client"; - -import { useCallback } from "react"; -import { usePathname, useRouter } from "next/navigation"; -import { useQueryClient } from "@tanstack/react-query"; -import { BaseLayout } from "@common/components"; -import type { MenuItem } from "@/entities/menu"; -import { PageLayout } from "@/shared/ui/page-layout"; - -export default function WithBaseLayout({ children }: { children: React.ReactNode }) { - const router = useRouter(); - const pathname = usePathname(); - const queryClient = useQueryClient(); - - const handleMenuClick = useCallback( - (item: MenuItem) => { - router.push(item.urlPath); - }, - [router], - ); - - return ( - - {children} - - ); -} +import type { ReactNode } from "react"; +import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; + +interface WithBaseLayoutProps { + children: ReactNode; +} + +export default function WithBaseLayout({ children }: WithBaseLayoutProps) { + return {children}; +} diff --git a/apps/_template/app/(with-base-layout)/page.tsx b/apps/_template/app/(with-base-layout)/page.tsx index e118e732e..82a918b59 100644 --- a/apps/_template/app/(with-base-layout)/page.tsx +++ b/apps/_template/app/(with-base-layout)/page.tsx @@ -1,9 +1 @@ -"use client"; - -export default function MainPage() { - return ( -
-

Home

-
- ); -} +export { MainPage as default } from "@/pages/home"; diff --git a/apps/_template/app/layout.tsx b/apps/_template/app/layout.tsx index d152e0da3..5f5f63ad8 100644 --- a/apps/_template/app/layout.tsx +++ b/apps/_template/app/layout.tsx @@ -1,7 +1,7 @@ import type { Metadata } from "next"; import { Noto_Sans_KR } from "next/font/google"; -import { Providers } from "./providers"; -import "./globals.css"; +import { Providers } from "@/app/providers"; +import "@/app/styles/globals.css"; const notoSansKR = Noto_Sans_KR({ subsets: ["latin"], diff --git a/apps/as/pages/README.md b/apps/_template/pages/README.md similarity index 98% rename from apps/as/pages/README.md rename to apps/_template/pages/README.md index 287ea7ddb..e011944c3 100644 --- a/apps/as/pages/README.md +++ b/apps/_template/pages/README.md @@ -1,9 +1,9 @@ -# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) - -Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, -프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. - -- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. -- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. - -[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) +# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) + +Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, +프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. + +- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. +- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. + +[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) diff --git a/apps/_template/src/app/layouts/base-layout.tsx b/apps/_template/src/app/layouts/base-layout.tsx new file mode 100644 index 000000000..1081134e0 --- /dev/null +++ b/apps/_template/src/app/layouts/base-layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; +import { useQueryClient } from "@tanstack/react-query"; +import { BaseLayout } from "@common/components"; +import type { MenuItem } from "@/entities/menu"; +import { PageLayout } from "@/shared/ui/page-layout"; + +interface BaseLayoutWrapperProps { + children: React.ReactNode; +} + +export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/_template/app/providers.tsx b/apps/_template/src/app/providers/index.tsx similarity index 96% rename from apps/_template/app/providers.tsx rename to apps/_template/src/app/providers/index.tsx index bc12c443b..05bac42cc 100644 --- a/apps/_template/app/providers.tsx +++ b/apps/_template/src/app/providers/index.tsx @@ -1,18 +1,18 @@ -"use client"; - -import { QueryClientProvider } from "@tanstack/react-query"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; -import { queryClient } from "@/shared/lib"; - -interface ProvidersProps { - children: React.ReactNode; -} - -export function Providers({ children }: ProvidersProps) { - return ( - - {children} - - - ); -} +"use client"; + +import { QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { queryClient } from "@/shared/lib"; + +interface ProvidersProps { + children: React.ReactNode; +} + +export function Providers({ children }: ProvidersProps) { + return ( + + {children} + + + ); +} diff --git a/apps/_template/app/globals.css b/apps/_template/src/app/styles/globals.css similarity index 100% rename from apps/_template/app/globals.css rename to apps/_template/src/app/styles/globals.css diff --git a/apps/_template/entities/README.md b/apps/_template/src/entities/README.md similarity index 100% rename from apps/_template/entities/README.md rename to apps/_template/src/entities/README.md diff --git a/apps/_template/entities/menu/index.ts b/apps/_template/src/entities/menu/index.ts similarity index 100% rename from apps/_template/entities/menu/index.ts rename to apps/_template/src/entities/menu/index.ts diff --git a/apps/_template/entities/menu/model/types.ts b/apps/_template/src/entities/menu/model/types.ts similarity index 100% rename from apps/_template/entities/menu/model/types.ts rename to apps/_template/src/entities/menu/model/types.ts diff --git a/apps/_template/features/README.md b/apps/_template/src/features/README.md similarity index 100% rename from apps/_template/features/README.md rename to apps/_template/src/features/README.md diff --git a/apps/as/src/pages/home/index.ts b/apps/_template/src/pages/home/index.ts similarity index 97% rename from apps/as/src/pages/home/index.ts rename to apps/_template/src/pages/home/index.ts index d11882ce5..97a463408 100644 --- a/apps/as/src/pages/home/index.ts +++ b/apps/_template/src/pages/home/index.ts @@ -1 +1 @@ -export { MainPage } from "./ui/main-page"; +export { MainPage } from "./ui/main-page"; diff --git a/apps/as/src/pages/home/ui/main-page.tsx b/apps/_template/src/pages/home/ui/main-page.tsx similarity index 95% rename from apps/as/src/pages/home/ui/main-page.tsx rename to apps/_template/src/pages/home/ui/main-page.tsx index 0370d5814..f757224dc 100644 --- a/apps/as/src/pages/home/ui/main-page.tsx +++ b/apps/_template/src/pages/home/ui/main-page.tsx @@ -1,9 +1,9 @@ -"use client"; - -export function MainPage() { - return ( -
-

Home

-
- ); -} +"use client"; + +export function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/_template/shared/README.md b/apps/_template/src/shared/README.md similarity index 100% rename from apps/_template/shared/README.md rename to apps/_template/src/shared/README.md diff --git a/apps/_template/shared/api/client.ts b/apps/_template/src/shared/api/client.ts similarity index 100% rename from apps/_template/shared/api/client.ts rename to apps/_template/src/shared/api/client.ts diff --git a/apps/_template/shared/api/index.ts b/apps/_template/src/shared/api/index.ts similarity index 100% rename from apps/_template/shared/api/index.ts rename to apps/_template/src/shared/api/index.ts diff --git a/apps/_template/shared/config/env.ts b/apps/_template/src/shared/config/env.ts similarity index 100% rename from apps/_template/shared/config/env.ts rename to apps/_template/src/shared/config/env.ts diff --git a/apps/_template/shared/config/index.ts b/apps/_template/src/shared/config/index.ts similarity index 100% rename from apps/_template/shared/config/index.ts rename to apps/_template/src/shared/config/index.ts diff --git a/apps/_template/shared/lib/dayjs.ts b/apps/_template/src/shared/lib/dayjs.ts similarity index 100% rename from apps/_template/shared/lib/dayjs.ts rename to apps/_template/src/shared/lib/dayjs.ts diff --git a/apps/_template/shared/lib/index.ts b/apps/_template/src/shared/lib/index.ts similarity index 100% rename from apps/_template/shared/lib/index.ts rename to apps/_template/src/shared/lib/index.ts diff --git a/apps/_template/shared/lib/query-client.ts b/apps/_template/src/shared/lib/query-client.ts similarity index 100% rename from apps/_template/shared/lib/query-client.ts rename to apps/_template/src/shared/lib/query-client.ts diff --git a/apps/_template/shared/model/index.ts b/apps/_template/src/shared/model/index.ts similarity index 100% rename from apps/_template/shared/model/index.ts rename to apps/_template/src/shared/model/index.ts diff --git a/apps/_template/shared/ui/index.ts b/apps/_template/src/shared/ui/index.ts similarity index 100% rename from apps/_template/shared/ui/index.ts rename to apps/_template/src/shared/ui/index.ts diff --git a/apps/_template/shared/ui/page-layout.tsx b/apps/_template/src/shared/ui/page-layout.tsx similarity index 100% rename from apps/_template/shared/ui/page-layout.tsx rename to apps/_template/src/shared/ui/page-layout.tsx diff --git a/apps/_template/widgets/README.md b/apps/_template/src/widgets/README.md similarity index 100% rename from apps/_template/widgets/README.md rename to apps/_template/src/widgets/README.md diff --git a/apps/_template/tsconfig.json b/apps/_template/tsconfig.json index 15b023415..dab9b0b8e 100644 --- a/apps/_template/tsconfig.json +++ b/apps/_template/tsconfig.json @@ -19,13 +19,7 @@ } ], "paths": { - "@/*": ["./*"], - "@/app/*": ["./app/*"], - "@/shared/*": ["./shared/*"], - "@/entities/*": ["./entities/*"], - "@/features/*": ["./features/*"], - "@/widgets/*": ["./widgets/*"], - "@/pages/*": ["./pages/*"], + "@/*": ["./src/*"], "@common/components": ["../../packages/common/components/dist/"], "@common/network": ["../../packages/common/network/"] } From f769c508adfba6548b6198213c32033e8a070286 Mon Sep 17 00:00:00 2001 From: bicochan Date: Fri, 27 Feb 2026 13:43:57 +0900 Subject: [PATCH 11/15] =?UTF-8?q?[as]=20feat:=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=EC=9D=B8=EA=B0=80=20=EB=AA=A9=EB=A1=9D=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=B7=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/app/layout.tsx | 17 +- apps/_template/src/app/styles/globals.css | 2 +- apps/_template/tailwind.config.ts | 3 - .../(with-base-layout)/instl-sncn/page.tsx | 1 + apps/as/app/(with-base-layout)/page.tsx | 1 - apps/as/app/layout.tsx | 13 +- apps/as/package.json | 1 + apps/as/pages/.gitkeep | 0 apps/as/src/app/providers/index.tsx | 4 +- apps/as/src/app/styles/components.css | 129 +++++++++++++ apps/as/src/app/styles/globals.css | 2 +- apps/as/src/pages/instl-sncn/index.ts | 1 + .../pages/instl-sncn/model/table-columns.tsx | 80 ++++++++ apps/as/src/pages/instl-sncn/ui/list-page.tsx | 178 ++++++++++++++++++ apps/as/tailwind.config.ts | 9 +- pnpm-lock.yaml | 9 + 16 files changed, 414 insertions(+), 36 deletions(-) create mode 100644 apps/as/app/(with-base-layout)/instl-sncn/page.tsx delete mode 100644 apps/as/app/(with-base-layout)/page.tsx create mode 100644 apps/as/pages/.gitkeep create mode 100644 apps/as/src/app/styles/components.css create mode 100644 apps/as/src/pages/instl-sncn/index.ts create mode 100644 apps/as/src/pages/instl-sncn/model/table-columns.tsx create mode 100644 apps/as/src/pages/instl-sncn/ui/list-page.tsx diff --git a/apps/_template/app/layout.tsx b/apps/_template/app/layout.tsx index 5f5f63ad8..a6eecfc27 100644 --- a/apps/_template/app/layout.tsx +++ b/apps/_template/app/layout.tsx @@ -1,15 +1,8 @@ import type { Metadata } from "next"; -import { Noto_Sans_KR } from "next/font/google"; +import { cookies } from "next/headers"; import { Providers } from "@/app/providers"; import "@/app/styles/globals.css"; -const notoSansKR = Noto_Sans_KR({ - subsets: ["latin"], - weight: ["100", "300", "400", "500", "700", "900"], - display: "swap", - variable: "--font-noto-sans-kr", -}); - export const metadata: Metadata = { title: "행정지원시스템", description: "행정지원시스템", @@ -19,10 +12,12 @@ interface RootLayoutProps { children: React.ReactNode; } -export default function RootLayout({ children }: RootLayoutProps) { +export default async function RootLayout({ children }: RootLayoutProps) { + const theme = (await cookies()).get("site-theme-key"); + return ( - - + + {children} diff --git a/apps/_template/src/app/styles/globals.css b/apps/_template/src/app/styles/globals.css index 60bc92fb6..e557f947b 100644 --- a/apps/_template/src/app/styles/globals.css +++ b/apps/_template/src/app/styles/globals.css @@ -10,6 +10,6 @@ html, body { color: var(--foreground); background: var(--background); - font-family: var(--font-noto-sans-kr), sans-serif; + font-family: "Noto Sans KR", sans-serif; font-size: 10px; } diff --git a/apps/_template/tailwind.config.ts b/apps/_template/tailwind.config.ts index c02405aca..d19dec7ed 100644 --- a/apps/_template/tailwind.config.ts +++ b/apps/_template/tailwind.config.ts @@ -18,9 +18,6 @@ const config: Config = { background: "var(--background)", foreground: "var(--foreground)", }, - fontFamily: { - sans: ["var(--font-noto-sans-kr)", "Noto Sans KR", "sans-serif"], - }, }, }, plugins: [], diff --git a/apps/as/app/(with-base-layout)/instl-sncn/page.tsx b/apps/as/app/(with-base-layout)/instl-sncn/page.tsx new file mode 100644 index 000000000..324982f41 --- /dev/null +++ b/apps/as/app/(with-base-layout)/instl-sncn/page.tsx @@ -0,0 +1 @@ +export { InstlSncnListPage as default } from "@/pages/instl-sncn"; diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx deleted file mode 100644 index 82a918b59..000000000 --- a/apps/as/app/(with-base-layout)/page.tsx +++ /dev/null @@ -1 +0,0 @@ -export { MainPage as default } from "@/pages/home"; diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index 05858ffe8..5293046d6 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,17 +1,10 @@ import type { Metadata } from "next"; import { cookies } from "next/headers"; -import { Noto_Sans_KR } from "next/font/google"; import { Providers } from "@/app/providers"; import { setCookie } from "@/shared/lib"; import { SITE_ID } from "@/shared/config"; import "@/app/styles/globals.css"; - -const notoSansKR = Noto_Sans_KR({ - subsets: ["latin"], - weight: ["100", "300", "400", "500", "700", "900"], - display: "swap", - variable: "--font-noto-sans-kr", -}); +import "@/app/styles/components.css"; export const metadata: Metadata = { title: "행정지원시스템", @@ -28,8 +21,8 @@ export default async function RootLayout({ children }: RootLayoutProps) { const theme = (await cookies()).get("site-theme-key"); return ( - - + + {children} diff --git a/apps/as/package.json b/apps/as/package.json index 3806f73ee..92b2e6482 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -13,6 +13,7 @@ "@common/assets": "workspace:*", "@common/components": "workspace:*", "@common/network": "workspace:*", + "@faker-js/faker": "^10.3.0", "@hookform/resolvers": "^4.1.3", "@tanstack/react-query": "^5.75.5", "@tanstack/react-query-devtools": "^5.75.5", diff --git a/apps/as/pages/.gitkeep b/apps/as/pages/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/as/src/app/providers/index.tsx b/apps/as/src/app/providers/index.tsx index bc12c443b..ff37c57b7 100644 --- a/apps/as/src/app/providers/index.tsx +++ b/apps/as/src/app/providers/index.tsx @@ -12,7 +12,9 @@ export function Providers({ children }: ProvidersProps) { return ( {children} - +
+ +
); } diff --git a/apps/as/src/app/styles/components.css b/apps/as/src/app/styles/components.css new file mode 100644 index 000000000..5b9742c0f --- /dev/null +++ b/apps/as/src/app/styles/components.css @@ -0,0 +1,129 @@ +.card { + position: relative; + margin: 0.6rem; + box-sizing: border-box; + min-height: 2rem; + border-radius: 0.5rem; + padding: 0.6rem; + font-size: 1.3rem; + color: #666; +} + +.card_width10 { + width: calc(10% - 12px); +} + +.card_width20 { + width: calc(20% - 12px); +} + +.card_width25 { + width: calc(25% - 12px); +} + +.card_width30 { + width: calc(30% - 12px); +} + +.card_width33 { + width: calc(33.333% - 12px); +} + +.card_width40 { + width: calc(40% - 12px); +} + +.card_width45 { + width: calc(45% - 12px); +} + +.card_width50 { + width: calc(50% - 12px); +} + +.card_width60 { + width: calc(60% - 12px); +} + +.card_width66 { + width: calc(66.666% - 12px); +} + +.card_width70 { + width: calc(70% - 12px); +} + +.card_width75 { + width: calc(75% - 12px); +} + +.card_width80 { + width: calc(80% - 12px); +} + +.card_width90 { + width: calc(90% - 12px); +} + +.card_width100 { + width: calc(100% - 12px); +} + +.card_nopadding { + padding: 0 !important; +} + +.card_nomargin { + width: 100%; + margin: 0 !important; + padding: 0 !important; +} + +.topline { + border-top: 1px solid #ccc; +} + +.bottomline { + border-bottom: 1px solid #e6eef3; + background: #fff; +} + +.card-border { + border: 1px solid #dbe2e6; + background-color: rgba(255, 255, 255, 0.6); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +.card-header { + margin-top: -0.6rem; + margin-left: -0.6rem; + margin-right: -0.6rem; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid #e1e7eb; + padding: 1rem; +} + +.card-footer { + margin-left: -0.6rem; + margin-right: -0.6rem; + margin-top: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + border-top: 1px solid #e1e7eb; + padding-top: 1rem; + padding-bottom: 1rem; +} + +/* 블랙 테마 */ +[data-theme="black"] { + .card-border { + background-color: rgba(255, 255, 255, 0.065); + border-color: #38383a; + } + .card-header { + border-bottom-color: #3f4042; + } +} diff --git a/apps/as/src/app/styles/globals.css b/apps/as/src/app/styles/globals.css index 2b1b139cf..91c6845e5 100644 --- a/apps/as/src/app/styles/globals.css +++ b/apps/as/src/app/styles/globals.css @@ -10,6 +10,6 @@ html, body { color: var(--foreground); background: var(--background); - font-family: var(--font-noto-sans-kr), sans-serif; + font-family: "Noto Sans KR", sans-serif; font-size: 10px; } diff --git a/apps/as/src/pages/instl-sncn/index.ts b/apps/as/src/pages/instl-sncn/index.ts new file mode 100644 index 000000000..b9127c3a1 --- /dev/null +++ b/apps/as/src/pages/instl-sncn/index.ts @@ -0,0 +1 @@ +export { InstlSncnListPage } from "./ui/list-page"; diff --git a/apps/as/src/pages/instl-sncn/model/table-columns.tsx b/apps/as/src/pages/instl-sncn/model/table-columns.tsx new file mode 100644 index 000000000..e53a7fad4 --- /dev/null +++ b/apps/as/src/pages/instl-sncn/model/table-columns.tsx @@ -0,0 +1,80 @@ +import { createColumnHelper } from "@tanstack/react-table"; +import type { FnrscVO } from "@/entities/instl-sncn"; +import { Badge } from "@common/components"; + +const columnHelper = createColumnHelper(); + +const LIST_STEPS = ["저장", "신청완료", "기술검토", "검토결과 회신"] as const; + +function stepIndex(status: string | undefined): number { + if (!status) return 0; + const map: Record = { + SV: 0, + ST: 1, + LE: 2, + SL: 2, + ER: 2, + TE: 2, + TR: 2, + TP: 2, + EE: 2, + TA: 3, + }; + return map[status] ?? 0; +} + +function ProgrsSttusCell({ value }: { value?: string }) { + const current = stepIndex(value); + return ( +
+ {LIST_STEPS.map((label, i) => ( + <> + + {label} + + {i < LIST_STEPS.length - 1 && ( + + )} + + ))} +
+ ); +} + +export const instlSncnListColumns = [ + columnHelper.accessor("adstDstrNm", { + id: "adstDstrNm", + header: "지자체", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("bzNm", { + id: "bzNm", + header: "사업명", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("jobSeNm", { + id: "jobSeNm", + header: "업무구분", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("regId", { + id: "regId", + header: "담당자", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("rgnNm", { + id: "rgnNm", + header: "해당기관", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.display({ + id: "progrsSttus", + header: "진행상황", + cell: (info) => , + }), + columnHelper.accessor("regDt", { + id: "regDt", + header: "시행일", + cell: (info) => info.getValue() ?? "-", + }), +]; diff --git a/apps/as/src/pages/instl-sncn/ui/list-page.tsx b/apps/as/src/pages/instl-sncn/ui/list-page.tsx new file mode 100644 index 000000000..6aecea351 --- /dev/null +++ b/apps/as/src/pages/instl-sncn/ui/list-page.tsx @@ -0,0 +1,178 @@ +"use client"; + +import { useState, useCallback } from "react"; +import { useRouter } from "next/navigation"; +import { fakerKO as faker } from "@faker-js/faker"; +import { + Button, + DataTable, + Input, + Label, + LoadingWithAnimation, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@common/components"; +import { getCoreRowModel, useReactTable } from "@tanstack/react-table"; +import { useListPageLoadCnfm } from "@/entities/instl-sncn"; +import type { FnrscVO } from "@/entities/instl-sncn"; +import { instlSncnListColumns } from "../model/table-columns"; + +const PAGE_SIZE = 10; +const JOB_SE_OPTIONS = [ + { value: "ALL", label: "전체" }, + { value: "SF", label: "하수처리시설" }, + { value: "SP", label: "하수관로" }, + { value: "RE", label: "재이용수" }, +] as const; + +function buildMockFnrscVO(): FnrscVO { + return { + instlCnfmDocNo: faker.string.alphanumeric(10), + adstDstrNm: faker.location.city(), + bzNm: faker.company.name(), + jobSeNm: faker.helpers.arrayElement(["하수처리시설", "하수관로", "재이용수"]), + regId: faker.person.fullName(), + rgnNm: faker.company.name(), + progrsSttus: faker.helpers.arrayElement(["SV", "ST", "SL", "ER", "EE", "PR", "PE", "AP", "RJ"]), + regDt: faker.date.past().toISOString().slice(0, 10), + }; +} + +const MOCK_LIST: FnrscVO[] = Array.from({ length: PAGE_SIZE }, () => buildMockFnrscVO()); + +export function InstlSncnListPage() { + const router = useRouter(); + const [bzNm, setBzNm] = useState(""); + const [jobSeNm, setJobSeNm] = useState("ALL"); + const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: PAGE_SIZE }); + + const searchVO: FnrscVO = { + bzNm: bzNm.trim() || undefined, + jobSeNm: jobSeNm === "ALL" ? undefined : jobSeNm, + pageIndex: pagination.pageIndex + 1, + recordCountPerPage: PAGE_SIZE, + pageSize: PAGE_SIZE, + }; + + const { data, isPending, isError } = useListPageLoadCnfm(searchVO); + const list = data?.list && data.list.length > 0 ? data.list : MOCK_LIST; + const totalCount = data?.cnt ?? list.length; + const pageCount = data?.paginationInfo?.lastPageNo ?? 1; + + const handleSearch = useCallback((e: React.FormEvent) => { + e.preventDefault(); + setPagination((p) => ({ ...p, pageIndex: 0 })); + }, []); + + const handleRowClick = useCallback( + (row: FnrscVO) => { + if (row.instlCnfmDocNo) { + router.push(`/instl-sncn/${row.instlCnfmDocNo}`); + } + }, + [router], + ); + + const handleRegist = useCallback(() => { + router.push("/instl-sncn/regist"); + }, [router]); + + const table = useReactTable({ + data: list, + columns: instlSncnListColumns, + getCoreRowModel: getCoreRowModel(), + manualPagination: true, + pageCount, + state: { + pagination, + }, + onPaginationChange: setPagination, + }); + + const isEmpty = list.length === 0; + + return ( +
+
+
+ + setBzNm(e.target.value)} + onKeyDown={(e) => e.key === "Enter" && handleSearch(e as unknown as React.FormEvent)} + /> +
+
+ + +
+ +
+ +
+
+

+ 검색된 리스트 ({totalCount}) +

+ +
+ +
+ {isPending && ( +
+
+ +
+
+ )} + {/* {isError && ( +
+ 목록을 불러오는 중 오류가 발생했습니다. +
+ )} */} + {!isPending && !isError && isEmpty && ( +
+ 목록이 존재하지 않습니다. +
+ )} + {!isPending && !isEmpty && ( +
+ +
+ )} +
+
+
+ ); +} diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index c02405aca..e51b76dd9 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -4,12 +4,8 @@ import presetConfig from "../../tailwind.config.preset"; const config: Config = { presets: [presetConfig], content: [ - "./pages/**/*.{js,ts,jsx,tsx,mdx}", - "./shared/**/*.{js,ts,jsx,tsx,mdx}", - "./entities/**/*.{js,ts,jsx,tsx,mdx}", - "./features/**/*.{js,ts,jsx,tsx,mdx}", - "./widgets/**/*.{js,ts,jsx,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}", + "./src/**/*.{js,ts,jsx,tsx,mdx}", "../../packages/common/components/dist/**/*.{js,ts,jsx,tsx,mdx}", ], theme: { @@ -18,9 +14,6 @@ const config: Config = { background: "var(--background)", foreground: "var(--foreground)", }, - fontFamily: { - sans: ["var(--font-noto-sans-kr)", "Noto Sans KR", "sans-serif"], - }, }, }, plugins: [], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d7b788c19..b6572670c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,6 +126,9 @@ importers: '@common/network': specifier: workspace:* version: link:../../packages/common/network + '@faker-js/faker': + specifier: ^10.3.0 + version: 10.3.0 '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.68.0(react@19.2.3)) @@ -2476,6 +2479,10 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@faker-js/faker@10.3.0': + resolution: {integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==} + engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} + '@faker-js/faker@9.9.0': resolution: {integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} @@ -7901,6 +7908,8 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 + '@faker-js/faker@10.3.0': {} + '@faker-js/faker@9.9.0': {} '@feature-sliced/filesystem@3.0.1': From 61f433e899885138ca3f41622379c2841d4b5b51 Mon Sep 17 00:00:00 2001 From: bicochan Date: Mon, 11 May 2026 15:03:12 +0900 Subject: [PATCH 12/15] =?UTF-8?q?[as]=20feat:=20=EA=B2=B0=EC=9E=AC?= =?UTF-8?q?=EC=84=A0=EA=B4=80=EB=A6=AC=20=EC=8A=A4=ED=8E=99=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=20=EC=B4=88=EC=95=88=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/docs/approval-line-management/SPEC.md | 358 + pnpm-lock.yaml | 11928 ++++++---------- 2 files changed, 4614 insertions(+), 7672 deletions(-) create mode 100644 apps/as/docs/approval-line-management/SPEC.md diff --git a/apps/as/docs/approval-line-management/SPEC.md b/apps/as/docs/approval-line-management/SPEC.md new file mode 100644 index 000000000..42e9999c1 --- /dev/null +++ b/apps/as/docs/approval-line-management/SPEC.md @@ -0,0 +1,358 @@ +# 화면설계서: 결재선 관리 + +## 1. 기본 정보 + +| 항목 | 내용 | +| ---------- | -------------------------------------------------------- | +| 버전 | 0.1 (초안) | +| 프로세스명 | UI설계 | +| 화면명 | 결재선 관리 | +| 화면 유형 | [x] 조회 [x] 입력 [x] 수정 [x] 삭제 [ ] 출력 | +| 메뉴 경로 | 디지털행정지원 > 사이트관리 > 결재선 관리 | + +--- + +## 2. 화면 목적 + +전자결재 처리에 사용할 **결재서식**(템플릿)을 등록·관리하고, 각 서식별로 **결재선**(접수 → 검토 → 최종승인 단계)을 구성한다. 좌측 상단의 결재서식 목록에서 하나를 선택하면 하단 영역에 해당 서식의 결재 단계(결재자/순서/구분)가 표시되며, 사용자는 결재자 추가·수정·삭제와 결재선 저장을 수행한다. + +--- + +## 3. 화면 구성 + +### 3-1. 전체 레이아웃 + +``` +┌──────────────────────────────────────────────────────────────────────────────┐ +│ 페이지 타이틀: 결재선 관리 브레드크럼: 디지털행정지원 > … > │ +├──────────────────────────────────────────────────────────────────────────────┤ +│ [영역 A] 전자결재선 관리 목록 [서식 등록] │ +│ ┌──────────────────────────────────────────────────────────────────────┐ │ +│ │ 전자결재서식아이디 | 결재서식명 | 문서구분 | 등록일시 | 관리 │ │ +│ ├──────────────────────────────────────────────────────────────────────┤ │ +│ │ TMPL-0001 (선택 행 강조) … [수정][삭제] │ │ +│ │ TMPL-0002 … [수정][삭제] │ │ +│ └──────────────────────────────────────────────────────────────────────┘ │ +├──────────────────────────────────────────────────────────────────────────────┤ +│ [영역 B] 결재선 관리 선택된 서식: TMPL-0001 │ +│ ┌──────────────────────────────────────────────────────────────────────┐ │ +│ │ [영역 B-1] 결재자 입력 폼 │ │ +│ │ 결재선아이디(자동발급) | 결재구분 ▾ | 결재자명 [검토인력 선택] │ │ +│ │ 결재순서번호 [결재자 추가] [결재선 저장] [초기화] │ │ +│ ├──────────────────────────────────────────────────────────────────────┤ │ +│ │ [영역 B-2] 결재선 그리드 │ │ +│ │ 결재선아이디 | 결재순서번호 | 결재구분 | 결재자명 | 등록일시 | 관리 │ │ +│ │ APLN-0001 | 1 | 접수 | 김민수 | … |[수정][삭제] │ +│ │ APLN-0002 | 2 | 검토 | 박지훈 | … |[수정][삭제] │ +│ │ APLN-0003 | 3 | 최종승인 | 이서연 | … |[수정][삭제] │ +│ └──────────────────────────────────────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────────────────────────────┘ +``` + +### 3-2. 화면 데이터 흐름 + +``` +BEGIN + + // 최초 진입 + CALL TBD.결재서식목록조회() + DISPLAY 결재서식 그리드 (영역 A) + DISPLAY 빈 상태 안내 (영역 B) // 서식 미선택 시 폼·그리드 비활성 + + // 영역 A: 서식 행 선택 + ON 영역 A 행 CLICK DO + SET 선택된 서식 = 행.전자결재서식아이디 // 영역 B 상단 라벨에 표시 + CALL TBD.결재선목록조회(서식아이디) + DISPLAY 결재선 그리드 (영역 B-2) + RESET 결재자 입력 폼 (영역 B-1) + END ON + + // 영역 A: 신규 서식 등록 + ON [서식 등록] 버튼 CLICK DO + OPEN 결재서식 등록 다이얼로그 + ON 확인 DO + CALL TBD.결재서식등록(서식정보) + CALL TBD.결재서식목록조회() // → 영역 A 갱신 + END ON + END ON + + // 영역 A: 서식 수정·삭제 + ON 영역 A [수정] 버튼 CLICK DO + OPEN 결재서식 수정 다이얼로그(선택 행) + ON 확인 DO + CALL TBD.결재서식수정(서식아이디, 서식정보) + CALL TBD.결재서식목록조회() + END ON + END ON + + ON 영역 A [삭제] 버튼 CLICK DO + CONFIRM "선택한 결재서식을 삭제하시겠습니까?" + CALL TBD.결재서식삭제(서식아이디) + CALL TBD.결재서식목록조회() + IF 삭제된 서식이 현재 선택된 서식 THEN + RESET 영역 B (그리드 비우기, 폼 비활성) + END IF + END ON + + // 영역 B-1: 결재자 입력 폼 + ON [검토인력 선택] 버튼 CLICK DO + VALIDATE 서식 선택됨 // 미선택 시 안내 후 종료 + OPEN 검토인력 선택 다이얼로그 + ON 선택 DO + SET 결재자명 = 선택인력.성명 + SET 결재자ID = 선택인력.사용자ID // 내부 상태로 보관 + END ON + END ON + + ON 결재구분 SELECT CHANGE DO + SET 결재구분 = 선택값 // 접수 / 검토 / 최종승인 + END ON + + ON 결재순서번호 INPUT CHANGE DO + SET 결재순서번호 = 값(숫자) + END ON + + // 영역 B-1: 결재자 추가 (그리드에 행 추가, 미저장 상태) + ON [결재자 추가] 버튼 CLICK DO + VALIDATE 서식 선택됨 + · 결재구분 입력 + · 결재자 선택됨 + · 결재순서번호 > 0 (중복 시 안내) + ADD 입력 폼 값을 영역 B-2 그리드에 임시 행으로 추가 + RESET 결재자 입력 폼 (영역 B-1) + // 결재선아이디는 저장 시점에 서버에서 자동 발급되므로 + // 임시 행은 클라이언트 임시 키로 식별 (예: APLN-0007 같은 미발급 표기 또는 임시 ID) + END ON + + // 영역 B-1: 결재선 저장 (그리드 전체 일괄 저장) + ON [결재선 저장] 버튼 CLICK DO + VALIDATE 서식 선택됨 · 결재선 1건 이상 · 순서번호 중복 없음 + CALL TBD.결재선일괄저장(서식아이디, 결재선목록) + CALL TBD.결재선목록조회(서식아이디) // → 영역 B-2 갱신 + TOAST "결재선이 저장되었습니다." + END ON + + // 영역 B-1: 초기화 + ON [초기화] 버튼 CLICK DO + RESET 결재자 입력 폼 (영역 B-1) → 기본값 + (결재구분=접수, 결재자명="", 결재순서번호=1) + END ON + + // 영역 B-2: 그리드 행 수정·삭제 + ON 영역 B-2 [수정] 버튼 CLICK DO + OPEN 결재자 수정 다이얼로그(선택 행) + ON 확인 DO + CALL TBD.결재선수정(결재선아이디, 결재선정보) + CALL TBD.결재선목록조회(서식아이디) + END ON + END ON + + ON 영역 B-2 [삭제] 버튼 CLICK DO + CONFIRM "선택한 결재자를 삭제하시겠습니까?" + CALL TBD.결재선삭제(결재선아이디) + CALL TBD.결재선목록조회(서식아이디) + END ON + +END +``` + +--- + +## 4. 영역 A: 전자결재선 관리 목록 + +선택된 결재서식이 영역 B의 작업 대상이 된다. 행 클릭으로 선택 상태를 표시(좌측 컬러 바·배경 강조)한다. + +### 4-1. 헤더 / 툴바 + +| 항목 | 내용 | +| ---------- | ------------------------------------------------------------- | +| 섹션 타이틀 | 전자결재선 관리 목록 | +| 우측 버튼 | **[서식 등록]** — 결재서식 등록 다이얼로그 오픈 | + +### 4-2. 그리드 컬럼 + +| 컬럼명 | Field | 타입 | 비고 | +| ------------------ | -------------------- | ------ | ------------------------------------------------- | +| 전자결재서식아이디 | `elctAtrzTmpltId` | string | 예) `TMPL-0001` (서버 자동 발급, TBD) | +| 결재서식명 | `atrzTmpltNm` | string | 예) `설치인가 검토 결재` | +| 문서구분 | `docSeNm` | string | 예) `설치인가`, `기본계획` (코드/명 매핑 TBD) | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | + +- 행 클릭 시: 해당 서식을 **선택 상태**로 만들고 영역 B 라벨(`선택된 서식: {전자결재서식아이디}`)과 영역 B-2 그리드를 갱신한다. +- 페이지네이션: TBD (스크린샷에는 미표시). + +### 4-3. 버튼 + +| 버튼명 | 위치 | 동작 | +| ---------- | ------------------ | -------------------------------------------------------------------- | +| 서식 등록 | 섹션 우측 상단 | 결재서식 등록 다이얼로그 오픈 (입력 항목·필수값 TBD) | +| 수정 | 행별 | 결재서식 수정 다이얼로그 오픈 (해당 행 값으로 초기화) | +| 삭제 | 행별 | 확인 다이얼로그 후 삭제. 선택 중인 서식이면 영역 B 상태도 초기화. | + +### 4-4. 다이얼로그(개요) + +| 다이얼로그명 | 트리거 | 입력 항목(예상) | 비고 | +| ---------------------- | ---------------- | ------------------------------------------------ | -------------------------- | +| 결재서식 등록 | [서식 등록] 클릭 | 결재서식명, 문서구분(드롭다운) | 등록 성공 시 영역 A 갱신 | +| 결재서식 수정 | 행별 [수정] | 결재서식명, 문서구분 | 기존 값으로 초기화 | +| 결재서식 삭제 확인 | 행별 [삭제] | (확인/취소) | | + +--- + +## 5. 영역 B: 결재선 관리 + +영역 A에서 선택된 결재서식을 기준으로 결재 단계(접수·검토·최종승인)와 결재자, 순서를 관리한다. 영역 B는 상단 **결재자 입력 폼(B-1)** 과 하단 **결재선 그리드(B-2)** 로 구성된다. + +### 5-1. 헤더 / 상태 표시 + +| 항목 | 내용 | +| ------------ | ------------------------------------------------------------------------------------- | +| 섹션 타이틀 | 결재선 관리 | +| 우측 라벨 | `선택된 서식: {전자결재서식아이디}` — 영역 A에서 선택한 서식 ID를 강조 색으로 표시. 미선택 시 영역 B 비활성. | + +### 5-2. 영역 B-1: 결재자 입력 폼 + +#### 필드 정의 + +| 표시명 | 입력 유형 | 필수 | 기본값 | 데이터 소스 | API 파라미터 매핑 | 비고 | +| -------------------- | -------------------- | ---- | ------------ | ---------------------- | ----------------- | --------------------------------------------------------------- | +| 결재선아이디(자동발급) | 텍스트(읽기 전용) | — | `APLN-XXXX` | 서버 자동 발급 (TBD) | TBD | 입력 불가. 저장 시 서버 발급. 표시값은 미발급 자리표시(또는 임시 ID). | +| 결재구분 | 드롭다운 | 예 | `접수` | 코드 (TBD) | TBD | 옵션: **접수 / 검토 / 최종승인** (그리드 행 기준) | +| 결재자명 | 텍스트(읽기 전용) | 예 | `""` | [검토인력 선택] 결과 | TBD | 자유 입력 불가. 다이얼로그 선택 결과로 채움. | +| 결재순서번호 | 숫자 입력 | 예 | `1` | — | TBD | 1 이상의 정수. 동일 서식 내 중복 검증 필요. | + +플레이스홀더 / 표시 텍스트: + +- 결재자명 입력란 플레이스홀더: `검토인력을 선택하세요` +- 결재선아이디 표시 예시: `APLN-0007` (다음 발급 예정 번호 노출 또는 빈 칸 — 표시 정책 TBD) + +#### 버튼 + +| 버튼명 | 동작 | +| --------------- | ------------------------------------------------------------------------------------------------------------- | +| 검토인력 선택 | **검토인력 선택 다이얼로그** 오픈. 선택 시 `결재자명`과 내부 `결재자 ID`를 폼 상태에 반영. | +| 결재자 추가 | 입력 폼 값을 영역 B-2 그리드에 **임시 행**으로 추가하고 폼을 초기화한다. (서버 호출 없음, 저장 시 일괄 반영.) | +| 결재선 저장 | 영역 B-2의 결재선 목록을 일괄 저장 API로 전송한다. 성공 시 그리드 재조회 + 토스트 표시. | +| 초기화 | 입력 폼을 기본값으로 리셋(결재구분=접수, 결재자명=빈값, 결재순서번호=1). | + +> 정책 메모: **[결재자 추가]** 와 **[결재선 저장]** 의 분리에 대해서는 두 가지 운영이 가능하다. 본 SPEC 초안은 그리드에 임시 행을 누적해 두고 [결재선 저장] 시점에 서버에 일괄 반영하는 모델을 가정한다. 실제 구현 방식(추가 즉시 저장 vs 일괄 저장)은 백엔드 API 확정 후 재정의(TBD). + +#### 다이얼로그 + +| 다이얼로그명 | 트리거 | 표시 내용 / 입력 항목 | 결과 | +| -------------------- | -------------------- | -------------------------------------------------------- | --------------------------------------------------- | +| 검토인력 선택 | [검토인력 선택] | 사용자 검색 필터(이름/소속 등 TBD), 사용자 목록(단일 선택) | 선택된 사용자 정보를 입력 폼에 반영 | +| 결재자 수정 | B-2 행별 [수정] | 결재구분, 결재자명(선택), 결재순서번호 | 확인 시 해당 행 갱신 | +| 결재자 삭제 확인 | B-2 행별 [삭제] | (확인/취소) | 확인 시 해당 행 삭제 | + +### 5-3. 영역 B-2: 결재선 그리드 + +#### 그리드 컬럼 + +| 컬럼명 | Field | 타입 | 비고 | +| -------------- | ---------------- | ------ | ---------------------------------------------------------- | +| 결재선아이디 | `atrzLineId` | string | 예) `APLN-0001` (서버 자동 발급, TBD) | +| 결재순서번호 | `atrzSeqNo` | number | 1부터 시작. 단계 순서. | +| 결재구분 | `atrzSeNm` | string | `접수` / `검토` / `최종승인` | +| 결재자명 | `atrzUserNm` | string | 검토인력 선택 시 채워짐 | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | + +- 표시 정렬: 기본 `결재순서번호` 오름차순. +- 임시 행(서버 미저장)과 저장된 행의 시각적 구분 필요(예: ID 컬럼 표기 또는 행 스타일). 세부 UI는 TBD. +- 페이지네이션: TBD. + +--- + +## 6. API/DTO 명세 + +> 본 화면은 현재 UI 위주 초안으로, API/DTO는 백엔드 명세 확정 후 채운다. + +### 6-1. 공통 + +| 항목 | 내용 | +| ----------- | ------------------------------------------------------------------- | +| Base prefix | TBD (예: `/server` 또는 결재 서비스 prefix) | +| 인증 | JWT 토큰 기반 (Authorization 헤더) | +| 클라이언트 | TBD (예: `@/entities/approval-line`) | + +### 6-2. 전자결재서식 (영역 A) + +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| --------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | +| 결재서식 목록 조회 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 등록 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 삭제 | TBD | TBD | TBD | TBD | TBD | + +### 6-3. 결재선 (영역 B) + +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | +| 결재선 목록 조회(서식별) | TBD | TBD | `{ elctAtrzTmpltId }` (TBD) | TBD | TBD | +| 결재선 추가/일괄 저장 | TBD | TBD | `{ elctAtrzTmpltId, lines[] }` (TBD) | TBD | TBD | +| 결재선 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재선 삭제 | TBD | TBD | TBD | TBD | TBD | + +### 6-4. 검토인력 (다이얼로그) + +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | +| 검토인력 목록 조회 | TBD | TBD | TBD (검색 필터) | TBD | TBD | + +--- + +## 7. UI 구현 가이드 + +### 7-1. 기술 스택·원칙 + +- **공통 컴포넌트**: `@common/components` (버튼, 셀렉트, 인풋, 카드 등 기존 패턴 재사용). +- **테이블**: `@tanstack/react-table`, 프로젝트 표준 `useDataTable` 패턴이 있다면 동일하게 적용. +- **데이터**: React Query 기반 조회/뮤테이션. API 확정 후 `queryKey` 와 무효화 정책 정리. +- **상태**: 영역 A의 **선택된 서식 ID**, 영역 B-1의 **결재자 입력 폼 값**, 영역 B-2의 **임시 결재선 배열**은 페이지 로컬 상태로 관리. 다이얼로그 상태(검토인력 선택 등)는 컴포넌트 로컬 상태 또는 가벼운 상태 관리 훅으로 분리. +- **모의 데이터**: 백엔드 명세 확정 전까지 `@faker-js/faker` 로 그리드 목데이터 구성(스크린샷 컬럼/값과 동일 형태). + +### 7-2. 모듈·파일 배치(제안) + +| 구분 | 경로 | +| ---------------- | --------------------------------------------------------------------------------------------- | +| 라우트(App Router) | `apps/as/app/(with-base-layout)/approval-line-management/page.tsx` | +| 페이지 컴포넌트 | `apps/as/src/pages/approval-line-management/index.ts`
`.../ui/approval-line-management-page.tsx` | +| 위젯(영역 단위) | `apps/as/src/widgets/approval-template-list/`
`apps/as/src/widgets/approval-line-editor/` | +| 피처(상호작용) | `apps/as/src/features/approver-picker/` (검토인력 선택 다이얼로그) | +| 엔티티(도메인) | `apps/as/src/entities/approval-template/`
`apps/as/src/entities/approval-line/` | +| 그리드 컬럼 정의 | `entities/approval-template/model/approval-template-table-columns.tsx`
`entities/approval-line/model/approval-line-table-columns.tsx` | +| API 클라이언트 | `entities/approval-template/api/*`, `entities/approval-line/api/*` (TBD) | + +### 7-3. 영역별 UI 매핑 + +| 영역 | 주요 UI | 비고 | +| ----- | ----------------------------------------------------------------------------- | --------------------------------------------------- | +| A | 섹션 헤더 + Button(`서식 등록`) + DataTable (행 선택, 행별 Action 버튼) | 선택 행 강조, 행 클릭으로 영역 B 갱신 | +| B 헤더| 상태 라벨 `선택된 서식: {ID}` | 미선택 시 영역 B-1·B-2 비활성 | +| B-1 | 읽기 전용 Input(아이디), Select(결재구분), Input+Button(결재자/검토인력 선택), NumberInput(순서번호), Action 버튼 3종(`결재자 추가`/`결재선 저장`/`초기화`) | 폼 유효성 검증 후 그리드에 임시 행 추가 | +| B-2 | DataTable (행별 [수정][삭제]), 임시 행 시각적 구분 | 기본 정렬: 결재순서번호 ASC | +| 공통 | Dialog(검토인력 선택, 서식 등록/수정, 결재자 수정, 삭제 확인) | 디자인 시스템의 `Dialog` 컴포넌트 사용 | + +### 7-4. 데이터 흐름(요약) + +- **진입 시**: 결재서식 목록 조회(TBD) → 영역 A 그리드 렌더. 영역 B는 안내/비활성 상태. +- **서식 선택 시**: 선택된 `elctAtrzTmpltId` 를 페이지 상태로 보관 → 결재선 목록 조회(TBD) → 영역 B-2 그리드 갱신. 영역 B-1 폼 초기화. +- **결재자 추가**: 입력 폼 값을 영역 B-2의 **클라이언트 임시 배열**에 push. 결재선아이디는 미발급 상태로 표시(또는 임시 키). 폼 리셋. +- **결재선 저장**: 임시 배열 + 기존 그리드 행을 합쳐 일괄 저장 API(TBD) 호출 → 성공 시 그리드 재조회 + 토스트. +- **수정/삭제**: 각각의 단건 API(TBD) 호출 후 그리드 재조회. +- **검토인력 선택 다이얼로그**: 사용자 목록 조회(TBD) → 단일 선택 → 폼의 결재자명/결재자 ID 갱신. +- **서식 등록/수정/삭제**: 다이얼로그 또는 확인 후 단건 API(TBD) 호출 → 영역 A 그리드 재조회. 삭제 대상이 현재 선택된 서식이면 영역 B 초기화. + +### 7-5. 미확정 / 검증 필요 항목 (TBD) + +- 모든 백엔드 API 경로·DTO·필드명. +- `결재선아이디(자동발급)` 입력 박스의 표시 정책: (a) 다음 발급 예정 번호 미리 보여주기, (b) 저장 전에는 빈 칸 또는 자리표시자만, (c) 임시 ID. +- `[결재자 추가]` 의 동작: 그리드에 임시 누적(현재 가정) vs 즉시 단건 저장. +- 결재구분 코드 값(`접수`/`검토`/`최종승인`)의 코드 매핑. +- 문서구분 코드 값(`설치인가`/`기본계획` 등)의 코드 매핑. +- 영역 A·B 그리드의 페이지네이션·정렬·검색 필터 유무. +- 검토인력 선택 다이얼로그의 검색 필드(부서/직급/이름 등) 및 다중 선택 허용 여부. +- 결재선 저장 시 순서번호 중복·누락(예: 1, 2, 4) 허용 정책. +- 권한(역할별 등록/수정/삭제 가능 여부). diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb268f2c1..d8cc097be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,18 +1,19 @@ -lockfileVersion: "9.0" +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false overrides: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 lodash.isequal: ^4.5.0 source-map: ^0.7.4 importers: + .: dependencies: chart.js: @@ -31,22 +32,22 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@next/eslint-plugin-next": + '@next/eslint-plugin-next': specifier: ^15.3.8 version: 15.3.8 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/react": + '@types/react': specifier: ^19.2.7 version: 19.2.14 - "@types/react-dom": + '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) - "@typescript-eslint/parser": + '@typescript-eslint/parser': specifier: ^8.56.1 version: 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-simple-import-sort: @@ -64,25 +65,25 @@ importers: apps/_template: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/network": + '@common/network': specifier: workspace:* version: link:../../packages/common/network - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -126,66 +127,139 @@ importers: specifier: ^5.7.2 version: 5.9.3 - apps/cm: + apps/as: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/config": + '@common/network': specifier: workspace:* - version: link:../../packages/common/config - "@fontsource-variable/noto-sans-kr": - specifier: ^5.2.5 - version: 5.2.10 - "@frontend-opensource/use-react-hooks": - specifier: ^1.1.4 - version: 1.1.4 - "@fullcalendar/core": - specifier: ^6.1.17 - version: 6.1.20 - "@fullcalendar/daygrid": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/interaction": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/react": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@fullcalendar/timegrid": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers": + version: link:../../packages/common/network + '@faker-js/faker': + specifier: ^10.3.0 + version: 10.3.0 + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": - specifier: 3.5.1-alpha.1 - version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": - specifier: ^1.3.2 - version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": - specifier: ^2.1.2 - version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": - specifier: ^1.1.2 - version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-tooltip": - specifier: ^1.1.8 - version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + axios: + specifier: ^1.8.1 + version: 1.8.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.20 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + next: + specifier: 15.3.8 + version: 15.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-hook-form: + specifier: ^7.54.2 + version: 7.72.0(react@19.2.4) + zod: + specifier: ^3.24.2 + version: 3.25.76 + devDependencies: + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 + eslint: + specifier: ^9.0.0 + version: 9.39.4(jiti@2.6.1) + eslint-config-next: + specifier: 15.4.0 + version: 15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + postcss: + specifier: ^8.4.49 + version: 8.5.8 + prettier: + specifier: ^3.4.2 + version: 3.8.1 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(prettier@3.8.1) + steiger: + specifier: ^0.5.11 + version: 0.5.11(typescript@5.9.3) + tailwindcss: + specifier: ^3.4.14 + version: 3.4.19(yaml@2.8.3) + typescript: + specifier: ^5.7.2 + version: 5.9.3 + + apps/cm: + dependencies: + '@common/assets': + specifier: workspace:* + version: link:../../packages/common/assets + '@common/components': + specifier: workspace:* + version: link:../../packages/common/components + '@common/config': + specifier: workspace:* + version: link:../../packages/common/config + '@fontsource-variable/noto-sans-kr': + specifier: ^5.2.5 + version: 5.2.10 + '@frontend-opensource/use-react-hooks': + specifier: ^1.1.4 + version: 1.1.4 + '@fullcalendar/core': + specifier: ^6.1.17 + version: 6.1.20 + '@fullcalendar/daygrid': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20) + '@fullcalendar/interaction': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20) + '@fullcalendar/react': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@fullcalendar/timegrid': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20) + '@hookform/resolvers': + specifier: ^4.1.3 + version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) + '@minoru/react-dnd-treeview': + specifier: 3.5.1-alpha.1 + version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-icons': + specifier: ^1.3.2 + version: 1.3.2(react@19.2.4) + '@radix-ui/react-label': + specifier: ^2.1.2 + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': + specifier: ^1.1.2 + version: 1.2.4(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-tooltip': + specifier: ^1.1.8 + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/react-query': + specifier: ^5.75.5 + version: 5.95.2(react@19.2.4) + '@tanstack/react-query-devtools': + specifier: ^5.75.5 + version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -237,16 +311,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3.0.0 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -276,49 +350,49 @@ importers: apps/common/features: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../../packages/common/components - "@common/config": + '@common/config': specifier: workspace:* version: link:../../../packages/common/config - "@common/network": + '@common/network': specifier: workspace:* version: link:../../../packages/common/network - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: ^3.5.0 version: 3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -367,16 +441,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -406,64 +480,64 @@ importers: apps/cs: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/config": + '@common/config': specifier: workspace:* version: link:../../packages/common/config - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@fullcalendar/core": + '@fullcalendar/core': specifier: ^6.1.17 version: 6.1.20 - "@fullcalendar/daygrid": + '@fullcalendar/daygrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/interaction": + '@fullcalendar/interaction': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/react": + '@fullcalendar/react': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@fullcalendar/timegrid": + '@fullcalendar/timegrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-tooltip": + '@radix-ui/react-tooltip': specifier: ^1.1.8 version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -515,16 +589,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3.0.0 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -554,31 +628,31 @@ importers: apps/dc: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: ^3.5.0 version: 3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -627,19 +701,19 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3.0.0 version: 3.3.5 - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.5.0 version: 9.9.0 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.17.0 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -669,16 +743,16 @@ importers: apps/dm: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) class-variance-authority: @@ -715,10 +789,10 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -739,16 +813,16 @@ importers: apps/dm_new: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) class-variance-authority: @@ -785,10 +859,10 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -809,37 +883,37 @@ importers: apps/fo: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tailwindcss/vite": + '@tailwindcss/vite': specifier: ^4.0.10 version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -882,7 +956,7 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 eslint: @@ -903,40 +977,40 @@ importers: apps/sn: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -997,19 +1071,19 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.5.0 version: 9.9.0 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -1039,73 +1113,73 @@ importers: apps/st: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/config": + '@common/config': specifier: workspace:* version: link:../../packages/common/config - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.9.0 version: 9.9.0 - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@fullcalendar/core": + '@fullcalendar/core': specifier: ^6.1.17 version: 6.1.20 - "@fullcalendar/daygrid": + '@fullcalendar/daygrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/interaction": + '@fullcalendar/interaction': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/react": + '@fullcalendar/react': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@fullcalendar/timegrid": + '@fullcalendar/timegrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-tooltip": + '@radix-ui/react-tooltip': specifier: ^1.1.8 version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@rsone/components": + '@rsone/components': specifier: workspace:* version: link:../../packages/rsone - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@types/xlsx": + '@types/xlsx': specifier: ^0.0.36 version: 0.0.36 axios: @@ -1178,16 +1252,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -1220,40 +1294,40 @@ importers: apps/wr: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -1326,10 +1400,10 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -1350,7 +1424,7 @@ importers: packages/common/assets: devDependencies: - "@types/node": + '@types/node': specifier: ^20.11.0 version: 20.19.37 tsup: @@ -1362,25 +1436,25 @@ importers: packages/common/business_components: dependencies: - "@common/components": + '@common/components': specifier: workspace:* version: link:../components - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-scroll-area": + '@radix-ui/react-scroll-area': specifier: ^1.2.3 version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-select": + '@radix-ui/react-select': specifier: ^2.1.6 version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) axios: @@ -1447,43 +1521,43 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: - "@eslint/js": + '@eslint/js': specifier: ^9.17.0 version: 9.39.4 - "@storybook/addon-essentials": + '@storybook/addon-essentials': specifier: ^8.5.3 version: 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-interactions": + '@storybook/addon-interactions': specifier: ^8.5.3 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-onboarding": + '@storybook/addon-onboarding': specifier: ^8.5.3 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-themes": + '@storybook/addon-themes': specifier: ^8.5.4 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/blocks": + '@storybook/blocks': specifier: ^8.5.3 version: 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/manager-api": + '@storybook/manager-api': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react": + '@storybook/react': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) - "@storybook/react-vite": + '@storybook/react-vite': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@storybook/test": + '@storybook/test': specifier: ^8.5.3 version: 8.6.15(storybook@8.6.18(prettier@3.8.1)) - "@storybook/theming": + '@storybook/theming': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@vitejs/plugin-react": + '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@xlsx/xlsx-populate": + '@xlsx/xlsx-populate': specifier: ^0.0.8 version: 0.0.8 autoprefixer: @@ -1537,82 +1611,82 @@ importers: packages/common/components: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../assets - "@common/config": + '@common/config': specifier: workspace:* version: link:../config - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: ^3.5.0 version: 3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-accordion": + '@radix-ui/react-accordion': specifier: ^1.2.3 version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-checkbox": + '@radix-ui/react-checkbox': specifier: ^1.1.4 version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-collapsible": + '@radix-ui/react-collapsible': specifier: ^1.1.3 version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-dialog": + '@radix-ui/react-dialog': specifier: ^1.1.6 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-dropdown-menu": + '@radix-ui/react-dropdown-menu': specifier: ^2.1.6 version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-popover": + '@radix-ui/react-popover': specifier: ^1.1.6 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-progress": + '@radix-ui/react-progress': specifier: ^1.1.2 version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-radio-group": + '@radix-ui/react-radio-group': specifier: ^1.2.2 version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-scroll-area": + '@radix-ui/react-scroll-area': specifier: ^1.2.3 version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-select": + '@radix-ui/react-select': specifier: ^2.1.6 version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-separator": + '@radix-ui/react-separator': specifier: ^1.1.2 version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slider": + '@radix-ui/react-slider': specifier: ^1.2.3 version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-switch": + '@radix-ui/react-switch': specifier: ^1.1.3 version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-tabs": + '@radix-ui/react-tabs': specifier: ^1.1.3 version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-tooltip": + '@radix-ui/react-tooltip': specifier: ^1.1.8 version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-visually-hidden": + '@radix-ui/react-visually-hidden': specifier: ^1.1.2 version: 1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 axios: @@ -1664,46 +1738,46 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.19(yaml@2.8.3)) devDependencies: - "@eslint/js": + '@eslint/js': specifier: ^9.17.0 version: 9.39.4 - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.5.0 version: 9.9.0 - "@storybook/addon-essentials": + '@storybook/addon-essentials': specifier: ^8.5.3 version: 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-interactions": + '@storybook/addon-interactions': specifier: ^8.5.3 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-onboarding": + '@storybook/addon-onboarding': specifier: ^8.5.3 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-themes": + '@storybook/addon-themes': specifier: ^8.5.4 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/blocks": + '@storybook/blocks': specifier: ^8.5.3 version: 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/manager-api": + '@storybook/manager-api': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react": + '@storybook/react': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) - "@storybook/react-vite": + '@storybook/react-vite': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@storybook/test": + '@storybook/test': specifier: ^8.5.3 version: 8.6.15(storybook@8.6.18(prettier@3.8.1)) - "@storybook/theming": + '@storybook/theming': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@vitejs/plugin-react": + '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) autoprefixer: @@ -1772,7 +1846,7 @@ importers: packages/common/network: dependencies: - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 axios: @@ -1782,7 +1856,7 @@ importers: specifier: ^3.0.5 version: 3.0.5 devDependencies: - "@types/node": + '@types/node': specifier: ^20.11.19 version: 20.19.37 typescript: @@ -1791,7 +1865,7 @@ importers: packages/rsone: dependencies: - "@common/components": + '@common/components': specifier: workspace:* version: link:../common/components jszip: @@ -1824,2599 +1898,1739 @@ importers: version: 5.6.3 packages: - "@adobe/css-tools@4.4.4": - resolution: - { - integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==, - } - "@alloc/quick-lru@5.2.0": - resolution: - { - integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, - } - engines: { node: ">=10" } + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - "@babel/code-frame@7.29.0": - resolution: - { - integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==, - } - engines: { node: ">=6.9.0" } + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} - "@babel/compat-data@7.29.0": - resolution: - { - integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==, - } - engines: { node: ">=6.9.0" } + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} - "@babel/core@7.29.0": - resolution: - { - integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==, - } - engines: { node: ">=6.9.0" } + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} - "@babel/generator@7.29.1": - resolution: - { - integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==, - } - engines: { node: ">=6.9.0" } + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} - "@babel/helper-compilation-targets@7.28.6": - resolution: - { - integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==, - } - engines: { node: ">=6.9.0" } + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} - "@babel/helper-globals@7.28.0": - resolution: - { - integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} - "@babel/helper-module-imports@7.28.6": - resolution: - { - integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} - "@babel/helper-module-transforms@7.28.6": - resolution: - { - integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 - "@babel/helper-plugin-utils@7.28.6": - resolution: - { - integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} - "@babel/helper-string-parser@7.27.1": - resolution: - { - integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} - "@babel/helper-validator-identifier@7.28.5": - resolution: - { - integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} - "@babel/helper-validator-option@7.27.1": - resolution: - { - integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} - "@babel/helpers@7.29.2": - resolution: - { - integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==, - } - engines: { node: ">=6.9.0" } + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} - "@babel/parser@7.29.2": - resolution: - { - integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==, - } - engines: { node: ">=6.0.0" } + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} hasBin: true - "@babel/plugin-transform-react-jsx-self@7.27.1": - resolution: - { - integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==, - } - engines: { node: ">=6.9.0" } + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 - "@babel/plugin-transform-react-jsx-source@7.27.1": - resolution: - { - integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==, - } - engines: { node: ">=6.9.0" } + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 - "@babel/runtime@7.29.2": - resolution: - { - integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==, - } - engines: { node: ">=6.9.0" } + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} - "@babel/template@7.28.6": - resolution: - { - integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, - } - engines: { node: ">=6.9.0" } + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} - "@babel/traverse@7.29.0": - resolution: - { - integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==, - } - engines: { node: ">=6.9.0" } + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} - "@babel/types@7.29.0": - resolution: - { - integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, - } - engines: { node: ">=6.9.0" } + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} - "@clack/core@0.4.1": - resolution: - { - integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==, - } + '@clack/core@0.4.1': + resolution: {integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==} - "@clack/prompts@0.9.1": - resolution: - { - integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==, - } + '@clack/prompts@0.9.1': + resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==} - "@date-fns/tz@1.4.1": - resolution: - { - integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==, - } + '@date-fns/tz@1.4.1': + resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} - "@dependents/detective-less@5.0.1": - resolution: - { - integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==, - } - engines: { node: ">=18" } + '@dependents/detective-less@5.0.1': + resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} + engines: {node: '>=18'} - "@emnapi/core@1.9.1": - resolution: - { - integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==, - } + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - "@emnapi/runtime@1.9.1": - resolution: - { - integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==, - } + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} - "@emnapi/wasi-threads@1.2.0": - resolution: - { - integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==, - } + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - "@esbuild/aix-ppc64@0.21.5": - resolution: - { - integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, - } - engines: { node: ">=12" } + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.24.2": - resolution: - { - integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==, - } - engines: { node: ">=18" } + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.25.12": - resolution: - { - integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, - } - engines: { node: ">=18" } + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - "@esbuild/android-arm64@0.21.5": - resolution: - { - integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, - } - engines: { node: ">=12" } + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.24.2": - resolution: - { - integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.25.12": - resolution: - { - integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - "@esbuild/android-arm@0.21.5": - resolution: - { - integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, - } - engines: { node: ">=12" } + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.24.2": - resolution: - { - integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==, - } - engines: { node: ">=18" } + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.25.12": - resolution: - { - integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} cpu: [arm] os: [android] - "@esbuild/android-x64@0.21.5": - resolution: - { - integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, - } - engines: { node: ">=12" } + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.24.2": - resolution: - { - integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==, - } - engines: { node: ">=18" } + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.25.12": - resolution: - { - integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, - } - engines: { node: ">=18" } + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} cpu: [x64] os: [android] - "@esbuild/darwin-arm64@0.21.5": - resolution: - { - integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, - } - engines: { node: ">=12" } + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.24.2": - resolution: - { - integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==, - } - engines: { node: ">=18" } + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.25.12": - resolution: - { - integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, - } - engines: { node: ">=18" } + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-x64@0.21.5": - resolution: - { - integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, - } - engines: { node: ">=12" } + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.24.2": - resolution: - { - integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==, - } - engines: { node: ">=18" } + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.25.12": - resolution: - { - integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, - } - engines: { node: ">=18" } + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - "@esbuild/freebsd-arm64@0.21.5": - resolution: - { - integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.24.2": - resolution: - { - integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.25.12": - resolution: - { - integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-x64@0.21.5": - resolution: - { - integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.24.2": - resolution: - { - integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.25.12": - resolution: - { - integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - "@esbuild/linux-arm64@0.21.5": - resolution: - { - integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.24.2": - resolution: - { - integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.25.12": - resolution: - { - integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm@0.21.5": - resolution: - { - integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.24.2": - resolution: - { - integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.25.12": - resolution: - { - integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - "@esbuild/linux-ia32@0.21.5": - resolution: - { - integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, - } - engines: { node: ">=12" } + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.24.2": - resolution: - { - integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==, - } - engines: { node: ">=18" } + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.25.12": - resolution: - { - integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, - } - engines: { node: ">=18" } + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - "@esbuild/linux-loong64@0.21.5": - resolution: - { - integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, - } - engines: { node: ">=12" } + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.24.2": - resolution: - { - integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.25.12": - resolution: - { - integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, - } - engines: { node: ">=18" } + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - "@esbuild/linux-mips64el@0.21.5": - resolution: - { - integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, - } - engines: { node: ">=12" } + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.24.2": - resolution: - { - integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==, - } - engines: { node: ">=18" } + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.25.12": - resolution: - { - integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, - } - engines: { node: ">=18" } + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - "@esbuild/linux-ppc64@0.21.5": - resolution: - { - integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, - } - engines: { node: ">=12" } + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.24.2": - resolution: - { - integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==, - } - engines: { node: ">=18" } + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.25.12": - resolution: - { - integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, - } - engines: { node: ">=18" } + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - "@esbuild/linux-riscv64@0.21.5": - resolution: - { - integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, - } - engines: { node: ">=12" } + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.24.2": - resolution: - { - integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==, - } - engines: { node: ">=18" } + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.25.12": - resolution: - { - integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, - } - engines: { node: ">=18" } + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - "@esbuild/linux-s390x@0.21.5": - resolution: - { - integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, - } - engines: { node: ">=12" } + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.24.2": - resolution: - { - integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==, - } - engines: { node: ">=18" } + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.25.12": - resolution: - { - integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, - } - engines: { node: ">=18" } + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - "@esbuild/linux-x64@0.21.5": - resolution: - { - integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, - } - engines: { node: ">=12" } + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.24.2": - resolution: - { - integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==, - } - engines: { node: ">=18" } + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.25.12": - resolution: - { - integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, - } - engines: { node: ">=18" } + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - "@esbuild/netbsd-arm64@0.24.2": - resolution: - { - integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-arm64@0.25.12": - resolution: - { - integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-x64@0.21.5": - resolution: - { - integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, - } - engines: { node: ">=12" } + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.24.2": - resolution: - { - integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.25.12": - resolution: - { - integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - "@esbuild/openbsd-arm64@0.24.2": - resolution: - { - integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-arm64@0.25.12": - resolution: - { - integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-x64@0.21.5": - resolution: - { - integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, - } - engines: { node: ">=12" } + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.24.2": - resolution: - { - integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.25.12": - resolution: - { - integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - "@esbuild/openharmony-arm64@0.25.12": - resolution: - { - integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, - } - engines: { node: ">=18" } + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - "@esbuild/sunos-x64@0.21.5": - resolution: - { - integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, - } - engines: { node: ">=12" } + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.24.2": - resolution: - { - integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==, - } - engines: { node: ">=18" } + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.25.12": - resolution: - { - integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, - } - engines: { node: ">=18" } + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - "@esbuild/win32-arm64@0.21.5": - resolution: - { - integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, - } - engines: { node: ">=12" } + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.24.2": - resolution: - { - integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==, - } - engines: { node: ">=18" } + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.25.12": - resolution: - { - integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, - } - engines: { node: ">=18" } + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - "@esbuild/win32-ia32@0.21.5": - resolution: - { - integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, - } - engines: { node: ">=12" } + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.24.2": - resolution: - { - integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==, - } - engines: { node: ">=18" } + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.25.12": - resolution: - { - integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, - } - engines: { node: ">=18" } + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - "@esbuild/win32-x64@0.21.5": - resolution: - { - integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, - } - engines: { node: ">=12" } + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.24.2": - resolution: - { - integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==, - } - engines: { node: ">=18" } + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.25.12": - resolution: - { - integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, - } - engines: { node: ">=18" } + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - "@eslint-community/eslint-utils@4.9.1": - resolution: - { - integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - "@eslint-community/regexpp@4.12.2": - resolution: - { - integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - "@eslint/config-array@0.21.2": - resolution: - { - integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/config-helpers@0.4.2": - resolution: - { - integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/core@0.17.0": - resolution: - { - integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/eslintrc@3.3.5": - resolution: - { - integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/js@9.39.4": - resolution: - { - integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/object-schema@2.1.7": - resolution: - { - integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/plugin-kit@0.4.1": - resolution: - { - integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@faker-js/faker@10.3.0": - resolution: - { - integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==, - } - engines: { node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: ">=10" } + '@faker-js/faker@10.3.0': + resolution: {integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==} + engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} - "@faker-js/faker@9.9.0": - resolution: - { - integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==, - } - engines: { node: ">=18.0.0", npm: ">=9.0.0" } + '@faker-js/faker@9.9.0': + resolution: {integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==} + engines: {node: '>=18.0.0', npm: '>=9.0.0'} - "@feature-sliced/filesystem@3.0.1": - resolution: - { - integrity: sha512-RlrfjhaX81o6E5OBc2A0tOLG/cZSOvcM+FpPlzEhTraIzBz8JmhxgwrYQbafMqiC+TOrqhd2pTLkU7PFQG1QdQ==, - } + '@feature-sliced/filesystem@3.0.1': + resolution: {integrity: sha512-RlrfjhaX81o6E5OBc2A0tOLG/cZSOvcM+FpPlzEhTraIzBz8JmhxgwrYQbafMqiC+TOrqhd2pTLkU7PFQG1QdQ==} - "@feature-sliced/steiger-plugin@0.5.7": - resolution: - { - integrity: sha512-xENW2fvfU+UyMgcB3S+CCMPrH2Tq/BG1W9IxGp5B8+j0TtbgmbzT3DIj3A2HG4kouVYUjzgWA6JIuHbGo3lDzg==, - } + '@feature-sliced/steiger-plugin@0.5.7': + resolution: {integrity: sha512-xENW2fvfU+UyMgcB3S+CCMPrH2Tq/BG1W9IxGp5B8+j0TtbgmbzT3DIj3A2HG4kouVYUjzgWA6JIuHbGo3lDzg==} - "@floating-ui/core@1.7.5": - resolution: - { - integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==, - } + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - "@floating-ui/dom@1.7.6": - resolution: - { - integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==, - } + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - "@floating-ui/react-dom@2.1.8": - resolution: - { - integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==, - } + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@floating-ui/utils@0.2.11": - resolution: - { - integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==, - } + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - "@fontsource-variable/noto-sans-kr@5.2.10": - resolution: - { - integrity: sha512-UZOO7HF44Rt5+7SCeFMHYVgbKu36Jet6IxrAd7jjEkQMVDmeefwd0H8V5pSZydvBOOxClk3V5cQsujJqGHhQMw==, - } + '@fontsource-variable/noto-sans-kr@5.2.10': + resolution: {integrity: sha512-UZOO7HF44Rt5+7SCeFMHYVgbKu36Jet6IxrAd7jjEkQMVDmeefwd0H8V5pSZydvBOOxClk3V5cQsujJqGHhQMw==} - "@frontend-opensource/use-react-hooks@1.1.4": - resolution: - { - integrity: sha512-otCSyciL5MVCNNYmdDdg2lEL6rbZ3XX1meYQCzapUSC4V6qx2YxMk1kUbhwEM/+vdxhYzBHsVBGD0rZWl5cgrw==, - } + '@frontend-opensource/use-react-hooks@1.1.4': + resolution: {integrity: sha512-otCSyciL5MVCNNYmdDdg2lEL6rbZ3XX1meYQCzapUSC4V6qx2YxMk1kUbhwEM/+vdxhYzBHsVBGD0rZWl5cgrw==} - "@fullcalendar/core@6.1.20": - resolution: - { - integrity: sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==, - } + '@fullcalendar/core@6.1.20': + resolution: {integrity: sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==} - "@fullcalendar/daygrid@6.1.20": - resolution: - { - integrity: sha512-AO9vqhkLP77EesmJzuU+IGXgxNulsA8mgQHynclJ8U70vSwAVnbcLG9qftiTAFSlZjiY/NvhE7sflve6cJelyQ==, - } + '@fullcalendar/daygrid@6.1.20': + resolution: {integrity: sha512-AO9vqhkLP77EesmJzuU+IGXgxNulsA8mgQHynclJ8U70vSwAVnbcLG9qftiTAFSlZjiY/NvhE7sflve6cJelyQ==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 - "@fullcalendar/interaction@6.1.20": - resolution: - { - integrity: sha512-p6txmc5txL0bMiPaJxe2ip6o0T384TyoD2KGdsU6UjZ5yoBlaY+dg7kxfnYKpYMzEJLG58n+URrHr2PgNL2fyA==, - } + '@fullcalendar/interaction@6.1.20': + resolution: {integrity: sha512-p6txmc5txL0bMiPaJxe2ip6o0T384TyoD2KGdsU6UjZ5yoBlaY+dg7kxfnYKpYMzEJLG58n+URrHr2PgNL2fyA==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 - "@fullcalendar/react@6.1.20": - resolution: - { - integrity: sha512-1w0pZtceaUdfAnxMSCGHCQalhi+mR1jOe76sXzyAXpcPz/Lf0zHSdcGK/U2XpZlnQgQtBZW+d+QBnnzVQKCxAA==, - } + '@fullcalendar/react@6.1.20': + resolution: {integrity: sha512-1w0pZtceaUdfAnxMSCGHCQalhi+mR1jOe76sXzyAXpcPz/Lf0zHSdcGK/U2XpZlnQgQtBZW+d+QBnnzVQKCxAA==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 react: ^19.2.1 react-dom: ^19.2.1 - "@fullcalendar/timegrid@6.1.20": - resolution: - { - integrity: sha512-4H+/MWbz3ntA50lrPif+7TsvMeX3R1GSYjiLULz0+zEJ7/Yfd9pupZmAwUs/PBpA6aAcFmeRr0laWfcz1a9V1A==, - } + '@fullcalendar/timegrid@6.1.20': + resolution: {integrity: sha512-4H+/MWbz3ntA50lrPif+7TsvMeX3R1GSYjiLULz0+zEJ7/Yfd9pupZmAwUs/PBpA6aAcFmeRr0laWfcz1a9V1A==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 - "@hookform/resolvers@4.1.3": - resolution: - { - integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==, - } + '@hookform/resolvers@4.1.3': + resolution: {integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==} peerDependencies: react-hook-form: ^7.0.0 - "@humanfs/core@0.19.1": - resolution: - { - integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, - } - engines: { node: ">=18.18.0" } + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} - "@humanfs/node@0.16.7": - resolution: - { - integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==, - } - engines: { node: ">=18.18.0" } + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} - "@humanwhocodes/module-importer@1.0.1": - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} - "@humanwhocodes/retry@0.4.3": - resolution: - { - integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, - } - engines: { node: ">=18.18" } + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} - "@img/colour@1.1.0": - resolution: - { - integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, - } - engines: { node: ">=18" } + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} - "@img/sharp-darwin-arm64@0.34.5": - resolution: - { - integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - "@img/sharp-darwin-x64@0.34.5": - resolution: - { - integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - "@img/sharp-libvips-darwin-arm64@1.2.4": - resolution: - { - integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, - } + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - "@img/sharp-libvips-darwin-x64@1.2.4": - resolution: - { - integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, - } + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - "@img/sharp-libvips-linux-arm64@1.2.4": - resolution: - { - integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, - } + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - "@img/sharp-libvips-linux-arm@1.2.4": - resolution: - { - integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, - } + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - "@img/sharp-libvips-linux-ppc64@1.2.4": - resolution: - { - integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, - } + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - "@img/sharp-libvips-linux-riscv64@1.2.4": - resolution: - { - integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, - } + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] - "@img/sharp-libvips-linux-s390x@1.2.4": - resolution: - { - integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, - } + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - "@img/sharp-libvips-linux-x64@1.2.4": - resolution: - { - integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, - } + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": - resolution: - { - integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, - } + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - "@img/sharp-libvips-linuxmusl-x64@1.2.4": - resolution: - { - integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, - } + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - "@img/sharp-linux-arm64@0.34.5": - resolution: - { - integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - "@img/sharp-linux-arm@0.34.5": - resolution: - { - integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - "@img/sharp-linux-ppc64@0.34.5": - resolution: - { - integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - "@img/sharp-linux-riscv64@0.34.5": - resolution: - { - integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] - "@img/sharp-linux-s390x@0.34.5": - resolution: - { - integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - "@img/sharp-linux-x64@0.34.5": - resolution: - { - integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - "@img/sharp-linuxmusl-arm64@0.34.5": - resolution: - { - integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - "@img/sharp-linuxmusl-x64@0.34.5": - resolution: - { - integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - "@img/sharp-wasm32@0.34.5": - resolution: - { - integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - "@img/sharp-win32-arm64@0.34.5": - resolution: - { - integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - "@img/sharp-win32-ia32@0.34.5": - resolution: - { - integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - "@img/sharp-win32-x64@0.34.5": - resolution: - { - integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - "@isaacs/cliui@8.0.2": - resolution: - { - integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, - } - engines: { node: ">=12" } + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} - "@joshwooding/vite-plugin-react-docgen-typescript@0.5.0": - resolution: - { - integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==, - } + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': + resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} peerDependencies: - typescript: ">= 4.3.x" + typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: typescript: optional: true - "@jridgewell/gen-mapping@0.3.13": - resolution: - { - integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, - } + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - "@jridgewell/remapping@2.3.5": - resolution: - { - integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, - } + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - "@jridgewell/resolve-uri@3.1.2": - resolution: - { - integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, - } - engines: { node: ">=6.0.0" } + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - "@jridgewell/source-map@0.3.11": - resolution: - { - integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==, - } + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - "@jridgewell/sourcemap-codec@1.5.5": - resolution: - { - integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, - } + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - "@jridgewell/trace-mapping@0.3.31": - resolution: - { - integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, - } + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - "@juggle/resize-observer@3.4.0": - resolution: - { - integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==, - } + '@juggle/resize-observer@3.4.0': + resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - "@kurkle/color@0.3.4": - resolution: - { - integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==, - } + '@kurkle/color@0.3.4': + resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - "@mapbox/jsonlint-lines-primitives@2.0.2": - resolution: - { - integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==, - } - engines: { node: ">= 0.6" } + '@mapbox/jsonlint-lines-primitives@2.0.2': + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} + engines: {node: '>= 0.6'} - "@mapbox/mapbox-gl-style-spec@13.28.0": - resolution: - { - integrity: sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==, - } + '@mapbox/mapbox-gl-style-spec@13.28.0': + resolution: {integrity: sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==} hasBin: true - "@mapbox/point-geometry@0.1.0": - resolution: - { - integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==, - } + '@mapbox/point-geometry@0.1.0': + resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} - "@mapbox/unitbezier@0.0.0": - resolution: - { - integrity: sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==, - } + '@mapbox/unitbezier@0.0.0': + resolution: {integrity: sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==} - "@mdx-js/react@3.1.1": - resolution: - { - integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==, - } + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 - "@minoru/react-dnd-treeview@3.5.1-alpha.1": - resolution: - { - integrity: sha512-XEKBjhyltG0gzn+ioZRwhlV7+Q/uVZqTMS/tAO3On/rPNuNgqWHROFsyGdHQS/DYoENGOG8JX03chCxExOgEpA==, - } + '@minoru/react-dnd-treeview@3.5.1-alpha.1': + resolution: {integrity: sha512-XEKBjhyltG0gzn+ioZRwhlV7+Q/uVZqTMS/tAO3On/rPNuNgqWHROFsyGdHQS/DYoENGOG8JX03chCxExOgEpA==} peerDependencies: react: ^19.2.1 react-dnd: 15.x || 16.x react-dom: ^19.2.1 - "@minoru/react-dnd-treeview@3.5.3": - resolution: - { - integrity: sha512-k9Hz99pLWR/0AMWYR4Hyda4jQjhfBz0dqqqLpk9apfbB7RthamjIJsKKobxgvA8d7ykbVRLCOlrWlRckP1uSkw==, - } + '@minoru/react-dnd-treeview@3.5.3': + resolution: {integrity: sha512-k9Hz99pLWR/0AMWYR4Hyda4jQjhfBz0dqqqLpk9apfbB7RthamjIJsKKobxgvA8d7ykbVRLCOlrWlRckP1uSkw==} peerDependencies: react: ^19.2.1 react-dnd: 15.x || 16.x react-dom: ^19.2.1 - "@napi-rs/wasm-runtime@0.2.12": - resolution: - { - integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==, - } + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - "@next/env@15.3.8": - resolution: - { - integrity: sha512-SAfHg0g91MQVMPioeFeDjE+8UPF3j3BvHjs8ZKJAUz1BG7eMPvfCKOAgNWJ6s1MLNeP6O2InKQRTNblxPWuq+Q==, - } + '@next/env@15.3.8': + resolution: {integrity: sha512-SAfHg0g91MQVMPioeFeDjE+8UPF3j3BvHjs8ZKJAUz1BG7eMPvfCKOAgNWJ6s1MLNeP6O2InKQRTNblxPWuq+Q==} - "@next/eslint-plugin-next@15.3.8": - resolution: - { - integrity: sha512-CKpvDZhNXPUjUHmjHddcsqjwj46oQblFms2hr2uA79C0kVTiSXQEQxkawUsDNSofHhTI31IbSeBdVyuk/U1nKw==, - } + '@next/eslint-plugin-next@15.3.8': + resolution: {integrity: sha512-CKpvDZhNXPUjUHmjHddcsqjwj46oQblFms2hr2uA79C0kVTiSXQEQxkawUsDNSofHhTI31IbSeBdVyuk/U1nKw==} - "@next/swc-darwin-arm64@15.3.5": - resolution: - { - integrity: sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==, - } - engines: { node: ">= 10" } + '@next/eslint-plugin-next@15.4.0': + resolution: {integrity: sha512-dlGuj2B76ltswtpdDFQJfTlu6ux0v+EUYzsAYR1IqxqHi5iMPWhPRztgu8eqQZo4uNYkABKzLCmVeGDwbTYTiw==} + + '@next/swc-darwin-arm64@15.3.5': + resolution: {integrity: sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - "@next/swc-darwin-x64@15.3.5": - resolution: - { - integrity: sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA==, - } - engines: { node: ">= 10" } + '@next/swc-darwin-x64@15.3.5': + resolution: {integrity: sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - "@next/swc-linux-arm64-gnu@15.3.5": - resolution: - { - integrity: sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ==, - } - engines: { node: ">= 10" } + '@next/swc-linux-arm64-gnu@15.3.5': + resolution: {integrity: sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] - "@next/swc-linux-arm64-musl@15.3.5": - resolution: - { - integrity: sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A==, - } - engines: { node: ">= 10" } + '@next/swc-linux-arm64-musl@15.3.5': + resolution: {integrity: sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] - "@next/swc-linux-x64-gnu@15.3.5": - resolution: - { - integrity: sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A==, - } - engines: { node: ">= 10" } + '@next/swc-linux-x64-gnu@15.3.5': + resolution: {integrity: sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] - "@next/swc-linux-x64-musl@15.3.5": - resolution: - { - integrity: sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg==, - } - engines: { node: ">= 10" } + '@next/swc-linux-x64-musl@15.3.5': + resolution: {integrity: sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] - "@next/swc-win32-arm64-msvc@15.3.5": - resolution: - { - integrity: sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ==, - } - engines: { node: ">= 10" } + '@next/swc-win32-arm64-msvc@15.3.5': + resolution: {integrity: sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] - "@next/swc-win32-x64-msvc@15.3.5": - resolution: - { - integrity: sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw==, - } - engines: { node: ">= 10" } + '@next/swc-win32-x64-msvc@15.3.5': + resolution: {integrity: sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - "@nodelib/fs.scandir@2.1.5": - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: ">= 8" } + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} - "@nodelib/fs.stat@2.0.5": - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: ">= 8" } + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} - "@nodelib/fs.walk@1.2.8": - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: ">= 8" } + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} - "@nolyfill/is-core-module@1.0.39": - resolution: - { - integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==, - } - engines: { node: ">=12.4.0" } + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} - "@petamoriken/float16@3.9.3": - resolution: - { - integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==, - } + '@petamoriken/float16@3.9.3': + resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==} - "@pkgjs/parseargs@0.11.0": - resolution: - { - integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, - } - engines: { node: ">=14" } + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} - "@radix-ui/number@1.1.1": - resolution: - { - integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==, - } + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - "@radix-ui/primitive@1.1.3": - resolution: - { - integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==, - } + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - "@radix-ui/react-accordion@1.2.12": - resolution: - { - integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==, - } + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-arrow@1.1.7": - resolution: - { - integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==, - } + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-checkbox@1.3.3": - resolution: - { - integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==, - } + '@radix-ui/react-checkbox@1.3.3': + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-collapsible@1.1.12": - resolution: - { - integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==, - } + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-collection@1.1.7": - resolution: - { - integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==, - } + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-compose-refs@1.1.2": - resolution: - { - integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==, - } + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-context@1.1.2": - resolution: - { - integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==, - } + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-context@1.1.3": - resolution: - { - integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==, - } + '@radix-ui/react-context@1.1.3': + resolution: {integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-dialog@1.1.15": - resolution: - { - integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==, - } + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-direction@1.1.1": - resolution: - { - integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==, - } + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-dismissable-layer@1.1.11": - resolution: - { - integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==, - } + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-dropdown-menu@2.1.16": - resolution: - { - integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==, - } + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-focus-guards@1.1.3": - resolution: - { - integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==, - } + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-focus-scope@1.1.7": - resolution: - { - integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==, - } + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-icons@1.3.2": - resolution: - { - integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==, - } + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} peerDependencies: react: ^19.2.1 - "@radix-ui/react-id@1.1.1": - resolution: - { - integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==, - } + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-label@2.1.8": - resolution: - { - integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==, - } + '@radix-ui/react-label@2.1.8': + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-menu@2.1.16": - resolution: - { - integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==, - } + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-popover@1.1.15": - resolution: - { - integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==, - } + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-popper@1.2.8": - resolution: - { - integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==, - } + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-portal@1.1.9": - resolution: - { - integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==, - } + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-presence@1.1.5": - resolution: - { - integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==, - } + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-primitive@2.1.3": - resolution: - { - integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==, - } + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-primitive@2.1.4": - resolution: - { - integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==, - } + '@radix-ui/react-primitive@2.1.4': + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-progress@1.1.8": - resolution: - { - integrity: sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==, - } + '@radix-ui/react-progress@1.1.8': + resolution: {integrity: sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-radio-group@1.3.8": - resolution: - { - integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==, - } + '@radix-ui/react-radio-group@1.3.8': + resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-roving-focus@1.1.11": - resolution: - { - integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==, - } + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-scroll-area@1.2.10": - resolution: - { - integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==, - } + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-select@2.2.6": - resolution: - { - integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==, - } + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-separator@1.1.8": - resolution: - { - integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==, - } + '@radix-ui/react-separator@1.1.8': + resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-slider@1.3.6": - resolution: - { - integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==, - } + '@radix-ui/react-slider@1.3.6': + resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-slot@1.2.3": - resolution: - { - integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==, - } + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-slot@1.2.4": - resolution: - { - integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==, - } + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-switch@1.2.6": - resolution: - { - integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==, - } + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-tabs@1.1.13": - resolution: - { - integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==, - } + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-tooltip@1.2.8": - resolution: - { - integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==, - } + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-use-callback-ref@1.1.1": - resolution: - { - integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==, - } + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-controllable-state@1.2.2": - resolution: - { - integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==, - } + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-effect-event@0.0.2": - resolution: - { - integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==, - } + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-escape-keydown@1.1.1": - resolution: - { - integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==, - } + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-layout-effect@1.1.1": - resolution: - { - integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==, - } + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-previous@1.1.1": - resolution: - { - integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==, - } + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-rect@1.1.1": - resolution: - { - integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==, - } + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-size@1.1.1": - resolution: - { - integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==, - } + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-visually-hidden@1.2.3": - resolution: - { - integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==, - } + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-visually-hidden@1.2.4": - resolution: - { - integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==, - } + '@radix-ui/react-visually-hidden@1.2.4': + resolution: {integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/rect@1.1.1": - resolution: - { - integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==, - } + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - "@react-dnd/asap@5.0.2": - resolution: - { - integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==, - } + '@react-dnd/asap@5.0.2': + resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} - "@react-dnd/invariant@4.0.2": - resolution: - { - integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==, - } + '@react-dnd/invariant@4.0.2': + resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} - "@react-dnd/shallowequal@4.0.2": - resolution: - { - integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==, - } + '@react-dnd/shallowequal@4.0.2': + resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} - "@rolldown/pluginutils@1.0.0-beta.27": - resolution: - { - integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==, - } + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - "@rollup/pluginutils@5.3.0": - resolution: - { - integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==, - } - engines: { node: ">=14.0.0" } + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - "@rollup/rollup-android-arm-eabi@4.60.0": - resolution: - { - integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==, - } + '@rollup/rollup-android-arm-eabi@4.60.0': + resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} cpu: [arm] os: [android] - "@rollup/rollup-android-arm64@4.60.0": - resolution: - { - integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==, - } + '@rollup/rollup-android-arm64@4.60.0': + resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} cpu: [arm64] os: [android] - "@rollup/rollup-darwin-arm64@4.60.0": - resolution: - { - integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==, - } + '@rollup/rollup-darwin-arm64@4.60.0': + resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} cpu: [arm64] os: [darwin] - "@rollup/rollup-darwin-x64@4.60.0": - resolution: - { - integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==, - } + '@rollup/rollup-darwin-x64@4.60.0': + resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} cpu: [x64] os: [darwin] - "@rollup/rollup-freebsd-arm64@4.60.0": - resolution: - { - integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==, - } + '@rollup/rollup-freebsd-arm64@4.60.0': + resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} cpu: [arm64] os: [freebsd] - "@rollup/rollup-freebsd-x64@4.60.0": - resolution: - { - integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==, - } + '@rollup/rollup-freebsd-x64@4.60.0': + resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} cpu: [x64] os: [freebsd] - "@rollup/rollup-linux-arm-gnueabihf@4.60.0": - resolution: - { - integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==, - } + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': + resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] - "@rollup/rollup-linux-arm-musleabihf@4.60.0": - resolution: - { - integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==, - } + '@rollup/rollup-linux-arm-musleabihf@4.60.0': + resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] - "@rollup/rollup-linux-arm64-gnu@4.60.0": - resolution: - { - integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==, - } + '@rollup/rollup-linux-arm64-gnu@4.60.0': + resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] - "@rollup/rollup-linux-arm64-musl@4.60.0": - resolution: - { - integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==, - } + '@rollup/rollup-linux-arm64-musl@4.60.0': + resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] - "@rollup/rollup-linux-loong64-gnu@4.60.0": - resolution: - { - integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==, - } + '@rollup/rollup-linux-loong64-gnu@4.60.0': + resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] - "@rollup/rollup-linux-loong64-musl@4.60.0": - resolution: - { - integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==, - } + '@rollup/rollup-linux-loong64-musl@4.60.0': + resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} cpu: [loong64] os: [linux] - "@rollup/rollup-linux-ppc64-gnu@4.60.0": - resolution: - { - integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==, - } + '@rollup/rollup-linux-ppc64-gnu@4.60.0': + resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] - "@rollup/rollup-linux-ppc64-musl@4.60.0": - resolution: - { - integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==, - } + '@rollup/rollup-linux-ppc64-musl@4.60.0': + resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} cpu: [ppc64] os: [linux] - "@rollup/rollup-linux-riscv64-gnu@4.60.0": - resolution: - { - integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==, - } + '@rollup/rollup-linux-riscv64-gnu@4.60.0': + resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] - "@rollup/rollup-linux-riscv64-musl@4.60.0": - resolution: - { - integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==, - } + '@rollup/rollup-linux-riscv64-musl@4.60.0': + resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] - "@rollup/rollup-linux-s390x-gnu@4.60.0": - resolution: - { - integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==, - } + '@rollup/rollup-linux-s390x-gnu@4.60.0': + resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] - "@rollup/rollup-linux-x64-gnu@4.60.0": - resolution: - { - integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==, - } + '@rollup/rollup-linux-x64-gnu@4.60.0': + resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} cpu: [x64] os: [linux] - "@rollup/rollup-linux-x64-musl@4.60.0": - resolution: - { - integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==, - } + '@rollup/rollup-linux-x64-musl@4.60.0': + resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] - "@rollup/rollup-openbsd-x64@4.60.0": - resolution: - { - integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==, - } + '@rollup/rollup-openbsd-x64@4.60.0': + resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} cpu: [x64] os: [openbsd] - "@rollup/rollup-openharmony-arm64@4.60.0": - resolution: - { - integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==, - } + '@rollup/rollup-openharmony-arm64@4.60.0': + resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} cpu: [arm64] os: [openharmony] - "@rollup/rollup-win32-arm64-msvc@4.60.0": - resolution: - { - integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==, - } + '@rollup/rollup-win32-arm64-msvc@4.60.0': + resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} cpu: [arm64] os: [win32] - "@rollup/rollup-win32-ia32-msvc@4.60.0": - resolution: - { - integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==, - } + '@rollup/rollup-win32-ia32-msvc@4.60.0': + resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} cpu: [ia32] os: [win32] - "@rollup/rollup-win32-x64-gnu@4.60.0": - resolution: - { - integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==, - } + '@rollup/rollup-win32-x64-gnu@4.60.0': + resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} cpu: [x64] os: [win32] - "@rollup/rollup-win32-x64-msvc@4.60.0": - resolution: - { - integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==, - } + '@rollup/rollup-win32-x64-msvc@4.60.0': + resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} cpu: [x64] os: [win32] - "@rtsao/scc@1.1.0": - resolution: - { - integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==, - } + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - "@rushstack/eslint-patch@1.16.1": - resolution: - { - integrity: sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==, - } + '@rushstack/eslint-patch@1.16.1': + resolution: {integrity: sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==} - "@sindresorhus/merge-streams@2.3.0": - resolution: - { - integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==, - } - engines: { node: ">=18" } + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} - "@standard-schema/utils@0.3.0": - resolution: - { - integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==, - } + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - "@storybook/addon-actions@8.6.14": - resolution: - { - integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==, - } + '@storybook/addon-actions@8.6.14': + resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-backgrounds@8.6.14": - resolution: - { - integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==, - } + '@storybook/addon-backgrounds@8.6.14': + resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-controls@8.6.14": - resolution: - { - integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==, - } + '@storybook/addon-controls@8.6.14': + resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-docs@8.6.14": - resolution: - { - integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==, - } + '@storybook/addon-docs@8.6.14': + resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-essentials@8.6.14": - resolution: - { - integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==, - } + '@storybook/addon-essentials@8.6.14': + resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-highlight@8.6.14": - resolution: - { - integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==, - } + '@storybook/addon-highlight@8.6.14': + resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-interactions@8.6.14": - resolution: - { - integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==, - } + '@storybook/addon-interactions@8.6.14': + resolution: {integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-measure@8.6.14": - resolution: - { - integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==, - } + '@storybook/addon-measure@8.6.14': + resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-onboarding@8.6.18": - resolution: - { - integrity: sha512-F0rpD5GwIpstQlRaPYQNroIPECB//yy0v2hHQOjFtH5OnCfJXpih4M5pFYcwXsMStRwLVJWS5ywfz+Xea0hmgg==, - } + '@storybook/addon-onboarding@8.6.18': + resolution: {integrity: sha512-F0rpD5GwIpstQlRaPYQNroIPECB//yy0v2hHQOjFtH5OnCfJXpih4M5pFYcwXsMStRwLVJWS5ywfz+Xea0hmgg==} peerDependencies: storybook: ^8.6.18 - "@storybook/addon-outline@8.6.14": - resolution: - { - integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==, - } + '@storybook/addon-outline@8.6.14': + resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-themes@8.6.18": - resolution: - { - integrity: sha512-v+Xcxo/XB2ayw9E/RygGOqUIaPOXp9XEFv6EF7DRt41/RQkQ846yJBARTC2cH8kCb+7FYcvDLD3GN/ms7i8wNg==, - } + '@storybook/addon-themes@8.6.18': + resolution: {integrity: sha512-v+Xcxo/XB2ayw9E/RygGOqUIaPOXp9XEFv6EF7DRt41/RQkQ846yJBARTC2cH8kCb+7FYcvDLD3GN/ms7i8wNg==} peerDependencies: storybook: ^8.6.18 - "@storybook/addon-toolbars@8.6.14": - resolution: - { - integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==, - } + '@storybook/addon-toolbars@8.6.14': + resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-viewport@8.6.14": - resolution: - { - integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==, - } + '@storybook/addon-viewport@8.6.14': + resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} peerDependencies: storybook: ^8.6.14 - "@storybook/blocks@8.6.14": - resolution: - { - integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==, - } + '@storybook/blocks@8.6.14': + resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 @@ -4427,1087 +3641,652 @@ packages: react-dom: optional: true - "@storybook/builder-vite@8.6.18": - resolution: - { - integrity: sha512-XLqnOv4C36jlTd4uC8xpWBxv+7GV4/05zWJ0wAcU4qflorropUTirt4UQPGkwIzi+BVAhs9pJj+m4k0IWJtpHg==, - } + '@storybook/builder-vite@8.6.18': + resolution: {integrity: sha512-XLqnOv4C36jlTd4uC8xpWBxv+7GV4/05zWJ0wAcU4qflorropUTirt4UQPGkwIzi+BVAhs9pJj+m4k0IWJtpHg==} peerDependencies: storybook: ^8.6.18 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - "@storybook/components@8.6.18": - resolution: - { - integrity: sha512-55yViiZzPS/cPBuOeW4QGxGqrusjXVyxuknmbYCIwDtFyyvI/CgbjXRHdxNBaIjz+IlftxvBmmSaOqFG5+/dkA==, - } + '@storybook/components@8.6.18': + resolution: {integrity: sha512-55yViiZzPS/cPBuOeW4QGxGqrusjXVyxuknmbYCIwDtFyyvI/CgbjXRHdxNBaIjz+IlftxvBmmSaOqFG5+/dkA==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/core@8.6.18": - resolution: - { - integrity: sha512-dRBP2TnX6fGdS0T2mXBHjkS/3Nlu1ra1huovZVFuM67CYMzrhM/3hX/zru1vWSC5rqY93ZaAhjMciPW4pK5mMQ==, - } + '@storybook/core@8.6.18': + resolution: {integrity: sha512-dRBP2TnX6fGdS0T2mXBHjkS/3Nlu1ra1huovZVFuM67CYMzrhM/3hX/zru1vWSC5rqY93ZaAhjMciPW4pK5mMQ==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - "@storybook/csf-plugin@8.6.14": - resolution: - { - integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==, - } + '@storybook/csf-plugin@8.6.14': + resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/csf-plugin@8.6.18": - resolution: - { - integrity: sha512-x1ioz/L0CwaelCkHci3P31YtvwayN3FBftvwQOPbvRh9qeb4Cpz5IdVDmyvSxxYwXN66uAORNoqgjTi7B4/y5Q==, - } + '@storybook/csf-plugin@8.6.18': + resolution: {integrity: sha512-x1ioz/L0CwaelCkHci3P31YtvwayN3FBftvwQOPbvRh9qeb4Cpz5IdVDmyvSxxYwXN66uAORNoqgjTi7B4/y5Q==} peerDependencies: storybook: ^8.6.18 - "@storybook/csf@0.1.13": - resolution: - { - integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==, - } + '@storybook/csf@0.1.13': + resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} - "@storybook/global@5.0.0": - resolution: - { - integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==, - } + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - "@storybook/icons@1.6.0": - resolution: - { - integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==, - } - engines: { node: ">=14.0.0" } + '@storybook/icons@1.6.0': + resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==} + engines: {node: '>=14.0.0'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@storybook/instrumenter@8.6.14": - resolution: - { - integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==, - } + '@storybook/instrumenter@8.6.14': + resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/instrumenter@8.6.15": - resolution: - { - integrity: sha512-TvHR/+yyIAOp/1bLulFai2kkhIBtAlBw7J6Jd9DKyInoGhTWNE1G1Y61jD5GWXX29AlwaHfzGUaX5NL1K+FJpg==, - } + '@storybook/instrumenter@8.6.15': + resolution: {integrity: sha512-TvHR/+yyIAOp/1bLulFai2kkhIBtAlBw7J6Jd9DKyInoGhTWNE1G1Y61jD5GWXX29AlwaHfzGUaX5NL1K+FJpg==} peerDependencies: storybook: ^8.6.15 - "@storybook/manager-api@8.6.14": - resolution: - { - integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==, - } + '@storybook/manager-api@8.6.14': + resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/manager-api@8.6.18": - resolution: - { - integrity: sha512-BjIp12gEMgzFkEsgKpDIbZdnSWTZpm2dlws8WiPJCpgJtG+HWSxZ0/Ms30Au9yfwzQEKRSbV/5zpsKMGc2SIJw==, - } + '@storybook/manager-api@8.6.18': + resolution: {integrity: sha512-BjIp12gEMgzFkEsgKpDIbZdnSWTZpm2dlws8WiPJCpgJtG+HWSxZ0/Ms30Au9yfwzQEKRSbV/5zpsKMGc2SIJw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/preview-api@8.6.18": - resolution: - { - integrity: sha512-joXRXh3GdVvzhbfIgmix1xs90p8Q/nja7AhEAC2egn5Pl7SKsIYZUCYI6UdrQANb2myg9P552LKXfPect8llKg==, - } + '@storybook/preview-api@8.6.18': + resolution: {integrity: sha512-joXRXh3GdVvzhbfIgmix1xs90p8Q/nja7AhEAC2egn5Pl7SKsIYZUCYI6UdrQANb2myg9P552LKXfPect8llKg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/react-dom-shim@8.6.14": - resolution: - { - integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==, - } + '@storybook/react-dom-shim@8.6.14': + resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.14 - "@storybook/react-dom-shim@8.6.18": - resolution: - { - integrity: sha512-N4xULcAWZQTUv4jy1/d346Tyb4gufuC3UaLCuU/iVSZ1brYF4OW3ANr+096btbMxY8pR/65lmtoqr5CTGwnBvA==, - } + '@storybook/react-dom-shim@8.6.18': + resolution: {integrity: sha512-N4xULcAWZQTUv4jy1/d346Tyb4gufuC3UaLCuU/iVSZ1brYF4OW3ANr+096btbMxY8pR/65lmtoqr5CTGwnBvA==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.18 - "@storybook/react-vite@8.6.18": - resolution: - { - integrity: sha512-qpSYyH2IizlEsI95MJTdIL6xpLSgiNCMoJpHu+IEqLnyvmecRR/YEZvcHalgdtawuXlimH0bAYuwIu3l8Vo6FQ==, - } - engines: { node: ">=18.0.0" } + '@storybook/react-vite@8.6.18': + resolution: {integrity: sha512-qpSYyH2IizlEsI95MJTdIL6xpLSgiNCMoJpHu+IEqLnyvmecRR/YEZvcHalgdtawuXlimH0bAYuwIu3l8Vo6FQ==} + engines: {node: '>=18.0.0'} peerDependencies: - "@storybook/test": 8.6.18 + '@storybook/test': 8.6.18 react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.18 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: - "@storybook/test": + '@storybook/test': optional: true - "@storybook/react@8.6.18": - resolution: - { - integrity: sha512-BuLpzMkKtF+UCQCbi+lYVX9cdcAMG86Lu2dDn7UFkPi5HRNFq/zHPSvlz1XDgL0OYMtcqB1aoVzFzcyzUBhhjw==, - } - engines: { node: ">=18.0.0" } + '@storybook/react@8.6.18': + resolution: {integrity: sha512-BuLpzMkKtF+UCQCbi+lYVX9cdcAMG86Lu2dDn7UFkPi5HRNFq/zHPSvlz1XDgL0OYMtcqB1aoVzFzcyzUBhhjw==} + engines: {node: '>=18.0.0'} peerDependencies: - "@storybook/test": 8.6.18 + '@storybook/test': 8.6.18 react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.18 - typescript: ">= 4.2.x" + typescript: '>= 4.2.x' peerDependenciesMeta: - "@storybook/test": + '@storybook/test': optional: true typescript: optional: true - "@storybook/test@8.6.14": - resolution: - { - integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==, - } + '@storybook/test@8.6.14': + resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} peerDependencies: storybook: ^8.6.14 - "@storybook/test@8.6.15": - resolution: - { - integrity: sha512-EwquDRUDVvWcZds3T2abmB5wSN/Vattal4YtZ6fpBlIUqONV4o/cOBX39cFfQSUCBrIXIjQ6RmapQCHK/PvBYw==, - } + '@storybook/test@8.6.15': + resolution: {integrity: sha512-EwquDRUDVvWcZds3T2abmB5wSN/Vattal4YtZ6fpBlIUqONV4o/cOBX39cFfQSUCBrIXIjQ6RmapQCHK/PvBYw==} peerDependencies: storybook: ^8.6.15 - "@storybook/theming@8.6.14": - resolution: - { - integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==, - } + '@storybook/theming@8.6.14': + resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/theming@8.6.18": - resolution: - { - integrity: sha512-n6OEjEtHupa2PdTwWzRepr7cO8NkDd4rgF6BKLitRbujOspLxzMBEqdphs+QLcuiCIgf33SqmEA64QWnbSMhPw==, - } + '@storybook/theming@8.6.18': + resolution: {integrity: sha512-n6OEjEtHupa2PdTwWzRepr7cO8NkDd4rgF6BKLitRbujOspLxzMBEqdphs+QLcuiCIgf33SqmEA64QWnbSMhPw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@swc/counter@0.1.3": - resolution: - { - integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, - } + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - "@swc/helpers@0.5.15": - resolution: - { - integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, - } + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - "@tabby_ai/hijri-converter@1.0.5": - resolution: - { - integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==, - } - engines: { node: ">=16.0.0" } + '@tabby_ai/hijri-converter@1.0.5': + resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==} + engines: {node: '>=16.0.0'} - "@tailwindcss/node@4.2.2": - resolution: - { - integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==, - } + '@tailwindcss/node@4.2.2': + resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} - "@tailwindcss/oxide-android-arm64@4.2.2": - resolution: - { - integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-android-arm64@4.2.2': + resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + engines: {node: '>= 20'} cpu: [arm64] os: [android] - "@tailwindcss/oxide-darwin-arm64@4.2.2": - resolution: - { - integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-arm64@4.2.2': + resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} + engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - "@tailwindcss/oxide-darwin-x64@4.2.2": - resolution: - { - integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-x64@4.2.2': + resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + engines: {node: '>= 20'} cpu: [x64] os: [darwin] - "@tailwindcss/oxide-freebsd-x64@4.2.2": - resolution: - { - integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-freebsd-x64@4.2.2': + resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2": - resolution: - { - integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + engines: {node: '>= 20'} cpu: [arm] os: [linux] - "@tailwindcss/oxide-linux-arm64-gnu@4.2.2": - resolution: - { - integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - "@tailwindcss/oxide-linux-arm64-musl@4.2.2": - resolution: - { - integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - "@tailwindcss/oxide-linux-x64-gnu@4.2.2": - resolution: - { - integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - "@tailwindcss/oxide-linux-x64-musl@4.2.2": - resolution: - { - integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - "@tailwindcss/oxide-wasm32-wasi@4.2.2": - resolution: - { - integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==, - } - engines: { node: ">=14.0.0" } + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: - - "@napi-rs/wasm-runtime" - - "@emnapi/core" - - "@emnapi/runtime" - - "@tybys/wasm-util" - - "@emnapi/wasi-threads" + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' - tslib - "@tailwindcss/oxide-win32-arm64-msvc@4.2.2": - resolution: - { - integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [win32] - "@tailwindcss/oxide-win32-x64-msvc@4.2.2": - resolution: - { - integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + engines: {node: '>= 20'} cpu: [x64] os: [win32] - "@tailwindcss/oxide@4.2.2": - resolution: - { - integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide@4.2.2': + resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + engines: {node: '>= 20'} - "@tailwindcss/vite@4.2.2": - resolution: - { - integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==, - } + '@tailwindcss/vite@4.2.2': + resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - "@tanstack/query-core@5.95.2": - resolution: - { - integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==, - } + '@tanstack/query-core@5.95.2': + resolution: {integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==} - "@tanstack/query-devtools@5.95.2": - resolution: - { - integrity: sha512-QfaoqBn9uAZ+ICkA8brd1EHj+qBF6glCFgt94U8XP5BT6ppSsDBI8IJ00BU+cAGjQzp6wcKJL2EmRYvxy0TWIg==, - } + '@tanstack/query-devtools@5.95.2': + resolution: {integrity: sha512-QfaoqBn9uAZ+ICkA8brd1EHj+qBF6glCFgt94U8XP5BT6ppSsDBI8IJ00BU+cAGjQzp6wcKJL2EmRYvxy0TWIg==} - "@tanstack/react-query-devtools@5.95.2": - resolution: - { - integrity: sha512-AFQFmbznVkbtfpx8VJ2DylW17wWagQel/qLstVLkYmNRo2CmJt3SNej5hvl6EnEeljJIdC3BTB+W7HZtpsH+3g==, - } + '@tanstack/react-query-devtools@5.95.2': + resolution: {integrity: sha512-AFQFmbznVkbtfpx8VJ2DylW17wWagQel/qLstVLkYmNRo2CmJt3SNej5hvl6EnEeljJIdC3BTB+W7HZtpsH+3g==} peerDependencies: - "@tanstack/react-query": ^5.95.2 + '@tanstack/react-query': ^5.95.2 react: ^19.2.1 - "@tanstack/react-query@5.95.2": - resolution: - { - integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==, - } + '@tanstack/react-query@5.95.2': + resolution: {integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==} peerDependencies: react: ^19.2.1 - "@tanstack/react-table@8.21.3": - resolution: - { - integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==, - } - engines: { node: ">=12" } + '@tanstack/react-table@8.21.3': + resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} + engines: {node: '>=12'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@tanstack/table-core@8.21.3": - resolution: - { - integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==, - } - engines: { node: ">=12" } + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} + engines: {node: '>=12'} - "@testing-library/dom@10.4.0": - resolution: - { - integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==, - } - engines: { node: ">=18" } + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} - "@testing-library/jest-dom@6.5.0": - resolution: - { - integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==, - } - engines: { node: ">=14", npm: ">=6", yarn: ">=1" } + '@testing-library/jest-dom@6.5.0': + resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - "@testing-library/user-event@14.5.2": - resolution: - { - integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==, - } - engines: { node: ">=12", npm: ">=6" } + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} peerDependencies: - "@testing-library/dom": ">=7.21.4" + '@testing-library/dom': '>=7.21.4' - "@tinymce/tinymce-react@5.1.1": - resolution: - { - integrity: sha512-DQ0wpvnf/9z8RsOEAmrWZ1DN1PKqcQHfU+DpM3llLze7FHmxVtzuN8O+FYh0oAAF4stzAXwiCIVacfqjMwRieQ==, - } + '@tinymce/tinymce-react@5.1.1': + resolution: {integrity: sha512-DQ0wpvnf/9z8RsOEAmrWZ1DN1PKqcQHfU+DpM3llLze7FHmxVtzuN8O+FYh0oAAF4stzAXwiCIVacfqjMwRieQ==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@tybys/wasm-util@0.10.1": - resolution: - { - integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==, - } + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - "@types/aria-query@5.0.4": - resolution: - { - integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==, - } + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - "@types/babel__core@7.20.5": - resolution: - { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, - } + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - "@types/babel__generator@7.27.0": - resolution: - { - integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, - } + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - "@types/babel__template@7.4.4": - resolution: - { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, - } + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - "@types/babel__traverse@7.28.0": - resolution: - { - integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==, - } + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - "@types/d3-array@3.2.2": - resolution: - { - integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==, - } + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - "@types/d3-color@3.1.3": - resolution: - { - integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==, - } + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - "@types/d3-ease@3.0.2": - resolution: - { - integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==, - } + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - "@types/d3-interpolate@3.0.4": - resolution: - { - integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==, - } + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - "@types/d3-path@3.1.1": - resolution: - { - integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==, - } + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - "@types/d3-scale@4.0.9": - resolution: - { - integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==, - } + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - "@types/d3-shape@3.1.8": - resolution: - { - integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==, - } + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} - "@types/d3-time@3.0.4": - resolution: - { - integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==, - } + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - "@types/d3-timer@3.0.2": - resolution: - { - integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==, - } + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - "@types/doctrine@0.0.9": - resolution: - { - integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==, - } + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - "@types/eslint-scope@3.7.7": - resolution: - { - integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, - } + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - "@types/eslint@9.6.1": - resolution: - { - integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==, - } + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - "@types/estree@1.0.8": - resolution: - { - integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, - } + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - "@types/hammerjs@2.0.46": - resolution: - { - integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==, - } + '@types/hammerjs@2.0.46': + resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} - "@types/js-cookie@3.0.6": - resolution: - { - integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==, - } + '@types/js-cookie@3.0.6': + resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} - "@types/json-schema@7.0.15": - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - "@types/json5@0.0.29": - resolution: - { - integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, - } + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - "@types/mdx@2.0.13": - resolution: - { - integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==, - } + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - "@types/node@20.19.37": - resolution: - { - integrity: sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==, - } + '@types/node@20.19.37': + resolution: {integrity: sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==} - "@types/node@22.19.15": - resolution: - { - integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==, - } + '@types/node@22.19.15': + resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} - "@types/react-dom@19.2.3": - resolution: - { - integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, - } + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 - "@types/react@19.2.14": - resolution: - { - integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==, - } + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} - "@types/resolve@1.20.6": - resolution: - { - integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==, - } + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - "@types/uuid@9.0.8": - resolution: - { - integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==, - } + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - "@types/webpack@5.28.5": - resolution: - { - integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==, - } + '@types/webpack@5.28.5': + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} - "@types/xlsx@0.0.36": - resolution: - { - integrity: sha512-mvfrKiKKMErQzLMF8ElYEH21qxWCZtN59pHhWGmWCWFJStYdMWjkDSAy6mGowFxHXaXZWe5/TW7pBUiWclIVOw==, - } + '@types/xlsx@0.0.36': + resolution: {integrity: sha512-mvfrKiKKMErQzLMF8ElYEH21qxWCZtN59pHhWGmWCWFJStYdMWjkDSAy6mGowFxHXaXZWe5/TW7pBUiWclIVOw==} deprecated: This is a stub types definition for xlsx (https://github.com/sheetjs/js-xlsx). xlsx provides its own type definitions, so you don't need @types/xlsx installed! - "@typescript-eslint/eslint-plugin@8.57.2": - resolution: - { - integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/eslint-plugin@8.57.2': + resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - "@typescript-eslint/parser": ^8.57.2 + '@typescript-eslint/parser': ^8.57.2 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/parser@8.57.2": - resolution: - { - integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/parser@8.57.2': + resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/project-service@8.57.2": - resolution: - { - integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/project-service@8.57.2': + resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/scope-manager@8.57.2": - resolution: - { - integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/scope-manager@8.57.2': + resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@typescript-eslint/tsconfig-utils@8.57.2": - resolution: - { - integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/tsconfig-utils@8.57.2': + resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/type-utils@8.57.2": - resolution: - { - integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/type-utils@8.57.2': + resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/types@8.57.2": - resolution: - { - integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/types@8.57.2': + resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@typescript-eslint/typescript-estree@8.57.2": - resolution: - { - integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/typescript-estree@8.57.2': + resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/utils@8.57.2": - resolution: - { - integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/utils@8.57.2': + resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/visitor-keys@8.57.2": - resolution: - { - integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/visitor-keys@8.57.2': + resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@unrs/resolver-binding-android-arm-eabi@1.11.1": - resolution: - { - integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==, - } + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] os: [android] - "@unrs/resolver-binding-android-arm64@1.11.1": - resolution: - { - integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==, - } + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} cpu: [arm64] os: [android] - "@unrs/resolver-binding-darwin-arm64@1.11.1": - resolution: - { - integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==, - } + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} cpu: [arm64] os: [darwin] - "@unrs/resolver-binding-darwin-x64@1.11.1": - resolution: - { - integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==, - } + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} cpu: [x64] os: [darwin] - "@unrs/resolver-binding-freebsd-x64@1.11.1": - resolution: - { - integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==, - } + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] os: [freebsd] - "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": - resolution: - { - integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==, - } + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} cpu: [arm] os: [linux] - "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": - resolution: - { - integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==, - } + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] - "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": - resolution: - { - integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==, - } + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] - "@unrs/resolver-binding-linux-arm64-musl@1.11.1": - resolution: - { - integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==, - } + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] - "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": - resolution: - { - integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==, - } + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] - "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": - resolution: - { - integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==, - } + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] - "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": - resolution: - { - integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==, - } + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] - "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": - resolution: - { - integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==, - } + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] - "@unrs/resolver-binding-linux-x64-gnu@1.11.1": - resolution: - { - integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==, - } + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] - "@unrs/resolver-binding-linux-x64-musl@1.11.1": - resolution: - { - integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==, - } + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] - "@unrs/resolver-binding-wasm32-wasi@1.11.1": - resolution: - { - integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==, - } - engines: { node: ">=14.0.0" } + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} cpu: [wasm32] - "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": - resolution: - { - integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==, - } + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} cpu: [arm64] os: [win32] - "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": - resolution: - { - integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==, - } + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} cpu: [ia32] os: [win32] - "@unrs/resolver-binding-win32-x64-msvc@1.11.1": - resolution: - { - integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==, - } + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} cpu: [x64] os: [win32] - "@vitejs/plugin-react@4.7.0": - resolution: - { - integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - "@vitest/expect@2.0.5": - resolution: - { - integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==, - } + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - "@vitest/pretty-format@2.0.5": - resolution: - { - integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==, - } + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - "@vitest/pretty-format@2.1.9": - resolution: - { - integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==, - } + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - "@vitest/spy@2.0.5": - resolution: - { - integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==, - } + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - "@vitest/utils@2.0.5": - resolution: - { - integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==, - } + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - "@vitest/utils@2.1.9": - resolution: - { - integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==, - } + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - "@vue/compiler-core@3.5.30": - resolution: - { - integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==, - } + '@vue/compiler-core@3.5.30': + resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==} - "@vue/compiler-dom@3.5.30": - resolution: - { - integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==, - } + '@vue/compiler-dom@3.5.30': + resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==} - "@vue/compiler-sfc@3.5.30": - resolution: - { - integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==, - } + '@vue/compiler-sfc@3.5.30': + resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==} - "@vue/compiler-ssr@3.5.30": - resolution: - { - integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==, - } + '@vue/compiler-ssr@3.5.30': + resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==} - "@vue/shared@3.5.30": - resolution: - { - integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==, - } + '@vue/shared@3.5.30': + resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==} - "@webassemblyjs/ast@1.14.1": - resolution: - { - integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==, - } + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - "@webassemblyjs/floating-point-hex-parser@1.13.2": - resolution: - { - integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==, - } + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - "@webassemblyjs/helper-api-error@1.13.2": - resolution: - { - integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==, - } + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - "@webassemblyjs/helper-buffer@1.14.1": - resolution: - { - integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==, - } + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - "@webassemblyjs/helper-numbers@1.13.2": - resolution: - { - integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==, - } + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - "@webassemblyjs/helper-wasm-bytecode@1.13.2": - resolution: - { - integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==, - } + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - "@webassemblyjs/helper-wasm-section@1.14.1": - resolution: - { - integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==, - } + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - "@webassemblyjs/ieee754@1.13.2": - resolution: - { - integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==, - } + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - "@webassemblyjs/leb128@1.13.2": - resolution: - { - integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==, - } + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - "@webassemblyjs/utf8@1.13.2": - resolution: - { - integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==, - } + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - "@webassemblyjs/wasm-edit@1.14.1": - resolution: - { - integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==, - } + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - "@webassemblyjs/wasm-gen@1.14.1": - resolution: - { - integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==, - } + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - "@webassemblyjs/wasm-opt@1.14.1": - resolution: - { - integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==, - } + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - "@webassemblyjs/wasm-parser@1.14.1": - resolution: - { - integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==, - } + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - "@webassemblyjs/wast-printer@1.14.1": - resolution: - { - integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==, - } + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - "@xlsx/xlsx-populate@0.0.8": - resolution: - { - integrity: sha512-6yu24ePaO3cnAuti77FhVPZvKkzUt6s6x3zJ9wiuBSjR0ImWu7l/SgePelZaf8Oty4SP4rg4vznQVCGQtfzu2A==, - } - engines: { node: ">=16" } + '@xlsx/xlsx-populate@0.0.8': + resolution: {integrity: sha512-6yu24ePaO3cnAuti77FhVPZvKkzUt6s6x3zJ9wiuBSjR0ImWu7l/SgePelZaf8Oty4SP4rg4vznQVCGQtfzu2A==} + engines: {node: '>=16'} - "@xtuc/ieee754@1.2.0": - resolution: - { - integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, - } + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - "@xtuc/long@4.2.2": - resolution: - { - integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, - } + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} acorn-import-phases@1.0.4: - resolution: - { - integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} peerDependencies: acorn: ^8.14.0 acorn-jsx@5.3.2: - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.16.0: - resolution: - { - integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} hasBin: true adler-32@1.3.1: - resolution: - { - integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} ajv-formats@2.1.1: - resolution: - { - integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, - } + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -5515,1321 +4294,763 @@ packages: optional: true ajv-keywords@5.1.0: - resolution: - { - integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==, - } + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 ajv@6.14.0: - resolution: - { - integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==, - } + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} ajv@8.18.0: - resolution: - { - integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==, - } + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} ansi-escapes@7.3.0: - resolution: - { - integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} ansi-regex@6.2.2: - resolution: - { - integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} ansi-styles@5.2.0: - resolution: - { - integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} ansi-styles@6.2.3: - resolution: - { - integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} any-promise@1.3.0: - resolution: - { - integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, - } + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} arg@5.0.2: - resolution: - { - integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, - } + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} aria-hidden@1.2.6: - resolution: - { - integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} aria-query@5.3.0: - resolution: - { - integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, - } + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} aria-query@5.3.2: - resolution: - { - integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-buffer-byte-length@1.0.2: - resolution: - { - integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} array-includes@3.1.9: - resolution: - { - integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} array.prototype.findlast@1.2.5: - resolution: - { - integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} array.prototype.findlastindex@1.2.6: - resolution: - { - integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} array.prototype.flat@1.3.3: - resolution: - { - integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} array.prototype.flatmap@1.3.3: - resolution: - { - integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} array.prototype.tosorted@1.1.4: - resolution: - { - integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} arraybuffer.prototype.slice@1.0.4: - resolution: - { - integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} assertion-error@2.0.1: - resolution: - { - integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} ast-module-types@6.0.1: - resolution: - { - integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} + engines: {node: '>=18'} ast-types-flow@0.0.8: - resolution: - { - integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, - } + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} ast-types@0.16.1: - resolution: - { - integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} async-function@1.0.0: - resolution: - { - integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} async-wave@1.8.6: - resolution: - { - integrity: sha512-wqWvr0Mrc1TrY92hN9MV0Xebxa6kt+T7QtjZ7FEMv+RUBa/Hfpz/UOgz0rB+7uqVK8TuBSXykOyU/k9gogdLkw==, - } + resolution: {integrity: sha512-wqWvr0Mrc1TrY92hN9MV0Xebxa6kt+T7QtjZ7FEMv+RUBa/Hfpz/UOgz0rB+7uqVK8TuBSXykOyU/k9gogdLkw==} asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, - } + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} attr-accept@2.2.5: - resolution: - { - integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} + engines: {node: '>=4'} autoprefixer@10.4.27: - resolution: - { - integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} axe-core@4.11.1: - resolution: - { - integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} + engines: {node: '>=4'} axios@1.8.1: - resolution: - { - integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==, - } + resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} axobject-query@4.1.0: - resolution: - { - integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} balanced-match@4.0.4: - resolution: - { - integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} base64-arraybuffer@1.0.2: - resolution: - { - integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==, - } - engines: { node: ">= 0.6.0" } + resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} + engines: {node: '>= 0.6.0'} baseline-browser-mapping@2.10.10: - resolution: - { - integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==} + engines: {node: '>=6.0.0'} hasBin: true better-opn@3.0.2: - resolution: - { - integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} binary-extensions@2.3.0: - resolution: - { - integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} brace-expansion@1.1.12: - resolution: - { - integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==, - } + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} brace-expansion@2.0.2: - resolution: - { - integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==, - } + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} brace-expansion@5.0.5: - resolution: - { - integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: - resolution: - { - integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} browser-assert@1.2.1: - resolution: - { - integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==, - } + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} browserslist@4.28.1: - resolution: - { - integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} bundle-require@5.1.0: - resolution: - { - integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: ">=0.18" + esbuild: '>=0.18' busboy@1.6.0: - resolution: - { - integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, - } - engines: { node: ">=10.16.0" } + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} call-bind-apply-helpers@1.0.2: - resolution: - { - integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} call-bind@1.0.8: - resolution: - { - integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} call-bound@1.0.4: - resolution: - { - integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} camelcase-css@2.0.1: - resolution: - { - integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} caniuse-lite@1.0.30001781: - resolution: - { - integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==, - } + resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} cfb@1.2.2: - resolution: - { - integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} chai@5.3.3: - resolution: - { - integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chalk@3.0.0: - resolution: - { - integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} chart.js@4.5.1: - resolution: - { - integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==, - } - engines: { pnpm: ">=8" } + resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} + engines: {pnpm: '>=8'} chartjs-plugin-zoom@2.2.0: - resolution: - { - integrity: sha512-in6kcdiTlP6npIVLMd4zXZ08PDUXC52gZ4FAy5oyjk1zX3gKarXMAof7B9eFiisf9WOC3bh2saHg+J5WtLXZeA==, - } + resolution: {integrity: sha512-in6kcdiTlP6npIVLMd4zXZ08PDUXC52gZ4FAy5oyjk1zX3gKarXMAof7B9eFiisf9WOC3bh2saHg+J5WtLXZeA==} peerDependencies: - chart.js: ">=3.2.0" + chart.js: '>=3.2.0' check-error@2.1.3: - resolution: - { - integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==, - } - engines: { node: ">= 16" } + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} chokidar@3.6.0: - resolution: - { - integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, - } - engines: { node: ">= 8.10.0" } + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} chokidar@4.0.3: - resolution: - { - integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, - } - engines: { node: ">= 14.16.0" } + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} chrome-trace-event@1.0.4: - resolution: - { - integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} class-variance-authority@0.7.1: - resolution: - { - integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, - } + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} cli-cursor@5.0.0: - resolution: - { - integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} cli-truncate@5.2.0: - resolution: - { - integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} client-only@0.0.1: - resolution: - { - integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, - } + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} cliui@6.0.0: - resolution: - { - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, - } + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} cliui@8.0.1: - resolution: - { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} cliui@9.0.1: - resolution: - { - integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} clsx@2.1.1: - resolution: - { - integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} codepage@1.15.0: - resolution: - { - integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} colorette@2.0.20: - resolution: - { - integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, - } + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} combine-errors@3.0.3: - resolution: - { - integrity: sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q==, - } + resolution: {integrity: sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q==} combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} commander@12.1.0: - resolution: - { - integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} commander@14.0.3: - resolution: - { - integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, - } + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} commander@4.1.1: - resolution: - { - integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} consola@3.4.2: - resolution: - { - integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==, - } - engines: { node: ^14.18.0 || >=16.10.0 } + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} core-util-is@1.0.3: - resolution: - { - integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, - } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} cosmiconfig@9.0.1: - resolution: - { - integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} peerDependencies: - typescript: ">=4.9.5" + typescript: '>=4.9.5' peerDependenciesMeta: typescript: optional: true crc-32@1.2.2: - resolution: - { - integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} hasBin: true cross-spawn@7.0.6: - resolution: - { - integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} css-line-break@2.1.0: - resolution: - { - integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==, - } + resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} css.escape@1.5.1: - resolution: - { - integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, - } + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} csscolorparser@1.0.3: - resolution: - { - integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==, - } + resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true csstype@3.2.3: - resolution: - { - integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, - } + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} custom-error-instance@2.1.1: - resolution: - { - integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==, - } + resolution: {integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==} d3-array@3.2.4: - resolution: - { - integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} d3-color@3.1.0: - resolution: - { - integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} d3-ease@3.0.1: - resolution: - { - integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} d3-format@3.1.2: - resolution: - { - integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} d3-interpolate@3.0.1: - resolution: - { - integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} d3-path@3.1.0: - resolution: - { - integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} d3-scale@4.0.2: - resolution: - { - integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} d3-shape@3.2.0: - resolution: - { - integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} d3-time-format@4.1.0: - resolution: - { - integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} d3-time@3.1.0: - resolution: - { - integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} d3-timer@3.0.1: - resolution: - { - integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} damerau-levenshtein@1.0.8: - resolution: - { - integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, - } + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} data-view-buffer@1.0.2: - resolution: - { - integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} data-view-byte-length@1.0.2: - resolution: - { - integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} data-view-byte-offset@1.0.1: - resolution: - { - integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} date-fns-jalali@4.1.0-0: - resolution: - { - integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==, - } + resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==} date-fns@3.6.0: - resolution: - { - integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==, - } + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} date-fns@4.1.0: - resolution: - { - integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==, - } + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} dayjs@1.11.20: - resolution: - { - integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==, - } + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} debug@3.2.7: - resolution: - { - integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, - } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true debug@4.4.3: - resolution: - { - integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true decamelize@1.2.0: - resolution: - { - integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} decimal.js-light@2.5.1: - resolution: - { - integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==, - } + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} deep-eql@5.0.2: - resolution: - { - integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} define-lazy-prop@2.0.0: - resolution: - { - integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} dequal@2.0.3: - resolution: - { - integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} detect-libc@2.1.2: - resolution: - { - integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} detect-node-es@1.1.0: - resolution: - { - integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, - } + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} detective-amd@6.0.1: - resolution: - { - integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} + engines: {node: '>=18'} hasBin: true detective-cjs@6.1.0: - resolution: - { - integrity: sha512-Qt3S4IddVNDb+71lm+jmt5NznIsgcKlibTnrw9Zr91rT9vRwKp+73+ImqLTNrQj4YuOxnzrC7GwIAVwF7136XQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Qt3S4IddVNDb+71lm+jmt5NznIsgcKlibTnrw9Zr91rT9vRwKp+73+ImqLTNrQj4YuOxnzrC7GwIAVwF7136XQ==} + engines: {node: '>=18'} detective-es6@5.0.1: - resolution: - { - integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} + engines: {node: '>=18'} detective-postcss@7.0.1: - resolution: - { - integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==, - } - engines: { node: ^14.0.0 || >=16.0.0 } + resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} + engines: {node: ^14.0.0 || >=16.0.0} peerDependencies: postcss: ^8.4.47 detective-sass@6.0.1: - resolution: - { - integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} + engines: {node: '>=18'} detective-scss@5.0.1: - resolution: - { - integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} + engines: {node: '>=18'} detective-stylus@5.0.1: - resolution: - { - integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} + engines: {node: '>=18'} detective-typescript@14.0.0: - resolution: - { - integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} + engines: {node: '>=18'} peerDependencies: typescript: ^5.4.4 detective-vue2@2.2.0: - resolution: - { - integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} + engines: {node: '>=18'} peerDependencies: typescript: ^5.4.4 didyoumean@1.2.2: - resolution: - { - integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, - } + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dijkstrajs@1.0.3: - resolution: - { - integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==, - } + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} dlv@1.1.3: - resolution: - { - integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, - } + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dnd-core@16.0.1: - resolution: - { - integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==, - } + resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} dnd-multi-backend@8.1.2: - resolution: - { - integrity: sha512-KPDVEsiM+6gNEegqZYTWJQgJxYV4vB91tUrvoKJjaS0wwWqT/jNU0P7xJAwCue/cbasJNvk2dFZH7tC+bjX1Rg==, - } + resolution: {integrity: sha512-KPDVEsiM+6gNEegqZYTWJQgJxYV4vB91tUrvoKJjaS0wwWqT/jNU0P7xJAwCue/cbasJNvk2dFZH7tC+bjX1Rg==} peerDependencies: dnd-core: ^16.0.1 doctrine@2.1.0: - resolution: - { - integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dom-accessibility-api@0.5.16: - resolution: - { - integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, - } + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dom-accessibility-api@0.6.3: - resolution: - { - integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==, - } + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} dom-helpers@5.2.1: - resolution: - { - integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==, - } + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dunder-proto@1.0.1: - resolution: - { - integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} earcut@2.2.4: - resolution: - { - integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==, - } + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} eastasianwidth@0.2.0: - resolution: - { - integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, - } + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} effector@23.4.4: - resolution: - { - integrity: sha512-QkZboRN28K/iwxigDhlJcI3ux3aNbt8kYGGH/GkqWG0OlGeyuBhb7PdM89Iu+ogV8Lmz16xIlwnXR2UNWI6psg==, - } - engines: { node: ">=11.0.0" } + resolution: {integrity: sha512-QkZboRN28K/iwxigDhlJcI3ux3aNbt8kYGGH/GkqWG0OlGeyuBhb7PdM89Iu+ogV8Lmz16xIlwnXR2UNWI6psg==} + engines: {node: '>=11.0.0'} electron-to-chromium@1.5.323: - resolution: - { - integrity: sha512-oQm+FxbazvN2WICCbvJgj3IYPKV8awip57+W5VP+Aatk4kFU4pDYCPHZOX22Z27zpw8uttBehEqgK+VTJAYrVw==, - } + resolution: {integrity: sha512-oQm+FxbazvN2WICCbvJgj3IYPKV8awip57+W5VP+Aatk4kFU4pDYCPHZOX22Z27zpw8uttBehEqgK+VTJAYrVw==} embla-carousel-autoplay@8.6.0: - resolution: - { - integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==, - } + resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} peerDependencies: embla-carousel: 8.6.0 embla-carousel-react@8.6.0: - resolution: - { - integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==, - } + resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} peerDependencies: react: ^19.2.1 embla-carousel-reactive-utils@8.6.0: - resolution: - { - integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==, - } + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} peerDependencies: embla-carousel: 8.6.0 embla-carousel@8.6.0: - resolution: - { - integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==, - } + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} emoji-regex@10.6.0: - resolution: - { - integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, - } + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: - resolution: - { - integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, - } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} empathic@1.1.0: - resolution: - { - integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==} + engines: {node: '>=14'} enhanced-resolve@5.20.1: - resolution: - { - integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} entities@7.0.1: - resolution: - { - integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, - } - engines: { node: ">=0.12" } + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} env-paths@2.2.1: - resolution: - { - integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} environment@1.1.0: - resolution: - { - integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} error-ex@1.3.4: - resolution: - { - integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==, - } + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} es-abstract@1.24.1: - resolution: - { - integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} + engines: {node: '>= 0.4'} es-define-property@1.0.1: - resolution: - { - integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} es-iterator-helpers@1.3.1: - resolution: - { - integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==} + engines: {node: '>= 0.4'} es-module-lexer@2.0.0: - resolution: - { - integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==, - } + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} es-object-atoms@1.1.1: - resolution: - { - integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: - resolution: - { - integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} es-shim-unscopables@1.1.0: - resolution: - { - integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} es-to-primitive@1.3.0: - resolution: - { - integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} esbuild-register@3.6.0: - resolution: - { - integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==, - } + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: - esbuild: ">=0.12 <1" + esbuild: '>=0.12 <1' esbuild@0.21.5: - resolution: - { - integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} hasBin: true esbuild@0.24.2: - resolution: - { - integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} hasBin: true esbuild@0.25.12: - resolution: - { - integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} hasBin: true escalade@3.2.0: - resolution: - { - integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} escodegen@2.1.0: - resolution: - { - integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} hasBin: true eslint-config-next@15.3.8: - resolution: - { - integrity: sha512-s/imi0g/LQZsXif8RhlwhgryyqyMhEIMkUL0Yvj0l16ByEAqve4wodS8al+bt+utxf68fgfb1EXlOpuZKqOjlg==, - } + resolution: {integrity: sha512-s/imi0g/LQZsXif8RhlwhgryyqyMhEIMkUL0Yvj0l16ByEAqve4wodS8al+bt+utxf68fgfb1EXlOpuZKqOjlg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: ">=3.3.1" + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-next@15.4.0: + resolution: {integrity: sha512-OFkQ8br0wuZNRlXDyLpfaCwzW+qayzNaiHNcLHDMW874/1Nktb2+cCUMlItXdzDvNS/QY5jggKlYXEH2+vz1BA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' peerDependenciesMeta: typescript: optional: true eslint-import-resolver-node@0.3.9: - resolution: - { - integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, - } + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} eslint-import-resolver-typescript@3.10.1: - resolution: - { - integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - eslint-plugin-import-x: "*" + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' peerDependenciesMeta: eslint-plugin-import: optional: true @@ -6837,19 +5058,16 @@ packages: optional: true eslint-module-utils@2.12.1: - resolution: - { - integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" - eslint: "*" - eslint-import-resolver-node: "*" - eslint-import-resolver-typescript: "*" - eslint-import-resolver-webpack: "*" + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true eslint: optional: true @@ -6861,263 +5079,158 @@ packages: optional: true eslint-plugin-import@2.32.0: - resolution: - { - integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" + '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true eslint-plugin-jsx-a11y@6.10.2: - resolution: - { - integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint-plugin-react-hooks@5.2.0: - resolution: - { - integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint-plugin-react-refresh@0.4.26: - resolution: - { - integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==, - } + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} peerDependencies: - eslint: ">=8.40" + eslint: '>=8.40' eslint-plugin-react@7.37.5: - resolution: - { - integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-plugin-simple-import-sort@12.1.1: - resolution: - { - integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==, - } + resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} peerDependencies: - eslint: ">=5.0.0" + eslint: '>=5.0.0' eslint-plugin-storybook@0.11.6: - resolution: - { - integrity: sha512-3WodYD6Bs9ACqnB+TP2TuLh774c/nacAjxSKOP9bHJ2c8rf+nrhocxjjeAWNmO9IPkFIzTKlcl0vNXI2yYpVOw==, - } - engines: { node: ">= 18" } + resolution: {integrity: sha512-3WodYD6Bs9ACqnB+TP2TuLh774c/nacAjxSKOP9bHJ2c8rf+nrhocxjjeAWNmO9IPkFIzTKlcl0vNXI2yYpVOw==} + engines: {node: '>= 18'} peerDependencies: - eslint: ">=8" + eslint: '>=8' eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} eslint-scope@8.4.0: - resolution: - { - integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-visitor-keys@4.2.1: - resolution: - { - integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@5.0.1: - resolution: - { - integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint@9.39.4: - resolution: - { - integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: - jiti: "*" + jiti: '*' peerDependenciesMeta: jiti: optional: true espree@10.4.0: - resolution: - { - integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true esquery@1.7.0: - resolution: - { - integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, - } + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} eventemitter3@4.0.7: - resolution: - { - integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, - } + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.4: - resolution: - { - integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==, - } + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} events@3.3.0: - resolution: - { - integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, - } - engines: { node: ">=0.8.x" } + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-equals@5.4.0: - resolution: - { - integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} + engines: {node: '>=6.0.0'} fast-glob@3.3.1: - resolution: - { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, - } - engines: { node: ">=8.6.0" } + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} fast-glob@3.3.3: - resolution: - { - integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, - } - engines: { node: ">=8.6.0" } + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fast-uri@3.1.0: - resolution: - { - integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==, - } + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fastest-levenshtein@1.0.16: - resolution: - { - integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==, - } - engines: { node: ">= 4.9.1" } + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} fastq@1.20.1: - resolution: - { - integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==, - } + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fdir@6.5.0: - resolution: - { - integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -7125,110 +5238,68 @@ packages: optional: true file-entry-cache@8.0.0: - resolution: - { - integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, - } - engines: { node: ">=16.0.0" } + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-selector@2.1.2: - resolution: - { - integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==, - } - engines: { node: ">= 12" } + resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} + engines: {node: '>= 12'} fill-range@7.1.1: - resolution: - { - integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} flat-cache@4.0.1: - resolution: - { - integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.4.2: - resolution: - { - integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, - } + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} follow-redirects@1.15.11: - resolution: - { - integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} peerDependencies: - debug: "*" + debug: '*' peerDependenciesMeta: debug: optional: true for-each@0.3.5: - resolution: - { - integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} foreground-child@3.3.1: - resolution: - { - integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} form-data@4.0.5: - resolution: - { - integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} frac@1.1.2: - resolution: - { - integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} fraction.js@5.3.4: - resolution: - { - integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==, - } + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} framer-motion@11.18.2: - resolution: - { - integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==, - } + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} peerDependencies: - "@emotion/is-prop-valid": "*" + '@emotion/is-prop-valid': '*' react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@emotion/is-prop-valid": + '@emotion/is-prop-valid': optional: true react: optional: true @@ -7236,286 +5307,163 @@ packages: optional: true fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, - } + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} function.prototype.name@1.1.8: - resolution: - { - integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} generator-function@2.0.1: - resolution: - { - integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} geotiff@2.1.3: - resolution: - { - integrity: sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==, - } - engines: { node: ">=10.19" } + resolution: {integrity: sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==} + engines: {node: '>=10.19'} get-amd-module-type@6.0.1: - resolution: - { - integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} + engines: {node: '>=18'} get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} get-east-asian-width@1.5.0: - resolution: - { - integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} get-intrinsic@1.3.0: - resolution: - { - integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} get-nonce@1.0.1: - resolution: - { - integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} get-proto@1.0.1: - resolution: - { - integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} get-symbol-description@1.1.0: - resolution: - { - integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} get-tsconfig@4.13.7: - resolution: - { - integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==, - } + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} glob-to-regexp@0.4.1: - resolution: - { - integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, - } + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} glob@10.5.0: - resolution: - { - integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==, - } + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true globals@14.0.0: - resolution: - { - integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globals@15.15.0: - resolution: - { - integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} globalthis@1.0.4: - resolution: - { - integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} globby@14.1.0: - resolution: - { - integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} globrex@0.1.2: - resolution: - { - integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==, - } + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} gonzales-pe@4.3.0: - resolution: - { - integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==, - } - engines: { node: ">=0.6.0" } + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} hasBin: true goober@2.1.18: - resolution: - { - integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==, - } + resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} peerDependencies: csstype: ^3.0.10 gopd@1.2.0: - resolution: - { - integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} hammerjs@2.0.8: - resolution: - { - integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==} + engines: {node: '>=0.8.0'} has-bigints@1.1.0: - resolution: - { - integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, - } + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} has-proto@1.2.0: - resolution: - { - integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} has-symbols@1.1.0: - resolution: - { - integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} hasown@2.0.2: - resolution: - { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} hoist-non-react-statics@3.3.2: - resolution: - { - integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==, - } + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} html-parse-stringify@3.0.1: - resolution: - { - integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==, - } + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} html2canvas@1.4.1: - resolution: - { - integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} + engines: {node: '>=8.0.0'} husky@9.1.7: - resolution: - { - integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} hasBin: true i18next@25.10.9: - resolution: - { - integrity: sha512-hQY9/bFoQKGlSKMlaCuLR8w1h5JjieqrsnZvEmj1Ja6Ec7fbyc4cTrCsY9mb9Sd8YQ/swsrKz1S9M8AcvVI70w==, - } + resolution: {integrity: sha512-hQY9/bFoQKGlSKMlaCuLR8w1h5JjieqrsnZvEmj1Ja6Ec7fbyc4cTrCsY9mb9Sd8YQ/swsrKz1S9M8AcvVI70w==} peerDependencies: typescript: ^5 || ^6 peerDependenciesMeta: @@ -7523,1087 +5471,616 @@ packages: optional: true ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, - } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} ignore@5.3.2: - resolution: - { - integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} ignore@7.0.5: - resolution: - { - integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} immediate@3.0.6: - resolution: - { - integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, - } + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} immer@10.2.0: - resolution: - { - integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==, - } + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} import-fresh@3.3.1: - resolution: - { - integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} indent-string@4.0.0: - resolution: - { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} inherits@2.0.3: - resolution: - { - integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==, - } + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} internal-slot@1.1.0: - resolution: - { - integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} internmap@2.0.3: - resolution: - { - integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} is-arguments@1.2.0: - resolution: - { - integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} is-array-buffer@3.0.5: - resolution: - { - integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, - } + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-async-function@2.1.1: - resolution: - { - integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} is-bigint@1.1.0: - resolution: - { - integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} is-boolean-object@1.2.2: - resolution: - { - integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} is-bun-module@2.0.0: - resolution: - { - integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==, - } + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} is-core-module@2.16.1: - resolution: - { - integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} is-data-view@1.0.2: - resolution: - { - integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} is-date-object@1.1.0: - resolution: - { - integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} is-docker@2.2.1: - resolution: - { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-finalizationregistry@1.1.1: - resolution: - { - integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} is-fullwidth-code-point@5.1.0: - resolution: - { - integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} is-generator-function@1.1.2: - resolution: - { - integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-map@2.0.3: - resolution: - { - integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} is-negative-zero@2.0.3: - resolution: - { - integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} is-number-object@1.1.1: - resolution: - { - integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} is-promise@4.0.0: - resolution: - { - integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==, - } + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} is-regex@1.2.1: - resolution: - { - integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} is-set@2.0.3: - resolution: - { - integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} is-shared-array-buffer@1.0.4: - resolution: - { - integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} is-string@1.1.1: - resolution: - { - integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} is-symbol@1.1.1: - resolution: - { - integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} is-typed-array@1.1.15: - resolution: - { - integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} is-url-superb@4.0.0: - resolution: - { - integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} is-url@1.2.4: - resolution: - { - integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==, - } + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} is-weakmap@2.0.2: - resolution: - { - integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} is-weakref@1.1.1: - resolution: - { - integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} is-weakset@2.0.4: - resolution: - { - integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} is-wsl@2.2.0: - resolution: - { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} isarray@1.0.0: - resolution: - { - integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, - } + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} iterator.prototype@1.1.5: - resolution: - { - integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} jackspeak@3.4.3: - resolution: - { - integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, - } + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jest-worker@27.5.1: - resolution: - { - integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} jiti@1.21.7: - resolution: - { - integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==, - } + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true jiti@2.6.1: - resolution: - { - integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, - } + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true joycon@3.1.1: - resolution: - { - integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} js-base64@3.7.8: - resolution: - { - integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==, - } + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} js-cookie@3.0.5: - resolution: - { - integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} js-sha512@0.9.0: - resolution: - { - integrity: sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==, - } + resolution: {integrity: sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==} js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} js-yaml@4.1.1: - resolution: - { - integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==, - } + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsdoc-type-pratt-parser@4.8.0: - resolution: - { - integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} + engines: {node: '>=12.0.0'} jsesc@3.1.0: - resolution: - { - integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json-stringify-pretty-compact@2.0.0: - resolution: - { - integrity: sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==, - } + resolution: {integrity: sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==} json5@1.0.2: - resolution: - { - integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, - } + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true jsx-ast-utils@3.3.5: - resolution: - { - integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} jszip@3.10.1: - resolution: - { - integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==, - } + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} keyv@4.5.4: - resolution: - { - integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, - } + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} language-subtag-registry@0.3.23: - resolution: - { - integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==, - } + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} language-tags@1.0.9: - resolution: - { - integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} lerc@3.0.0: - resolution: - { - integrity: sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==, - } + resolution: {integrity: sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==} levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} libphonenumber-js@1.12.40: - resolution: - { - integrity: sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg==, - } + resolution: {integrity: sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg==} lie@3.3.0: - resolution: - { - integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==, - } + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} lightningcss-android-arm64@1.32.0: - resolution: - { - integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] lightningcss-darwin-arm64@1.32.0: - resolution: - { - integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.32.0: - resolution: - { - integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] lightningcss-freebsd-x64@1.32.0: - resolution: - { - integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: - { - integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] lightningcss-linux-arm64-gnu@1.32.0: - resolution: - { - integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] lightningcss-linux-arm64-musl@1.32.0: - resolution: - { - integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] lightningcss-linux-x64-gnu@1.32.0: - resolution: - { - integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] lightningcss-linux-x64-musl@1.32.0: - resolution: - { - integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] lightningcss-win32-arm64-msvc@1.32.0: - resolution: - { - integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] lightningcss-win32-x64-msvc@1.32.0: - resolution: - { - integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] lightningcss@1.32.0: - resolution: - { - integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} lilconfig@3.1.3: - resolution: - { - integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, - } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} lint-staged@16.4.0: - resolution: - { - integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==, - } - engines: { node: ">=20.17" } + resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==} + engines: {node: '>=20.17'} hasBin: true listr2@9.0.5: - resolution: - { - integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==, - } - engines: { node: ">=20.0.0" } + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} load-tsconfig@0.2.5: - resolution: - { - integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} loader-runner@4.3.1: - resolution: - { - integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==, - } - engines: { node: ">=6.11.5" } + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + engines: {node: '>=6.11.5'} locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} lodash-es@4.17.23: - resolution: - { - integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==, - } + resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} lodash._baseiteratee@4.7.0: - resolution: - { - integrity: sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==, - } + resolution: {integrity: sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==} lodash._basetostring@4.12.0: - resolution: - { - integrity: sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==, - } + resolution: {integrity: sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==} lodash._baseuniq@4.6.0: - resolution: - { - integrity: sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==, - } + resolution: {integrity: sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==} lodash._createset@4.0.3: - resolution: - { - integrity: sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==, - } + resolution: {integrity: sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==} lodash._root@3.0.1: - resolution: - { - integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==, - } + resolution: {integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==} lodash._stringtopath@4.8.0: - resolution: - { - integrity: sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==, - } + resolution: {integrity: sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==} lodash.add@3.7.0: - resolution: - { - integrity: sha512-/uxUZkB6vYiPoGSXADJJE+Ee4W2vU+bxZOFdvJdx+mDgv+qyAO76sWD84Q4FxsMgTjC1+gVFC9YNhdG243QRDw==, - } + resolution: {integrity: sha512-/uxUZkB6vYiPoGSXADJJE+Ee4W2vU+bxZOFdvJdx+mDgv+qyAO76sWD84Q4FxsMgTjC1+gVFC9YNhdG243QRDw==} lodash.clonedeep@4.5.0: - resolution: - { - integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==, - } + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} lodash.isequal@4.5.0: - resolution: - { - integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, - } + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.isfunction@3.0.9: - resolution: - { - integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==, - } + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.size@4.2.0: - resolution: - { - integrity: sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==, - } + resolution: {integrity: sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==} lodash.throttle@4.1.1: - resolution: - { - integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==, - } + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} lodash.uniqby@4.5.0: - resolution: - { - integrity: sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==, - } + resolution: {integrity: sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==} lodash@4.17.23: - resolution: - { - integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==, - } + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} log-update@6.1.0: - resolution: - { - integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, - } + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true loupe@3.2.1: - resolution: - { - integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==, - } + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lru-cache@10.4.3: - resolution: - { - integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, - } + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lucide-react@0.474.0: - resolution: - { - integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==, - } + resolution: {integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==} peerDependencies: react: ^19.2.1 lz-string@1.5.0: - resolution: - { - integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, - } + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true magic-string@0.27.0: - resolution: - { - integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} magic-string@0.30.21: - resolution: - { - integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, - } + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} map-or-similar@1.5.0: - resolution: - { - integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==, - } + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} mapbox-to-css-font@2.4.5: - resolution: - { - integrity: sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w==, - } + resolution: {integrity: sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w==} math-intrinsics@1.1.0: - resolution: - { - integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} memoizerific@1.11.3: - resolution: - { - integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==, - } + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} mgrs@1.0.0: - resolution: - { - integrity: sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==, - } + resolution: {integrity: sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==} micromatch@4.0.8: - resolution: - { - integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} mimic-function@5.0.1: - resolution: - { - integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} min-indent@1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} minimatch@10.2.4: - resolution: - { - integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.5: - resolution: - { - integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, - } + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimatch@9.0.9: - resolution: - { - integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==, - } - engines: { node: ">=16 || 14 >=14.17" } + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: - resolution: - { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, - } + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minipass@7.1.3: - resolution: - { - integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==, - } - engines: { node: ">=16 || 14 >=14.17" } + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} module-definition@6.0.1: - resolution: - { - integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} + engines: {node: '>=18'} hasBin: true moment@2.30.1: - resolution: - { - integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==, - } + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} motion-dom@11.18.1: - resolution: - { - integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==, - } + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} motion-utils@11.18.1: - resolution: - { - integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==, - } + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mz@2.7.0: - resolution: - { - integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, - } + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} nanoid@3.3.11: - resolution: - { - integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true napi-postinstall@0.3.4: - resolution: - { - integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==, - } - engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} neo-async@2.6.2: - resolution: - { - integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, - } + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} next-qrcode@2.5.1: - resolution: - { - integrity: sha512-ibiS1+p+myjurC1obVIgo7UCjFhxm0SNYTkikahQVmnyzlfREOdUCf2f77Vbz6W6q2zfx5Eww2/20vbgkLNdLw==, - } - engines: { node: ">=8", npm: ">=5" } + resolution: {integrity: sha512-ibiS1+p+myjurC1obVIgo7UCjFhxm0SNYTkikahQVmnyzlfREOdUCf2f77Vbz6W6q2zfx5Eww2/20vbgkLNdLw==} + engines: {node: '>=8', npm: '>=5'} peerDependencies: react: ^19.2.1 next-themes@0.4.6: - resolution: - { - integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==, - } + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 next@15.3.8: - resolution: - { - integrity: sha512-L+4c5Hlr84fuaNADZbB9+ceRX9/CzwxJ+obXIGHupboB/Q1OLbSUapFs4bO8hnS/E6zV/JDX7sG1QpKVR2bguA==, - } - engines: { node: ^18.18.0 || ^19.8.0 || >= 20.0.0 } + resolution: {integrity: sha512-L+4c5Hlr84fuaNADZbB9+ceRX9/CzwxJ+obXIGHupboB/Q1OLbSUapFs4bO8hnS/E6zV/JDX7sG1QpKVR2bguA==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: - "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.41.2 - babel-plugin-react-compiler: "*" + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' react: ^19.2.1 react-dom: ^19.2.1 sass: ^1.3.0 peerDependenciesMeta: - "@opentelemetry/api": + '@opentelemetry/api': optional: true - "@playwright/test": + '@playwright/test': optional: true babel-plugin-react-compiler: optional: true @@ -8611,367 +6088,211 @@ packages: optional: true node-exports-info@1.6.0: - resolution: - { - integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} node-releases@2.0.36: - resolution: - { - integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==, - } + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} node-source-walk@7.0.1: - resolution: - { - integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} + engines: {node: '>=18'} normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} object-hash@3.0.0: - resolution: - { - integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} object-inspect@1.13.4: - resolution: - { - integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} object.assign@4.1.7: - resolution: - { - integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} object.entries@1.1.9: - resolution: - { - integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} object.fromentries@2.0.8: - resolution: - { - integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} object.groupby@1.0.3: - resolution: - { - integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} object.values@1.2.1: - resolution: - { - integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} ol-ext@4.0.38: - resolution: - { - integrity: sha512-fJmMcUYV8tfNhaHTl93eV1esBo1L8QHdOjJsBzapomgpmXiW7PGv91i6tmvXU4mL2z0gFrupuzs8BMLGi6T0QQ==, - } + resolution: {integrity: sha512-fJmMcUYV8tfNhaHTl93eV1esBo1L8QHdOjJsBzapomgpmXiW7PGv91i6tmvXU4mL2z0gFrupuzs8BMLGi6T0QQ==} peerDependencies: - ol: ">= 5.3.0" + ol: '>= 5.3.0' ol-mapbox-style@10.7.0: - resolution: - { - integrity: sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==, - } + resolution: {integrity: sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==} ol@7.5.2: - resolution: - { - integrity: sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ==, - } + resolution: {integrity: sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ==} onetime@7.0.0: - resolution: - { - integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} open@8.4.2: - resolution: - { - integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} optionator@0.9.4: - resolution: - { - integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} own-keys@1.0.1: - resolution: - { - integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} package-json-from-dist@1.0.1: - resolution: - { - integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, - } + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} pako@1.0.11: - resolution: - { - integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, - } + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} pako@2.1.0: - resolution: - { - integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==, - } + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} parse-headers@2.0.6: - resolution: - { - integrity: sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==, - } + resolution: {integrity: sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==} parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} path-scurry@1.11.1: - resolution: - { - integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, - } - engines: { node: ">=16 || 14 >=14.18" } + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@6.0.0: - resolution: - { - integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} path@0.12.7: - resolution: - { - integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==, - } + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} pathval@2.0.1: - resolution: - { - integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==, - } - engines: { node: ">= 14.16" } + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} patronum@2.3.0: - resolution: - { - integrity: sha512-BfKIOpoymVz6XnkOn8Fi5QZ1a3r/3lXdd8BcdHmYDbIXPTIRnD1EPFBFev/DheWnOge6/ZswEqgNF2ANLGOxLw==, - } + resolution: {integrity: sha512-BfKIOpoymVz6XnkOn8Fi5QZ1a3r/3lXdd8BcdHmYDbIXPTIRnD1EPFBFev/DheWnOge6/ZswEqgNF2ANLGOxLw==} peerDependencies: effector: ^23 pbf@3.2.1: - resolution: - { - integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==, - } + resolution: {integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==} hasBin: true picocolors@1.1.1: - resolution: - { - integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, - } + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.2: - resolution: - { - integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} picomatch@4.0.4: - resolution: - { - integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} pify@2.3.0: - resolution: - { - integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} pirates@4.0.7: - resolution: - { - integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} pluralize@8.0.0: - resolution: - { - integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} pngjs@5.0.0: - resolution: - { - integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} polished@4.3.1: - resolution: - { - integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} possible-typed-array-names@1.1.0: - resolution: - { - integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} postcss-import@15.1.0: - resolution: - { - integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 postcss-js@4.1.0: - resolution: - { - integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==, - } - engines: { node: ^12 || ^14 || >= 16 } + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} + engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 postcss-load-config@6.0.1: - resolution: - { - integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==, - } - engines: { node: ">= 18" } + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} peerDependencies: - jiti: ">=1.21.0" - postcss: ">=8.0.9" + jiti: '>=1.21.0' + postcss: '>=8.0.9' tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: @@ -8985,111 +6306,81 @@ packages: optional: true postcss-nested@6.2.0: - resolution: - { - integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==, - } - engines: { node: ">=12.0" } + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 postcss-selector-parser@6.1.2: - resolution: - { - integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} postcss-value-parser@4.2.0: - resolution: - { - integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, - } + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} postcss-values-parser@6.0.2: - resolution: - { - integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} + engines: {node: '>=10'} peerDependencies: postcss: ^8.2.9 postcss@8.4.31: - resolution: - { - integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} postcss@8.5.8: - resolution: - { - integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} preact@10.12.1: - resolution: - { - integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==, - } + resolution: {integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==} precinct@12.2.0: - resolution: - { - integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} + engines: {node: '>=18'} hasBin: true prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} prettier-plugin-tailwindcss@0.6.14: - resolution: - { - integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==, - } - engines: { node: ">=14.21.3" } + resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} + engines: {node: '>=14.21.3'} peerDependencies: - "@ianvs/prettier-plugin-sort-imports": "*" - "@prettier/plugin-hermes": "*" - "@prettier/plugin-oxc": "*" - "@prettier/plugin-pug": "*" - "@shopify/prettier-plugin-liquid": "*" - "@trivago/prettier-plugin-sort-imports": "*" - "@zackad/prettier-plugin-twig": "*" + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' prettier: ^3.0 - prettier-plugin-astro: "*" - prettier-plugin-css-order: "*" - prettier-plugin-import-sort: "*" - prettier-plugin-jsdoc: "*" - prettier-plugin-marko: "*" - prettier-plugin-multiline-arrays: "*" - prettier-plugin-organize-attributes: "*" - prettier-plugin-organize-imports: "*" - prettier-plugin-sort-imports: "*" - prettier-plugin-style-order: "*" - prettier-plugin-svelte: "*" + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' peerDependenciesMeta: - "@ianvs/prettier-plugin-sort-imports": + '@ianvs/prettier-plugin-sort-imports': optional: true - "@prettier/plugin-hermes": + '@prettier/plugin-hermes': optional: true - "@prettier/plugin-oxc": + '@prettier/plugin-oxc': optional: true - "@prettier/plugin-pug": + '@prettier/plugin-pug': optional: true - "@shopify/prettier-plugin-liquid": + '@shopify/prettier-plugin-liquid': optional: true - "@trivago/prettier-plugin-sort-imports": + '@trivago/prettier-plugin-sort-imports': optional: true - "@zackad/prettier-plugin-twig": + '@zackad/prettier-plugin-twig': optional: true prettier-plugin-astro: optional: true @@ -9115,255 +6406,156 @@ packages: optional: true prettier@3.8.1: - resolution: - { - integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + engines: {node: '>=14'} hasBin: true pretty-format@27.5.1: - resolution: - { - integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==, - } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} prexit@2.3.0: - resolution: - { - integrity: sha512-mX+LIbtS0anKtl2PykYabxninwloblUQMRO6CubeSmjxb+kKlATuJoH9UeN8NLE4TgIEFWfBXw7V3GkWbBrSmg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mX+LIbtS0anKtl2PykYabxninwloblUQMRO6CubeSmjxb+kKlATuJoH9UeN8NLE4TgIEFWfBXw7V3GkWbBrSmg==} + engines: {node: '>=12'} process-nextick-args@2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, - } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} process@0.11.10: - resolution: - { - integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, - } - engines: { node: ">= 0.6.0" } + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} proj4@2.20.4: - resolution: - { - integrity: sha512-/EEBoXjBw+zW1Lofinw0YFQ4OFOqC6XThnwRAgjEHw8WBN+wSy/6aeqRRdjy4b2igy3X0k3RNDuwcYqcQq7nDw==, - } + resolution: {integrity: sha512-/EEBoXjBw+zW1Lofinw0YFQ4OFOqC6XThnwRAgjEHw8WBN+wSy/6aeqRRdjy4b2igy3X0k3RNDuwcYqcQq7nDw==} prop-types@15.8.1: - resolution: - { - integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, - } + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} proper-lockfile@4.1.2: - resolution: - { - integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==, - } + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} protocol-buffers-schema@3.6.0: - resolution: - { - integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==, - } + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, - } + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} qr.js@0.0.0: - resolution: - { - integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==, - } + resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==} qrcode@1.5.4: - resolution: - { - integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} hasBin: true querystringify@2.2.0: - resolution: - { - integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, - } + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} quick-lru@6.1.2: - resolution: - { - integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} + engines: {node: '>=12'} quickselect@2.0.0: - resolution: - { - integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==, - } + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} quote-unquote@1.0.0: - resolution: - { - integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==, - } + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} rbush@3.0.1: - resolution: - { - integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==, - } + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} react-chartjs-2@5.3.1: - resolution: - { - integrity: sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==, - } + resolution: {integrity: sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==} peerDependencies: chart.js: ^4.1.1 react: ^19.2.1 react-day-picker@8.10.1: - resolution: - { - integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==, - } + resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==} peerDependencies: date-fns: ^2.28.0 || ^3.0.0 react: ^19.2.1 react-day-picker@9.14.0: - resolution: - { - integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==} + engines: {node: '>=18'} peerDependencies: react: ^19.2.1 react-dnd-html5-backend@16.0.1: - resolution: - { - integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==, - } + resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} react-dnd-touch-backend@16.0.1: - resolution: - { - integrity: sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==, - } + resolution: {integrity: sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==} react-dnd@16.0.1: - resolution: - { - integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==, - } + resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} peerDependencies: - "@types/hoist-non-react-statics": ">= 3.3.1" - "@types/node": ">= 12" - "@types/react": ^19.2.7 + '@types/hoist-non-react-statics': '>= 3.3.1' + '@types/node': '>= 12' + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/hoist-non-react-statics": + '@types/hoist-non-react-statics': optional: true - "@types/node": + '@types/node': optional: true - "@types/react": + '@types/react': optional: true react-docgen-typescript@2.4.0: - resolution: - { - integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==, - } + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: - typescript: ">= 4.3.x" + typescript: '>= 4.3.x' react-docgen@7.1.1: - resolution: - { - integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==, - } - engines: { node: ">=16.14.0" } + resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} + engines: {node: '>=16.14.0'} react-dom@19.2.4: - resolution: - { - integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==, - } + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: react: ^19.2.1 react-draggable@4.5.0: - resolution: - { - integrity: sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==, - } + resolution: {integrity: sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-dropzone@14.4.1: - resolution: - { - integrity: sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g==, - } - engines: { node: ">= 10.13" } + resolution: {integrity: sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g==} + engines: {node: '>= 10.13'} peerDependencies: react: ^19.2.1 react-hook-form@7.72.0: - resolution: - { - integrity: sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw==} + engines: {node: '>=18.0.0'} peerDependencies: react: ^19.2.1 react-hot-toast@2.6.0: - resolution: - { - integrity: sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==} + engines: {node: '>=10'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-i18next@15.7.4: - resolution: - { - integrity: sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw==, - } + resolution: {integrity: sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw==} peerDependencies: - i18next: ">= 23.4.0" + i18next: '>= 23.4.0' react: ^19.2.1 - react-dom: "*" - react-native: "*" + react-dom: '*' + react-native: '*' typescript: ^5 peerDependenciesMeta: react-dom: @@ -9374,100 +6566,67 @@ packages: optional: true react-is@16.13.1: - resolution: - { - integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, - } + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} react-is@17.0.2: - resolution: - { - integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, - } + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} react-is@18.3.1: - resolution: - { - integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, - } + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} react-qr-code@2.0.18: - resolution: - { - integrity: sha512-v1Jqz7urLMhkO6jkgJuBYhnqvXagzceg3qJUWayuCK/c6LTIonpWbwxR1f1APGd4xrW/QcQEovNrAojbUz65Tg==, - } + resolution: {integrity: sha512-v1Jqz7urLMhkO6jkgJuBYhnqvXagzceg3qJUWayuCK/c6LTIonpWbwxR1f1APGd4xrW/QcQEovNrAojbUz65Tg==} peerDependencies: react: ^19.2.1 react-refresh@0.17.0: - resolution: - { - integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} react-remove-scroll-bar@2.3.8: - resolution: - { - integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-remove-scroll@2.7.2: - resolution: - { - integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-smooth@4.0.4: - resolution: - { - integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==, - } + resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-style-singleton@2.2.3: - resolution: - { - integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-transition-group@4.4.5: - resolution: - { - integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==, - } + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-use-measure@2.1.7: - resolution: - { - integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==, - } + resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 @@ -9476,496 +6635,280 @@ packages: optional: true react@19.2.4: - resolution: - { - integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + engines: {node: '>=0.10.0'} read-cache@1.0.0: - resolution: - { - integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, - } + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} readable-stream@2.3.8: - resolution: - { - integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, - } + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} readdirp@4.1.2: - resolution: - { - integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, - } - engines: { node: ">= 14.18.0" } + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} realgrid-react@0.9.9: - resolution: - { - integrity: sha512-1zvD9eM45kMViOdMT6cLag7+riiu7vGq3FXf0/9Se/O8MRj86d3PpPCYfyrCV5Xo37cUZZHyEJ86sZsMj6VoBA==, - } + resolution: {integrity: sha512-1zvD9eM45kMViOdMT6cLag7+riiu7vGq3FXf0/9Se/O8MRj86d3PpPCYfyrCV5Xo37cUZZHyEJ86sZsMj6VoBA==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 realgrid@2.9.7: - resolution: - { - integrity: sha512-gPn2Ol10gomZw6KH7HgRXEe8O67XfPb35BrgCmWF0/GzlJEqb1XzdAKzuVYmoQuj6eXVwsnjP0w5RaE3O1DoNg==, - } + resolution: {integrity: sha512-gPn2Ol10gomZw6KH7HgRXEe8O67XfPb35BrgCmWF0/GzlJEqb1XzdAKzuVYmoQuj6eXVwsnjP0w5RaE3O1DoNg==} recast@0.23.11: - resolution: - { - integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} recharts-scale@0.4.5: - resolution: - { - integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==, - } + resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} recharts@2.15.4: - resolution: - { - integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==} + engines: {node: '>=14'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 redent@3.0.0: - resolution: - { - integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} redux@4.2.1: - resolution: - { - integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==, - } + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} reflect.getprototypeof@1.0.10: - resolution: - { - integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} regexp.prototype.flags@1.5.4: - resolution: - { - integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} remixicon@4.9.1: - resolution: - { - integrity: sha512-36gLSoujkabnCFZFDyP17VNh9piuBA/rsXUb4auSJWLGsHVXtmxLj/EM5FjaEAGnk8oIAj1Azob/DZ2N+90lAQ==, - } + resolution: {integrity: sha512-36gLSoujkabnCFZFDyP17VNh9piuBA/rsXUb4auSJWLGsHVXtmxLj/EM5FjaEAGnk8oIAj1Azob/DZ2N+90lAQ==} require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} require-main-filename@2.0.0: - resolution: - { - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, - } + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} requires-port@1.0.0: - resolution: - { - integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, - } + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} resolve-from@5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} resolve-pkg-maps@1.0.0: - resolution: - { - integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, - } + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} resolve-protobuf-schema@2.1.0: - resolution: - { - integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==, - } + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} resolve@1.22.11: - resolution: - { - integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} hasBin: true resolve@2.0.0-next.6: - resolution: - { - integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} hasBin: true restore-cursor@5.1.0: - resolution: - { - integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} retry@0.12.0: - resolution: - { - integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} reusify@1.1.0: - resolution: - { - integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, - } - engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: - resolution: - { - integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==, - } + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} rollup@4.60.0: - resolution: - { - integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==, - } - engines: { node: ">=18.0.0", npm: ">=8.0.0" } + resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} rw@1.3.3: - resolution: - { - integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, - } + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} safe-array-concat@1.1.3: - resolution: - { - integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==, - } - engines: { node: ">=0.4" } + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, - } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-push-apply@1.0.0: - resolution: - { - integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} safe-regex-test@1.1.0: - resolution: - { - integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} sax@1.6.0: - resolution: - { - integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==, - } - engines: { node: ">=11.0.0" } + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} scheduler@0.27.0: - resolution: - { - integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, - } + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} schema-utils@4.3.3: - resolution: - { - integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} select@1.1.2: - resolution: - { - integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==, - } + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.7.4: - resolution: - { - integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} hasBin: true set-blocking@2.0.0: - resolution: - { - integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, - } + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} set-function-name@2.0.2: - resolution: - { - integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} set-proto@1.0.0: - resolution: - { - integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} setimmediate@1.0.5: - resolution: - { - integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, - } + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} sharp@0.34.5: - resolution: - { - integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} side-channel-list@1.0.0: - resolution: - { - integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} side-channel-map@1.0.1: - resolution: - { - integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} side-channel-weakmap@1.0.2: - resolution: - { - integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} side-channel@1.1.0: - resolution: - { - integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} signal-exit@4.1.0: - resolution: - { - integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, - } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} slash@5.1.0: - resolution: - { - integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} slice-ansi@7.1.2: - resolution: - { - integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} slice-ansi@8.0.0: - resolution: - { - integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} sonner@2.0.7: - resolution: - { - integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==, - } + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 sort-asc@0.1.0: - resolution: - { - integrity: sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==} + engines: {node: '>=0.10.0'} sort-desc@0.1.1: - resolution: - { - integrity: sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==} + engines: {node: '>=0.10.0'} sort-object@0.3.2: - resolution: - { - integrity: sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==} + engines: {node: '>=0.10.0'} source-map-js@1.2.1: - resolution: - { - integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.7.6: - resolution: - { - integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==, - } - engines: { node: ">= 12" } + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} ssf@0.11.2: - resolution: - { - integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} stable-hash@0.0.5: - resolution: - { - integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==, - } + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} steiger@0.5.11: - resolution: - { - integrity: sha512-Sv6ovPX8tVlUufvAvGSUnwDQLupccYjcgfK5pbqECGP5KCe9M257U0IbRdjuLfUXfey4FprZWQQtnIz3qOPpWA==, - } + resolution: {integrity: sha512-Sv6ovPX8tVlUufvAvGSUnwDQLupccYjcgfK5pbqECGP5KCe9M257U0IbRdjuLfUXfey4FprZWQQtnIz3qOPpWA==} hasBin: true stop-iteration-iterator@1.1.0: - resolution: - { - integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} storybook@8.6.18: - resolution: - { - integrity: sha512-p8seiSI6FiVY6P3V0pG+5v7c8pDMehMAFRWEhG5XqIBSQszzOjDnW2rNvm3odoLKfo3V3P6Cs6Hv9ILzymULyQ==, - } + resolution: {integrity: sha512-p8seiSI6FiVY6P3V0pG+5v7c8pDMehMAFRWEhG5XqIBSQszzOjDnW2rNvm3odoLKfo3V3P6Cs6Hv9ILzymULyQ==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -9974,237 +6917,144 @@ packages: optional: true streamsearch@1.1.0: - resolution: - { - integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} string-argv@0.3.2: - resolution: - { - integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, - } - engines: { node: ">=0.6.19" } + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} string-width@5.1.2: - resolution: - { - integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} string-width@7.2.0: - resolution: - { - integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} string-width@8.2.0: - resolution: - { - integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} string.prototype.includes@2.0.1: - resolution: - { - integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} string.prototype.matchall@4.0.12: - resolution: - { - integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} string.prototype.repeat@1.0.0: - resolution: - { - integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, - } + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} string.prototype.trim@1.2.10: - resolution: - { - integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} string.prototype.trimend@1.0.9: - resolution: - { - integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: - resolution: - { - integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} string_decoder@1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, - } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} strip-ansi@7.2.0: - resolution: - { - integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} strip-bom@3.0.0: - resolution: - { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} strip-indent@3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} strip-indent@4.1.1: - resolution: - { - integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} + engines: {node: '>=12'} strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} styled-jsx@5.1.6: - resolution: - { - integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} peerDependencies: - "@babel/core": "*" - babel-plugin-macros: "*" + '@babel/core': '*' + babel-plugin-macros: '*' react: ^19.2.1 peerDependenciesMeta: - "@babel/core": + '@babel/core': optional: true babel-plugin-macros: optional: true sucrase@3.35.1: - resolution: - { - integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==, - } - engines: { node: ">=16 || 14 >=14.17" } + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} hasBin: true supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} supports-color@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} swr@2.4.1: - resolution: - { - integrity: sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA==, - } + resolution: {integrity: sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA==} peerDependencies: react: ^19.2.1 tailwind-merge@3.5.0: - resolution: - { - integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==, - } + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} tailwindcss-animate@1.0.7: - resolution: - { - integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==, - } + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: - tailwindcss: ">=3.0.0 || insiders" + tailwindcss: '>=3.0.0 || insiders' tailwindcss@3.4.19: - resolution: - { - integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} + engines: {node: '>=14.0.0'} hasBin: true tailwindcss@4.2.2: - resolution: - { - integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==, - } + resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} tapable@2.3.2: - resolution: - { - integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + engines: {node: '>=6'} terser-webpack-plugin@5.4.0: - resolution: - { - integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} + engines: {node: '>= 10.13.0'} peerDependencies: - "@swc/core": "*" - esbuild: "*" - uglify-js: "*" + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: - "@swc/core": + '@swc/core': optional: true esbuild: optional: true @@ -10212,120 +7062,69 @@ packages: optional: true terser@5.46.1: - resolution: - { - integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + engines: {node: '>=10'} hasBin: true text-segmentation@1.0.3: - resolution: - { - integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==, - } + resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} thenify-all@1.6.0: - resolution: - { - integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} thenify@3.3.1: - resolution: - { - integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, - } + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} tiny-invariant@1.3.3: - resolution: - { - integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, - } + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} tinyexec@0.3.2: - resolution: - { - integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==, - } + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinyexec@1.0.4: - resolution: - { - integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + engines: {node: '>=18'} tinyglobby@0.2.15: - resolution: - { - integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} tinymce@7.9.2: - resolution: - { - integrity: sha512-zS2gn2CPQmZhUqLzkhwYH+WGsx/DIRY/mS18RVzsIcuQg2lN2uzaqoHSJU6DdMUpvXBtBFnLNpumC3QrDwLBzA==, - } + resolution: {integrity: sha512-zS2gn2CPQmZhUqLzkhwYH+WGsx/DIRY/mS18RVzsIcuQg2lN2uzaqoHSJU6DdMUpvXBtBFnLNpumC3QrDwLBzA==} tinyrainbow@1.2.0: - resolution: - { - integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} tinyspy@3.0.2: - resolution: - { - integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} tree-kill@1.2.2: - resolution: - { - integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, - } + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true ts-api-utils@2.5.0: - resolution: - { - integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, - } - engines: { node: ">=18.12" } + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} peerDependencies: - typescript: ">=4.8.4" + typescript: '>=4.8.4' ts-dedent@2.2.0: - resolution: - { - integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==, - } - engines: { node: ">=6.10" } + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} ts-interface-checker@0.1.13: - resolution: - { - integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, - } + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} tsconfck@3.1.6: - resolution: - { - integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==, - } - engines: { node: ^18 || >=20 } + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} hasBin: true peerDependencies: typescript: ^5.0.0 @@ -10334,40 +7133,28 @@ packages: optional: true tsconfig-paths@3.15.0: - resolution: - { - integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==, - } + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} tsconfig-paths@4.2.0: - resolution: - { - integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} tslib@2.8.1: - resolution: - { - integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, - } + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tsup@8.3.6: - resolution: - { - integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==} + engines: {node: '>=18'} hasBin: true peerDependencies: - "@microsoft/api-extractor": ^7.36.0 - "@swc/core": ^1 + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 postcss: ^8.4.12 - typescript: ">=4.5.0" + typescript: '>=4.5.0' peerDependenciesMeta: - "@microsoft/api-extractor": + '@microsoft/api-extractor': optional: true - "@swc/core": + '@swc/core': optional: true postcss: optional: true @@ -10375,289 +7162,181 @@ packages: optional: true turbo-darwin-64@2.4.2: - resolution: - { - integrity: sha512-HFfemyWB60CJtEvVQj9yby5rkkWw9fLAdLtAPGtPQoU3tKh8t/uzCAZKso2aPVbib9vGUuGbPGoGpaRXdVhj5g==, - } + resolution: {integrity: sha512-HFfemyWB60CJtEvVQj9yby5rkkWw9fLAdLtAPGtPQoU3tKh8t/uzCAZKso2aPVbib9vGUuGbPGoGpaRXdVhj5g==} cpu: [x64] os: [darwin] turbo-darwin-arm64@2.4.2: - resolution: - { - integrity: sha512-uwSx1dsBSSFeEC0nxyx2O219FEsS/haiESaWwE9JI8mHkQK61s6w6fN2G586krKxyNam4AIxRltleL+O2Em94g==, - } + resolution: {integrity: sha512-uwSx1dsBSSFeEC0nxyx2O219FEsS/haiESaWwE9JI8mHkQK61s6w6fN2G586krKxyNam4AIxRltleL+O2Em94g==} cpu: [arm64] os: [darwin] turbo-linux-64@2.4.2: - resolution: - { - integrity: sha512-Fy/uL8z/LAYcPbm7a1LwFnTY9pIi5FAi12iuHsgB7zHjdh4eeIKS2NIg4nroAmTcUTUZ0/cVTo4bDOCUcS3aKw==, - } + resolution: {integrity: sha512-Fy/uL8z/LAYcPbm7a1LwFnTY9pIi5FAi12iuHsgB7zHjdh4eeIKS2NIg4nroAmTcUTUZ0/cVTo4bDOCUcS3aKw==} cpu: [x64] os: [linux] turbo-linux-arm64@2.4.2: - resolution: - { - integrity: sha512-AEA0d8h5W/K6iiXfEgiNwWt0yqRL1NpBs8zQCLdc4/L7WeYeJW3sORWX8zt7xhutF/KW9gTm8ehKpiK6cCIsAA==, - } + resolution: {integrity: sha512-AEA0d8h5W/K6iiXfEgiNwWt0yqRL1NpBs8zQCLdc4/L7WeYeJW3sORWX8zt7xhutF/KW9gTm8ehKpiK6cCIsAA==} cpu: [arm64] os: [linux] turbo-windows-64@2.4.2: - resolution: - { - integrity: sha512-CybtIZ9wRgnnNFVN9En9G+rxsO+mwU81fvW4RpE8BWyNEkhQ8J28qYf4PaimueMxGHHp/28i/G7Kcdn2GAWG0g==, - } + resolution: {integrity: sha512-CybtIZ9wRgnnNFVN9En9G+rxsO+mwU81fvW4RpE8BWyNEkhQ8J28qYf4PaimueMxGHHp/28i/G7Kcdn2GAWG0g==} cpu: [x64] os: [win32] turbo-windows-arm64@2.4.2: - resolution: - { - integrity: sha512-7V0yneVPL8Y3TgrkUIjw7Odmwu1tHnyIiPHFM7eFcA7U+H6hPXyCxge7nC3wOKfjhKCQqUm+Vf/k6kjmLz5G4g==, - } + resolution: {integrity: sha512-7V0yneVPL8Y3TgrkUIjw7Odmwu1tHnyIiPHFM7eFcA7U+H6hPXyCxge7nC3wOKfjhKCQqUm+Vf/k6kjmLz5G4g==} cpu: [arm64] os: [win32] turbo@2.4.2: - resolution: - { - integrity: sha512-Qxi0ioQCxMRUCcHKHZkTnYH8e7XCpNfg9QiJcyfWIc+ZXeaCjzV5rCGlbQlTXMAtI8qgfP8fZADv3CFtPwqdPQ==, - } + resolution: {integrity: sha512-Qxi0ioQCxMRUCcHKHZkTnYH8e7XCpNfg9QiJcyfWIc+ZXeaCjzV5rCGlbQlTXMAtI8qgfP8fZADv3CFtPwqdPQ==} hasBin: true tus-js-client@4.3.1: - resolution: - { - integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==} + engines: {node: '>=18'} type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} type-fest@2.19.0: - resolution: - { - integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==, - } - engines: { node: ">=12.20" } + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} typed-array-buffer@1.0.3: - resolution: - { - integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} typed-array-byte-length@1.0.3: - resolution: - { - integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} typed-array-byte-offset@1.0.4: - resolution: - { - integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} typed-array-length@1.0.7: - resolution: - { - integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} typescript-eslint@8.57.2: - resolution: - { - integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' typescript@5.6.3: - resolution: - { - integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==, - } - engines: { node: ">=14.17" } + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} hasBin: true typescript@5.9.3: - resolution: - { - integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, - } - engines: { node: ">=14.17" } + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} hasBin: true unbox-primitive@1.1.0: - resolution: - { - integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} undici-types@6.21.0: - resolution: - { - integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, - } + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unicorn-magic@0.3.0: - resolution: - { - integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} unplugin@1.16.1: - resolution: - { - integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} + engines: {node: '>=14.0.0'} unrs-resolver@1.11.1: - resolution: - { - integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==, - } + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} update-browserslist-db@1.2.3: - resolution: - { - integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==, - } + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: - browserslist: ">= 4.21.0" + browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} url-parse@1.5.10: - resolution: - { - integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, - } + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} use-callback-ref@1.3.3: - resolution: - { - integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true use-sidecar@1.1.3: - resolution: - { - integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true use-sync-external-store@1.6.0: - resolution: - { - integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==, - } + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: react: ^19.2.1 util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, - } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} util@0.10.4: - resolution: - { - integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==, - } + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, - } + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} utrie@1.0.2: - resolution: - { - integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==, - } + resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} uuid@9.0.1: - resolution: - { - integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, - } + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true victory-vendor@36.9.2: - resolution: - { - integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==, - } + resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} vite-tsconfig-paths@5.1.4: - resolution: - { - integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==, - } + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - vite: "*" + vite: '*' peerDependenciesMeta: vite: optional: true vite@5.4.21: - resolution: - { - integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -10675,26 +7354,23 @@ packages: optional: true vite@6.4.1: - resolution: - { - integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==, - } - engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: ">=1.21.0" - less: "*" + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true jiti: optional: true @@ -10718,157 +7394,94 @@ packages: optional: true void-elements@3.1.0: - resolution: - { - integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} watchpack@2.5.1: - resolution: - { - integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} web-worker@1.5.0: - resolution: - { - integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==, - } + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} webpack-sources@3.3.4: - resolution: - { - integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} + engines: {node: '>=10.13.0'} webpack-virtual-modules@0.6.2: - resolution: - { - integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==, - } + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} webpack@5.105.4: - resolution: - { - integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} + engines: {node: '>=10.13.0'} hasBin: true peerDependencies: - webpack-cli: "*" + webpack-cli: '*' peerDependenciesMeta: webpack-cli: optional: true which-boxed-primitive@1.1.1: - resolution: - { - integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} which-builtin-type@1.2.1: - resolution: - { - integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} which-collection@1.0.2: - resolution: - { - integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} which-module@2.0.1: - resolution: - { - integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, - } + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} which-typed-array@1.1.20: - resolution: - { - integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + engines: {node: '>= 0.4'} which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true wkt-parser@1.5.4: - resolution: - { - integrity: sha512-heRp3QBynj8SAGepAkE8h2k4KhUGRqzgwlSRgqNhxjmSIeSvE5ZrV8n1uy5jk+iJO2jmfffIwjdAaTirBOOx0A==, - } + resolution: {integrity: sha512-heRp3QBynj8SAGepAkE8h2k4KhUGRqzgwlSRgqNhxjmSIeSvE5ZrV8n1uy5jk+iJO2jmfffIwjdAaTirBOOx0A==} wmf@1.0.2: - resolution: - { - integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} word-wrap@1.2.5: - resolution: - { - integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} word@0.3.0: - resolution: - { - integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} wrap-ansi@6.2.0: - resolution: - { - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} wrap-ansi@8.1.0: - resolution: - { - integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} wrap-ansi@9.0.2: - resolution: - { - integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} ws@8.20.0: - resolution: - { - integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -10876,135 +7489,81 @@ packages: optional: true xlsx-populate@1.21.0: - resolution: - { - integrity: sha512-8v2Gm8BehXo6LU7KT802QoXTPkYY1SKk5V8g/UuYZnNB3JzXqud/P99Pxr2yXeKyt+sKlCatmidz6jQNie1hRw==, - } + resolution: {integrity: sha512-8v2Gm8BehXo6LU7KT802QoXTPkYY1SKk5V8g/UuYZnNB3JzXqud/P99Pxr2yXeKyt+sKlCatmidz6jQNie1hRw==} xlsx@0.18.5: - resolution: - { - integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} hasBin: true xml-utils@1.10.2: - resolution: - { - integrity: sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==, - } + resolution: {integrity: sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==} y18n@4.0.3: - resolution: - { - integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, - } + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yaml@2.8.3: - resolution: - { - integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==, - } - engines: { node: ">= 14.6" } + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@18.1.3: - resolution: - { - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} yargs-parser@22.0.0: - resolution: - { - integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==, - } - engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yargs@15.4.1: - resolution: - { - integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} yargs@17.7.2: - resolution: - { - integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} yargs@18.0.0: - resolution: - { - integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==, - } - engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} zod-validation-error@3.5.4: - resolution: - { - integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==} + engines: {node: '>=18.0.0'} peerDependencies: zod: ^3.24.4 zod@3.25.76: - resolution: - { - integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, - } + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zstddec@0.1.0: - resolution: - { - integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==, - } + resolution: {integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==} zustand@5.0.12: - resolution: - { - integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==, - } - engines: { node: ">=12.20.0" } + resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} + engines: {node: '>=12.20.0'} peerDependencies: - "@types/react": ^19.2.7 - immer: ">=9.0.6" + '@types/react': ^19.2.7 + immer: '>=9.0.6' react: ^19.2.1 - use-sync-external-store: ">=1.2.0" + use-sync-external-store: '>=1.2.0' peerDependenciesMeta: - "@types/react": + '@types/react': optional: true immer: optional: true @@ -11014,30 +7573,31 @@ packages: optional: true snapshots: - "@adobe/css-tools@4.4.4": {} - "@alloc/quick-lru@5.2.0": {} + '@adobe/css-tools@4.4.4': {} - "@babel/code-frame@7.29.0": + '@alloc/quick-lru@5.2.0': {} + + '@babel/code-frame@7.29.0': dependencies: - "@babel/helper-validator-identifier": 7.28.5 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - "@babel/compat-data@7.29.0": {} + '@babel/compat-data@7.29.0': {} - "@babel/core@7.29.0": + '@babel/core@7.29.0': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/generator": 7.29.1 - "@babel/helper-compilation-targets": 7.28.6 - "@babel/helper-module-transforms": 7.28.6(@babel/core@7.29.0) - "@babel/helpers": 7.29.2 - "@babel/parser": 7.29.2 - "@babel/template": 7.28.6 - "@babel/traverse": 7.29.0 - "@babel/types": 7.29.0 - "@jridgewell/remapping": 2.3.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -11046,377 +7606,377 @@ snapshots: transitivePeerDependencies: - supports-color - "@babel/generator@7.29.1": + '@babel/generator@7.29.1': dependencies: - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - "@babel/helper-compilation-targets@7.28.6": + '@babel/helper-compilation-targets@7.28.6': dependencies: - "@babel/compat-data": 7.29.0 - "@babel/helper-validator-option": 7.27.1 + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - "@babel/helper-globals@7.28.0": {} + '@babel/helper-globals@7.28.0': {} - "@babel/helper-module-imports@7.28.6": + '@babel/helper-module-imports@7.28.6': dependencies: - "@babel/traverse": 7.29.0 - "@babel/types": 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - "@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)": + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - "@babel/core": 7.29.0 - "@babel/helper-module-imports": 7.28.6 - "@babel/helper-validator-identifier": 7.28.5 - "@babel/traverse": 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - "@babel/helper-plugin-utils@7.28.6": {} + '@babel/helper-plugin-utils@7.28.6': {} - "@babel/helper-string-parser@7.27.1": {} + '@babel/helper-string-parser@7.27.1': {} - "@babel/helper-validator-identifier@7.28.5": {} + '@babel/helper-validator-identifier@7.28.5': {} - "@babel/helper-validator-option@7.27.1": {} + '@babel/helper-validator-option@7.27.1': {} - "@babel/helpers@7.29.2": + '@babel/helpers@7.29.2': dependencies: - "@babel/template": 7.28.6 - "@babel/types": 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 - "@babel/parser@7.29.2": + '@babel/parser@7.29.2': dependencies: - "@babel/types": 7.29.0 + '@babel/types': 7.29.0 - "@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)": + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - "@babel/core": 7.29.0 - "@babel/helper-plugin-utils": 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - "@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)": + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - "@babel/core": 7.29.0 - "@babel/helper-plugin-utils": 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - "@babel/runtime@7.29.2": {} + '@babel/runtime@7.29.2': {} - "@babel/template@7.28.6": + '@babel/template@7.28.6': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 - "@babel/traverse@7.29.0": + '@babel/traverse@7.29.0': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/generator": 7.29.1 - "@babel/helper-globals": 7.28.0 - "@babel/parser": 7.29.2 - "@babel/template": 7.28.6 - "@babel/types": 7.29.0 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - "@babel/types@7.29.0": + '@babel/types@7.29.0': dependencies: - "@babel/helper-string-parser": 7.27.1 - "@babel/helper-validator-identifier": 7.28.5 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 - "@clack/core@0.4.1": + '@clack/core@0.4.1': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - "@clack/prompts@0.9.1": + '@clack/prompts@0.9.1': dependencies: - "@clack/core": 0.4.1 + '@clack/core': 0.4.1 picocolors: 1.1.1 sisteransi: 1.0.5 - "@date-fns/tz@1.4.1": {} + '@date-fns/tz@1.4.1': {} - "@dependents/detective-less@5.0.1": + '@dependents/detective-less@5.0.1': dependencies: gonzales-pe: 4.3.0 node-source-walk: 7.0.1 - "@emnapi/core@1.9.1": + '@emnapi/core@1.9.1': dependencies: - "@emnapi/wasi-threads": 1.2.0 + '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true - "@emnapi/runtime@1.9.1": + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 optional: true - "@emnapi/wasi-threads@1.2.0": + '@emnapi/wasi-threads@1.2.0': dependencies: tslib: 2.8.1 optional: true - "@esbuild/aix-ppc64@0.21.5": + '@esbuild/aix-ppc64@0.21.5': optional: true - "@esbuild/aix-ppc64@0.24.2": + '@esbuild/aix-ppc64@0.24.2': optional: true - "@esbuild/aix-ppc64@0.25.12": + '@esbuild/aix-ppc64@0.25.12': optional: true - "@esbuild/android-arm64@0.21.5": + '@esbuild/android-arm64@0.21.5': optional: true - "@esbuild/android-arm64@0.24.2": + '@esbuild/android-arm64@0.24.2': optional: true - "@esbuild/android-arm64@0.25.12": + '@esbuild/android-arm64@0.25.12': optional: true - "@esbuild/android-arm@0.21.5": + '@esbuild/android-arm@0.21.5': optional: true - "@esbuild/android-arm@0.24.2": + '@esbuild/android-arm@0.24.2': optional: true - "@esbuild/android-arm@0.25.12": + '@esbuild/android-arm@0.25.12': optional: true - "@esbuild/android-x64@0.21.5": + '@esbuild/android-x64@0.21.5': optional: true - "@esbuild/android-x64@0.24.2": + '@esbuild/android-x64@0.24.2': optional: true - "@esbuild/android-x64@0.25.12": + '@esbuild/android-x64@0.25.12': optional: true - "@esbuild/darwin-arm64@0.21.5": + '@esbuild/darwin-arm64@0.21.5': optional: true - "@esbuild/darwin-arm64@0.24.2": + '@esbuild/darwin-arm64@0.24.2': optional: true - "@esbuild/darwin-arm64@0.25.12": + '@esbuild/darwin-arm64@0.25.12': optional: true - "@esbuild/darwin-x64@0.21.5": + '@esbuild/darwin-x64@0.21.5': optional: true - "@esbuild/darwin-x64@0.24.2": + '@esbuild/darwin-x64@0.24.2': optional: true - "@esbuild/darwin-x64@0.25.12": + '@esbuild/darwin-x64@0.25.12': optional: true - "@esbuild/freebsd-arm64@0.21.5": + '@esbuild/freebsd-arm64@0.21.5': optional: true - "@esbuild/freebsd-arm64@0.24.2": + '@esbuild/freebsd-arm64@0.24.2': optional: true - "@esbuild/freebsd-arm64@0.25.12": + '@esbuild/freebsd-arm64@0.25.12': optional: true - "@esbuild/freebsd-x64@0.21.5": + '@esbuild/freebsd-x64@0.21.5': optional: true - "@esbuild/freebsd-x64@0.24.2": + '@esbuild/freebsd-x64@0.24.2': optional: true - "@esbuild/freebsd-x64@0.25.12": + '@esbuild/freebsd-x64@0.25.12': optional: true - "@esbuild/linux-arm64@0.21.5": + '@esbuild/linux-arm64@0.21.5': optional: true - "@esbuild/linux-arm64@0.24.2": + '@esbuild/linux-arm64@0.24.2': optional: true - "@esbuild/linux-arm64@0.25.12": + '@esbuild/linux-arm64@0.25.12': optional: true - "@esbuild/linux-arm@0.21.5": + '@esbuild/linux-arm@0.21.5': optional: true - "@esbuild/linux-arm@0.24.2": + '@esbuild/linux-arm@0.24.2': optional: true - "@esbuild/linux-arm@0.25.12": + '@esbuild/linux-arm@0.25.12': optional: true - "@esbuild/linux-ia32@0.21.5": + '@esbuild/linux-ia32@0.21.5': optional: true - "@esbuild/linux-ia32@0.24.2": + '@esbuild/linux-ia32@0.24.2': optional: true - "@esbuild/linux-ia32@0.25.12": + '@esbuild/linux-ia32@0.25.12': optional: true - "@esbuild/linux-loong64@0.21.5": + '@esbuild/linux-loong64@0.21.5': optional: true - "@esbuild/linux-loong64@0.24.2": + '@esbuild/linux-loong64@0.24.2': optional: true - "@esbuild/linux-loong64@0.25.12": + '@esbuild/linux-loong64@0.25.12': optional: true - "@esbuild/linux-mips64el@0.21.5": + '@esbuild/linux-mips64el@0.21.5': optional: true - "@esbuild/linux-mips64el@0.24.2": + '@esbuild/linux-mips64el@0.24.2': optional: true - "@esbuild/linux-mips64el@0.25.12": + '@esbuild/linux-mips64el@0.25.12': optional: true - "@esbuild/linux-ppc64@0.21.5": + '@esbuild/linux-ppc64@0.21.5': optional: true - "@esbuild/linux-ppc64@0.24.2": + '@esbuild/linux-ppc64@0.24.2': optional: true - "@esbuild/linux-ppc64@0.25.12": + '@esbuild/linux-ppc64@0.25.12': optional: true - "@esbuild/linux-riscv64@0.21.5": + '@esbuild/linux-riscv64@0.21.5': optional: true - "@esbuild/linux-riscv64@0.24.2": + '@esbuild/linux-riscv64@0.24.2': optional: true - "@esbuild/linux-riscv64@0.25.12": + '@esbuild/linux-riscv64@0.25.12': optional: true - "@esbuild/linux-s390x@0.21.5": + '@esbuild/linux-s390x@0.21.5': optional: true - "@esbuild/linux-s390x@0.24.2": + '@esbuild/linux-s390x@0.24.2': optional: true - "@esbuild/linux-s390x@0.25.12": + '@esbuild/linux-s390x@0.25.12': optional: true - "@esbuild/linux-x64@0.21.5": + '@esbuild/linux-x64@0.21.5': optional: true - "@esbuild/linux-x64@0.24.2": + '@esbuild/linux-x64@0.24.2': optional: true - "@esbuild/linux-x64@0.25.12": + '@esbuild/linux-x64@0.25.12': optional: true - "@esbuild/netbsd-arm64@0.24.2": + '@esbuild/netbsd-arm64@0.24.2': optional: true - "@esbuild/netbsd-arm64@0.25.12": + '@esbuild/netbsd-arm64@0.25.12': optional: true - "@esbuild/netbsd-x64@0.21.5": + '@esbuild/netbsd-x64@0.21.5': optional: true - "@esbuild/netbsd-x64@0.24.2": + '@esbuild/netbsd-x64@0.24.2': optional: true - "@esbuild/netbsd-x64@0.25.12": + '@esbuild/netbsd-x64@0.25.12': optional: true - "@esbuild/openbsd-arm64@0.24.2": + '@esbuild/openbsd-arm64@0.24.2': optional: true - "@esbuild/openbsd-arm64@0.25.12": + '@esbuild/openbsd-arm64@0.25.12': optional: true - "@esbuild/openbsd-x64@0.21.5": + '@esbuild/openbsd-x64@0.21.5': optional: true - "@esbuild/openbsd-x64@0.24.2": + '@esbuild/openbsd-x64@0.24.2': optional: true - "@esbuild/openbsd-x64@0.25.12": + '@esbuild/openbsd-x64@0.25.12': optional: true - "@esbuild/openharmony-arm64@0.25.12": + '@esbuild/openharmony-arm64@0.25.12': optional: true - "@esbuild/sunos-x64@0.21.5": + '@esbuild/sunos-x64@0.21.5': optional: true - "@esbuild/sunos-x64@0.24.2": + '@esbuild/sunos-x64@0.24.2': optional: true - "@esbuild/sunos-x64@0.25.12": + '@esbuild/sunos-x64@0.25.12': optional: true - "@esbuild/win32-arm64@0.21.5": + '@esbuild/win32-arm64@0.21.5': optional: true - "@esbuild/win32-arm64@0.24.2": + '@esbuild/win32-arm64@0.24.2': optional: true - "@esbuild/win32-arm64@0.25.12": + '@esbuild/win32-arm64@0.25.12': optional: true - "@esbuild/win32-ia32@0.21.5": + '@esbuild/win32-ia32@0.21.5': optional: true - "@esbuild/win32-ia32@0.24.2": + '@esbuild/win32-ia32@0.24.2': optional: true - "@esbuild/win32-ia32@0.25.12": + '@esbuild/win32-ia32@0.25.12': optional: true - "@esbuild/win32-x64@0.21.5": + '@esbuild/win32-x64@0.21.5': optional: true - "@esbuild/win32-x64@0.24.2": + '@esbuild/win32-x64@0.24.2': optional: true - "@esbuild/win32-x64@0.25.12": + '@esbuild/win32-x64@0.25.12': optional: true - "@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))": + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))': dependencies: eslint: 9.39.4(jiti@1.21.7) eslint-visitor-keys: 3.4.3 - "@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))": + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': dependencies: eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - "@eslint-community/regexpp@4.12.2": {} + '@eslint-community/regexpp@4.12.2': {} - "@eslint/config-array@0.21.2": + '@eslint/config-array@0.21.2': dependencies: - "@eslint/object-schema": 2.1.7 + '@eslint/object-schema': 2.1.7 debug: 4.4.3 minimatch: 3.1.5 transitivePeerDependencies: - supports-color - "@eslint/config-helpers@0.4.2": + '@eslint/config-helpers@0.4.2': dependencies: - "@eslint/core": 0.17.0 + '@eslint/core': 0.17.0 - "@eslint/core@0.17.0": + '@eslint/core@0.17.0': dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 - "@eslint/eslintrc@3.3.5": + '@eslint/eslintrc@3.3.5': dependencies: ajv: 6.14.0 debug: 4.4.3 @@ -11430,26 +7990,26 @@ snapshots: transitivePeerDependencies: - supports-color - "@eslint/js@9.39.4": {} + '@eslint/js@9.39.4': {} - "@eslint/object-schema@2.1.7": {} + '@eslint/object-schema@2.1.7': {} - "@eslint/plugin-kit@0.4.1": + '@eslint/plugin-kit@0.4.1': dependencies: - "@eslint/core": 0.17.0 + '@eslint/core': 0.17.0 levn: 0.4.1 - "@faker-js/faker@10.3.0": {} + '@faker-js/faker@10.3.0': {} - "@faker-js/faker@9.9.0": {} + '@faker-js/faker@9.9.0': {} - "@feature-sliced/filesystem@3.0.1": + '@feature-sliced/filesystem@3.0.1': dependencies: typescript: 5.9.3 - "@feature-sliced/steiger-plugin@0.5.7(typescript@5.9.3)": + '@feature-sliced/steiger-plugin@0.5.7(typescript@5.9.3)': dependencies: - "@feature-sliced/filesystem": 3.0.1 + '@feature-sliced/filesystem': 3.0.1 fastest-levenshtein: 1.0.16 lodash-es: 4.17.23 pluralize: 8.0.0 @@ -11459,169 +8019,169 @@ snapshots: - supports-color - typescript - "@floating-ui/core@1.7.5": + '@floating-ui/core@1.7.5': dependencies: - "@floating-ui/utils": 0.2.11 + '@floating-ui/utils': 0.2.11 - "@floating-ui/dom@1.7.6": + '@floating-ui/dom@1.7.6': dependencies: - "@floating-ui/core": 1.7.5 - "@floating-ui/utils": 0.2.11 + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 - "@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@floating-ui/dom": 1.7.6 + '@floating-ui/dom': 1.7.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@floating-ui/utils@0.2.11": {} + '@floating-ui/utils@0.2.11': {} - "@fontsource-variable/noto-sans-kr@5.2.10": {} + '@fontsource-variable/noto-sans-kr@5.2.10': {} - "@frontend-opensource/use-react-hooks@1.1.4": + '@frontend-opensource/use-react-hooks@1.1.4': dependencies: async-wave: 1.8.6 fast-deep-equal: 3.1.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@fullcalendar/core@6.1.20": + '@fullcalendar/core@6.1.20': dependencies: preact: 10.12.1 - "@fullcalendar/daygrid@6.1.20(@fullcalendar/core@6.1.20)": + '@fullcalendar/daygrid@6.1.20(@fullcalendar/core@6.1.20)': dependencies: - "@fullcalendar/core": 6.1.20 + '@fullcalendar/core': 6.1.20 - "@fullcalendar/interaction@6.1.20(@fullcalendar/core@6.1.20)": + '@fullcalendar/interaction@6.1.20(@fullcalendar/core@6.1.20)': dependencies: - "@fullcalendar/core": 6.1.20 + '@fullcalendar/core': 6.1.20 - "@fullcalendar/react@6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@fullcalendar/react@6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@fullcalendar/core": 6.1.20 + '@fullcalendar/core': 6.1.20 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@fullcalendar/timegrid@6.1.20(@fullcalendar/core@6.1.20)": + '@fullcalendar/timegrid@6.1.20(@fullcalendar/core@6.1.20)': dependencies: - "@fullcalendar/core": 6.1.20 - "@fullcalendar/daygrid": 6.1.20(@fullcalendar/core@6.1.20) + '@fullcalendar/core': 6.1.20 + '@fullcalendar/daygrid': 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers@4.1.3(react-hook-form@7.72.0(react@19.2.4))": + '@hookform/resolvers@4.1.3(react-hook-form@7.72.0(react@19.2.4))': dependencies: - "@standard-schema/utils": 0.3.0 + '@standard-schema/utils': 0.3.0 react-hook-form: 7.72.0(react@19.2.4) - "@humanfs/core@0.19.1": {} + '@humanfs/core@0.19.1': {} - "@humanfs/node@0.16.7": + '@humanfs/node@0.16.7': dependencies: - "@humanfs/core": 0.19.1 - "@humanwhocodes/retry": 0.4.3 + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 - "@humanwhocodes/module-importer@1.0.1": {} + '@humanwhocodes/module-importer@1.0.1': {} - "@humanwhocodes/retry@0.4.3": {} + '@humanwhocodes/retry@0.4.3': {} - "@img/colour@1.1.0": + '@img/colour@1.1.0': optional: true - "@img/sharp-darwin-arm64@0.34.5": + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-arm64": 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - "@img/sharp-darwin-x64@0.34.5": + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-x64": 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - "@img/sharp-libvips-darwin-arm64@1.2.4": + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - "@img/sharp-libvips-darwin-x64@1.2.4": + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm64@1.2.4": + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm@1.2.4": + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - "@img/sharp-libvips-linux-ppc64@1.2.4": + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - "@img/sharp-libvips-linux-riscv64@1.2.4": + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - "@img/sharp-libvips-linux-s390x@1.2.4": + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - "@img/sharp-libvips-linux-x64@1.2.4": + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-x64@1.2.4": + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - "@img/sharp-linux-arm64@0.34.5": + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm64": 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - "@img/sharp-linux-arm@0.34.5": + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm": 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - "@img/sharp-linux-ppc64@0.34.5": + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-ppc64": 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - "@img/sharp-linux-riscv64@0.34.5": + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-riscv64": 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - "@img/sharp-linux-s390x@0.34.5": + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-s390x": 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - "@img/sharp-linux-x64@0.34.5": + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-x64": 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - "@img/sharp-linuxmusl-arm64@0.34.5": + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - "@img/sharp-linuxmusl-x64@0.34.5": + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - "@img/sharp-wasm32@0.34.5": + '@img/sharp-wasm32@0.34.5': dependencies: - "@emnapi/runtime": 1.9.1 + '@emnapi/runtime': 1.9.1 optional: true - "@img/sharp-win32-arm64@0.34.5": + '@img/sharp-win32-arm64@0.34.5': optional: true - "@img/sharp-win32-ia32@0.34.5": + '@img/sharp-win32-ia32@0.34.5': optional: true - "@img/sharp-win32-x64@0.34.5": + '@img/sharp-win32-x64@0.34.5': optional: true - "@isaacs/cliui@8.0.2": + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 @@ -11630,7 +8190,7 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - "@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: glob: 10.5.0 magic-string: 0.27.0 @@ -11639,60 +8199,60 @@ snapshots: optionalDependencies: typescript: 5.6.3 - "@jridgewell/gen-mapping@0.3.13": + '@jridgewell/gen-mapping@0.3.13': dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/remapping@2.3.5": + '@jridgewell/remapping@2.3.5': dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/resolve-uri@3.1.2": {} + '@jridgewell/resolve-uri@3.1.2': {} - "@jridgewell/source-map@0.3.11": + '@jridgewell/source-map@0.3.11': dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/sourcemap-codec@1.5.5": {} + '@jridgewell/sourcemap-codec@1.5.5': {} - "@jridgewell/trace-mapping@0.3.31": + '@jridgewell/trace-mapping@0.3.31': dependencies: - "@jridgewell/resolve-uri": 3.1.2 - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - "@juggle/resize-observer@3.4.0": {} + '@juggle/resize-observer@3.4.0': {} - "@kurkle/color@0.3.4": {} + '@kurkle/color@0.3.4': {} - "@mapbox/jsonlint-lines-primitives@2.0.2": {} + '@mapbox/jsonlint-lines-primitives@2.0.2': {} - "@mapbox/mapbox-gl-style-spec@13.28.0": + '@mapbox/mapbox-gl-style-spec@13.28.0': dependencies: - "@mapbox/jsonlint-lines-primitives": 2.0.2 - "@mapbox/point-geometry": 0.1.0 - "@mapbox/unitbezier": 0.0.0 + '@mapbox/jsonlint-lines-primitives': 2.0.2 + '@mapbox/point-geometry': 0.1.0 + '@mapbox/unitbezier': 0.0.0 csscolorparser: 1.0.3 json-stringify-pretty-compact: 2.0.0 minimist: 1.2.8 rw: 1.3.3 sort-object: 0.3.2 - "@mapbox/point-geometry@0.1.0": {} + '@mapbox/point-geometry@0.1.0': {} - "@mapbox/unitbezier@0.0.0": {} + '@mapbox/unitbezier@0.0.0': {} - "@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)": + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@types/mdx": 2.0.13 - "@types/react": 19.2.14 + '@types/mdx': 2.0.13 + '@types/react': 19.2.14 react: 19.2.4 - "@minoru/react-dnd-treeview@3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@minoru/react-dnd-treeview@3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@juggle/resize-observer": 3.4.0 + '@juggle/resize-observer': 3.4.0 dnd-multi-backend: 8.1.2(dnd-core@16.0.1) framer-motion: 11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -11702,12 +8262,12 @@ snapshots: react-dom: 19.2.4(react@19.2.4) react-use-measure: 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - - "@emotion/is-prop-valid" + - '@emotion/is-prop-valid' - dnd-core - "@minoru/react-dnd-treeview@3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@minoru/react-dnd-treeview@3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@juggle/resize-observer": 3.4.0 + '@juggle/resize-observer': 3.4.0 dnd-multi-backend: 8.1.2(dnd-core@16.0.1) framer-motion: 11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -11717,832 +8277,836 @@ snapshots: react-dom: 19.2.4(react@19.2.4) react-use-measure: 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - - "@emotion/is-prop-valid" + - '@emotion/is-prop-valid' - dnd-core - "@napi-rs/wasm-runtime@0.2.12": + '@napi-rs/wasm-runtime@0.2.12': dependencies: - "@emnapi/core": 1.9.1 - "@emnapi/runtime": 1.9.1 - "@tybys/wasm-util": 0.10.1 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 + '@tybys/wasm-util': 0.10.1 optional: true - "@next/env@15.3.8": {} + '@next/env@15.3.8': {} - "@next/eslint-plugin-next@15.3.8": + '@next/eslint-plugin-next@15.3.8': dependencies: fast-glob: 3.3.1 - "@next/swc-darwin-arm64@15.3.5": - optional: true - - "@next/swc-darwin-x64@15.3.5": - optional: true - - "@next/swc-linux-arm64-gnu@15.3.5": - optional: true - - "@next/swc-linux-arm64-musl@15.3.5": - optional: true - - "@next/swc-linux-x64-gnu@15.3.5": - optional: true - - "@next/swc-linux-x64-musl@15.3.5": - optional: true - - "@next/swc-win32-arm64-msvc@15.3.5": - optional: true - - "@next/swc-win32-x64-msvc@15.3.5": - optional: true - - "@nodelib/fs.scandir@2.1.5": + '@next/eslint-plugin-next@15.4.0': dependencies: - "@nodelib/fs.stat": 2.0.5 + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.3.5': + optional: true + + '@next/swc-darwin-x64@15.3.5': + optional: true + + '@next/swc-linux-arm64-gnu@15.3.5': + optional: true + + '@next/swc-linux-arm64-musl@15.3.5': + optional: true + + '@next/swc-linux-x64-gnu@15.3.5': + optional: true + + '@next/swc-linux-x64-musl@15.3.5': + optional: true + + '@next/swc-win32-arm64-msvc@15.3.5': + optional: true + + '@next/swc-win32-x64-msvc@15.3.5': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - "@nodelib/fs.stat@2.0.5": {} + '@nodelib/fs.stat@2.0.5': {} - "@nodelib/fs.walk@1.2.8": + '@nodelib/fs.walk@1.2.8': dependencies: - "@nodelib/fs.scandir": 2.1.5 + '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - "@nolyfill/is-core-module@1.0.39": {} + '@nolyfill/is-core-module@1.0.39': {} - "@petamoriken/float16@3.9.3": {} + '@petamoriken/float16@3.9.3': {} - "@pkgjs/parseargs@0.11.0": + '@pkgjs/parseargs@0.11.0': optional: true - "@radix-ui/number@1.1.1": {} + '@radix-ui/number@1.1.1': {} - "@radix-ui/primitive@1.1.3": {} + '@radix-ui/primitive@1.1.3': {} - "@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collapsible": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-menu": 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-icons@1.3.2(react@19.2.4)": + '@radix-ui/react-icons@1.3.2(react@19.2.4)': dependencies: react: 19.2.4 - "@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@floating-ui/react-dom": 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-arrow": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-rect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/rect": 1.1.1 + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/rect': 1.1.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-slot": 1.2.4(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-context": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/number": 1.1.1 - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/number": 1.1.1 - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-visually-hidden": 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/number": 1.1.1 - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-visually-hidden": 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/rect": 1.1.1 + '@radix-ui/rect': 1.1.1 react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-visually-hidden@1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-visually-hidden@1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/rect@1.1.1": {} + '@radix-ui/rect@1.1.1': {} - "@react-dnd/asap@5.0.2": {} + '@react-dnd/asap@5.0.2': {} - "@react-dnd/invariant@4.0.2": {} + '@react-dnd/invariant@4.0.2': {} - "@react-dnd/shallowequal@4.0.2": {} + '@react-dnd/shallowequal@4.0.2': {} - "@rolldown/pluginutils@1.0.0-beta.27": {} + '@rolldown/pluginutils@1.0.0-beta.27': {} - "@rollup/pluginutils@5.3.0(rollup@4.60.0)": + '@rollup/pluginutils@5.3.0(rollup@4.60.0)': dependencies: - "@types/estree": 1.0.8 + '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: rollup: 4.60.0 - "@rollup/rollup-android-arm-eabi@4.60.0": + '@rollup/rollup-android-arm-eabi@4.60.0': optional: true - "@rollup/rollup-android-arm64@4.60.0": + '@rollup/rollup-android-arm64@4.60.0': optional: true - "@rollup/rollup-darwin-arm64@4.60.0": + '@rollup/rollup-darwin-arm64@4.60.0': optional: true - "@rollup/rollup-darwin-x64@4.60.0": + '@rollup/rollup-darwin-x64@4.60.0': optional: true - "@rollup/rollup-freebsd-arm64@4.60.0": + '@rollup/rollup-freebsd-arm64@4.60.0': optional: true - "@rollup/rollup-freebsd-x64@4.60.0": + '@rollup/rollup-freebsd-x64@4.60.0': optional: true - "@rollup/rollup-linux-arm-gnueabihf@4.60.0": + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': optional: true - "@rollup/rollup-linux-arm-musleabihf@4.60.0": + '@rollup/rollup-linux-arm-musleabihf@4.60.0': optional: true - "@rollup/rollup-linux-arm64-gnu@4.60.0": + '@rollup/rollup-linux-arm64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-arm64-musl@4.60.0": + '@rollup/rollup-linux-arm64-musl@4.60.0': optional: true - "@rollup/rollup-linux-loong64-gnu@4.60.0": + '@rollup/rollup-linux-loong64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-loong64-musl@4.60.0": + '@rollup/rollup-linux-loong64-musl@4.60.0': optional: true - "@rollup/rollup-linux-ppc64-gnu@4.60.0": + '@rollup/rollup-linux-ppc64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-ppc64-musl@4.60.0": + '@rollup/rollup-linux-ppc64-musl@4.60.0': optional: true - "@rollup/rollup-linux-riscv64-gnu@4.60.0": + '@rollup/rollup-linux-riscv64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-riscv64-musl@4.60.0": + '@rollup/rollup-linux-riscv64-musl@4.60.0': optional: true - "@rollup/rollup-linux-s390x-gnu@4.60.0": + '@rollup/rollup-linux-s390x-gnu@4.60.0': optional: true - "@rollup/rollup-linux-x64-gnu@4.60.0": + '@rollup/rollup-linux-x64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-x64-musl@4.60.0": + '@rollup/rollup-linux-x64-musl@4.60.0': optional: true - "@rollup/rollup-openbsd-x64@4.60.0": + '@rollup/rollup-openbsd-x64@4.60.0': optional: true - "@rollup/rollup-openharmony-arm64@4.60.0": + '@rollup/rollup-openharmony-arm64@4.60.0': optional: true - "@rollup/rollup-win32-arm64-msvc@4.60.0": + '@rollup/rollup-win32-arm64-msvc@4.60.0': optional: true - "@rollup/rollup-win32-ia32-msvc@4.60.0": + '@rollup/rollup-win32-ia32-msvc@4.60.0': optional: true - "@rollup/rollup-win32-x64-gnu@4.60.0": + '@rollup/rollup-win32-x64-gnu@4.60.0': optional: true - "@rollup/rollup-win32-x64-msvc@4.60.0": + '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true - "@rtsao/scc@1.1.0": {} + '@rtsao/scc@1.1.0': {} - "@rushstack/eslint-patch@1.16.1": {} + '@rushstack/eslint-patch@1.16.1': {} - "@sindresorhus/merge-streams@2.3.0": {} + '@sindresorhus/merge-streams@2.3.0': {} - "@standard-schema/utils@0.3.0": {} + '@standard-schema/utils@0.3.0': {} - "@storybook/addon-actions@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-actions@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@types/uuid": 9.0.8 + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 storybook: 8.6.18(prettier@3.8.1) uuid: 9.0.1 - "@storybook/addon-backgrounds@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-backgrounds@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 memoizerific: 1.11.3 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-controls@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-controls@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 dequal: 2.0.3 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-docs@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-docs@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@mdx-js/react": 3.1.1(@types/react@19.2.14)(react@19.2.4) - "@storybook/blocks": 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/csf-plugin": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react-dom-shim": 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) + '@storybook/blocks': 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/csf-plugin': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 transitivePeerDependencies: - - "@types/react" + - '@types/react' - "@storybook/addon-essentials@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-essentials@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/addon-actions": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-backgrounds": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-controls": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-docs": 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-highlight": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-measure": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-outline": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-toolbars": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-viewport": 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-actions': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-controls': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-docs': 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-highlight': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-measure': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-outline': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-toolbars': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-viewport': 8.6.14(storybook@8.6.18(prettier@3.8.1)) storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 transitivePeerDependencies: - - "@types/react" + - '@types/react' - "@storybook/addon-highlight@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-highlight@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 storybook: 8.6.18(prettier@3.8.1) - "@storybook/addon-interactions@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-interactions@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@storybook/instrumenter": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/test": 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/test': 8.6.14(storybook@8.6.18(prettier@3.8.1)) polished: 4.3.1 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-measure@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-measure@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 storybook: 8.6.18(prettier@3.8.1) tiny-invariant: 1.3.3 - "@storybook/addon-onboarding@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-onboarding@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/addon-outline@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-outline@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-themes@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-themes@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-toolbars@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-toolbars@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/addon-viewport@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-viewport@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: memoizerific: 1.11.3 storybook: 8.6.18(prettier@3.8.1) - "@storybook/blocks@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/blocks@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/icons": 1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@storybook/icons': 1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 optionalDependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@storybook/builder-vite@8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@storybook/builder-vite@8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@storybook/csf-plugin": 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/csf-plugin': 8.6.18(storybook@8.6.18(prettier@3.8.1)) browser-assert: 1.2.1 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) - "@storybook/components@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/components@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/core@8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/core@8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/theming": 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/theming': 8.6.18(storybook@8.6.18(prettier@3.8.1)) better-opn: 3.0.2 browser-assert: 1.2.1 esbuild: 0.25.12 @@ -12561,69 +9125,69 @@ snapshots: - supports-color - utf-8-validate - "@storybook/csf-plugin@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/csf-plugin@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) unplugin: 1.16.1 - "@storybook/csf-plugin@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/csf-plugin@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) unplugin: 1.16.1 - "@storybook/csf@0.1.13": + '@storybook/csf@0.1.13': dependencies: type-fest: 2.19.0 - "@storybook/global@5.0.0": {} + '@storybook/global@5.0.0': {} - "@storybook/icons@1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@storybook/icons@1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@storybook/instrumenter@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/instrumenter@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@vitest/utils": 2.1.9 + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.9 storybook: 8.6.18(prettier@3.8.1) - "@storybook/instrumenter@8.6.15(storybook@8.6.18(prettier@3.8.1))": + '@storybook/instrumenter@8.6.15(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@vitest/utils": 2.1.9 + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.9 storybook: 8.6.18(prettier@3.8.1) - "@storybook/manager-api@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/manager-api@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/manager-api@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/manager-api@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/preview-api@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/preview-api@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/react-dom-shim@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/react-dom-shim@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) - "@storybook/react-dom-shim@8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/react-dom-shim@8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) - "@storybook/react-vite@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@storybook/react-vite@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript": 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@rollup/pluginutils": 5.3.0(rollup@4.60.0) - "@storybook/builder-vite": 8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@storybook/react": 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) + '@storybook/builder-vite': 8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + '@storybook/react': 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.21 react: 19.2.4 @@ -12634,68 +9198,68 @@ snapshots: tsconfig-paths: 4.2.0 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) optionalDependencies: - "@storybook/test": 8.6.15(storybook@8.6.18(prettier@3.8.1)) + '@storybook/test': 8.6.15(storybook@8.6.18(prettier@3.8.1)) transitivePeerDependencies: - rollup - supports-color - typescript - "@storybook/react@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)": + '@storybook/react@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)': dependencies: - "@storybook/components": 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/global": 5.0.0 - "@storybook/manager-api": 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/preview-api": 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react-dom-shim": 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/theming": 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/components': 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/preview-api': 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/react-dom-shim': 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/theming': 8.6.18(storybook@8.6.18(prettier@3.8.1)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) optionalDependencies: - "@storybook/test": 8.6.15(storybook@8.6.18(prettier@3.8.1)) + '@storybook/test': 8.6.15(storybook@8.6.18(prettier@3.8.1)) typescript: 5.6.3 - "@storybook/test@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/test@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@storybook/instrumenter": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@testing-library/dom": 10.4.0 - "@testing-library/jest-dom": 6.5.0 - "@testing-library/user-event": 14.5.2(@testing-library/dom@10.4.0) - "@vitest/expect": 2.0.5 - "@vitest/spy": 2.0.5 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 storybook: 8.6.18(prettier@3.8.1) - "@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1))": + '@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@storybook/instrumenter": 8.6.15(storybook@8.6.18(prettier@3.8.1)) - "@testing-library/dom": 10.4.0 - "@testing-library/jest-dom": 6.5.0 - "@testing-library/user-event": 14.5.2(@testing-library/dom@10.4.0) - "@vitest/expect": 2.0.5 - "@vitest/spy": 2.0.5 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.15(storybook@8.6.18(prettier@3.8.1)) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 storybook: 8.6.18(prettier@3.8.1) - "@storybook/theming@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/theming@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/theming@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/theming@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@swc/counter@0.1.3": {} + '@swc/counter@0.1.3': {} - "@swc/helpers@0.5.15": + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 - "@tabby_ai/hijri-converter@1.0.5": {} + '@tabby_ai/hijri-converter@1.0.5': {} - "@tailwindcss/node@4.2.2": + '@tailwindcss/node@4.2.2': dependencies: - "@jridgewell/remapping": 2.3.5 + '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.20.1 jiti: 2.6.1 lightningcss: 1.32.0 @@ -12703,101 +9267,101 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.2.2 - "@tailwindcss/oxide-android-arm64@4.2.2": + '@tailwindcss/oxide-android-arm64@4.2.2': optional: true - "@tailwindcss/oxide-darwin-arm64@4.2.2": + '@tailwindcss/oxide-darwin-arm64@4.2.2': optional: true - "@tailwindcss/oxide-darwin-x64@4.2.2": + '@tailwindcss/oxide-darwin-x64@4.2.2': optional: true - "@tailwindcss/oxide-freebsd-x64@4.2.2": + '@tailwindcss/oxide-freebsd-x64@4.2.2': optional: true - "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2": + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': optional: true - "@tailwindcss/oxide-linux-arm64-gnu@4.2.2": + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': optional: true - "@tailwindcss/oxide-linux-arm64-musl@4.2.2": + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': optional: true - "@tailwindcss/oxide-linux-x64-gnu@4.2.2": + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': optional: true - "@tailwindcss/oxide-linux-x64-musl@4.2.2": + '@tailwindcss/oxide-linux-x64-musl@4.2.2': optional: true - "@tailwindcss/oxide-wasm32-wasi@4.2.2": + '@tailwindcss/oxide-wasm32-wasi@4.2.2': optional: true - "@tailwindcss/oxide-win32-arm64-msvc@4.2.2": + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': optional: true - "@tailwindcss/oxide-win32-x64-msvc@4.2.2": + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': optional: true - "@tailwindcss/oxide@4.2.2": + '@tailwindcss/oxide@4.2.2': optionalDependencies: - "@tailwindcss/oxide-android-arm64": 4.2.2 - "@tailwindcss/oxide-darwin-arm64": 4.2.2 - "@tailwindcss/oxide-darwin-x64": 4.2.2 - "@tailwindcss/oxide-freebsd-x64": 4.2.2 - "@tailwindcss/oxide-linux-arm-gnueabihf": 4.2.2 - "@tailwindcss/oxide-linux-arm64-gnu": 4.2.2 - "@tailwindcss/oxide-linux-arm64-musl": 4.2.2 - "@tailwindcss/oxide-linux-x64-gnu": 4.2.2 - "@tailwindcss/oxide-linux-x64-musl": 4.2.2 - "@tailwindcss/oxide-wasm32-wasi": 4.2.2 - "@tailwindcss/oxide-win32-arm64-msvc": 4.2.2 - "@tailwindcss/oxide-win32-x64-msvc": 4.2.2 + '@tailwindcss/oxide-android-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-x64': 4.2.2 + '@tailwindcss/oxide-freebsd-x64': 4.2.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-x64-musl': 4.2.2 + '@tailwindcss/oxide-wasm32-wasi': 4.2.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - "@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@tailwindcss/node": 4.2.2 - "@tailwindcss/oxide": 4.2.2 + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) - "@tanstack/query-core@5.95.2": {} + '@tanstack/query-core@5.95.2': {} - "@tanstack/query-devtools@5.95.2": {} + '@tanstack/query-devtools@5.95.2': {} - "@tanstack/react-query-devtools@5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4)": + '@tanstack/react-query-devtools@5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4)': dependencies: - "@tanstack/query-devtools": 5.95.2 - "@tanstack/react-query": 5.95.2(react@19.2.4) + '@tanstack/query-devtools': 5.95.2 + '@tanstack/react-query': 5.95.2(react@19.2.4) react: 19.2.4 - "@tanstack/react-query@5.95.2(react@19.2.4)": + '@tanstack/react-query@5.95.2(react@19.2.4)': dependencies: - "@tanstack/query-core": 5.95.2 + '@tanstack/query-core': 5.95.2 react: 19.2.4 - "@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@tanstack/table-core": 8.21.3 + '@tanstack/table-core': 8.21.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@tanstack/table-core@8.21.3": {} + '@tanstack/table-core@8.21.3': {} - "@testing-library/dom@10.4.0": + '@testing-library/dom@10.4.0': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/runtime": 7.29.2 - "@types/aria-query": 5.0.4 + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.29.2 + '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 dom-accessibility-api: 0.5.16 lz-string: 1.5.0 pretty-format: 27.5.1 - "@testing-library/jest-dom@6.5.0": + '@testing-library/jest-dom@6.5.0': dependencies: - "@adobe/css-tools": 4.4.4 + '@adobe/css-tools': 4.4.4 aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 @@ -12805,136 +9369,136 @@ snapshots: lodash: 4.17.23 redent: 3.0.0 - "@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)": + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: - "@testing-library/dom": 10.4.0 + '@testing-library/dom': 10.4.0 - "@tinymce/tinymce-react@5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@tinymce/tinymce-react@5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: prop-types: 15.8.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) tinymce: 7.9.2 - "@tybys/wasm-util@0.10.1": + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true - "@types/aria-query@5.0.4": {} + '@types/aria-query@5.0.4': {} - "@types/babel__core@7.20.5": + '@types/babel__core@7.20.5': dependencies: - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 - "@types/babel__generator": 7.27.0 - "@types/babel__template": 7.4.4 - "@types/babel__traverse": 7.28.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 - "@types/babel__generator@7.27.0": + '@types/babel__generator@7.27.0': dependencies: - "@babel/types": 7.29.0 + '@babel/types': 7.29.0 - "@types/babel__template@7.4.4": + '@types/babel__template@7.4.4': dependencies: - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 - "@types/babel__traverse@7.28.0": + '@types/babel__traverse@7.28.0': dependencies: - "@babel/types": 7.29.0 + '@babel/types': 7.29.0 - "@types/d3-array@3.2.2": {} + '@types/d3-array@3.2.2': {} - "@types/d3-color@3.1.3": {} + '@types/d3-color@3.1.3': {} - "@types/d3-ease@3.0.2": {} + '@types/d3-ease@3.0.2': {} - "@types/d3-interpolate@3.0.4": + '@types/d3-interpolate@3.0.4': dependencies: - "@types/d3-color": 3.1.3 + '@types/d3-color': 3.1.3 - "@types/d3-path@3.1.1": {} + '@types/d3-path@3.1.1': {} - "@types/d3-scale@4.0.9": + '@types/d3-scale@4.0.9': dependencies: - "@types/d3-time": 3.0.4 + '@types/d3-time': 3.0.4 - "@types/d3-shape@3.1.8": + '@types/d3-shape@3.1.8': dependencies: - "@types/d3-path": 3.1.1 + '@types/d3-path': 3.1.1 - "@types/d3-time@3.0.4": {} + '@types/d3-time@3.0.4': {} - "@types/d3-timer@3.0.2": {} + '@types/d3-timer@3.0.2': {} - "@types/doctrine@0.0.9": {} + '@types/doctrine@0.0.9': {} - "@types/eslint-scope@3.7.7": + '@types/eslint-scope@3.7.7': dependencies: - "@types/eslint": 9.6.1 - "@types/estree": 1.0.8 + '@types/eslint': 9.6.1 + '@types/estree': 1.0.8 - "@types/eslint@9.6.1": + '@types/eslint@9.6.1': dependencies: - "@types/estree": 1.0.8 - "@types/json-schema": 7.0.15 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 - "@types/estree@1.0.8": {} + '@types/estree@1.0.8': {} - "@types/hammerjs@2.0.46": {} + '@types/hammerjs@2.0.46': {} - "@types/js-cookie@3.0.6": {} + '@types/js-cookie@3.0.6': {} - "@types/json-schema@7.0.15": {} + '@types/json-schema@7.0.15': {} - "@types/json5@0.0.29": {} + '@types/json5@0.0.29': {} - "@types/mdx@2.0.13": {} + '@types/mdx@2.0.13': {} - "@types/node@20.19.37": + '@types/node@20.19.37': dependencies: undici-types: 6.21.0 - "@types/node@22.19.15": + '@types/node@22.19.15': dependencies: undici-types: 6.21.0 - "@types/react-dom@19.2.3(@types/react@19.2.14)": + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@types/react@19.2.14": + '@types/react@19.2.14': dependencies: csstype: 3.2.3 - "@types/resolve@1.20.6": {} + '@types/resolve@1.20.6': {} - "@types/uuid@9.0.8": {} + '@types/uuid@9.0.8': {} - "@types/webpack@5.28.5": + '@types/webpack@5.28.5': dependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 tapable: 2.3.2 webpack: 5.105.4 transitivePeerDependencies: - - "@swc/core" + - '@swc/core' - esbuild - uglify-js - webpack-cli - "@types/xlsx@0.0.36": + '@types/xlsx@0.0.36': dependencies: xlsx: 0.18.5 - "@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/type-utils": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 eslint: 9.39.4(jiti@1.21.7) ignore: 7.0.5 natural-compare: 1.4.0 @@ -12943,14 +9507,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/type-utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.57.2 eslint: 9.39.4(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -12959,14 +9523,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/type-utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 eslint: 9.39.4(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -12975,78 +9539,78 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 eslint: 9.39.4(jiti@1.21.7) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.57.2(typescript@5.6.3)": + '@typescript-eslint/project-service@8.57.2(typescript@5.6.3)': dependencies: - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.6.3) - "@typescript-eslint/types": 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.6.3) + '@typescript-eslint/types': 8.57.2 debug: 4.4.3 typescript: 5.6.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.57.2(typescript@5.9.3)": + '@typescript-eslint/project-service@8.57.2(typescript@5.9.3)': dependencies: - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.9.3) - "@typescript-eslint/types": 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/scope-manager@8.57.2": + '@typescript-eslint/scope-manager@8.57.2': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 - "@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.6.3)": + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.6.3)': dependencies: typescript: 5.6.3 - "@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)": + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)': dependencies: typescript: 5.9.3 - "@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.4(jiti@1.21.7) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -13054,11 +9618,11 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@5.6.3) @@ -13066,11 +9630,11 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -13078,14 +9642,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/types@8.57.2": {} + '@typescript-eslint/types@8.57.2': {} - "@typescript-eslint/typescript-estree@8.57.2(typescript@5.6.3)": + '@typescript-eslint/typescript-estree@8.57.2(typescript@5.6.3)': dependencies: - "@typescript-eslint/project-service": 8.57.2(typescript@5.6.3) - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.6.3) - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/project-service': 8.57.2(typescript@5.6.3) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.6.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 @@ -13095,12 +9659,12 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)": + '@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)': dependencies: - "@typescript-eslint/project-service": 8.57.2(typescript@5.9.3) - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.9.3) - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/project-service': 8.57.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 @@ -13110,260 +9674,260 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@1.21.7)) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@2.6.1)) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@2.6.1)) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/visitor-keys@8.57.2": + '@typescript-eslint/visitor-keys@8.57.2': dependencies: - "@typescript-eslint/types": 8.57.2 + '@typescript-eslint/types': 8.57.2 eslint-visitor-keys: 5.0.1 - "@unrs/resolver-binding-android-arm-eabi@1.11.1": + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true - "@unrs/resolver-binding-android-arm64@1.11.1": + '@unrs/resolver-binding-android-arm64@1.11.1': optional: true - "@unrs/resolver-binding-darwin-arm64@1.11.1": + '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true - "@unrs/resolver-binding-darwin-x64@1.11.1": + '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true - "@unrs/resolver-binding-freebsd-x64@1.11.1": + '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm64-musl@1.11.1": + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true - "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true - "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-x64-gnu@1.11.1": + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-x64-musl@1.11.1": + '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true - "@unrs/resolver-binding-wasm32-wasi@1.11.1": + '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: - "@napi-rs/wasm-runtime": 0.2.12 + '@napi-rs/wasm-runtime': 0.2.12 optional: true - "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true - "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true - "@unrs/resolver-binding-win32-x64-msvc@1.11.1": + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - "@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@babel/core": 7.29.0 - "@babel/plugin-transform-react-jsx-self": 7.27.1(@babel/core@7.29.0) - "@babel/plugin-transform-react-jsx-source": 7.27.1(@babel/core@7.29.0) - "@rolldown/pluginutils": 1.0.0-beta.27 - "@types/babel__core": 7.20.5 + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 react-refresh: 0.17.0 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - supports-color - "@vitest/expect@2.0.5": + '@vitest/expect@2.0.5': dependencies: - "@vitest/spy": 2.0.5 - "@vitest/utils": 2.0.5 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 chai: 5.3.3 tinyrainbow: 1.2.0 - "@vitest/pretty-format@2.0.5": + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 - "@vitest/pretty-format@2.1.9": + '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 - "@vitest/spy@2.0.5": + '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.2 - "@vitest/utils@2.0.5": + '@vitest/utils@2.0.5': dependencies: - "@vitest/pretty-format": 2.0.5 + '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 loupe: 3.2.1 tinyrainbow: 1.2.0 - "@vitest/utils@2.1.9": + '@vitest/utils@2.1.9': dependencies: - "@vitest/pretty-format": 2.1.9 + '@vitest/pretty-format': 2.1.9 loupe: 3.2.1 tinyrainbow: 1.2.0 - "@vue/compiler-core@3.5.30": + '@vue/compiler-core@3.5.30': dependencies: - "@babel/parser": 7.29.2 - "@vue/shared": 3.5.30 + '@babel/parser': 7.29.2 + '@vue/shared': 3.5.30 entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - "@vue/compiler-dom@3.5.30": + '@vue/compiler-dom@3.5.30': dependencies: - "@vue/compiler-core": 3.5.30 - "@vue/shared": 3.5.30 + '@vue/compiler-core': 3.5.30 + '@vue/shared': 3.5.30 - "@vue/compiler-sfc@3.5.30": + '@vue/compiler-sfc@3.5.30': dependencies: - "@babel/parser": 7.29.2 - "@vue/compiler-core": 3.5.30 - "@vue/compiler-dom": 3.5.30 - "@vue/compiler-ssr": 3.5.30 - "@vue/shared": 3.5.30 + '@babel/parser': 7.29.2 + '@vue/compiler-core': 3.5.30 + '@vue/compiler-dom': 3.5.30 + '@vue/compiler-ssr': 3.5.30 + '@vue/shared': 3.5.30 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.8 source-map-js: 1.2.1 - "@vue/compiler-ssr@3.5.30": + '@vue/compiler-ssr@3.5.30': dependencies: - "@vue/compiler-dom": 3.5.30 - "@vue/shared": 3.5.30 + '@vue/compiler-dom': 3.5.30 + '@vue/shared': 3.5.30 - "@vue/shared@3.5.30": {} + '@vue/shared@3.5.30': {} - "@webassemblyjs/ast@1.14.1": + '@webassemblyjs/ast@1.14.1': dependencies: - "@webassemblyjs/helper-numbers": 1.13.2 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - "@webassemblyjs/floating-point-hex-parser@1.13.2": {} + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - "@webassemblyjs/helper-api-error@1.13.2": {} + '@webassemblyjs/helper-api-error@1.13.2': {} - "@webassemblyjs/helper-buffer@1.14.1": {} + '@webassemblyjs/helper-buffer@1.14.1': {} - "@webassemblyjs/helper-numbers@1.13.2": + '@webassemblyjs/helper-numbers@1.13.2': dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.13.2 - "@webassemblyjs/helper-api-error": 1.13.2 - "@xtuc/long": 4.2.2 + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 - "@webassemblyjs/helper-wasm-bytecode@1.13.2": {} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - "@webassemblyjs/helper-wasm-section@1.14.1": + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/wasm-gen": 1.14.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 - "@webassemblyjs/ieee754@1.13.2": + '@webassemblyjs/ieee754@1.13.2': dependencies: - "@xtuc/ieee754": 1.2.0 + '@xtuc/ieee754': 1.2.0 - "@webassemblyjs/leb128@1.13.2": + '@webassemblyjs/leb128@1.13.2': dependencies: - "@xtuc/long": 4.2.2 + '@xtuc/long': 4.2.2 - "@webassemblyjs/utf8@1.13.2": {} + '@webassemblyjs/utf8@1.13.2': {} - "@webassemblyjs/wasm-edit@1.14.1": + '@webassemblyjs/wasm-edit@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/helper-wasm-section": 1.14.1 - "@webassemblyjs/wasm-gen": 1.14.1 - "@webassemblyjs/wasm-opt": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 - "@webassemblyjs/wast-printer": 1.14.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 - "@webassemblyjs/wasm-gen@1.14.1": + '@webassemblyjs/wasm-gen@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/ieee754": 1.13.2 - "@webassemblyjs/leb128": 1.13.2 - "@webassemblyjs/utf8": 1.13.2 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - "@webassemblyjs/wasm-opt@1.14.1": + '@webassemblyjs/wasm-opt@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/wasm-gen": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 - "@webassemblyjs/wasm-parser@1.14.1": + '@webassemblyjs/wasm-parser@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-api-error": 1.13.2 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/ieee754": 1.13.2 - "@webassemblyjs/leb128": 1.13.2 - "@webassemblyjs/utf8": 1.13.2 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - "@webassemblyjs/wast-printer@1.14.1": + '@webassemblyjs/wast-printer@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@xtuc/long": 4.2.2 + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 - "@xlsx/xlsx-populate@0.0.8": {} + '@xlsx/xlsx-populate@0.0.8': {} - "@xtuc/ieee754@1.2.0": {} + '@xtuc/ieee754@1.2.0': {} - "@xtuc/long@4.2.2": {} + '@xtuc/long@4.2.2': {} acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: @@ -13658,11 +10222,11 @@ snapshots: chart.js@4.5.1: dependencies: - "@kurkle/color": 0.3.4 + '@kurkle/color': 0.3.4 chartjs-plugin-zoom@2.2.0(chart.js@4.5.1): dependencies: - "@types/hammerjs": 2.0.46 + '@types/hammerjs': 2.0.46 chart.js: 4.5.1 hammerjs: 2.0.8 @@ -13927,7 +10491,7 @@ snapshots: detective-typescript@14.0.0(typescript@5.9.3): dependencies: - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 typescript: 5.9.3 @@ -13936,8 +10500,8 @@ snapshots: detective-vue2@2.2.0(typescript@5.9.3): dependencies: - "@dependents/detective-less": 5.0.1 - "@vue/compiler-sfc": 3.5.30 + '@dependents/detective-less': 5.0.1 + '@vue/compiler-sfc': 3.5.30 detective-es6: 5.0.1 detective-sass: 6.0.1 detective-scss: 5.0.1 @@ -13955,8 +10519,8 @@ snapshots: dnd-core@16.0.1: dependencies: - "@react-dnd/asap": 5.0.2 - "@react-dnd/invariant": 4.0.2 + '@react-dnd/asap': 5.0.2 + '@react-dnd/invariant': 4.0.2 redux: 4.2.1 dnd-multi-backend@8.1.2(dnd-core@16.0.1): @@ -13977,7 +10541,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 csstype: 3.2.3 dunder-proto@1.0.1: @@ -14146,86 +10710,86 @@ snapshots: esbuild@0.21.5: optionalDependencies: - "@esbuild/aix-ppc64": 0.21.5 - "@esbuild/android-arm": 0.21.5 - "@esbuild/android-arm64": 0.21.5 - "@esbuild/android-x64": 0.21.5 - "@esbuild/darwin-arm64": 0.21.5 - "@esbuild/darwin-x64": 0.21.5 - "@esbuild/freebsd-arm64": 0.21.5 - "@esbuild/freebsd-x64": 0.21.5 - "@esbuild/linux-arm": 0.21.5 - "@esbuild/linux-arm64": 0.21.5 - "@esbuild/linux-ia32": 0.21.5 - "@esbuild/linux-loong64": 0.21.5 - "@esbuild/linux-mips64el": 0.21.5 - "@esbuild/linux-ppc64": 0.21.5 - "@esbuild/linux-riscv64": 0.21.5 - "@esbuild/linux-s390x": 0.21.5 - "@esbuild/linux-x64": 0.21.5 - "@esbuild/netbsd-x64": 0.21.5 - "@esbuild/openbsd-x64": 0.21.5 - "@esbuild/sunos-x64": 0.21.5 - "@esbuild/win32-arm64": 0.21.5 - "@esbuild/win32-ia32": 0.21.5 - "@esbuild/win32-x64": 0.21.5 + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 esbuild@0.24.2: optionalDependencies: - "@esbuild/aix-ppc64": 0.24.2 - "@esbuild/android-arm": 0.24.2 - "@esbuild/android-arm64": 0.24.2 - "@esbuild/android-x64": 0.24.2 - "@esbuild/darwin-arm64": 0.24.2 - "@esbuild/darwin-x64": 0.24.2 - "@esbuild/freebsd-arm64": 0.24.2 - "@esbuild/freebsd-x64": 0.24.2 - "@esbuild/linux-arm": 0.24.2 - "@esbuild/linux-arm64": 0.24.2 - "@esbuild/linux-ia32": 0.24.2 - "@esbuild/linux-loong64": 0.24.2 - "@esbuild/linux-mips64el": 0.24.2 - "@esbuild/linux-ppc64": 0.24.2 - "@esbuild/linux-riscv64": 0.24.2 - "@esbuild/linux-s390x": 0.24.2 - "@esbuild/linux-x64": 0.24.2 - "@esbuild/netbsd-arm64": 0.24.2 - "@esbuild/netbsd-x64": 0.24.2 - "@esbuild/openbsd-arm64": 0.24.2 - "@esbuild/openbsd-x64": 0.24.2 - "@esbuild/sunos-x64": 0.24.2 - "@esbuild/win32-arm64": 0.24.2 - "@esbuild/win32-ia32": 0.24.2 - "@esbuild/win32-x64": 0.24.2 + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 esbuild@0.25.12: optionalDependencies: - "@esbuild/aix-ppc64": 0.25.12 - "@esbuild/android-arm": 0.25.12 - "@esbuild/android-arm64": 0.25.12 - "@esbuild/android-x64": 0.25.12 - "@esbuild/darwin-arm64": 0.25.12 - "@esbuild/darwin-x64": 0.25.12 - "@esbuild/freebsd-arm64": 0.25.12 - "@esbuild/freebsd-x64": 0.25.12 - "@esbuild/linux-arm": 0.25.12 - "@esbuild/linux-arm64": 0.25.12 - "@esbuild/linux-ia32": 0.25.12 - "@esbuild/linux-loong64": 0.25.12 - "@esbuild/linux-mips64el": 0.25.12 - "@esbuild/linux-ppc64": 0.25.12 - "@esbuild/linux-riscv64": 0.25.12 - "@esbuild/linux-s390x": 0.25.12 - "@esbuild/linux-x64": 0.25.12 - "@esbuild/netbsd-arm64": 0.25.12 - "@esbuild/netbsd-x64": 0.25.12 - "@esbuild/openbsd-arm64": 0.25.12 - "@esbuild/openbsd-x64": 0.25.12 - "@esbuild/openharmony-arm64": 0.25.12 - "@esbuild/sunos-x64": 0.25.12 - "@esbuild/win32-arm64": 0.25.12 - "@esbuild/win32-ia32": 0.25.12 - "@esbuild/win32-x64": 0.25.12 + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 escalade@3.2.0: {} @@ -14241,14 +10805,14 @@ snapshots: eslint-config-next@15.3.8(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3): dependencies: - "@next/eslint-plugin-next": 15.3.8 - "@rushstack/eslint-patch": 1.16.1 - "@typescript-eslint/eslint-plugin": 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@next/eslint-plugin-next': 15.3.8 + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@1.21.7)) @@ -14261,10 +10825,30 @@ snapshots: eslint-config-next@15.3.8(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): dependencies: - "@next/eslint-plugin-next": 15.3.8 - "@rushstack/eslint-patch": 1.16.1 - "@typescript-eslint/eslint-plugin": 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@next/eslint-plugin-next': 15.3.8 + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@2.6.1)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-config-next@15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 15.4.0 + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) @@ -14289,7 +10873,7 @@ snapshots: eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)): dependencies: - "@nolyfill/is-core-module": 1.0.39 + '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 eslint: 9.39.4(jiti@1.21.7) get-tsconfig: 4.13.7 @@ -14298,13 +10882,13 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) transitivePeerDependencies: - supports-color eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)): dependencies: - "@nolyfill/is-core-module": 1.0.39 + '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) get-tsconfig: 4.13.7 @@ -14321,7 +10905,7 @@ snapshots: dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) @@ -14332,16 +10916,16 @@ snapshots: dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)): dependencies: - "@rtsao/scc": 1.1.0 + '@rtsao/scc': 1.1.0 array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 @@ -14362,7 +10946,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14370,7 +10954,7 @@ snapshots: eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)): dependencies: - "@rtsao/scc": 1.1.0 + '@rtsao/scc': 1.1.0 array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 @@ -14391,7 +10975,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14497,8 +11081,8 @@ snapshots: eslint-plugin-storybook@0.11.6(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3): dependencies: - "@storybook/csf": 0.1.13 - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@storybook/csf': 0.1.13 + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.4(jiti@2.6.1) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -14523,18 +11107,18 @@ snapshots: eslint@9.39.4(jiti@1.21.7): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@1.21.7)) - "@eslint-community/regexpp": 4.12.2 - "@eslint/config-array": 0.21.2 - "@eslint/config-helpers": 0.4.2 - "@eslint/core": 0.17.0 - "@eslint/eslintrc": 3.3.5 - "@eslint/js": 9.39.4 - "@eslint/plugin-kit": 0.4.1 - "@humanfs/node": 0.16.7 - "@humanwhocodes/module-importer": 1.0.1 - "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.8 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -14564,18 +11148,18 @@ snapshots: eslint@9.39.4(jiti@2.6.1): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@2.6.1)) - "@eslint-community/regexpp": 4.12.2 - "@eslint/config-array": 0.21.2 - "@eslint/config-helpers": 0.4.2 - "@eslint/core": 0.17.0 - "@eslint/eslintrc": 3.3.5 - "@eslint/js": 9.39.4 - "@eslint/plugin-kit": 0.4.1 - "@humanfs/node": 0.16.7 - "@humanwhocodes/module-importer": 1.0.1 - "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.8 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -14627,7 +11211,7 @@ snapshots: estree-walker@3.0.3: dependencies: - "@types/estree": 1.0.8 + '@types/estree': 1.0.8 esutils@2.0.3: {} @@ -14643,16 +11227,16 @@ snapshots: fast-glob@3.3.1: dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 fast-glob@3.3.3: dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 @@ -14756,7 +11340,7 @@ snapshots: geotiff@2.1.3: dependencies: - "@petamoriken/float16": 3.9.3 + '@petamoriken/float16': 3.9.3 lerc: 3.0.0 pako: 2.1.0 parse-headers: 2.0.6 @@ -14834,7 +11418,7 @@ snapshots: globby@14.1.0: dependencies: - "@sindresorhus/merge-streams": 2.3.0 + '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.3 ignore: 7.0.5 path-type: 6.0.0 @@ -14896,7 +11480,7 @@ snapshots: i18next@25.10.9(typescript@5.9.3): dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 optionalDependencies: typescript: 5.9.3 @@ -15091,13 +11675,13 @@ snapshots: jackspeak@3.4.3: dependencies: - "@isaacs/cliui": 8.0.2 + '@isaacs/cliui': 8.0.2 optionalDependencies: - "@pkgjs/parseargs": 0.11.0 + '@pkgjs/parseargs': 0.11.0 jest-worker@27.5.1: dependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15331,11 +11915,11 @@ snapshots: magic-string@0.27.0: dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 magic-string@0.30.21: dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 map-or-similar@1.5.0: {} @@ -15425,9 +12009,9 @@ snapshots: next@15.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - "@next/env": 15.3.8 - "@swc/counter": 0.1.3 - "@swc/helpers": 0.5.15 + '@next/env': 15.3.8 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 busboy: 1.6.0 caniuse-lite: 1.0.30001781 postcss: 8.4.31 @@ -15435,17 +12019,17 @@ snapshots: react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(react@19.2.4) optionalDependencies: - "@next/swc-darwin-arm64": 15.3.5 - "@next/swc-darwin-x64": 15.3.5 - "@next/swc-linux-arm64-gnu": 15.3.5 - "@next/swc-linux-arm64-musl": 15.3.5 - "@next/swc-linux-x64-gnu": 15.3.5 - "@next/swc-linux-x64-musl": 15.3.5 - "@next/swc-win32-arm64-msvc": 15.3.5 - "@next/swc-win32-x64-msvc": 15.3.5 + '@next/swc-darwin-arm64': 15.3.5 + '@next/swc-darwin-x64': 15.3.5 + '@next/swc-linux-arm64-gnu': 15.3.5 + '@next/swc-linux-arm64-musl': 15.3.5 + '@next/swc-linux-x64-gnu': 15.3.5 + '@next/swc-linux-x64-musl': 15.3.5 + '@next/swc-win32-arm64-msvc': 15.3.5 + '@next/swc-win32-x64-msvc': 15.3.5 sharp: 0.34.5 transitivePeerDependencies: - - "@babel/core" + - '@babel/core' - babel-plugin-macros node-exports-info@1.6.0: @@ -15459,7 +12043,7 @@ snapshots: node-source-walk@7.0.1: dependencies: - "@babel/parser": 7.29.2 + '@babel/parser': 7.29.2 normalize-path@3.0.0: {} @@ -15513,7 +12097,7 @@ snapshots: ol-mapbox-style@10.7.0: dependencies: - "@mapbox/mapbox-gl-style-spec": 13.28.0 + '@mapbox/mapbox-gl-style-spec': 13.28.0 mapbox-to-css-font: 2.4.5 ol: 7.5.2 @@ -15582,7 +12166,7 @@ snapshots: parse-json@5.2.0: dependencies: - "@babel/code-frame": 7.29.0 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -15632,7 +12216,7 @@ snapshots: polished@4.3.1: dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 possible-typed-array-names@1.1.0: {} @@ -15699,7 +12283,7 @@ snapshots: precinct@12.2.0: dependencies: - "@dependents/detective-less": 5.0.1 + '@dependents/detective-less': 5.0.1 commander: 12.1.0 detective-amd: 6.0.1 detective-cjs: 6.1.0 @@ -15794,8 +12378,8 @@ snapshots: react-day-picker@9.14.0(react@19.2.4): dependencies: - "@date-fns/tz": 1.4.1 - "@tabby_ai/hijri-converter": 1.0.5 + '@date-fns/tz': 1.4.1 + '@tabby_ai/hijri-converter': 1.0.5 date-fns: 4.1.0 date-fns-jalali: 4.1.0-0 react: 19.2.4 @@ -15806,20 +12390,20 @@ snapshots: react-dnd-touch-backend@16.0.1: dependencies: - "@react-dnd/invariant": 4.0.2 + '@react-dnd/invariant': 4.0.2 dnd-core: 16.0.1 react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4): dependencies: - "@react-dnd/invariant": 4.0.2 - "@react-dnd/shallowequal": 4.0.2 + '@react-dnd/invariant': 4.0.2 + '@react-dnd/shallowequal': 4.0.2 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 react: 19.2.4 optionalDependencies: - "@types/node": 22.19.15 - "@types/react": 19.2.14 + '@types/node': 22.19.15 + '@types/react': 19.2.14 react-docgen-typescript@2.4.0(typescript@5.6.3): dependencies: @@ -15827,13 +12411,13 @@ snapshots: react-docgen@7.1.1: dependencies: - "@babel/core": 7.29.0 - "@babel/traverse": 7.29.0 - "@babel/types": 7.29.0 - "@types/babel__core": 7.20.5 - "@types/babel__traverse": 7.28.0 - "@types/doctrine": 0.0.9 - "@types/resolve": 1.20.6 + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 doctrine: 3.0.0 resolve: 1.22.11 strip-indent: 4.1.1 @@ -15872,7 +12456,7 @@ snapshots: react-i18next@15.7.4(i18next@25.10.9(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 html-parse-stringify: 3.0.1 i18next: 25.10.9(typescript@5.9.3) react: 19.2.4 @@ -15900,7 +12484,7 @@ snapshots: react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): dependencies: @@ -15911,7 +12495,7 @@ snapshots: use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 react-smooth@4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: @@ -15927,11 +12511,11 @@ snapshots: react: 19.2.4 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 react-transition-group@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -16006,7 +12590,7 @@ snapshots: redux@4.2.1: dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 reflect.getprototypeof@1.0.10: dependencies: @@ -16076,33 +12660,33 @@ snapshots: rollup@4.60.0: dependencies: - "@types/estree": 1.0.8 + '@types/estree': 1.0.8 optionalDependencies: - "@rollup/rollup-android-arm-eabi": 4.60.0 - "@rollup/rollup-android-arm64": 4.60.0 - "@rollup/rollup-darwin-arm64": 4.60.0 - "@rollup/rollup-darwin-x64": 4.60.0 - "@rollup/rollup-freebsd-arm64": 4.60.0 - "@rollup/rollup-freebsd-x64": 4.60.0 - "@rollup/rollup-linux-arm-gnueabihf": 4.60.0 - "@rollup/rollup-linux-arm-musleabihf": 4.60.0 - "@rollup/rollup-linux-arm64-gnu": 4.60.0 - "@rollup/rollup-linux-arm64-musl": 4.60.0 - "@rollup/rollup-linux-loong64-gnu": 4.60.0 - "@rollup/rollup-linux-loong64-musl": 4.60.0 - "@rollup/rollup-linux-ppc64-gnu": 4.60.0 - "@rollup/rollup-linux-ppc64-musl": 4.60.0 - "@rollup/rollup-linux-riscv64-gnu": 4.60.0 - "@rollup/rollup-linux-riscv64-musl": 4.60.0 - "@rollup/rollup-linux-s390x-gnu": 4.60.0 - "@rollup/rollup-linux-x64-gnu": 4.60.0 - "@rollup/rollup-linux-x64-musl": 4.60.0 - "@rollup/rollup-openbsd-x64": 4.60.0 - "@rollup/rollup-openharmony-arm64": 4.60.0 - "@rollup/rollup-win32-arm64-msvc": 4.60.0 - "@rollup/rollup-win32-ia32-msvc": 4.60.0 - "@rollup/rollup-win32-x64-gnu": 4.60.0 - "@rollup/rollup-win32-x64-msvc": 4.60.0 + '@rollup/rollup-android-arm-eabi': 4.60.0 + '@rollup/rollup-android-arm64': 4.60.0 + '@rollup/rollup-darwin-arm64': 4.60.0 + '@rollup/rollup-darwin-x64': 4.60.0 + '@rollup/rollup-freebsd-arm64': 4.60.0 + '@rollup/rollup-freebsd-x64': 4.60.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 + '@rollup/rollup-linux-arm-musleabihf': 4.60.0 + '@rollup/rollup-linux-arm64-gnu': 4.60.0 + '@rollup/rollup-linux-arm64-musl': 4.60.0 + '@rollup/rollup-linux-loong64-gnu': 4.60.0 + '@rollup/rollup-linux-loong64-musl': 4.60.0 + '@rollup/rollup-linux-ppc64-gnu': 4.60.0 + '@rollup/rollup-linux-ppc64-musl': 4.60.0 + '@rollup/rollup-linux-riscv64-gnu': 4.60.0 + '@rollup/rollup-linux-riscv64-musl': 4.60.0 + '@rollup/rollup-linux-s390x-gnu': 4.60.0 + '@rollup/rollup-linux-x64-gnu': 4.60.0 + '@rollup/rollup-linux-x64-musl': 4.60.0 + '@rollup/rollup-openbsd-x64': 4.60.0 + '@rollup/rollup-openharmony-arm64': 4.60.0 + '@rollup/rollup-win32-arm64-msvc': 4.60.0 + '@rollup/rollup-win32-ia32-msvc': 4.60.0 + '@rollup/rollup-win32-x64-gnu': 4.60.0 + '@rollup/rollup-win32-x64-msvc': 4.60.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -16138,7 +12722,7 @@ snapshots: schema-utils@4.3.3: dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 ajv: 8.18.0 ajv-formats: 2.1.1(ajv@8.18.0) ajv-keywords: 5.1.0(ajv@8.18.0) @@ -16177,34 +12761,34 @@ snapshots: sharp@0.34.5: dependencies: - "@img/colour": 1.1.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.7.4 optionalDependencies: - "@img/sharp-darwin-arm64": 0.34.5 - "@img/sharp-darwin-x64": 0.34.5 - "@img/sharp-libvips-darwin-arm64": 1.2.4 - "@img/sharp-libvips-darwin-x64": 1.2.4 - "@img/sharp-libvips-linux-arm": 1.2.4 - "@img/sharp-libvips-linux-arm64": 1.2.4 - "@img/sharp-libvips-linux-ppc64": 1.2.4 - "@img/sharp-libvips-linux-riscv64": 1.2.4 - "@img/sharp-libvips-linux-s390x": 1.2.4 - "@img/sharp-libvips-linux-x64": 1.2.4 - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 - "@img/sharp-linux-arm": 0.34.5 - "@img/sharp-linux-arm64": 0.34.5 - "@img/sharp-linux-ppc64": 0.34.5 - "@img/sharp-linux-riscv64": 0.34.5 - "@img/sharp-linux-s390x": 0.34.5 - "@img/sharp-linux-x64": 0.34.5 - "@img/sharp-linuxmusl-arm64": 0.34.5 - "@img/sharp-linuxmusl-x64": 0.34.5 - "@img/sharp-wasm32": 0.34.5 - "@img/sharp-win32-arm64": 0.34.5 - "@img/sharp-win32-ia32": 0.34.5 - "@img/sharp-win32-x64": 0.34.5 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 optional: true shebang-command@2.0.0: @@ -16290,8 +12874,8 @@ snapshots: steiger@0.5.11(typescript@5.9.3): dependencies: - "@clack/prompts": 0.9.1 - "@feature-sliced/steiger-plugin": 0.5.7(typescript@5.9.3) + '@clack/prompts': 0.9.1 + '@feature-sliced/steiger-plugin': 0.5.7(typescript@5.9.3) chokidar: 4.0.3 cosmiconfig: 9.0.1(typescript@5.9.3) effector: 23.4.4 @@ -16318,7 +12902,7 @@ snapshots: storybook@8.6.18(prettier@3.8.1): dependencies: - "@storybook/core": 8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/core': 8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1)) optionalDependencies: prettier: 3.8.1 transitivePeerDependencies: @@ -16432,7 +13016,7 @@ snapshots: sucrase@3.35.1: dependencies: - "@jridgewell/gen-mapping": 0.3.13 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 lines-and-columns: 1.2.4 mz: 2.7.0 @@ -16464,7 +13048,7 @@ snapshots: tailwindcss@3.4.19(yaml@2.8.3): dependencies: - "@alloc/quick-lru": 5.2.0 + '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.6.0 didyoumean: 1.2.2 @@ -16496,7 +13080,7 @@ snapshots: terser-webpack-plugin@5.4.0(webpack@5.105.4): dependencies: - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.46.1 @@ -16504,7 +13088,7 @@ snapshots: terser@5.46.1: dependencies: - "@jridgewell/source-map": 0.3.11 + '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -16566,7 +13150,7 @@ snapshots: tsconfig-paths@3.15.0: dependencies: - "@types/json5": 0.0.29 + '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 @@ -16711,10 +13295,10 @@ snapshots: typescript-eslint@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3): dependencies: - "@typescript-eslint/eslint-plugin": 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: @@ -16744,25 +13328,25 @@ snapshots: dependencies: napi-postinstall: 0.3.4 optionalDependencies: - "@unrs/resolver-binding-android-arm-eabi": 1.11.1 - "@unrs/resolver-binding-android-arm64": 1.11.1 - "@unrs/resolver-binding-darwin-arm64": 1.11.1 - "@unrs/resolver-binding-darwin-x64": 1.11.1 - "@unrs/resolver-binding-freebsd-x64": 1.11.1 - "@unrs/resolver-binding-linux-arm-gnueabihf": 1.11.1 - "@unrs/resolver-binding-linux-arm-musleabihf": 1.11.1 - "@unrs/resolver-binding-linux-arm64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-arm64-musl": 1.11.1 - "@unrs/resolver-binding-linux-ppc64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-riscv64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-riscv64-musl": 1.11.1 - "@unrs/resolver-binding-linux-s390x-gnu": 1.11.1 - "@unrs/resolver-binding-linux-x64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-x64-musl": 1.11.1 - "@unrs/resolver-binding-wasm32-wasi": 1.11.1 - "@unrs/resolver-binding-win32-arm64-msvc": 1.11.1 - "@unrs/resolver-binding-win32-ia32-msvc": 1.11.1 - "@unrs/resolver-binding-win32-x64-msvc": 1.11.1 + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: @@ -16784,7 +13368,7 @@ snapshots: react: 19.2.4 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): dependencies: @@ -16792,7 +13376,7 @@ snapshots: react: 19.2.4 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 use-sync-external-store@1.6.0(react@19.2.4): dependencies: @@ -16820,13 +13404,13 @@ snapshots: victory-vendor@36.9.2: dependencies: - "@types/d3-array": 3.2.2 - "@types/d3-ease": 3.0.2 - "@types/d3-interpolate": 3.0.4 - "@types/d3-scale": 4.0.9 - "@types/d3-shape": 3.1.8 - "@types/d3-time": 3.0.4 - "@types/d3-timer": 3.0.2 + '@types/d3-array': 3.2.2 + '@types/d3-ease': 3.0.2 + '@types/d3-interpolate': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-timer': 3.0.2 d3-array: 3.2.4 d3-ease: 3.0.1 d3-interpolate: 3.0.1 @@ -16852,7 +13436,7 @@ snapshots: postcss: 8.5.8 rollup: 4.60.0 optionalDependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 fsevents: 2.3.3 lightningcss: 1.32.0 terser: 5.46.1 @@ -16866,7 +13450,7 @@ snapshots: rollup: 4.60.0 tinyglobby: 0.2.15 optionalDependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 @@ -16888,12 +13472,12 @@ snapshots: webpack@5.105.4: dependencies: - "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.8 - "@types/json-schema": 7.0.15 - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/wasm-edit": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.16.0 acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 @@ -16914,7 +13498,7 @@ snapshots: watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: - - "@swc/core" + - '@swc/core' - esbuild - uglify-js @@ -17080,7 +13664,7 @@ snapshots: zustand@5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)): optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 immer: 10.2.0 react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) From b8a1dad2b75ddd1505ea111aa2b8bd4f2167b596 Mon Sep 17 00:00:00 2001 From: jcchoi Date: Mon, 11 May 2026 22:12:16 +0900 Subject: [PATCH 13/15] =?UTF-8?q?=ED=88=B4=ED=8C=81=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../verification/VerificationTargetDialog.tsx | 57 ++++++++++++++++--- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx b/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx index ce9b1d26e..dddea3314 100644 --- a/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx +++ b/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx @@ -5,6 +5,7 @@ import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Search } from "lucide-react"; +import { Tooltip, TooltipContent, TooltipTrigger } from "@common/components"; import { CodeSelect } from "@/entities/code/ui/code-select"; import { verificationTargetManagementApi } from "@/entities/statistics/api/verification-target-management-service"; @@ -320,7 +321,18 @@ export function VerificationTargetDialog({ {tabValue !== "IMR" && ( - 중요도 계수(μ) + + + + + 중요도 계수(μ) + + + + +

통계청(Statistics Canada) 등에서 기업 단위의 주기적 조사 데이터(수익, 매출, 생산량 등)에서 이상치(Outlier)를 탐지할 때, 데이터의 크기(규모)에 따라 이상치 판별 기준을 다르게 적용하기 위해 도입된 가중치 요인

+
+
- 백분위수 기준값(pct) + + + + 백분위수 기준값(pct) + + + + +

데이터가 정규분포를 따르지 않아도, 데이터의 하위/상위 몇 % 위치를 기준으로 이상치 범위를 정할지 결정

+
+
)} @@ -397,7 +419,18 @@ export function VerificationTargetDialog({ {tabValue !== "IMR" && ( - 스케일 조정 계수(A) + + + + + 스케일 조정 계수(A) + + + + +

데이터의 크기가 다른 경우, 특히 규모가 작은 업체가 이상치로 잘못 탐지되는 것을 막기 위해 변환된 비율(Symmetric Ratios)에 규모(size)의 영향을 보정하는 역할

+
+
- - 임계 계수(c) + + + + + 임계 계수(c) + + + + +

데이터의 분포가 중앙값(median)을 중심으로 얼마나 흩어져 있는지를 바탕으로 이상치 범위를 결정

+
+
Date: Tue, 12 May 2026 14:31:45 +0900 Subject: [PATCH 14/15] =?UTF-8?q?[as]=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/.env.example | 4 +- apps/_template/middleware.ts | 2 +- apps/_template/src/shared/config/env.ts | 11 +- apps/as/.env.example | 5 - apps/as/README.md | 95 ++--- .../(with-base-layout)/instl-sncn/page.tsx | 1 - apps/as/app/(with-base-layout)/layout.tsx | 20 +- apps/as/app/(with-base-layout)/page.tsx | 1 + apps/as/app/api/proxy/[...url]/route.ts | 94 +++++ apps/as/app/auth/login/page.tsx | 2 + apps/as/app/layout.tsx | 7 +- apps/as/docs/approval-line-management/SPEC.md | 194 +++++------ apps/as/eslint.config.mjs | 45 ++- apps/as/middleware.ts | 3 +- apps/as/package.json | 7 +- apps/as/pages/.gitkeep | 0 apps/as/pages/README.md | 9 + apps/as/public/images/bg_login.jpg | Bin 0 -> 135228 bytes apps/as/src/app/layouts/base-layout.tsx | 72 ++-- apps/as/src/app/providers/index.tsx | 43 +-- apps/as/src/app/styles/components.css | 129 ------- apps/as/src/app/styles/globals.css | 30 +- .../as/src/entities/auth/api/login-service.ts | 92 +++++ apps/as/src/entities/auth/index.ts | 2 + .../as/src/entities/auth/lib/auth-wrapper.tsx | 45 +++ .../as/src/entities/auth/lib/token-manager.ts | 82 +++++ .../entities/auth/model/login-interface.ts | 9 + apps/as/src/entities/instl-sncn/api/index.ts | 23 -- .../instl-sncn/api/instl-sncn-service-impl.ts | 222 ------------ .../as/src/entities/instl-sncn/api/queries.ts | 312 ----------------- apps/as/src/entities/instl-sncn/index.ts | 61 ---- apps/as/src/entities/instl-sncn/lib/format.ts | 47 --- apps/as/src/entities/instl-sncn/lib/index.ts | 18 - .../src/entities/instl-sncn/lib/validation.ts | 73 ---- .../entities/instl-sncn/model/constants.ts | 30 -- .../as/src/entities/instl-sncn/model/index.ts | 22 -- .../instl-sncn/model/instl-sncn-service.ts | 151 -------- .../as/src/entities/instl-sncn/model/types.ts | 158 --------- apps/as/src/entities/menu/index.ts | 2 +- apps/as/src/entities/menu/model/index.ts | 1 - apps/as/src/pages/auth/login/index.ts | 1 + .../as/src/pages/auth/login/ui/login-page.tsx | 120 +++++++ apps/as/src/pages/auth/login/ui/login.css | 325 ++++++++++++++++++ apps/as/src/pages/home/index.ts | 1 + apps/as/src/pages/home/ui/main-page.tsx | 9 + apps/as/src/pages/instl-sncn/index.ts | 1 - .../pages/instl-sncn/model/table-columns.tsx | 80 ----- apps/as/src/pages/instl-sncn/ui/list-page.tsx | 178 ---------- apps/as/src/shared/api/client.ts | 4 +- apps/as/src/shared/api/index.ts | 2 +- apps/as/src/shared/config/api.ts | 9 + apps/as/src/shared/config/env.ts | 13 +- apps/as/src/shared/config/index.ts | 1 + apps/as/src/shared/lib/cookie.ts | 51 +-- apps/as/src/shared/lib/dayjs.ts | 7 +- apps/as/src/shared/lib/index.ts | 5 +- apps/as/src/shared/lib/use-user-store.ts | 16 + apps/as/src/shared/providers/index.ts | 1 + .../src/shared/providers/store-provider.tsx | 22 ++ apps/as/src/shared/store/index.ts | 1 + apps/as/src/shared/store/user-store.ts | 57 +++ apps/as/tailwind.config.ts | 6 +- apps/as/tsconfig.json | 6 +- pnpm-lock.yaml | 61 +--- 64 files changed, 1214 insertions(+), 1887 deletions(-) delete mode 100644 apps/as/.env.example delete mode 100644 apps/as/app/(with-base-layout)/instl-sncn/page.tsx create mode 100644 apps/as/app/(with-base-layout)/page.tsx create mode 100644 apps/as/app/api/proxy/[...url]/route.ts create mode 100644 apps/as/app/auth/login/page.tsx delete mode 100644 apps/as/pages/.gitkeep create mode 100644 apps/as/pages/README.md create mode 100755 apps/as/public/images/bg_login.jpg delete mode 100644 apps/as/src/app/styles/components.css create mode 100644 apps/as/src/entities/auth/api/login-service.ts create mode 100644 apps/as/src/entities/auth/index.ts create mode 100644 apps/as/src/entities/auth/lib/auth-wrapper.tsx create mode 100644 apps/as/src/entities/auth/lib/token-manager.ts create mode 100644 apps/as/src/entities/auth/model/login-interface.ts delete mode 100644 apps/as/src/entities/instl-sncn/api/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts delete mode 100644 apps/as/src/entities/instl-sncn/api/queries.ts delete mode 100644 apps/as/src/entities/instl-sncn/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/lib/format.ts delete mode 100644 apps/as/src/entities/instl-sncn/lib/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/lib/validation.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/constants.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/types.ts delete mode 100644 apps/as/src/entities/menu/model/index.ts create mode 100644 apps/as/src/pages/auth/login/index.ts create mode 100644 apps/as/src/pages/auth/login/ui/login-page.tsx create mode 100755 apps/as/src/pages/auth/login/ui/login.css create mode 100644 apps/as/src/pages/home/index.ts create mode 100644 apps/as/src/pages/home/ui/main-page.tsx delete mode 100644 apps/as/src/pages/instl-sncn/index.ts delete mode 100644 apps/as/src/pages/instl-sncn/model/table-columns.tsx delete mode 100644 apps/as/src/pages/instl-sncn/ui/list-page.tsx create mode 100644 apps/as/src/shared/config/api.ts create mode 100644 apps/as/src/shared/lib/use-user-store.ts create mode 100644 apps/as/src/shared/providers/index.ts create mode 100644 apps/as/src/shared/providers/store-provider.tsx create mode 100644 apps/as/src/shared/store/index.ts create mode 100644 apps/as/src/shared/store/user-store.ts diff --git a/apps/_template/.env.example b/apps/_template/.env.example index f9794a6f8..318a30511 100644 --- a/apps/_template/.env.example +++ b/apps/_template/.env.example @@ -1,8 +1,8 @@ -# apps/as/shared/config/env.ts 참고 +# src/shared/config/env.ts 참고 NEXT_PUBLIC_PORT= NEXT_PUBLIC_PROXY_HOST= NEXT_PUBLIC_SITE_ID= -NEXT_PUBLIC_SERVER_API_URL= +SERVER_API_URL= # 401 시 브라우저 리다이렉트 대상 NEXT_PUBLIC_AUTH_LOGIN_REDIRECT_URL=/auth/login diff --git a/apps/_template/middleware.ts b/apps/_template/middleware.ts index da09c5840..e6bbba40a 100644 --- a/apps/_template/middleware.ts +++ b/apps/_template/middleware.ts @@ -1,7 +1,7 @@ import { NextRequest, NextResponse } from "next/server"; import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; -const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; +const serverApiUrl = process.env.SERVER_API_URL ?? "http://localhost:3000"; // CSP 헤더 설정 함수 (img-src만) function addSecurityHeaders(response: NextResponse): NextResponse { diff --git a/apps/_template/src/shared/config/env.ts b/apps/_template/src/shared/config/env.ts index 4f08c722a..a1825f415 100644 --- a/apps/_template/src/shared/config/env.ts +++ b/apps/_template/src/shared/config/env.ts @@ -1,11 +1,8 @@ export const PORT = process.env.NEXT_PUBLIC_PORT || "3000"; -export const PROXY_HOST = - process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; -export const SERVER_API_URL = process.env.NEXT_PUBLIC_SERVER_API_URL; +export const PROXY_HOST = process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; export const SITE_ID = process.env.NEXT_PUBLIC_SITE_ID || "AS"; +export const SERVER_API_URL = process.env.SERVER_API_URL; export const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; -export const ACCESS_TOKEN = - process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; -export const REFRESH_TOKEN = - process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; +export const ACCESS_TOKEN = process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; +export const REFRESH_TOKEN = process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; export const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/as/.env.example b/apps/as/.env.example deleted file mode 100644 index b2d706024..000000000 --- a/apps/as/.env.example +++ /dev/null @@ -1,5 +0,0 @@ -# apps/as/shared/config/env.ts 참고 -NEXT_PUBLIC_PORT= -NEXT_PUBLIC_PROXY_HOST= -NEXT_PUBLIC_SITE_ID= -NEXT_PUBLIC_SERVER_API_URL= diff --git a/apps/as/README.md b/apps/as/README.md index 79d0b2e2a..c48c1534a 100644 --- a/apps/as/README.md +++ b/apps/as/README.md @@ -1,4 +1,4 @@ -# AS Application +# Template Application Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 @@ -18,12 +18,12 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 이 프로젝트는 **Feature-Sliced Design v2.1**과 **FSD 공식 Next.js 가이드**에 맞춰 구성되어 있습니다. Next.js `app/`은 라우트만 담당하고, 실제 레이어는 `src/` 아래에 있습니다. ``` -as/ +_template/ ├── app/ # Next.js App Router (루트) — 라우트·레이아웃 진입점만 │ ├── layout.tsx # 루트 레이아웃 (src/app에서 providers, styles import) │ └── (with-base-layout)/ │ ├── layout.tsx # BaseLayout 래퍼 (src/app/layouts에서 import) -│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' +│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' │ ├── pages/ # 빈 폴더 + README (Next.js가 src/pages를 Pages Router로 쓰지 않도록) │ └── README.md @@ -31,7 +31,7 @@ as/ └── src/ # FSD 레이어 (실제 코드) ├── app/ # App 레이어 (슬라이스 없음, 세그먼트만) │ ├── providers/ # 전역 Providers (QueryClient 등) - │ ├── styles/ # 글로벌 스타일 (globals.css) + │ ├── styles/ # 글로벌 스타일 (globals.css) │ └── layouts/ # 공통 레이아웃 컴포넌트 (BaseLayoutWrapper) │ ├── pages/ # Pages 레이어 (페이지 슬라이스) @@ -112,43 +112,20 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 비즈니스 로직 없음, 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 외부 라이브러리만 사용 가능 (다른 레이어 불가) -## 레이어 간 Import 규칙 - -> **핵심 규칙**: 슬라이스 내의 모듈(파일)은 **오직 하위 레이어**에 있는 다른 슬라이스만 import할 수 있습니다. - -예시: -- `features/auth-login/ui/form.tsx`는 `entities/user`와 `shared/ui`를 import 가능 -- 하지만 다른 `features/post-create`나 상위 레이어인 `widgets`는 import 불가 -- 같은 슬라이스 내부(`features/auth-login/`)의 다른 파일들은 자유롭게 import 가능 - -## Public API 규칙 - -> **슬라이스 외부의 모듈은 슬라이스의 Public API만 참조할 수 있으며, 내부 파일 구조에 직접 접근할 수 없습니다.** - -모든 슬라이스(및 슬라이스가 없는 레이어의 세그먼트)는 반드시 `index.ts`를 통해 Public API를 정의해야 합니다. - -```typescript -// ✅ 올바른 import -import { LoginForm } from 'features/auth-login'; - -// ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; -``` - ## 시작하기 ```bash # 의존성 설치 -npm install +pnpm install # 개발 서버 실행 -npm run dev +pnpm run dev # 프로덕션 빌드 -npm run build +pnpm run build # 프로덕션 서버 실행 -npm start +pnpm start ``` ## 환경 변수 @@ -168,16 +145,16 @@ NEXT_PUBLIC_API_URL=http://localhost:3000/api ```typescript // ✅ 올바른 import (하위 레이어) // features/auth-login/ui/form.tsx -import { User } from 'entities/user'; -import { Button } from 'shared/ui/button'; +import { User } from "entities/user"; +import { Button } from "shared/ui/button"; // ❌ 잘못된 import (같은 레이어) // features/auth-login/ui/form.tsx -import { PostForm } from 'features/post-create'; // 금지! +import { PostForm } from "features/post-create"; // 금지! // ❌ 잘못된 import (상위 레이어) // features/auth-login/ui/form.tsx -import { Header } from 'widgets/header'; // 금지! +import { Header } from "widgets/header"; // 금지! ``` ### 2. Public API 규칙 @@ -186,10 +163,10 @@ import { Header } from 'widgets/header'; // 금지! ```typescript // ✅ 올바른 import (Public API 사용) -import { LoginForm } from 'features/auth-login'; +import { LoginForm } from "features/auth-login"; // ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; +import { LoginForm } from "features/auth-login/ui/login-form"; ``` **Public API 작성 시 주의사항**: @@ -199,44 +176,12 @@ import { LoginForm } from 'features/auth-login/ui/login-form'; ```typescript // ❌ 나쁜 예시 -export * from './ui/Comment'; -export * from './model/comments'; +export * from "./ui/Comment"; +export * from "./model/comments"; // ✅ 좋은 예시 -export { Comment } from './ui/comment'; -export { CommentForm } from './ui/comment-form'; -export { useComments } from './model/use-comments'; -export type { Comment, CommentFormData } from './model/types'; -``` - -### 3. 슬라이스 독립성 - -- **Zero Coupling**: 같은 레이어의 슬라이스들은 서로 독립적이어야 합니다 -- **High Cohesion**: 슬라이스는 주요 목표와 관련된 대부분의 코드를 포함해야 합니다 -- 예외: Entities 레이어에서 필요한 경우 `@x` 표기법으로 cross-import 가능 - -### 4. 세그먼트 명명 규칙 - -세그먼트 이름은 **목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다: - -- ❌ **나쁜 이름**: `components`, `hooks`, `types` (무엇인지만 설명) -- ✅ **좋은 이름**: `ui`, `api`, `model`, `lib` (왜 있는지 설명) - -## 코드 규칙 - -- TypeScript 사용 (strict mode) -- 함수형 컴포넌트 사용 -- Named exports 선호 -- Tailwind CSS 사용 -- ESLint + Prettier 적용 -- Public API는 명시적으로 정의 (와일드카드 export 지양) - -## 아키텍처 린팅 - -코드베이스의 FSD 규칙 준수를 자동으로 검증하려면 [Steiger](https://github.com/feature-sliced/steiger)를 사용하세요. - -```bash -# Steiger 설치 및 실행 -npm install -D @feature-sliced/steiger -npx steiger src +export { Comment } from "./ui/comment"; +export { CommentForm } from "./ui/comment-form"; +export { useComments } from "./model/use-comments"; +export type { Comment, CommentFormData } from "./model/types"; ``` diff --git a/apps/as/app/(with-base-layout)/instl-sncn/page.tsx b/apps/as/app/(with-base-layout)/instl-sncn/page.tsx deleted file mode 100644 index 324982f41..000000000 --- a/apps/as/app/(with-base-layout)/instl-sncn/page.tsx +++ /dev/null @@ -1 +0,0 @@ -export { InstlSncnListPage as default } from "@/pages/instl-sncn"; diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx index 24e6e7276..71dd294a8 100644 --- a/apps/as/app/(with-base-layout)/layout.tsx +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -1,9 +1,11 @@ -import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; - -interface WithBaseLayoutProps { - children: React.ReactNode; -} - -export default function WithBaseLayout({ children }: WithBaseLayoutProps) { - return {children}; -} +import type { ReactNode } from "react"; + +import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; + +interface WithBaseLayoutProps { + children: ReactNode; +} + +export default function WithBaseLayout({ children }: WithBaseLayoutProps) { + return {children}; +} diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx new file mode 100644 index 000000000..82a918b59 --- /dev/null +++ b/apps/as/app/(with-base-layout)/page.tsx @@ -0,0 +1 @@ +export { MainPage as default } from "@/pages/home"; diff --git a/apps/as/app/api/proxy/[...url]/route.ts b/apps/as/app/api/proxy/[...url]/route.ts new file mode 100644 index 000000000..36ec17557 --- /dev/null +++ b/apps/as/app/api/proxy/[...url]/route.ts @@ -0,0 +1,94 @@ +import { cookies } from "next/headers"; +import { NextResponse } from "next/server"; + +import { + ACCESS_TOKEN, + AUTH_USER_ID, + CLAIM_NAME, + REFRESH_TOKEN, + SERVER_API_URL, + SITE_ID, +} from "@/shared/config"; + +async function handler( + request: Request, + params: { url: string[] }, + method: "GET" | "POST" | "PUT" | "DELETE", +) { + const cookieStore = await cookies(); + const headers: Record = { + "Content-Type": "application/json", + "X-Site-Id": SITE_ID, + }; + let body = {}; + const isRefreshHandler = params.url.includes("refresh"); + + // silent refresh + if (isRefreshHandler) { + const refreshToken = cookieStore.get(REFRESH_TOKEN); + headers[CLAIM_NAME] = refreshToken?.value ?? ""; + + if (!headers[CLAIM_NAME]) { + return NextResponse.json({ message: "Can't refresh" }, { status: 401 }); + } + } + + try { + if (!isRefreshHandler) { + body = await request.json(); + } + + const result = await fetch(`${SERVER_API_URL}/${params.url.join("/")}`, { + method, + headers, + body: JSON.stringify(body), + }); + + if (!result.ok) { + return NextResponse.json({ message: "Invalid Credentials" }, { status: 401 }); + } + + const accessToken = result.headers.get(ACCESS_TOKEN); + const refreshToken = result.headers.get(REFRESH_TOKEN); + const userId = result.headers.get(AUTH_USER_ID); + + if (accessToken && userId) { + const response = NextResponse.json({ + [ACCESS_TOKEN]: accessToken, + [AUTH_USER_ID]: userId, + }); + + const forwardedHost = request.headers.get("x-forwarded-host"); + const host = request.headers.get("host"); + const actualHost = forwardedHost || host || new URL(request.url).hostname.toString(); + + // 운영 환경에서 domain 설정 + const domain = actualHost.includes("hasuon.or.kr") ? ".hasuon.or.kr" : actualHost; + + if (refreshToken) { + cookieStore.set(REFRESH_TOKEN, refreshToken, { + httpOnly: true, + sameSite: "strict", + domain: domain, + path: "/", + }); + } + + return response; + } + + return NextResponse.json({ message: "Invalid Credentials" }, { status: 401 }); + } catch (error) { + return NextResponse.json({ message: "Server Error", error }, { status: 500 }); + } +} + +export async function POST(request: Request, props: { params: Promise<{ url: string[] }> }) { + const params = await props.params; + return handler(request, params, "POST"); +} + +export async function PUT(request: Request, props: { params: Promise<{ url: string[] }> }) { + const params = await props.params; + return handler(request, params, "PUT"); +} diff --git a/apps/as/app/auth/login/page.tsx b/apps/as/app/auth/login/page.tsx new file mode 100644 index 000000000..8f9e6adc6 --- /dev/null +++ b/apps/as/app/auth/login/page.tsx @@ -0,0 +1,2 @@ +import { LoginPage } from "@/pages/auth/login"; +export default LoginPage; diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index 5293046d6..3b64ab52f 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,10 +1,9 @@ import type { Metadata } from "next"; import { cookies } from "next/headers"; + import { Providers } from "@/app/providers"; -import { setCookie } from "@/shared/lib"; -import { SITE_ID } from "@/shared/config"; + import "@/app/styles/globals.css"; -import "@/app/styles/components.css"; export const metadata: Metadata = { title: "행정지원시스템", @@ -15,8 +14,6 @@ interface RootLayoutProps { children: React.ReactNode; } -setCookie("site-id-key", SITE_ID); - export default async function RootLayout({ children }: RootLayoutProps) { const theme = (await cookies()).get("site-theme-key"); diff --git a/apps/as/docs/approval-line-management/SPEC.md b/apps/as/docs/approval-line-management/SPEC.md index 42e9999c1..8528f8241 100644 --- a/apps/as/docs/approval-line-management/SPEC.md +++ b/apps/as/docs/approval-line-management/SPEC.md @@ -2,19 +2,19 @@ ## 1. 기본 정보 -| 항목 | 내용 | -| ---------- | -------------------------------------------------------- | -| 버전 | 0.1 (초안) | -| 프로세스명 | UI설계 | -| 화면명 | 결재선 관리 | -| 화면 유형 | [x] 조회 [x] 입력 [x] 수정 [x] 삭제 [ ] 출력 | -| 메뉴 경로 | 디지털행정지원 > 사이트관리 > 결재선 관리 | +| 항목 | 내용 | +| ---------- | -------------------------------------------- | +| 버전 | 0.1 (초안) | +| 프로세스명 | UI설계 | +| 화면명 | 결재선 관리 | +| 화면 유형 | [v] 조회 [v] 입력 [v] 수정 [v] 삭제 [ ] 출력 | +| 메뉴 경로 | 디지털행정지원 > 시스템관리 > 결재선 관리 | --- ## 2. 화면 목적 -전자결재 처리에 사용할 **결재서식**(템플릿)을 등록·관리하고, 각 서식별로 **결재선**(접수 → 검토 → 최종승인 단계)을 구성한다. 좌측 상단의 결재서식 목록에서 하나를 선택하면 하단 영역에 해당 서식의 결재 단계(결재자/순서/구분)가 표시되며, 사용자는 결재자 추가·수정·삭제와 결재선 저장을 수행한다. +전자결재 처리에 사용할 **결재서식**(템플릿)을 등록·관리하고, 각 서식별로 **결재선**(접수 -> 검토 -> 승인 -> 최종승인 단계)을 구성한다. 상단의 결재서식 목록에서 하나를 선택하면 하단 영역에 해당 서식의 결재 단계(결재자/순서/구분)가 표시되며, 사용자는 결재자 추가·수정·삭제와 결재선 저장을 수행한다. --- @@ -28,10 +28,10 @@ ├──────────────────────────────────────────────────────────────────────────────┤ │ [영역 A] 전자결재선 관리 목록 [서식 등록] │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ -│ │ 전자결재서식아이디 | 결재서식명 | 문서구분 | 등록일시 | 관리 │ │ +│ │ 전자결재서식아이디 | 결재서식명 | 문서구분 | 등록일시 | 관리 │ │ │ ├──────────────────────────────────────────────────────────────────────┤ │ -│ │ TMPL-0001 (선택 행 강조) … [수정][삭제] │ │ -│ │ TMPL-0002 … [수정][삭제] │ │ +│ │ TMPL-0001 (선택 행 강조) … [수정][삭제] │ │ +│ │ TMPL-0002 … [수정][삭제] │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ ├──────────────────────────────────────────────────────────────────────────────┤ │ [영역 B] 결재선 관리 선택된 서식: TMPL-0001 │ @@ -164,39 +164,39 @@ END ### 4-1. 헤더 / 툴바 -| 항목 | 내용 | -| ---------- | ------------------------------------------------------------- | -| 섹션 타이틀 | 전자결재선 관리 목록 | -| 우측 버튼 | **[서식 등록]** — 결재서식 등록 다이얼로그 오픈 | +| 항목 | 내용 | +| ----------- | ----------------------------------------------- | +| 섹션 타이틀 | 전자결재선 관리 목록 | +| 우측 버튼 | **[서식 등록]** — 결재서식 등록 다이얼로그 오픈 | ### 4-2. 그리드 컬럼 -| 컬럼명 | Field | 타입 | 비고 | -| ------------------ | -------------------- | ------ | ------------------------------------------------- | -| 전자결재서식아이디 | `elctAtrzTmpltId` | string | 예) `TMPL-0001` (서버 자동 발급, TBD) | -| 결재서식명 | `atrzTmpltNm` | string | 예) `설치인가 검토 결재` | -| 문서구분 | `docSeNm` | string | 예) `설치인가`, `기본계획` (코드/명 매핑 TBD) | -| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | -| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | +| 컬럼명 | Field | 타입 | 비고 | +| ------------------ | ----------------- | ------ | --------------------------------------------- | +| 전자결재서식아이디 | `elctAtrzTmpltId` | string | 예) `TMPL-0001` (서버 자동 발급, TBD) | +| 결재서식명 | `atrzTmpltNm` | string | 예) `설치인가 검토 결재` | +| 문서구분 | `docSeNm` | string | 예) `설치인가`, `기본계획` (코드/명 매핑 TBD) | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | - 행 클릭 시: 해당 서식을 **선택 상태**로 만들고 영역 B 라벨(`선택된 서식: {전자결재서식아이디}`)과 영역 B-2 그리드를 갱신한다. - 페이지네이션: TBD (스크린샷에는 미표시). ### 4-3. 버튼 -| 버튼명 | 위치 | 동작 | -| ---------- | ------------------ | -------------------------------------------------------------------- | -| 서식 등록 | 섹션 우측 상단 | 결재서식 등록 다이얼로그 오픈 (입력 항목·필수값 TBD) | -| 수정 | 행별 | 결재서식 수정 다이얼로그 오픈 (해당 행 값으로 초기화) | -| 삭제 | 행별 | 확인 다이얼로그 후 삭제. 선택 중인 서식이면 영역 B 상태도 초기화. | +| 버튼명 | 위치 | 동작 | +| --------- | -------------- | ----------------------------------------------------------------- | +| 서식 등록 | 섹션 우측 상단 | 결재서식 등록 다이얼로그 오픈 (입력 항목·필수값 TBD) | +| 수정 | 행별 | 결재서식 수정 다이얼로그 오픈 (해당 행 값으로 초기화) | +| 삭제 | 행별 | 확인 다이얼로그 후 삭제. 선택 중인 서식이면 영역 B 상태도 초기화. | ### 4-4. 다이얼로그(개요) -| 다이얼로그명 | 트리거 | 입력 항목(예상) | 비고 | -| ---------------------- | ---------------- | ------------------------------------------------ | -------------------------- | -| 결재서식 등록 | [서식 등록] 클릭 | 결재서식명, 문서구분(드롭다운) | 등록 성공 시 영역 A 갱신 | -| 결재서식 수정 | 행별 [수정] | 결재서식명, 문서구분 | 기존 값으로 초기화 | -| 결재서식 삭제 확인 | 행별 [삭제] | (확인/취소) | | +| 다이얼로그명 | 트리거 | 입력 항목(예상) | 비고 | +| ------------------ | ---------------- | ------------------------------ | ------------------------ | +| 결재서식 등록 | [서식 등록] 클릭 | 결재서식명, 문서구분(드롭다운) | 등록 성공 시 영역 A 갱신 | +| 결재서식 수정 | 행별 [수정] | 결재서식명, 문서구분 | 기존 값으로 초기화 | +| 결재서식 삭제 확인 | 행별 [삭제] | (확인/취소) | | --- @@ -206,21 +206,21 @@ END ### 5-1. 헤더 / 상태 표시 -| 항목 | 내용 | -| ------------ | ------------------------------------------------------------------------------------- | -| 섹션 타이틀 | 결재선 관리 | -| 우측 라벨 | `선택된 서식: {전자결재서식아이디}` — 영역 A에서 선택한 서식 ID를 강조 색으로 표시. 미선택 시 영역 B 비활성. | +| 항목 | 내용 | +| ----------- | ------------------------------------------------------------------------------------------------------------ | +| 섹션 타이틀 | 결재선 관리 | +| 우측 라벨 | `선택된 서식: {전자결재서식아이디}` — 영역 A에서 선택한 서식 ID를 강조 색으로 표시. 미선택 시 영역 B 비활성. | ### 5-2. 영역 B-1: 결재자 입력 폼 #### 필드 정의 -| 표시명 | 입력 유형 | 필수 | 기본값 | 데이터 소스 | API 파라미터 매핑 | 비고 | -| -------------------- | -------------------- | ---- | ------------ | ---------------------- | ----------------- | --------------------------------------------------------------- | -| 결재선아이디(자동발급) | 텍스트(읽기 전용) | — | `APLN-XXXX` | 서버 자동 발급 (TBD) | TBD | 입력 불가. 저장 시 서버 발급. 표시값은 미발급 자리표시(또는 임시 ID). | -| 결재구분 | 드롭다운 | 예 | `접수` | 코드 (TBD) | TBD | 옵션: **접수 / 검토 / 최종승인** (그리드 행 기준) | -| 결재자명 | 텍스트(읽기 전용) | 예 | `""` | [검토인력 선택] 결과 | TBD | 자유 입력 불가. 다이얼로그 선택 결과로 채움. | -| 결재순서번호 | 숫자 입력 | 예 | `1` | — | TBD | 1 이상의 정수. 동일 서식 내 중복 검증 필요. | +| 표시명 | 입력 유형 | 필수 | 기본값 | 데이터 소스 | API 파라미터 매핑 | 비고 | +| ---------------------- | ----------------- | ---- | ----------- | -------------------- | ----------------- | --------------------------------------------------------------------- | +| 결재선아이디(자동발급) | 텍스트(읽기 전용) | — | `APLN-XXXX` | 서버 자동 발급 (TBD) | TBD | 입력 불가. 저장 시 서버 발급. 표시값은 미발급 자리표시(또는 임시 ID). | +| 결재구분 | 드롭다운 | 예 | `접수` | 코드 (TBD) | TBD | 옵션: **접수 / 검토 / 최종승인** (그리드 행 기준) | +| 결재자명 | 텍스트(읽기 전용) | 예 | `""` | [검토인력 선택] 결과 | TBD | 자유 입력 불가. 다이얼로그 선택 결과로 채움. | +| 결재순서번호 | 숫자 입력 | 예 | `1` | — | TBD | 1 이상의 정수. 동일 서식 내 중복 검증 필요. | 플레이스홀더 / 표시 텍스트: @@ -229,35 +229,35 @@ END #### 버튼 -| 버튼명 | 동작 | -| --------------- | ------------------------------------------------------------------------------------------------------------- | -| 검토인력 선택 | **검토인력 선택 다이얼로그** 오픈. 선택 시 `결재자명`과 내부 `결재자 ID`를 폼 상태에 반영. | -| 결재자 추가 | 입력 폼 값을 영역 B-2 그리드에 **임시 행**으로 추가하고 폼을 초기화한다. (서버 호출 없음, 저장 시 일괄 반영.) | -| 결재선 저장 | 영역 B-2의 결재선 목록을 일괄 저장 API로 전송한다. 성공 시 그리드 재조회 + 토스트 표시. | -| 초기화 | 입력 폼을 기본값으로 리셋(결재구분=접수, 결재자명=빈값, 결재순서번호=1). | +| 버튼명 | 동작 | +| ------------- | ------------------------------------------------------------------------------------------------------------- | +| 검토인력 선택 | **검토인력 선택 다이얼로그** 오픈. 선택 시 `결재자명`과 내부 `결재자 ID`를 폼 상태에 반영. | +| 결재자 추가 | 입력 폼 값을 영역 B-2 그리드에 **임시 행**으로 추가하고 폼을 초기화한다. (서버 호출 없음, 저장 시 일괄 반영.) | +| 결재선 저장 | 영역 B-2의 결재선 목록을 일괄 저장 API로 전송한다. 성공 시 그리드 재조회 + 토스트 표시. | +| 초기화 | 입력 폼을 기본값으로 리셋(결재구분=접수, 결재자명=빈값, 결재순서번호=1). | > 정책 메모: **[결재자 추가]** 와 **[결재선 저장]** 의 분리에 대해서는 두 가지 운영이 가능하다. 본 SPEC 초안은 그리드에 임시 행을 누적해 두고 [결재선 저장] 시점에 서버에 일괄 반영하는 모델을 가정한다. 실제 구현 방식(추가 즉시 저장 vs 일괄 저장)은 백엔드 API 확정 후 재정의(TBD). #### 다이얼로그 -| 다이얼로그명 | 트리거 | 표시 내용 / 입력 항목 | 결과 | -| -------------------- | -------------------- | -------------------------------------------------------- | --------------------------------------------------- | -| 검토인력 선택 | [검토인력 선택] | 사용자 검색 필터(이름/소속 등 TBD), 사용자 목록(단일 선택) | 선택된 사용자 정보를 입력 폼에 반영 | -| 결재자 수정 | B-2 행별 [수정] | 결재구분, 결재자명(선택), 결재순서번호 | 확인 시 해당 행 갱신 | -| 결재자 삭제 확인 | B-2 행별 [삭제] | (확인/취소) | 확인 시 해당 행 삭제 | +| 다이얼로그명 | 트리거 | 표시 내용 / 입력 항목 | 결과 | +| ---------------- | --------------- | ---------------------------------------------------------- | ----------------------------------- | +| 검토인력 선택 | [검토인력 선택] | 사용자 검색 필터(이름/소속 등 TBD), 사용자 목록(단일 선택) | 선택된 사용자 정보를 입력 폼에 반영 | +| 결재자 수정 | B-2 행별 [수정] | 결재구분, 결재자명(선택), 결재순서번호 | 확인 시 해당 행 갱신 | +| 결재자 삭제 확인 | B-2 행별 [삭제] | (확인/취소) | 확인 시 해당 행 삭제 | ### 5-3. 영역 B-2: 결재선 그리드 #### 그리드 컬럼 -| 컬럼명 | Field | 타입 | 비고 | -| -------------- | ---------------- | ------ | ---------------------------------------------------------- | -| 결재선아이디 | `atrzLineId` | string | 예) `APLN-0001` (서버 자동 발급, TBD) | -| 결재순서번호 | `atrzSeqNo` | number | 1부터 시작. 단계 순서. | -| 결재구분 | `atrzSeNm` | string | `접수` / `검토` / `최종승인` | -| 결재자명 | `atrzUserNm` | string | 검토인력 선택 시 채워짐 | -| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | -| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | +| 컬럼명 | Field | 타입 | 비고 | +| ------------ | ------------ | ------ | ------------------------------------- | +| 결재선아이디 | `atrzLineId` | string | 예) `APLN-0001` (서버 자동 발급, TBD) | +| 결재순서번호 | `atrzSeqNo` | number | 1부터 시작. 단계 순서. | +| 결재구분 | `atrzSeNm` | string | `접수` / `검토` / `최종승인` | +| 결재자명 | `atrzUserNm` | string | 검토인력 선택 시 채워짐 | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | - 표시 정렬: 기본 `결재순서번호` 오름차순. - 임시 행(서버 미저장)과 저장된 행의 시각적 구분 필요(예: ID 컬럼 표기 또는 행 스타일). 세부 UI는 TBD. @@ -271,35 +271,35 @@ END ### 6-1. 공통 -| 항목 | 내용 | -| ----------- | ------------------------------------------------------------------- | -| Base prefix | TBD (예: `/server` 또는 결재 서비스 prefix) | -| 인증 | JWT 토큰 기반 (Authorization 헤더) | -| 클라이언트 | TBD (예: `@/entities/approval-line`) | +| 항목 | 내용 | +| ----------- | ------------------------------------------- | +| Base prefix | TBD (예: `/server` 또는 결재 서비스 prefix) | +| 인증 | JWT 토큰 기반 (Authorization 헤더) | +| 클라이언트 | TBD (예: `@/entities/approval-line`) | ### 6-2. 전자결재서식 (영역 A) -| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | -| --------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | -| 결재서식 목록 조회 | TBD | TBD | TBD | TBD | TBD | -| 결재서식 등록 | TBD | TBD | TBD | TBD | TBD | -| 결재서식 수정 | TBD | TBD | TBD | TBD | TBD | -| 결재서식 삭제 | TBD | TBD | TBD | TBD | TBD | +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------ | ------ | --- | ----------- | ------------ | ---------------------- | +| 결재서식 목록 조회 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 등록 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 삭제 | TBD | TBD | TBD | TBD | TBD | ### 6-3. 결재선 (영역 B) -| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | -| ------------------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | -| 결재선 목록 조회(서식별) | TBD | TBD | `{ elctAtrzTmpltId }` (TBD) | TBD | TBD | -| 결재선 추가/일괄 저장 | TBD | TBD | `{ elctAtrzTmpltId, lines[] }` (TBD) | TBD | TBD | -| 결재선 수정 | TBD | TBD | TBD | TBD | TBD | -| 결재선 삭제 | TBD | TBD | TBD | TBD | TBD | +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------------ | ------ | --- | ------------------------------------ | ------------ | ---------------------- | +| 결재선 목록 조회(서식별) | TBD | TBD | `{ elctAtrzTmpltId }` (TBD) | TBD | TBD | +| 결재선 추가/일괄 저장 | TBD | TBD | `{ elctAtrzTmpltId, lines[] }` (TBD) | TBD | TBD | +| 결재선 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재선 삭제 | TBD | TBD | TBD | TBD | TBD | ### 6-4. 검토인력 (다이얼로그) -| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | -| ------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | -| 검토인력 목록 조회 | TBD | TBD | TBD (검색 필터) | TBD | TBD | +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------ | ------ | --- | --------------- | ------------ | ---------------------- | +| 검토인력 목록 조회 | TBD | TBD | TBD (검색 필터) | TBD | TBD | --- @@ -315,25 +315,25 @@ END ### 7-2. 모듈·파일 배치(제안) -| 구분 | 경로 | -| ---------------- | --------------------------------------------------------------------------------------------- | -| 라우트(App Router) | `apps/as/app/(with-base-layout)/approval-line-management/page.tsx` | -| 페이지 컴포넌트 | `apps/as/src/pages/approval-line-management/index.ts`
`.../ui/approval-line-management-page.tsx` | -| 위젯(영역 단위) | `apps/as/src/widgets/approval-template-list/`
`apps/as/src/widgets/approval-line-editor/` | -| 피처(상호작용) | `apps/as/src/features/approver-picker/` (검토인력 선택 다이얼로그) | -| 엔티티(도메인) | `apps/as/src/entities/approval-template/`
`apps/as/src/entities/approval-line/` | -| 그리드 컬럼 정의 | `entities/approval-template/model/approval-template-table-columns.tsx`
`entities/approval-line/model/approval-line-table-columns.tsx` | -| API 클라이언트 | `entities/approval-template/api/*`, `entities/approval-line/api/*` (TBD) | +| 구분 | 경로 | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | +| 라우트(App Router) | `apps/as/app/(with-base-layout)/approval-line-management/page.tsx` | +| 페이지 컴포넌트 | `apps/as/src/pages/approval-line-management/index.ts`
`.../ui/approval-line-management-page.tsx` | +| 위젯(영역 단위) | `apps/as/src/widgets/approval-template-list/`
`apps/as/src/widgets/approval-line-editor/` | +| 피처(상호작용) | `apps/as/src/features/approver-picker/` (검토인력 선택 다이얼로그) | +| 엔티티(도메인) | `apps/as/src/entities/approval-template/`
`apps/as/src/entities/approval-line/` | +| 그리드 컬럼 정의 | `entities/approval-template/model/approval-template-table-columns.tsx`
`entities/approval-line/model/approval-line-table-columns.tsx` | +| API 클라이언트 | `entities/approval-template/api/*`, `entities/approval-line/api/*` (TBD) | ### 7-3. 영역별 UI 매핑 -| 영역 | 주요 UI | 비고 | -| ----- | ----------------------------------------------------------------------------- | --------------------------------------------------- | -| A | 섹션 헤더 + Button(`서식 등록`) + DataTable (행 선택, 행별 Action 버튼) | 선택 행 강조, 행 클릭으로 영역 B 갱신 | -| B 헤더| 상태 라벨 `선택된 서식: {ID}` | 미선택 시 영역 B-1·B-2 비활성 | -| B-1 | 읽기 전용 Input(아이디), Select(결재구분), Input+Button(결재자/검토인력 선택), NumberInput(순서번호), Action 버튼 3종(`결재자 추가`/`결재선 저장`/`초기화`) | 폼 유효성 검증 후 그리드에 임시 행 추가 | -| B-2 | DataTable (행별 [수정][삭제]), 임시 행 시각적 구분 | 기본 정렬: 결재순서번호 ASC | -| 공통 | Dialog(검토인력 선택, 서식 등록/수정, 결재자 수정, 삭제 확인) | 디자인 시스템의 `Dialog` 컴포넌트 사용 | +| 영역 | 주요 UI | 비고 | +| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | +| A | 섹션 헤더 + Button(`서식 등록`) + DataTable (행 선택, 행별 Action 버튼) | 선택 행 강조, 행 클릭으로 영역 B 갱신 | +| B 헤더 | 상태 라벨 `선택된 서식: {ID}` | 미선택 시 영역 B-1·B-2 비활성 | +| B-1 | 읽기 전용 Input(아이디), Select(결재구분), Input+Button(결재자/검토인력 선택), NumberInput(순서번호), Action 버튼 3종(`결재자 추가`/`결재선 저장`/`초기화`) | 폼 유효성 검증 후 그리드에 임시 행 추가 | +| B-2 | DataTable (행별 [수정][삭제]), 임시 행 시각적 구분 | 기본 정렬: 결재순서번호 ASC | +| 공통 | Dialog(검토인력 선택, 서식 등록/수정, 결재자 수정, 삭제 확인) | 디자인 시스템의 `Dialog` 컴포넌트 사용 | ### 7-4. 데이터 흐름(요약) diff --git a/apps/as/eslint.config.mjs b/apps/as/eslint.config.mjs index 05e726d1b..19ccdfae3 100644 --- a/apps/as/eslint.config.mjs +++ b/apps/as/eslint.config.mjs @@ -1,18 +1,33 @@ -import { defineConfig, globalIgnores } from "eslint/config"; -import nextVitals from "eslint-config-next/core-web-vitals"; -import nextTs from "eslint-config-next/typescript"; +import { FlatCompat } from "@eslint/eslintrc"; +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import baseEsLintConfig from "../../eslint.config.mjs"; -const eslintConfig = defineConfig([ - ...nextVitals, - ...nextTs, - // Override default ignores of eslint-config-next. - globalIgnores([ - // Default ignores of eslint-config-next: - ".next/**", - "out/**", - "build/**", - "next-env.d.ts", - ]), -]); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), + ...baseEsLintConfig, + { + rules: { + "react-hooks/exhaustive-deps": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-wrapper-object-types": "warn", + }, + }, +]; export default eslintConfig; diff --git a/apps/as/middleware.ts b/apps/as/middleware.ts index da09c5840..d9239dc40 100644 --- a/apps/as/middleware.ts +++ b/apps/as/middleware.ts @@ -1,7 +1,8 @@ import { NextRequest, NextResponse } from "next/server"; + import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; -const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; +const serverApiUrl = process.env.SERVER_API_URL ?? "http://localhost:3000"; // CSP 헤더 설정 함수 (img-src만) function addSecurityHeaders(response: NextResponse): NextResponse { diff --git a/apps/as/package.json b/apps/as/package.json index 92b2e6482..efafdcc50 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -13,7 +13,6 @@ "@common/assets": "workspace:*", "@common/components": "workspace:*", "@common/network": "workspace:*", - "@faker-js/faker": "^10.3.0", "@hookform/resolvers": "^4.1.3", "@tanstack/react-query": "^5.75.5", "@tanstack/react-query-devtools": "^5.75.5", @@ -26,9 +25,11 @@ "zod": "^3.24.2" }, "devDependencies": { + "@eslint/eslintrc": "^3", "@types/js-cookie": "^3.0.6", "eslint": "^9.0.0", - "eslint-config-next": "15.4.0", + "eslint-config-next": "15.3.8", + "eslint-plugin-react-hooks": "^5.0.0", "postcss": "^8.4.49", "prettier": "^3.4.2", "prettier-plugin-tailwindcss": "^0.6.11", @@ -36,4 +37,4 @@ "tailwindcss": "^3.4.14", "typescript": "^5.7.2" } -} \ No newline at end of file +} diff --git a/apps/as/pages/.gitkeep b/apps/as/pages/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/as/pages/README.md b/apps/as/pages/README.md new file mode 100644 index 000000000..e011944c3 --- /dev/null +++ b/apps/as/pages/README.md @@ -0,0 +1,9 @@ +# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) + +Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, +프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. + +- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. +- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. + +[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) diff --git a/apps/as/public/images/bg_login.jpg b/apps/as/public/images/bg_login.jpg new file mode 100755 index 0000000000000000000000000000000000000000..b7793d16a07f4870260d6fd16f31a9ef158c90a7 GIT binary patch literal 135228 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 z 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 literal 0 HcmV?d00001 diff --git a/apps/as/src/app/layouts/base-layout.tsx b/apps/as/src/app/layouts/base-layout.tsx index 72b95709f..54fb55c52 100644 --- a/apps/as/src/app/layouts/base-layout.tsx +++ b/apps/as/src/app/layouts/base-layout.tsx @@ -1,35 +1,37 @@ -"use client"; - -import { useCallback } from "react"; -import { usePathname, useRouter } from "next/navigation"; -import { useQueryClient } from "@tanstack/react-query"; -import { BaseLayout } from "@common/components"; -import type { MenuItem } from "@/entities/menu"; -import { PageLayout } from "@/shared/ui/page-layout"; - -interface BaseLayoutWrapperProps { - children: React.ReactNode; -} - -export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { - const router = useRouter(); - const pathname = usePathname(); - const queryClient = useQueryClient(); - - const handleMenuClick = useCallback( - (item: MenuItem) => { - router.push(item.urlPath); - }, - [router], - ); - - return ( - - {children} - - ); -} +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; + +import { useQueryClient } from "@tanstack/react-query"; + +import { PageLayout } from "@/shared/ui/page-layout"; +import type { MenuItem } from "@/entities/menu"; +import { BaseLayout } from "@common/components"; + +interface BaseLayoutWrapperProps { + children: React.ReactNode; +} + +export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/as/src/app/providers/index.tsx b/apps/as/src/app/providers/index.tsx index ff37c57b7..476609d59 100644 --- a/apps/as/src/app/providers/index.tsx +++ b/apps/as/src/app/providers/index.tsx @@ -1,20 +1,23 @@ -"use client"; - -import { QueryClientProvider } from "@tanstack/react-query"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; -import { queryClient } from "@/shared/lib"; - -interface ProvidersProps { - children: React.ReactNode; -} - -export function Providers({ children }: ProvidersProps) { - return ( - - {children} -
- -
-
- ); -} +"use client"; + +import { QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; + +import { queryClient } from "@/shared/lib"; +import { StoreProvider } from "@/shared/providers"; +import { AuthWrapper } from "@/entities/auth"; + +interface ProvidersProps { + children: React.ReactNode; +} + +export function Providers({ children }: ProvidersProps) { + return ( + + + {children} + + + + ); +} diff --git a/apps/as/src/app/styles/components.css b/apps/as/src/app/styles/components.css deleted file mode 100644 index 5b9742c0f..000000000 --- a/apps/as/src/app/styles/components.css +++ /dev/null @@ -1,129 +0,0 @@ -.card { - position: relative; - margin: 0.6rem; - box-sizing: border-box; - min-height: 2rem; - border-radius: 0.5rem; - padding: 0.6rem; - font-size: 1.3rem; - color: #666; -} - -.card_width10 { - width: calc(10% - 12px); -} - -.card_width20 { - width: calc(20% - 12px); -} - -.card_width25 { - width: calc(25% - 12px); -} - -.card_width30 { - width: calc(30% - 12px); -} - -.card_width33 { - width: calc(33.333% - 12px); -} - -.card_width40 { - width: calc(40% - 12px); -} - -.card_width45 { - width: calc(45% - 12px); -} - -.card_width50 { - width: calc(50% - 12px); -} - -.card_width60 { - width: calc(60% - 12px); -} - -.card_width66 { - width: calc(66.666% - 12px); -} - -.card_width70 { - width: calc(70% - 12px); -} - -.card_width75 { - width: calc(75% - 12px); -} - -.card_width80 { - width: calc(80% - 12px); -} - -.card_width90 { - width: calc(90% - 12px); -} - -.card_width100 { - width: calc(100% - 12px); -} - -.card_nopadding { - padding: 0 !important; -} - -.card_nomargin { - width: 100%; - margin: 0 !important; - padding: 0 !important; -} - -.topline { - border-top: 1px solid #ccc; -} - -.bottomline { - border-bottom: 1px solid #e6eef3; - background: #fff; -} - -.card-border { - border: 1px solid #dbe2e6; - background-color: rgba(255, 255, 255, 0.6); - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); -} - -.card-header { - margin-top: -0.6rem; - margin-left: -0.6rem; - margin-right: -0.6rem; - display: flex; - align-items: center; - justify-content: space-between; - border-bottom: 1px solid #e1e7eb; - padding: 1rem; -} - -.card-footer { - margin-left: -0.6rem; - margin-right: -0.6rem; - margin-top: 0.5rem; - display: flex; - align-items: center; - justify-content: center; - border-top: 1px solid #e1e7eb; - padding-top: 1rem; - padding-bottom: 1rem; -} - -/* 블랙 테마 */ -[data-theme="black"] { - .card-border { - background-color: rgba(255, 255, 255, 0.065); - border-color: #38383a; - } - .card-header { - border-bottom-color: #3f4042; - } -} diff --git a/apps/as/src/app/styles/globals.css b/apps/as/src/app/styles/globals.css index 91c6845e5..e557f947b 100644 --- a/apps/as/src/app/styles/globals.css +++ b/apps/as/src/app/styles/globals.css @@ -1,15 +1,15 @@ -@import "@common/assets/styles/base.css"; -@import "@common/assets/styles/diveicon.css"; -@import "@common/components/index.css"; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -html, -body { - color: var(--foreground); - background: var(--background); - font-family: "Noto Sans KR", sans-serif; - font-size: 10px; -} +@import "@common/assets/styles/base.css"; +@import "@common/assets/styles/diveicon.css"; +@import "@common/components/index.css"; + +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, +body { + color: var(--foreground); + background: var(--background); + font-family: "Noto Sans KR", sans-serif; + font-size: 10px; +} diff --git a/apps/as/src/entities/auth/api/login-service.ts b/apps/as/src/entities/auth/api/login-service.ts new file mode 100644 index 000000000..2dc784e97 --- /dev/null +++ b/apps/as/src/entities/auth/api/login-service.ts @@ -0,0 +1,92 @@ +import { AxiosError } from "axios"; + +import { + ACCESS_TOKEN, + AUTH_USER_ID, + CLAIM_NAME, + ENDPOINT, + JWT_EXPIRATION_TIME, +} from "@/shared/config"; + +import { tokenManager } from "../lib/token-manager"; +import type { ILogin, LoginService } from "../model/login-interface"; + +export class LoginApiService implements LoginService { + private static instance: LoginApiService; + + private constructor() {} + + public static getInstance(): LoginApiService { + if (!LoginApiService.instance) { + LoginApiService.instance = new LoginApiService(); + } + return LoginApiService.instance; + } + + public async login(payload: ILogin): Promise { + try { + const response = await fetch(`/api/proxy${ENDPOINT.USER_SERVICE.LOGIN}`, { + method: "POST", + body: JSON.stringify({ + userId: payload.userId, + password: payload.password, + }), + }); + + const data = await response.json(); + console.log("data ", data); + const accessToken = data[ACCESS_TOKEN]; + const tokenId = data[AUTH_USER_ID]; + + if (!accessToken || !tokenId) { + if (data.message == "Invalid Credentials") { + throw new Error("아이디와 비밀번호가 일치하지 않습니다."); + } else if (data.message == "User not found") { + throw new Error("존재하지 않는 아이디입니다."); + } else if (data.message == "User is not active") { + throw new Error("활성화되지 않은 계정입니다."); + } else if (data.message == "User is not verified") { + throw new Error("이메일 인증이 필요합니다."); + } else { + throw new Error(data.message); + } + } + + tokenManager.setToken(CLAIM_NAME, accessToken); + tokenManager.setToken(AUTH_USER_ID, tokenId); + tokenManager.setupRefreshTimer(() => this.silentRefresh(), JWT_EXPIRATION_TIME); + } catch (error) { + if (error instanceof AxiosError) { + throw new Error(`Login 실패 ${error.response?.data?.message}`); + } + throw new Error(`Login 실패 ${error}`); + } + } + + public async silentRefresh(): Promise { + try { + const response = await fetch(`/api/proxy${ENDPOINT.USER_SERVICE.SILENT_REFRESH}`, { + method: "PUT", + }); + + const data = await response.json(); + const accessToken = data[ACCESS_TOKEN]; + const tokenId = data[AUTH_USER_ID]; + + if (!accessToken || !tokenId) { + throw new Error("Missing required authentication tokens"); + } + + tokenManager.setToken(CLAIM_NAME, accessToken); + tokenManager.setToken(AUTH_USER_ID, tokenId); + } catch (error) { + tokenManager.clearAuthToken(); + if (error instanceof AxiosError) { + throw new Error(`Silent refresh failed: ${error.response?.data?.message}`); + } + throw new Error(`Silent refresh failed: ${error}`); + } + } +} + +export const LoginApi = LoginApiService.getInstance(); diff --git a/apps/as/src/entities/auth/index.ts b/apps/as/src/entities/auth/index.ts new file mode 100644 index 000000000..97e142225 --- /dev/null +++ b/apps/as/src/entities/auth/index.ts @@ -0,0 +1,2 @@ +export { LoginApi } from "./api/login-service"; +export { AuthWrapper } from "./lib/auth-wrapper"; diff --git a/apps/as/src/entities/auth/lib/auth-wrapper.tsx b/apps/as/src/entities/auth/lib/auth-wrapper.tsx new file mode 100644 index 000000000..e92957163 --- /dev/null +++ b/apps/as/src/entities/auth/lib/auth-wrapper.tsx @@ -0,0 +1,45 @@ +"use client"; + +import { useEffect } from "react"; + +import { client } from "@/shared/api"; +import { AUTH_LOGIN_REDIRECT_URL, AUTH_USER_ID, ENDPOINT } from "@/shared/config"; +import { getCookie, useUserStore } from "@/shared/lib"; +import type { IUserInfo } from "@/shared/store"; +import { isAtLoginRedirectUrl } from "@common/network"; + +const AuthWrapper = ({ children }: { children: React.ReactNode }) => { + const { userInfo, setUserInfo } = useUserStore((state) => state); + + async function authCheck() { + if (isAtLoginRedirectUrl(AUTH_LOGIN_REDIRECT_URL)) { + return; + } + + const userId = getCookie(AUTH_USER_ID); + if (!userId) { + throw new Error("Missing required authentication tokens"); + } + + const response = await client.get(`${ENDPOINT.USER_SERVICE.USERS}/info/me`); + if (!userInfo) setUserInfo(response.data); + } + + useEffect(() => { + (async () => { + try { + await authCheck(); + } catch (error) { + console.error(error); + setUserInfo(null); + if (!isAtLoginRedirectUrl(AUTH_LOGIN_REDIRECT_URL)) { + window.location.assign(AUTH_LOGIN_REDIRECT_URL); + } + } + })(); + }, []); + + return <>{children}; +}; + +export { AuthWrapper }; diff --git a/apps/as/src/entities/auth/lib/token-manager.ts b/apps/as/src/entities/auth/lib/token-manager.ts new file mode 100644 index 000000000..c5eeffc3a --- /dev/null +++ b/apps/as/src/entities/auth/lib/token-manager.ts @@ -0,0 +1,82 @@ +import { AUTH_USER_ID, CLAIM_NAME } from "@/shared/config"; +import { getCookie, removeCookie,setCookie } from "@/shared/lib"; + +export class TokenManager { + private static instance: TokenManager; + private refreshTimer: NodeJS.Timeout | null = null; + + private constructor() {} + + public static getInstance(): TokenManager { + if (!TokenManager.instance) { + TokenManager.instance = new TokenManager(); + } + return TokenManager.instance; + } + + public getToken(key: string): string | undefined { + return getCookie(key); + } + + public setToken(key: string, value: string): void { + const domain = this.getCookieDomain(); + + setCookie(key, value, { + secure: window.location.protocol === "https:", + sameSite: "lax", + domain: domain, + path: "/", // 모든 경로에서 접근 가능 + }); + } + + + private getCookieDomain(): string | undefined { + const hostname = window.location.hostname; + + // 개발 환경에서는 localhost 도메인 사용 + if (hostname === "localhost" || hostname === "127.0.0.1") { + return undefined; // localhost에서는 도메인 설정하지 않음 + } + + // 운영 환경에서는 서브도메인을 포함한 최상위 도메인 사용 + if (hostname.includes("hasuon.or.kr")) { + return ".hasuon.or.kr"; + } + + // 기타 환경에서는 현재 호스트명 사용 + return hostname; + } + + public removeToken(key: string): void { + const domain = this.getCookieDomain(); + removeCookie(key, { domain, path: "/" }); + } + + public setupRefreshTimer( + callback: () => Promise, + expirationTime: number, + ): void { + if (this.refreshTimer) { + clearTimeout(this.refreshTimer); + } + + this.refreshTimer = setTimeout(() => { + callback().catch((error) => { + console.error("Silent refresh failed:", error); + this.clearAuthToken(); + }); + }, expirationTime - 60000); + } + + public clearAuthToken(): void { + if (this.refreshTimer) { + clearTimeout(this.refreshTimer); + this.refreshTimer = null; + } + + this.removeToken(CLAIM_NAME); + this.removeToken(AUTH_USER_ID); + } +} + +export const tokenManager = TokenManager.getInstance(); diff --git a/apps/as/src/entities/auth/model/login-interface.ts b/apps/as/src/entities/auth/model/login-interface.ts new file mode 100644 index 000000000..5aaf53044 --- /dev/null +++ b/apps/as/src/entities/auth/model/login-interface.ts @@ -0,0 +1,9 @@ +export interface ILogin { + userId: string; + password: string; +} + +export interface LoginService { + login(payload: ILogin): Promise; + silentRefresh(): Promise; +} diff --git a/apps/as/src/entities/instl-sncn/api/index.ts b/apps/as/src/entities/instl-sncn/api/index.ts deleted file mode 100644 index 2e4d9c20b..000000000 --- a/apps/as/src/entities/instl-sncn/api/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { instlSncnService } from "./instl-sncn-service-impl"; -export { - instlSncnKeys, - useListPageLoadCnfm, - useRegistPageLoadCnfm, - useViewPageLoadCnfm, - useSelectInstlCnfmListCnt, - useSelectInstlCnfmList, - useSelectInstlCnfmDtl, - useInsertInstlCnfm, - useMergeInstlCnfm, - useDeleteInstlCnfm, - useUpdatePrgrsSttusCnfm, - useSaveInstlCnfmPrgrsStts, - useSaveInstlCnfmSanctnPrgrsStts, - useInsertInstlCnfmSpl, - useSelectEssntlInstlCnfmAtchFileList, - useSelectInstlCnfmExmntFile, - useSelectInstlCnfmEtcFile, - useSelectInstlCnfmSpl, - useSelectInstlCnfmExmntResult, - useSelectInstlCnfmOpinionList, -} from "./queries"; diff --git a/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts b/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts deleted file mode 100644 index 356f8a033..000000000 --- a/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { apiClient } from "@/shared/api"; -import type { - InstlSncnService, - FnrscVO, - ListPageResult, - RegistPageData, - ViewPageData, - SplmntRqst, -} from "../model"; - -class InstlSncnServiceImpl implements InstlSncnService { - async selectInstlCnfmListCount(vo: FnrscVO): Promise { - const response = await apiClient.get<{ count: number }>( - "/fnrsc/cnfm/list/count", - { params: vo } - ); - return response.data.count; - } - - async selectInstlCnfmList(vo: FnrscVO): Promise { - const response = await apiClient.get("/fnrsc/cnfm/list", { - params: vo, - }); - return response.data; - } - - async listPageLoadCnfm(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/list/pageLoad.do", - { - params: { - ...vo, - pageIndex: vo.pageIndex || 1, - recordCountPerPage: vo.recordCountPerPage || 10, - pageSize: vo.pageSize || 10, - }, - } - ); - return response.data; - } - - async registPageLoadCnfm(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/regist/pageLoad.do", - { - params: vo, - } - ); - return response.data; - } - - async insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise { - const formData = new FormData(); - - Object.entries(vo).forEach(([key, value]) => { - if (value !== undefined && value !== null) { - if (typeof value === "object") { - formData.append(key, JSON.stringify(value)); - } else { - formData.append(key, String(value)); - } - } - }); - - if (files && files.length > 0) { - files.forEach((file) => { - formData.append("uploadFile", file); - }); - } - - await apiClient.post("/fnrsc/cnfm/regist/insertFnrscCnfm.do", formData, { - headers: { - "Content-Type": "multipart/form-data", - }, - }); - } - - async mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise { - const formData = new FormData(); - - Object.entries(vo).forEach(([key, value]) => { - if (value !== undefined && value !== null) { - if (typeof value === "object") { - formData.append(key, JSON.stringify(value)); - } else { - formData.append(key, String(value)); - } - } - }); - - if (files && files.length > 0) { - files.forEach((file) => { - formData.append("uploadFile", file); - }); - } - - await apiClient.post("/fnrsc/cnfm/regist/mergeFnrscCnfm.do", formData, { - headers: { - "Content-Type": "multipart/form-data", - }, - }); - } - - async selectInstlCnfmDetail(vo: FnrscVO): Promise { - const response = await apiClient.get("/fnrsc/cnfm/detail", { - params: vo, - }); - return response.data; - } - - async viewPageLoadCnfm(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/view/pageLoad.do", - { - params: vo, - } - ); - return response.data; - } - - async updateProgrsSttusCnfm(vo: FnrscVO): Promise { - await apiClient.post("/fnrsc/cnfm/update/updateProgrsSttus.do", vo); - } - - async saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise { - const formData = new FormData(); - - Object.entries(vo).forEach(([key, value]) => { - if (value !== undefined && value !== null) { - formData.append(key, String(value)); - } - }); - - if (file) { - formData.append("uploadFile", file); - } - - await apiClient.post( - "/fnrsc/cnfm/update/saveProgrsSttus.do", - formData, - { - headers: { - "Content-Type": "multipart/form-data", - }, - } - ); - } - - async saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise { - await apiClient.post( - "/fnrsc/cnfm/update/saveInstlCnfmSanctnProgrsSttus.do", - vo - ); - } - - async deleteInstlCnfm(vo: FnrscVO): Promise { - await apiClient.post("/fnrsc/cnfm/regist/deleteInstlCnfm.do", vo); - } - - async selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/files/essential", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmExmntFile(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/files/examination", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmEtcFile(vo: FnrscVO): Promise { - const response = await apiClient.get("/fnrsc/cnfm/files/etc", { - params: vo, - }); - return response.data; - } - - async selectInstlCnfmSanctnManage( - vo: FnrscVO - ): Promise> { - const response = await apiClient.get>( - "/fnrsc/cnfm/sanction/manage", - { params: vo } - ); - return response.data; - } - - async insertInstlCnfmSpl(vo: FnrscVO): Promise { - await apiClient.post("/fnrsc/cnfm/update/insertInstlCnfmSpl.do", vo); - } - - async selectInstlCnfmSpl(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/supplement", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmExmntResult(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/examination/result", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmOpinionList(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/opinion/list", - { params: vo } - ); - return response.data; - } -} - -export const instlSncnService = new InstlSncnServiceImpl(); diff --git a/apps/as/src/entities/instl-sncn/api/queries.ts b/apps/as/src/entities/instl-sncn/api/queries.ts deleted file mode 100644 index 26fa394da..000000000 --- a/apps/as/src/entities/instl-sncn/api/queries.ts +++ /dev/null @@ -1,312 +0,0 @@ -import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; -import { instlSncnService } from "./instl-sncn-service-impl"; -import type { FnrscVO } from "../model"; - -export const instlSncnKeys = { - all: ["instl-sncn"] as const, - lists: () => [...instlSncnKeys.all, "list"] as const, - list: (vo: FnrscVO) => [...instlSncnKeys.lists(), vo] as const, - dtls: () => [...instlSncnKeys.all, "dtl"] as const, - dtl: (instlCnfmDocNo: string) => - [...instlSncnKeys.dtls(), instlCnfmDocNo] as const, - registPage: (jobSeSp: string) => - [...instlSncnKeys.all, "regist-page", jobSeSp] as const, - viewPage: (instlCnfmDocNo: string) => - [...instlSncnKeys.all, "view-page", instlCnfmDocNo] as const, -}; - -/** - * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) - */ -export function useListPageLoadCnfm(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.list(vo), - queryFn: () => instlSncnService.listPageLoadCnfm(vo), - }); -} - -/** - * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) - */ -export function useRegistPageLoadCnfm(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.registPage(vo.jobSeSp || ""), - queryFn: () => instlSncnService.registPageLoadCnfm(vo), - enabled: !!vo.jobSeSp, - }); -} - -/** - * 설치인가 상세/수정 페이지 로드 - */ -export function useViewPageLoadCnfm(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.viewPage(vo.instlCnfmDocNo || ""), - queryFn: () => instlSncnService.viewPageLoadCnfm(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 목록 카운트 조회 - */ -export function useSelectInstlCnfmListCnt(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.lists(), "count", vo], - queryFn: () => instlSncnService.selectInstlCnfmListCount(vo), - }); -} - -/** - * 설치인가 목록 조회 - */ -export function useSelectInstlCnfmList(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.list(vo), - queryFn: () => instlSncnService.selectInstlCnfmList(vo), - }); -} - -/** - * 설치인가 상세 조회 - */ -export function useSelectInstlCnfmDtl(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.dtl(vo.instlCnfmDocNo || ""), - queryFn: () => instlSncnService.selectInstlCnfmDetail(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 신규 등록 - */ -export function useInsertInstlCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => - instlSncnService.insertInstlCnfm(vo, files), - onSuccess: () => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - }, - }); -} - -/** - * 설치인가 수정 (병합) - */ -export function useMergeInstlCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => - instlSncnService.mergeInstlCnfm(vo, files), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.vo.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 삭제 - */ -export function useDeleteInstlCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => instlSncnService.deleteInstlCnfm(vo), - onSuccess: () => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - }, - }); -} - -/** - * 설치인가 진행상태 업데이트 - */ -export function useUpdatePrgrsSttusCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => - instlSncnService.updateProgrsSttusCnfm(vo), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 진행상태 저장 (검토의견 + 파일) - */ -export function useSaveInstlCnfmPrgrsStts() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: ({ vo, file }: { vo: FnrscVO; file?: File }) => - instlSncnService.saveInstlCnfmProgrsSttus(vo, file), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.vo.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 기술검토 최종결재 - */ -export function useSaveInstlCnfmSanctnPrgrsStts() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => - instlSncnService.saveInstlCnfmSanctnProgrsSttus(vo), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 보완요청 등록 - */ -export function useInsertInstlCnfmSpl() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => instlSncnService.insertInstlCnfmSpl(vo), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 필수 첨부파일 목록 조회 - */ -export function useSelectEssntlInstlCnfmAtchFileList(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "essential-files", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectEssntlInstlCnfmAtchFileList(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 검토의견 첨부파일 조회 - */ -export function useSelectInstlCnfmExmntFile(vo: FnrscVO) { - return useQuery({ - queryKey: [ - ...instlSncnKeys.all, - "exmnt-files", - vo.instlCnfmDocNo, - vo.exmntOpinionSeqNo, - ], - queryFn: () => instlSncnService.selectInstlCnfmExmntFile(vo), - enabled: !!vo.instlCnfmDocNo && !!vo.exmntOpinionSeqNo, - }); -} - -/** - * 설치인가 기타 첨부파일 조회 - */ -export function useSelectInstlCnfmEtcFile(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "etc-files", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectInstlCnfmEtcFile(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 보완요청 조회 - */ -export function useSelectInstlCnfmSpl(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "supplement", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectInstlCnfmSpl(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 검토결과 조회 - */ -export function useSelectInstlCnfmExmntResult(vo: FnrscVO) { - return useQuery({ - queryKey: [ - ...instlSncnKeys.all, - "exmnt-result", - vo.instlCnfmDocNo, - vo.jobSe, - ], - queryFn: () => instlSncnService.selectInstlCnfmExmntResult(vo), - enabled: !!vo.instlCnfmDocNo && !!vo.jobSe, - }); -} - -/** - * 설치인가 담당자 목록 조회 - */ -export function useSelectInstlCnfmOpinionList(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "opinion-list", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectInstlCnfmOpinionList(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} diff --git a/apps/as/src/entities/instl-sncn/index.ts b/apps/as/src/entities/instl-sncn/index.ts deleted file mode 100644 index 40b412b7f..000000000 --- a/apps/as/src/entities/instl-sncn/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -export type { - PrgrsStts, - FnrscVO, - JobSeItem, - CeckVO, - AtchFile, - ExmntOpinion, - SplmntRqst, - ListPageResult, - RegistPageData, - ViewPageData, - InstlSncnService, -} from "./model"; - -export { - PRGRS_STTS_LABELS, - PRGRS_STTS_OPTIONS, - JOB_TYPE_CODE, - DEFAULT_PAGE_SIZE, - DEFAULT_RECORD_COUNT_PER_PAGE, -} from "./model"; - -export { - instlSncnService, - instlSncnKeys, - useListPageLoadCnfm, - useRegistPageLoadCnfm, - useViewPageLoadCnfm, - useSelectInstlCnfmListCnt, - useSelectInstlCnfmList, - useSelectInstlCnfmDtl, - useInsertInstlCnfm, - useMergeInstlCnfm, - useDeleteInstlCnfm, - useUpdatePrgrsSttusCnfm, - useSaveInstlCnfmPrgrsStts, - useSaveInstlCnfmSanctnPrgrsStts, - useInsertInstlCnfmSpl, - useSelectEssntlInstlCnfmAtchFileList, - useSelectInstlCnfmExmntFile, - useSelectInstlCnfmEtcFile, - useSelectInstlCnfmSpl, - useSelectInstlCnfmExmntResult, - useSelectInstlCnfmOpinionList, -} from "./api"; - -export { - fmtPrgrsStts, - fmtJobSeComma, - jobSeSpSummary, - parseJobSeSpArr, - fmtFileSize, - fmtDt, - vldtInstlSncnForm, - canAply, - canDel, - canMdfy, - canRqstSplmnt, - canAprv, - type VldtnErr, -} from "./lib"; diff --git a/apps/as/src/entities/instl-sncn/lib/format.ts b/apps/as/src/entities/instl-sncn/lib/format.ts deleted file mode 100644 index 3b16cff56..000000000 --- a/apps/as/src/entities/instl-sncn/lib/format.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { PRGRS_STTS_LABELS, type PrgrsStts } from "../model"; - -export function fmtPrgrsStts(stts: PrgrsStts): string { - return PRGRS_STTS_LABELS[stts] || stts; -} - -export function fmtJobSeComma(jobSe: string): string { - if (!jobSe) return ""; - return jobSe.split("").join(","); -} - -export function jobSeSpSummary(jobSeSp: string): string { - if (!jobSeSp) return ""; - return jobSeSp.replace(/,/g, ""); -} - -export function parseJobSeSpArr(jobSeSp: string): string[] { - if (!jobSeSp) return []; - return jobSeSp.split(",").filter(Boolean); -} - -export function fmtFileSize(bytes: number): string { - if (bytes === 0) return "0 Bytes"; - - const k = 1024; - const sizes = ["Bytes", "KB", "MB", "GB"]; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - - return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i]; -} - -export function fmtDt(dtString: string | undefined): string { - if (!dtString) return "-"; - - try { - const dt = new Date(dtString); - return new Intl.DateTimeFormat("ko-KR", { - year: "numeric", - month: "2-digit", - day: "2-digit", - hour: "2-digit", - minute: "2-digit", - }).format(dt); - } catch { - return dtString; - } -} diff --git a/apps/as/src/entities/instl-sncn/lib/index.ts b/apps/as/src/entities/instl-sncn/lib/index.ts deleted file mode 100644 index 9333d229e..000000000 --- a/apps/as/src/entities/instl-sncn/lib/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -export { - fmtPrgrsStts, - fmtJobSeComma, - jobSeSpSummary, - parseJobSeSpArr, - fmtFileSize, - fmtDt, -} from "./format"; - -export { - vldtInstlSncnForm, - canAply, - canDel, - canMdfy, - canRqstSplmnt, - canAprv, - type VldtnErr, -} from "./validation"; diff --git a/apps/as/src/entities/instl-sncn/lib/validation.ts b/apps/as/src/entities/instl-sncn/lib/validation.ts deleted file mode 100644 index 97860ccaa..000000000 --- a/apps/as/src/entities/instl-sncn/lib/validation.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type { FnrscVO } from "../model"; - -export interface VldtnErr { - field: string; - message: string; -} - -export function vldtInstlSncnForm(data: FnrscVO): VldtnErr[] { - const errors: VldtnErr[] = []; - - if (!data.jobSe) { - errors.push({ - field: "jobSe", - message: "업무구분을 선택해주세요.", - }); - } - - if (!data.bplcNm || data.bplcNm.trim() === "") { - errors.push({ - field: "bplcNm", - message: "사업장명을 입력해주세요.", - }); - } - - if (!data.fcltNm || data.fcltNm.trim() === "") { - errors.push({ - field: "fcltNm", - message: "시설명을 입력해주세요.", - }); - } - - return errors; -} - -export function canAply(data: FnrscVO): boolean { - const errors = vldtInstlSncnForm(data); - return errors.length === 0; -} - -export function canDel( - prgrsStts: string | undefined, - regId: string | undefined, - currentUsrId: string -): boolean { - return prgrsStts === "SV" && regId === currentUsrId; -} - -export function canMdfy( - prgrsStts: string | undefined, - regId: string | undefined, - currentUsrId: string -): boolean { - return ( - (prgrsStts === "SV" || prgrsStts === "SL") && regId === currentUsrId - ); -} - -export function canRqstSplmnt( - prgrsStts: string | undefined, - usrRole: string -): boolean { - return ( - (prgrsStts === "ER" || prgrsStts === "PR") && - (usrRole === "REVIEWER" || usrRole === "APPROVER") - ); -} - -export function canAprv( - prgrsStts: string | undefined, - usrRole: string -): boolean { - return prgrsStts === "PE" && usrRole === "APPROVER"; -} diff --git a/apps/as/src/entities/instl-sncn/model/constants.ts b/apps/as/src/entities/instl-sncn/model/constants.ts deleted file mode 100644 index e8bea4018..000000000 --- a/apps/as/src/entities/instl-sncn/model/constants.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { PrgrsStts } from "./types"; - -export const PRGRS_STTS_LABELS: Record = { - SV: "저장", - ST: "신청", - SL: "보완요청", - ER: "기술검토중", - EE: "기술검토완료", - PR: "환경청검토중", - PE: "환경청검토완료", - AP: "승인", - RJ: "반려", -} as const; - -export const PRGRS_STTS_OPTIONS = [ - { value: "SV", label: "저장" }, - { value: "ST", label: "신청" }, - { value: "SL", label: "보완요청" }, - { value: "ER", label: "기술검토중" }, - { value: "EE", label: "기술검토완료" }, - { value: "PR", label: "환경청검토중" }, - { value: "PE", label: "환경청검토완료" }, - { value: "AP", label: "승인" }, - { value: "RJ", label: "반려" }, -] as const; - -export const JOB_TYPE_CODE = "FNR01" as const; - -export const DEFAULT_PAGE_SIZE = 10 as const; -export const DEFAULT_RECORD_COUNT_PER_PAGE = 10 as const; diff --git a/apps/as/src/entities/instl-sncn/model/index.ts b/apps/as/src/entities/instl-sncn/model/index.ts deleted file mode 100644 index 7c8c73489..000000000 --- a/apps/as/src/entities/instl-sncn/model/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -export type { - PrgrsStts, - FnrscVO, - JobSeItem, - CeckVO, - AtchFile, - ExmntOpinion, - SplmntRqst, - ListPageResult, - RegistPageData, - ViewPageData, -} from "./types"; - -export { - PRGRS_STTS_LABELS, - PRGRS_STTS_OPTIONS, - JOB_TYPE_CODE, - DEFAULT_PAGE_SIZE, - DEFAULT_RECORD_COUNT_PER_PAGE, -} from "./constants"; - -export type { InstlSncnService } from "./instl-sncn-service"; diff --git a/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts b/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts deleted file mode 100644 index 74a35cef9..000000000 --- a/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { - FnrscVO, - CeckVO, - AtchFile, - SplmntRqst, - ListPageResult, - RegistPageData, - ViewPageData, -} from "./types"; - -/** - * 설치인가 서비스 인터페이스 - * Java CnfmService.java의 TypeScript 버전 - */ -export interface InstlSncnService { - /** - * 설치인가 목록 카운트 조회 - * @param vo 검색 조건 - * @returns 목록 개수 - */ - selectInstlCnfmListCount(vo: FnrscVO): Promise; - - /** - * 설치인가 목록 조회 - * @param vo 검색 조건 - * @returns 설치인가 목록 - */ - selectInstlCnfmList(vo: FnrscVO): Promise; - - /** - * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) - * @param vo 검색 조건 - * @returns 목록 페이지 데이터 - */ - listPageLoadCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) - * @param vo jobSeSp 포함 - * @returns 등록 페이지 데이터 - */ - registPageLoadCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 데이터 저장 (신규) - * @param vo 설치인가 VO - * @param files 첨부파일 목록 - */ - insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise; - - /** - * 설치인가 데이터 병합 (수정) - * @param vo 설치인가 VO - * @param files 첨부파일 목록 - */ - mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise; - - /** - * 설치인가 상세 데이터 조회 - * @param vo instlCnfmDocNo 포함 - * @returns 설치인가 상세 정보 - */ - selectInstlCnfmDetail(vo: FnrscVO): Promise; - - /** - * 설치인가 상세/수정 페이지 로드 - * @param vo instlCnfmDocNo 포함 - * @returns 상세 페이지 데이터 - */ - viewPageLoadCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 진행상태 업데이트 - * @param vo instlCnfmDocNo, progrsSttus 포함 - */ - updateProgrsSttusCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 진행상태 저장 (검토의견 + 파일) - * @param vo instlCnfmDocNo, progrsSttus, exmntOpinionCn 포함 - * @param file 첨부파일 - */ - saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise; - - /** - * 설치인가 기술검토 최종결재 - * @param vo instlCnfmDocNo, progrsSttus 포함 - */ - saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise; - - /** - * 설치인가 삭제 - * @param vo instlCnfmDocNo 포함 - */ - deleteInstlCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 신청 첨부파일 목록 - * @param vo instlCnfmDocNo 포함 - * @returns 필수 첨부파일 목록 - */ - selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise; - - /** - * 설치인가 의견 첨부파일 - * @param vo instlCnfmDocNo, exmntOpinionSeqNo 포함 - * @returns 검토의견 첨부파일 목록 - */ - selectInstlCnfmExmntFile(vo: FnrscVO): Promise; - - /** - * 설치인가 기타 첨부파일 - * @param vo instlCnfmDocNo 포함 - * @returns 기타 첨부파일 목록 - */ - selectInstlCnfmEtcFile(vo: FnrscVO): Promise; - - /** - * 설치인가 결재권자 조회 - * @param vo instlCnfmDocNo, regId 포함 - * @returns 결재권자 정보 - */ - selectInstlCnfmSanctnManage(vo: FnrscVO): Promise>; - - /** - * 설치인가 보완요청 등록 - * @param vo instlCnfmDocNo, splCn 포함 - */ - insertInstlCnfmSpl(vo: FnrscVO): Promise; - - /** - * 설치인가 보완요청 조회 - * @param vo instlCnfmDocNo 포함 - * @returns 보완요청 정보 - */ - selectInstlCnfmSpl(vo: FnrscVO): Promise; - - /** - * 설치인가 검토결과 조회 - * @param vo instlCnfmDocNo, jobSe 포함 - * @returns 검토결과 목록 - */ - selectInstlCnfmExmntResult(vo: FnrscVO): Promise; - - /** - * 설치인가 담당자 정보 조회 - * @param vo instlCnfmDocNo 포함 - * @returns 담당자 목록 - */ - selectInstlCnfmOpinionList(vo: FnrscVO): Promise; -} diff --git a/apps/as/src/entities/instl-sncn/model/types.ts b/apps/as/src/entities/instl-sncn/model/types.ts deleted file mode 100644 index ce61009c1..000000000 --- a/apps/as/src/entities/instl-sncn/model/types.ts +++ /dev/null @@ -1,158 +0,0 @@ -export type PrgrsStts = - | "SV" // 저장 - | "ST" // 신청 - | "SL" // 보완요청 - | "ER" // 기술검토 - | "EE" // 기술검토완료 - | "PR" // 환경청검토 - | "PE" // 환경청검토완료 - | "AP" // 승인 - | "RJ"; // 반려 - -export interface FnrscVO { - fnrscDscssDocNo?: string; - instlCnfmDocNo?: string; - seqNo?: string; - yr?: string; - bzCd?: string; - bzNm?: string; - strtYr?: string; - edYr?: string; - dtlBzCd?: string; - untBzCd?: string; - rgnCd?: string; - rgnNm?: string; - rvbsnCd?: string; - adstDstrCd?: string; - adstDstrNm?: string; - bzSpec?: string; - aidRt?: string; - confBzCd?: string; - bzPd?: string; - bzCn?: string; - jobSe?: string; - jobSeSp?: string; - jobSeList?: Array; - jobSeNm?: string; - fcltyKnd?: string; - reusePrpos?: string; - progrsSttus?: PrgrsStts; - fileSeq?: number; - regId?: string; - regDt?: string; - udtId?: string; - udtDt?: string; - registMan?: string; - updtMan?: string; - registDe?: string; - updtDe?: string; - atchFileId?: string; - grpCd?: string; - bplcNm?: string; - fcltNm?: string; - lclgvrnmntNm?: string; - localCd?: string; - exmntOpinionSeqNo?: string; - exmntOpinionCn?: string; - scdExmntOpinionSeqNo?: string; - prmyExmntOpinionSeqNo?: string; - splCn?: string; - pageIndex?: number; - recordCountPerPage?: number; - pageSize?: number; - searchKeyword?: string; - searchCondition?: string; -} - -export interface JobSeItem { - jobSeCd: string; - jobSeNm: string; -} - -export interface CeckVO { - ceckSn: string; - ceckCn: string; - ceckResultAt?: "Y" | "N"; - ceckResultCn?: string; - jobSe: string; -} - -export interface AtchFile { - atchFileId: string; - fileSn: string; - fileStreCours: string; - streFileNm: string; - orignlFileNm: string; - fileExtsn: string; - fileMg: number; - fileType?: string; - essntlAt?: "Y" | "N"; -} - -export interface ExmntOpinion { - exmntOpinionSeqNo: string; - instlCnfmDocNo: string; - exmntOpinionCn: string; - exmntResultAt?: "Y" | "N"; - atchFileList?: AtchFile[]; - regId?: string; - regDt?: string; -} - -export interface SplmntRqst { - splSeqNo: string; - instlCnfmDocNo: string; - splCn: string; - splDt?: string; - regId?: string; - regDt?: string; -} - -export interface ListPageResult { - cnt: number; - list: FnrscVO[]; - pageIndex: number; - lastPage: number; - paginationInfo: { - currentPageNo: number; - recordCountPerPage: number; - pageSize: number; - totalRecordCount: number; - lastPageNo: number; - }; - searchVO: FnrscVO; -} - -export interface RegistPageData { - ceckEssntlArr: Array<{ - jobSeCd: string; - jobSeNm: string; - ceckForm1: CeckVO[]; - essntlList: FnrscVO[]; - }>; - jobSe: string; - jobSeSp: string; - grpCd: string; - adstDstrCd: string; - lclgvrnmntNm: string; - localCd: string; -} - -export interface ViewPageData { - view: FnrscVO; - jobSeSp: string; - ceckEssntlArr: Array<{ - jobSeCd: string; - jobSeNm: string; - ceckForm1: FnrscVO[]; - essntlList: FnrscVO[]; - }>; - prmyFileList: FnrscVO[]; - scdFileList: FnrscVO[]; - etcFileList: FnrscVO[]; - grpCd: string; - usrId: string; - sanctnChk: Record; - spl: SplmntRqst | null; - opinionList: FnrscVO[]; -} diff --git a/apps/as/src/entities/menu/index.ts b/apps/as/src/entities/menu/index.ts index 03aed8131..cb55d9a1c 100644 --- a/apps/as/src/entities/menu/index.ts +++ b/apps/as/src/entities/menu/index.ts @@ -1 +1 @@ -export { type MenuItem } from "./model"; +export { type MenuItem } from "./model/types"; diff --git a/apps/as/src/entities/menu/model/index.ts b/apps/as/src/entities/menu/model/index.ts deleted file mode 100644 index 89ebe7381..000000000 --- a/apps/as/src/entities/menu/model/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { type MenuItem } from "./types"; diff --git a/apps/as/src/pages/auth/login/index.ts b/apps/as/src/pages/auth/login/index.ts new file mode 100644 index 000000000..2093c3d8d --- /dev/null +++ b/apps/as/src/pages/auth/login/index.ts @@ -0,0 +1 @@ +export { LoginPage } from "./ui/login-page"; diff --git a/apps/as/src/pages/auth/login/ui/login-page.tsx b/apps/as/src/pages/auth/login/ui/login-page.tsx new file mode 100644 index 000000000..2926a2ebe --- /dev/null +++ b/apps/as/src/pages/auth/login/ui/login-page.tsx @@ -0,0 +1,120 @@ +"use client"; + +import { useState } from "react"; +import Image from "next/image"; + +import { LoginApi } from "@/entities/auth"; +import { images } from "@common/assets"; + +import "./login.css"; + +function LoginPage() { + const [errorMessage, setErrorMessage] = useState(""); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setErrorMessage(""); // 에러 메시지 초기화 + + const formData = new FormData(e.target as HTMLFormElement); + const userId = formData.get("id") as string; + const password = formData.get("password") as string; + + try { + await LoginApi.login({ userId, password }); + window.location.href = "/"; + } catch (error) { + const message = error instanceof Error ? error.message : "로그인에 실패했습니다."; + setErrorMessage(message); + } + }; + + return ( +
+
+
+

+ 하수도정보시스템 +
+ CMS 통합관리시스템 +

+

하수도정보시스템 CMS 통합관리시스템에 오신 것을 환영합니다.

+
+
+ logo +
+
+
+
+
    +
  • +

    ID

    +
    + + +
    +
  • +
  • +

    PASSWORD

    +
    + + +
    +
  • +
+
+
+ + +
+ {/* 비밀번호 또는 아이디를 잃어버리셨나요? */} +
+ {errorMessage && ( +
+ {errorMessage} +
+ )} + +
+
+

copyright © 2023 KECO. All rights reserved.

+
+ +

+ 주소 : (22689) 인천광역시 서구 환경로 42(경서동 종합환경연구단지) + 전화 : (시스템) 032-590-4321, 3752, 4314 / (통 계) 032-590-3723, 3722 + 팩스 :032-590-3729 +

+
+
+ +
+ ); +} + +export { LoginPage }; diff --git a/apps/as/src/pages/auth/login/ui/login.css b/apps/as/src/pages/auth/login/ui/login.css new file mode 100755 index 000000000..e8029fdb1 --- /dev/null +++ b/apps/as/src/pages/auth/login/ui/login.css @@ -0,0 +1,325 @@ +/** +* OLYM Cascading Style Sheets +* File Name : login.css +* Description : 로그인 스타일시트 +* Author : Web business Team / Choi Hyun Mi +* Email : desingtj@olym.co.kr +* Date : 2023.07.20 +* Update : 2023.07.26 +* Copyright(c) 2023 OLYM Communications. All Rights Reserved. +*/ +html, +body { + background: #fff; +} +.fx { + display: flex; + -ms-display: flex; + -webkit-display: flex; + box-sizing: border-box; +} +.login { + width: 100%; + height: 100vh; +} +.login .left_box { + width: 100%; + background: url(../../../../../public/images/bg_login.jpg) no-repeat + center/cover; + flex-direction: column; + justify-content: space-between; + padding: 7% 5% 5% 5%; +} +.login .left_box .text h1 { + font-size: 53px; + color: #fff; +} +.login .left_box .text h1 span { + font-weight: 800; +} +.login .left_box .text p { + margin-top: 40px; + font-size: 18px; + color: #fff; +} +.login .login_box { + width: 100%; + flex-direction: column; + justify-content: center; + padding: 4% 12% 4% 6%; +} +.login .login_box > ul { + flex-direction: column; + gap: 40px; +} +.login .login_box > ul > li h2 { + font-size: 22px; + font-weight: 600; + color: #2640a5; + margin-bottom: 14px; +} +.login .login_box > ul > li .input_st { + position: relative; +} +.login .login_box > ul > li .input_st .diveicon { + position: absolute; + top: 50%; + left: 28px; + transform: translateY(-50%); + font-family: "Xeicon"; + font-size: 25px; + color: #003288; +} +.login .login_box > ul > li input { + width: 100%; + padding: 20px 20px 20px 70px; + background: #f7f7f7; + box-sizing: border-box; + border: none; + border-radius: 5px; + font-size: 18px; + font-weight: 700; + color: #000; + height: auto; +} +.login .login_box > ul > li input:focus { + outline: 1px solid #3c5fe5; +} +.login .login_box > ul > li input::placeholder { + color: #afabab; + font-weight: 500; +} +.login .login_box .bottom_box { + justify-content: space-between; + gap: 20px; + padding: 50px 0 45px 0; +} +.login .login_box .bottom_box .checks { + display: flex; + align-items: center; + gap: 8px; +} +.login .login_box .bottom_box .checks input[type="checkbox"] { + width: 18px; + height: 18px; +} +.login .login_box .bottom_box .checks label { + font-size: 14px; +} +.login .login_box .bottom_box .pw_message { + align-items: center; + gap: 5px; + color: #636363; + font-weight: 500; + border-bottom: 1px solid #ccc; + padding-bottom: 5px; +} +.login .login_box .bottom_box .pw_message i { + color: #327af5; + font-size: 20px; +} +.login .login_box .error_message { + margin: 20px 0; + padding: 12px 20px; + background: #fee; + border: 1px solid #fcc; + border-radius: 5px; + color: #c33; + font-size: 14px; + text-align: center; +} +.login .login_box .error_message span { + display: block; + font-weight: 500; +} +.login .login_box .login_btn { + position: relative; + border-radius: 5px; + padding: 24px 15px; + background: linear-gradient( + to left, + #1d3969 0%, + #264078 10%, + #172558 40%, + #162254 50%, + #111c43 60%, + #111c42 100% + ); + overflow: hidden; + justify-content: center; + align-items: center; + gap: 10px; + color: #fff; + cursor: pointer; +} +.login .login_box .login_btn span { + font-family: "Montserrat"; + font-size: 19px; + font-weight: 700; + position: relative; +} +.login .login_box .login_btn i { + font-size: 22px; + transform: translateY(-2px); +} +.login .login_box .login_btn:before { + display: block; + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + background: linear-gradient( + to right, + #1d3969 0%, + #264078 10%, + #172558 40%, + #162254 50%, + #111c43 60%, + #111c42 100% + ); + transition: opacity 0.5s; +} +.login .login_box .login_btn:hover::before { + opacity: 1; +} +.login .footer .copy { + margin-top: 36px; + justify-content: space-between; + align-items: center; + gap: 3%; +} +.login .footer .copy p { + font-size: 13px; + color: #d4d4d4; + width: 44%; + text-align: center; +} +.login .footer .copy::before, +.login .login_box .copy::after { + content: ""; + width: 20%; + height: 1px; + background: #d4d4d4; +} +.login .footer .fot_btn { + gap: 20px; + margin: 30px 0 10px 0; +} +.login .footer .fot_btn a { + color: #333; + font-weight: 700; + font-size: 13px; +} +.login .footer .fot_btn a:hover { + color: #003288; +} +.login .footer .addr { + color: #666; + font-size: 13px; + gap: 3px 20px; + flex-wrap: wrap; +} +/* 비밀번호 변경 팝업창 */ +.login .modal .modal_container { + width: 750px; +} +.login .pw_desc { + padding: 10px 10px 30px 10px; + color: #666; +} +.login .pw_desc p { + font-size: 1.25rem; + color: #000; + font-weight: 700; + margin-bottom: 10px; +} +.login .pw_desc span { + color: #f60; + font-weight: 700; +} +.login .modal .form_write { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + padding: 20px 50px; +} +@media (max-width: 1024px) { + .login { + flex-direction: column; + height: auto; + } + .login .left_box { + padding: 30px; + flex-direction: column-reverse; + gap: 20px; + } + .login .left_box .text h1 { + font-size: 30px; + line-height: 1.2em; + } + .login .left_box .text p { + margin-top: 20px; + font-size: 14px; + } + .login .left_box .img img { + height: 40px; + } + .login .login_box { + padding: 30px; + } + .login .login_box > ul { + gap: 20px; + } + .login .login_box > ul > li h2 { + margin-bottom: 7px; + } + .login .login_box > ul > li .input_st::after { + left: 15px; + font-size: 20px; + } + .login .login_box > ul > li input { + padding: 15px 10px 15px 50px; + font-size: 16px; + } + .login .login_box .bottom_box { + flex-direction: column; + align-items: flex-start; + padding: 30px 0; + } + .login .login_box .bottom_box .id_save label { + font-size: 14px; + } + .login .login_box .login_btn { + padding: 15px; + } + .login .login_box .login_btn span { + font-size: 16px; + } + .login .login_box .login_btn i { + font-size: 18px; + transform: translateY(-1px); + } + .login .login_box .copy p { + width: 100%; + } + .login .login_box .copy::before, + .login .login_box .copy::after { + display: none; + } + .login .footer .addr { + font-size: 11px; + gap: 3px 10px; + } + .login .modal .modal_container { + width: 90%; + } + .login .pw_desc { + padding: 0 0 20px 0; + } + .login .modal .form_write { + padding: 10px; + } +} +/* // login */ diff --git a/apps/as/src/pages/home/index.ts b/apps/as/src/pages/home/index.ts new file mode 100644 index 000000000..97a463408 --- /dev/null +++ b/apps/as/src/pages/home/index.ts @@ -0,0 +1 @@ +export { MainPage } from "./ui/main-page"; diff --git a/apps/as/src/pages/home/ui/main-page.tsx b/apps/as/src/pages/home/ui/main-page.tsx new file mode 100644 index 000000000..f757224dc --- /dev/null +++ b/apps/as/src/pages/home/ui/main-page.tsx @@ -0,0 +1,9 @@ +"use client"; + +export function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/as/src/pages/instl-sncn/index.ts b/apps/as/src/pages/instl-sncn/index.ts deleted file mode 100644 index b9127c3a1..000000000 --- a/apps/as/src/pages/instl-sncn/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { InstlSncnListPage } from "./ui/list-page"; diff --git a/apps/as/src/pages/instl-sncn/model/table-columns.tsx b/apps/as/src/pages/instl-sncn/model/table-columns.tsx deleted file mode 100644 index e53a7fad4..000000000 --- a/apps/as/src/pages/instl-sncn/model/table-columns.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { createColumnHelper } from "@tanstack/react-table"; -import type { FnrscVO } from "@/entities/instl-sncn"; -import { Badge } from "@common/components"; - -const columnHelper = createColumnHelper(); - -const LIST_STEPS = ["저장", "신청완료", "기술검토", "검토결과 회신"] as const; - -function stepIndex(status: string | undefined): number { - if (!status) return 0; - const map: Record = { - SV: 0, - ST: 1, - LE: 2, - SL: 2, - ER: 2, - TE: 2, - TR: 2, - TP: 2, - EE: 2, - TA: 3, - }; - return map[status] ?? 0; -} - -function ProgrsSttusCell({ value }: { value?: string }) { - const current = stepIndex(value); - return ( -
- {LIST_STEPS.map((label, i) => ( - <> - - {label} - - {i < LIST_STEPS.length - 1 && ( - - )} - - ))} -
- ); -} - -export const instlSncnListColumns = [ - columnHelper.accessor("adstDstrNm", { - id: "adstDstrNm", - header: "지자체", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("bzNm", { - id: "bzNm", - header: "사업명", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("jobSeNm", { - id: "jobSeNm", - header: "업무구분", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("regId", { - id: "regId", - header: "담당자", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("rgnNm", { - id: "rgnNm", - header: "해당기관", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.display({ - id: "progrsSttus", - header: "진행상황", - cell: (info) => , - }), - columnHelper.accessor("regDt", { - id: "regDt", - header: "시행일", - cell: (info) => info.getValue() ?? "-", - }), -]; diff --git a/apps/as/src/pages/instl-sncn/ui/list-page.tsx b/apps/as/src/pages/instl-sncn/ui/list-page.tsx deleted file mode 100644 index 6aecea351..000000000 --- a/apps/as/src/pages/instl-sncn/ui/list-page.tsx +++ /dev/null @@ -1,178 +0,0 @@ -"use client"; - -import { useState, useCallback } from "react"; -import { useRouter } from "next/navigation"; -import { fakerKO as faker } from "@faker-js/faker"; -import { - Button, - DataTable, - Input, - Label, - LoadingWithAnimation, - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@common/components"; -import { getCoreRowModel, useReactTable } from "@tanstack/react-table"; -import { useListPageLoadCnfm } from "@/entities/instl-sncn"; -import type { FnrscVO } from "@/entities/instl-sncn"; -import { instlSncnListColumns } from "../model/table-columns"; - -const PAGE_SIZE = 10; -const JOB_SE_OPTIONS = [ - { value: "ALL", label: "전체" }, - { value: "SF", label: "하수처리시설" }, - { value: "SP", label: "하수관로" }, - { value: "RE", label: "재이용수" }, -] as const; - -function buildMockFnrscVO(): FnrscVO { - return { - instlCnfmDocNo: faker.string.alphanumeric(10), - adstDstrNm: faker.location.city(), - bzNm: faker.company.name(), - jobSeNm: faker.helpers.arrayElement(["하수처리시설", "하수관로", "재이용수"]), - regId: faker.person.fullName(), - rgnNm: faker.company.name(), - progrsSttus: faker.helpers.arrayElement(["SV", "ST", "SL", "ER", "EE", "PR", "PE", "AP", "RJ"]), - regDt: faker.date.past().toISOString().slice(0, 10), - }; -} - -const MOCK_LIST: FnrscVO[] = Array.from({ length: PAGE_SIZE }, () => buildMockFnrscVO()); - -export function InstlSncnListPage() { - const router = useRouter(); - const [bzNm, setBzNm] = useState(""); - const [jobSeNm, setJobSeNm] = useState("ALL"); - const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: PAGE_SIZE }); - - const searchVO: FnrscVO = { - bzNm: bzNm.trim() || undefined, - jobSeNm: jobSeNm === "ALL" ? undefined : jobSeNm, - pageIndex: pagination.pageIndex + 1, - recordCountPerPage: PAGE_SIZE, - pageSize: PAGE_SIZE, - }; - - const { data, isPending, isError } = useListPageLoadCnfm(searchVO); - const list = data?.list && data.list.length > 0 ? data.list : MOCK_LIST; - const totalCount = data?.cnt ?? list.length; - const pageCount = data?.paginationInfo?.lastPageNo ?? 1; - - const handleSearch = useCallback((e: React.FormEvent) => { - e.preventDefault(); - setPagination((p) => ({ ...p, pageIndex: 0 })); - }, []); - - const handleRowClick = useCallback( - (row: FnrscVO) => { - if (row.instlCnfmDocNo) { - router.push(`/instl-sncn/${row.instlCnfmDocNo}`); - } - }, - [router], - ); - - const handleRegist = useCallback(() => { - router.push("/instl-sncn/regist"); - }, [router]); - - const table = useReactTable({ - data: list, - columns: instlSncnListColumns, - getCoreRowModel: getCoreRowModel(), - manualPagination: true, - pageCount, - state: { - pagination, - }, - onPaginationChange: setPagination, - }); - - const isEmpty = list.length === 0; - - return ( -
-
-
- - setBzNm(e.target.value)} - onKeyDown={(e) => e.key === "Enter" && handleSearch(e as unknown as React.FormEvent)} - /> -
-
- - -
- -
- -
-
-

- 검색된 리스트 ({totalCount}) -

- -
- -
- {isPending && ( -
-
- -
-
- )} - {/* {isError && ( -
- 목록을 불러오는 중 오류가 발생했습니다. -
- )} */} - {!isPending && !isError && isEmpty && ( -
- 목록이 존재하지 않습니다. -
- )} - {!isPending && !isEmpty && ( -
- -
- )} -
-
-
- ); -} diff --git a/apps/as/src/shared/api/client.ts b/apps/as/src/shared/api/client.ts index d7c4a8f1d..061e1de99 100644 --- a/apps/as/src/shared/api/client.ts +++ b/apps/as/src/shared/api/client.ts @@ -1,9 +1,9 @@ +import { PROXY_HOST, SITE_ID } from "@/shared/config"; import { Client } from "@common/network"; -import { PROXY_HOST, SITE_ID } from "@/shared/config/env"; const BASE_URL = `${PROXY_HOST}/server`; -export const apiClient = Client.getInstance({ +export const client = Client.getInstance({ baseURL: BASE_URL, siteId: SITE_ID, }); diff --git a/apps/as/src/shared/api/index.ts b/apps/as/src/shared/api/index.ts index c5eb98066..0b96ffaa1 100644 --- a/apps/as/src/shared/api/index.ts +++ b/apps/as/src/shared/api/index.ts @@ -1 +1 @@ -export { apiClient } from "./client"; +export { client } from "./client"; diff --git a/apps/as/src/shared/config/api.ts b/apps/as/src/shared/config/api.ts new file mode 100644 index 000000000..154aa1052 --- /dev/null +++ b/apps/as/src/shared/config/api.ts @@ -0,0 +1,9 @@ +export const ENDPOINT = { + USER_SERVICE: { + LOGIN: "/user-service/login", + SILENT_REFRESH: "/user-service/api/v1/users/token/refresh", + USERS: "/user-service/api/v1/users", + }, +}; + +export const JWT_EXPIRATION_TIME = 1800000; diff --git a/apps/as/src/shared/config/env.ts b/apps/as/src/shared/config/env.ts index 4f08c722a..4625722bd 100644 --- a/apps/as/src/shared/config/env.ts +++ b/apps/as/src/shared/config/env.ts @@ -1,11 +1,10 @@ export const PORT = process.env.NEXT_PUBLIC_PORT || "3000"; -export const PROXY_HOST = - process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; -export const SERVER_API_URL = process.env.NEXT_PUBLIC_SERVER_API_URL; +export const PROXY_HOST = process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; export const SITE_ID = process.env.NEXT_PUBLIC_SITE_ID || "AS"; +export const SERVER_API_URL = process.env.SERVER_API_URL; +export const AUTH_LOGIN_REDIRECT_URL = + process.env.NEXT_PUBLIC_AUTH_LOGIN_REDIRECT_URL || "/auth/login"; export const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; -export const ACCESS_TOKEN = - process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; -export const REFRESH_TOKEN = - process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; +export const ACCESS_TOKEN = process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; +export const REFRESH_TOKEN = process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; export const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/as/src/shared/config/index.ts b/apps/as/src/shared/config/index.ts index c76f8cd47..856d35f87 100644 --- a/apps/as/src/shared/config/index.ts +++ b/apps/as/src/shared/config/index.ts @@ -1 +1,2 @@ +export * from "./api"; export * from "./env"; diff --git a/apps/as/src/shared/lib/cookie.ts b/apps/as/src/shared/lib/cookie.ts index 6557cb81d..8f5d0011b 100644 --- a/apps/as/src/shared/lib/cookie.ts +++ b/apps/as/src/shared/lib/cookie.ts @@ -1,22 +1,29 @@ -import Cookies from "js-cookie"; - -export function getCookie(name: string): string | undefined { - if (typeof window === "undefined") { - return undefined; - } - return Cookies.get(name); -} - -export function setCookie(name: string, value: string, options?: Cookies.CookieAttributes): void { - if (typeof window === "undefined") { - return; - } - Cookies.set(name, value, options); -} - -export function removeCookie(name: string, options?: Cookies.CookieAttributes): void { - if (typeof window === "undefined") { - return; - } - Cookies.remove(name, options); -} +import Cookies from "js-cookie"; + +export function getCookie(name: string): string | undefined { + if (typeof window === "undefined") { + return undefined; + } + return Cookies.get(name); +} + +export function setCookie( + name: string, + value: string, + options?: Cookies.CookieAttributes, +): void { + if (typeof window === "undefined") { + return; + } + Cookies.set(name, value, options); +} + +export function removeCookie( + name: string, + options?: Cookies.CookieAttributes, +): void { + if (typeof window === "undefined") { + return; + } + Cookies.remove(name, options); +} diff --git a/apps/as/src/shared/lib/dayjs.ts b/apps/as/src/shared/lib/dayjs.ts index 28b3f908b..62c6cef6e 100644 --- a/apps/as/src/shared/lib/dayjs.ts +++ b/apps/as/src/shared/lib/dayjs.ts @@ -1,8 +1,9 @@ import dayjs from "dayjs"; -import "dayjs/locale/ko"; -import utc from "dayjs/plugin/utc"; -import timezone from "dayjs/plugin/timezone"; import relativeTime from "dayjs/plugin/relativeTime"; +import timezone from "dayjs/plugin/timezone"; +import utc from "dayjs/plugin/utc"; + +import "dayjs/locale/ko"; dayjs.extend(utc); dayjs.extend(timezone); diff --git a/apps/as/src/shared/lib/index.ts b/apps/as/src/shared/lib/index.ts index 26a6d4551..013c429d1 100644 --- a/apps/as/src/shared/lib/index.ts +++ b/apps/as/src/shared/lib/index.ts @@ -1,3 +1,4 @@ -export { queryClient } from "./query-client"; +export { getCookie, removeCookie, setCookie } from "./cookie"; export { dayjs } from "./dayjs"; -export { getCookie, setCookie, removeCookie } from "./cookie"; +export { queryClient } from "./query-client"; +export { useUserStore } from "./use-user-store"; diff --git a/apps/as/src/shared/lib/use-user-store.ts b/apps/as/src/shared/lib/use-user-store.ts new file mode 100644 index 000000000..8aa5085a9 --- /dev/null +++ b/apps/as/src/shared/lib/use-user-store.ts @@ -0,0 +1,16 @@ +import { useContext } from "react"; + +import { useStore } from "zustand"; + +import { StoreContext } from "../providers"; +import type { UserStore } from "../store"; + +export const useUserStore = (selector: (store: UserStore) => T): T => { + const storeContext = useContext(StoreContext); + + if (!storeContext) { + throw new Error("useUserStore must be used within StoreProvider"); + } + + return useStore(storeContext.userStore, selector); +}; diff --git a/apps/as/src/shared/providers/index.ts b/apps/as/src/shared/providers/index.ts new file mode 100644 index 000000000..e19453b80 --- /dev/null +++ b/apps/as/src/shared/providers/index.ts @@ -0,0 +1 @@ +export { StoreContext, StoreProvider } from "./store-provider"; diff --git a/apps/as/src/shared/providers/store-provider.tsx b/apps/as/src/shared/providers/store-provider.tsx new file mode 100644 index 000000000..4ebb2151e --- /dev/null +++ b/apps/as/src/shared/providers/store-provider.tsx @@ -0,0 +1,22 @@ +"use client"; + +import { createContext, useRef } from "react"; + +import { createUserStore } from "../store"; + +type StoreContextType = { + userStore: ReturnType; +}; + +export const StoreContext = createContext(undefined); + +export const StoreProvider = ({ children }: { children: React.ReactNode }) => { + const storeRef = useRef(null); + if (storeRef.current === null) { + storeRef.current = { + userStore: createUserStore(), + }; + } + + return {children}; +}; diff --git a/apps/as/src/shared/store/index.ts b/apps/as/src/shared/store/index.ts new file mode 100644 index 000000000..8a0f34588 --- /dev/null +++ b/apps/as/src/shared/store/index.ts @@ -0,0 +1 @@ +export { createUserStore, type IUserInfo, type UserStore } from "./user-store"; diff --git a/apps/as/src/shared/store/user-store.ts b/apps/as/src/shared/store/user-store.ts new file mode 100644 index 000000000..65d897cf1 --- /dev/null +++ b/apps/as/src/shared/store/user-store.ts @@ -0,0 +1,57 @@ +import { createStore } from "zustand/vanilla"; + +export interface IUserInfo { + regDt: string; + mdfcnDt: string; + rgtr: string; + mdfr: string; + adminRoleYn: string; + userUnqId: string; + userId: string; + userName: string; + email: string; + encryptedPassword: string; + refreshToken: string; + userStateCode: string; + lastLoginDate: string; + loginFailCount: number; + pswdHnt: string; + pswdAns: string; + mphn: string; + telno: string; + zip: string; + addr: string; + daddr: string; + laeSeCd: string; + ogdpSeCd: string; + aprvYn: string; + autzrId: string; + expryYmd: string; + lastPswdChgDt: string; + googleId: string; + kakaoId: string; + naverId: string; + isSocialUser: boolean; + hasPassword: boolean; +} + +export type UserState = { + userInfo: IUserInfo | null; +}; + +export type UserActions = { + setUserInfo: (userInfo: IUserInfo | null) => void; +}; + +export type UserStore = UserState & UserActions; + +export const defaultInitState: UserState = { + userInfo: null, +}; + +export const createUserStore = (initState: UserState = defaultInitState) => { + return createStore()((set) => ({ + ...initState, + setUserInfo: (userInfo: IUserInfo | null) => set(() => ({ userInfo })), + })); +}; diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index e51b76dd9..d19dec7ed 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -4,8 +4,12 @@ import presetConfig from "../../tailwind.config.preset"; const config: Config = { presets: [presetConfig], content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./shared/**/*.{js,ts,jsx,tsx,mdx}", + "./entities/**/*.{js,ts,jsx,tsx,mdx}", + "./features/**/*.{js,ts,jsx,tsx,mdx}", + "./widgets/**/*.{js,ts,jsx,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}", - "./src/**/*.{js,ts,jsx,tsx,mdx}", "../../packages/common/components/dist/**/*.{js,ts,jsx,tsx,mdx}", ], theme: { diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json index 8428fd5c2..dab9b0b8e 100644 --- a/apps/as/tsconfig.json +++ b/apps/as/tsconfig.json @@ -13,7 +13,11 @@ "isolatedModules": true, "jsx": "preserve", "incremental": true, - "plugins": [{ "name": "next" }], + "plugins": [ + { + "name": "next" + } + ], "paths": { "@/*": ["./src/*"], "@common/components": ["../../packages/common/components/dist/"], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8cc097be..c9efd7b97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,9 +138,6 @@ importers: '@common/network': specifier: workspace:* version: link:../../packages/common/network - '@faker-js/faker': - specifier: ^10.3.0 - version: 10.3.0 '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) @@ -172,6 +169,9 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.3.5 '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 @@ -179,8 +179,11 @@ importers: specifier: ^9.0.0 version: 9.39.4(jiti@2.6.1) eslint-config-next: - specifier: 15.4.0 - version: 15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + specifier: 15.3.8 + version: 15.3.8(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-react-hooks: + specifier: ^5.0.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) postcss: specifier: ^8.4.49 version: 8.5.8 @@ -2497,10 +2500,6 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@faker-js/faker@10.3.0': - resolution: {integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==} - engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} - '@faker-js/faker@9.9.0': resolution: {integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} @@ -2796,9 +2795,6 @@ packages: '@next/eslint-plugin-next@15.3.8': resolution: {integrity: sha512-CKpvDZhNXPUjUHmjHddcsqjwj46oQblFms2hr2uA79C0kVTiSXQEQxkawUsDNSofHhTI31IbSeBdVyuk/U1nKw==} - '@next/eslint-plugin-next@15.4.0': - resolution: {integrity: sha512-dlGuj2B76ltswtpdDFQJfTlu6ux0v+EUYzsAYR1IqxqHi5iMPWhPRztgu8eqQZo4uNYkABKzLCmVeGDwbTYTiw==} - '@next/swc-darwin-arm64@15.3.5': resolution: {integrity: sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==} engines: {node: '>= 10'} @@ -5032,15 +5028,6 @@ packages: typescript: optional: true - eslint-config-next@15.4.0: - resolution: {integrity: sha512-OFkQ8br0wuZNRlXDyLpfaCwzW+qayzNaiHNcLHDMW874/1Nktb2+cCUMlItXdzDvNS/QY5jggKlYXEH2+vz1BA==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -7999,8 +7986,6 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@faker-js/faker@10.3.0': {} - '@faker-js/faker@9.9.0': {} '@feature-sliced/filesystem@3.0.1': @@ -8293,10 +8278,6 @@ snapshots: dependencies: fast-glob: 3.3.1 - '@next/eslint-plugin-next@15.4.0': - dependencies: - fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.3.5': optional: true @@ -10812,7 +10793,7 @@ snapshots: eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@1.21.7)) @@ -10843,26 +10824,6 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@next/eslint-plugin-next': 15.4.0 - '@rushstack/eslint-patch': 1.16.1 - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@2.6.1)) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -10882,7 +10843,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) transitivePeerDependencies: - supports-color @@ -10923,7 +10884,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 From 4928778b02b37c35ce0718b388162f961c67077a Mon Sep 17 00:00:00 2001 From: bicochan Date: Tue, 12 May 2026 14:48:42 +0900 Subject: [PATCH 15/15] =?UTF-8?q?chore:=20client=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/src/shared/api/client.ts | 4 ++++ packages/common/components/src/api/client.ts | 7 ++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/as/src/shared/api/client.ts b/apps/as/src/shared/api/client.ts index 061e1de99..22008492b 100644 --- a/apps/as/src/shared/api/client.ts +++ b/apps/as/src/shared/api/client.ts @@ -1,6 +1,10 @@ import { PROXY_HOST, SITE_ID } from "@/shared/config"; import { Client } from "@common/network"; +import { setCookie } from "../lib"; + +setCookie("site-id-key", SITE_ID); + const BASE_URL = `${PROXY_HOST}/server`; export const client = Client.getInstance({ diff --git a/packages/common/components/src/api/client.ts b/packages/common/components/src/api/client.ts index 46d5291fd..0226a4f9a 100644 --- a/packages/common/components/src/api/client.ts +++ b/packages/common/components/src/api/client.ts @@ -1,17 +1,14 @@ import { Client } from "@common/network"; import { getConfig } from "@common/config"; -import { getCookie } from "../lib"; - -const siteId = getCookie("site-id-key") ?? ""; const getClientInstance = () => { const config = getConfig(); - const { PROXY_HOST } = config; + const { PROXY_HOST, SITE_ID } = config; const BASE_URL = `${PROXY_HOST}/server`; return Client.getInstance({ baseURL: BASE_URL, - siteId, + siteId: SITE_ID ?? "", }); };