feat(portal-shell): integrate next-intl + merge messages from teacher-portal (P1-4)
- Add next-intl v4.13.2 with cookie-based locale (no i18n routing) - Create src/i18n/request.ts reading NEXT_LOCALE cookie - Merge zh-CN/en messages from teacher-portal + add shell.dev.templates namespace - Wrap next.config.js with withNextIntl plugin (Turbopack resolveAlias) - Refactor RootLayout to async + NextIntlClientProvider + getLocale/getMessages - Replace ThemeI18nProvider with ThemeProvider (theme-only, i18n removed) - Remove locale/setLocale from PluginStore - Rework locale-switcher to useLocale/useTranslations + router.refresh - Update dev/templates page to use getTranslations (Server Component) - Fix WorkbenchPageShell test (loading prop + center instead of children) Verified: locale switch via NEXT_LOCALE cookie changes <html lang> and messages zh-CN: 保存/取消/切换侧栏 | en: Save/Cancel/Toggle sidebar typecheck 0 errors | lint 0 errors 2 warnings (generated) | vitest 231 passed
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> 版本:3.0
|
> 版本:3.0
|
||||||
> 日期:2026-07-20
|
> 日期:2026-07-20
|
||||||
> 状态:**P0 已完成 + P1-1/P1-2/P1-3 已完成(2026-07-22 验收)+ P1 进行中;架构审计完成 + 重设计方案定稿**
|
> 状态:**P0 已完成 + P1-1/P1-2/P1-3/P1-4 已完成(2026-07-22 验收)+ P1 进行中;架构审计完成 + 重设计方案定稿**
|
||||||
> 本文档地位:**portal-shell 前端工作的唯一权威指导文档**。所有后续 AI/人工在此模块的工作必须先读本文件,以其为准。
|
> 本文档地位:**portal-shell 前端工作的唯一权威指导文档**。所有后续 AI/人工在此模块的工作必须先读本文件,以其为准。
|
||||||
>
|
>
|
||||||
> 关联文档(按效力排序):
|
> 关联文档(按效力排序):
|
||||||
@@ -757,7 +757,7 @@ export default async function ExamsPage(): Promise<React.ReactElement> {
|
|||||||
- **P0-7**:`eslint .` → 0 errors, 2 warnings(均在 `__generated__/types.ts` 生成文件);[eslint.config.js](file:///e:/Desktop/Edu/apps/portal-shell/eslint.config.js) 含 `no-restricted-imports`
|
- **P0-7**:`eslint .` → 0 errors, 2 warnings(均在 `__generated__/types.ts` 生成文件);[eslint.config.js](file:///e:/Desktop/Edu/apps/portal-shell/eslint.config.js) 含 `no-restricted-imports`
|
||||||
- **P0-8**:`git status` 干净(commit `cfb7b00`);`.env.local` 与 `tsconfig.tsbuildinfo` 已在 [.gitignore](file:///e:/Desktop/Edu/apps/portal-shell/.gitignore)
|
- **P0-8**:`git status` 干净(commit `cfb7b00`);`.env.local` 与 `tsconfig.tsbuildinfo` 已在 [.gitignore](file:///e:/Desktop/Edu/apps/portal-shell/.gitignore)
|
||||||
|
|
||||||
### P1 · 框架与数据源接通(1–2 周)— 进行中(P1-1/P1-2 ✅ 2026-07-22 验收)
|
### P1 · 框架与数据源接通(1–2 周)— 进行中(P1-1/P1-2/P1-3/P1-4 ✅ 2026-07-22 验收)
|
||||||
|
|
||||||
**目标**:AppFrame + 导航 + 真实数据仪表盘 + 页面模板 + MSW + i18n,页面迁移的"流水线"建成。
|
**目标**:AppFrame + 导航 + 真实数据仪表盘 + 页面模板 + MSW + i18n,页面迁移的"流水线"建成。
|
||||||
|
|
||||||
@@ -766,7 +766,7 @@ export default async function ExamsPage(): Promise<React.ReactElement> {
|
|||||||
| P1-1 | `src/app/shell/layout.tsx` AppFrame(TopBar 静态挂载 + Sidebar 导航菜单 `navigation.ts` + 权限过滤) | 4 角色各见各菜单;导航项与 route-permissions 表一致(单测) | ✅ |
|
| P1-1 | `src/app/shell/layout.tsx` AppFrame(TopBar 静态挂载 + Sidebar 导航菜单 `navigation.ts` + 权限过滤) | 4 角色各见各菜单;导航项与 route-permissions 表一致(单测) | ✅ |
|
||||||
| P1-2 | 仪表盘改接真实查询:`teacherDashboard`/`studentDashboard`/`parentDashboard`/`adminDashboard` + `warnings`/`errorBookStats` | 起全栈,4 角色仪表盘显示真实聚合数据(截图);widget 假契约查询(grades/homeworks/schedule/attendance/exams/announcements)全部下线或改造 | ✅ |
|
| P1-2 | 仪表盘改接真实查询:`teacherDashboard`/`studentDashboard`/`parentDashboard`/`adminDashboard` + `warnings`/`errorBookStats` | 起全栈,4 角色仪表盘显示真实聚合数据(截图);widget 假契约查询(grades/homeworks/schedule/attendance/exams/announcements)全部下线或改造 | ✅ |
|
||||||
| P1-3 | 页面模板四件套(list/detail/form/workbench)+ 三态规范 | Storybook 或示例页 4 张(/shell/dev/templates/*,仅 dev 可见;注:Next.js 私有文件夹 `_xxx` 不参与路由,故使用 `dev` 而非 `_dev`) | ✅ |
|
| P1-3 | 页面模板四件套(list/detail/form/workbench)+ 三态规范 | Storybook 或示例页 4 张(/shell/dev/templates/*,仅 dev 可见;注:Next.js 私有文件夹 `_xxx` 不参与路由,故使用 `dev` 而非 `_dev`) | ✅ |
|
||||||
| P1-4 | next-intl 接入 + messages 合并迁移 | 切换 locale 页面文案切换(截图);`useT` 自造函数删除 | ⏳ |
|
| P1-4 | next-intl 接入 + messages 合并迁移 | 切换 locale 页面文案切换(截图);`useT` 自造函数删除 | ✅ |
|
||||||
| P1-5 | MSW 兜底层(迁移旧 handlers,覆盖 dashboard/users/exams/grades 四域起步) | `NEXT_PUBLIC_MSW=1` 无后端启动,仪表盘 + users 页有数据(截图);生产构建 bundle 无 mocks | ⏳ |
|
| P1-5 | MSW 兜底层(迁移旧 handlers,覆盖 dashboard/users/exams/grades 四域起步) | `NEXT_PUBLIC_MSW=1` 无后端启动,仪表盘 + users 页有数据(截图);生产构建 bundle 无 mocks | ⏳ |
|
||||||
| P1-6 | 31 widget 令牌清债(271 处机械替换)+ `border border` 去重 + 未知类检测进 arch:scan | `grep -c "text-heading-\|mt-sm\|py-xs\|p-md" src/widgets` = 0;`pnpm lint:tokens` 通过 | ⏳ |
|
| P1-6 | 31 widget 令牌清债(271 处机械替换)+ `border border` 去重 + 未知类检测进 arch:scan | `grep -c "text-heading-\|mt-sm\|py-xs\|p-md" src/widgets` = 0;`pnpm lint:tokens` 通过 | ⏳ |
|
||||||
| P1-7 | codegen 恢复 typescript-operations(config + data-ana 两域先行关闭 skipDocumentsValidation) | 生成操作级类型;lib/api 对应域删除手写 interface;typecheck 通过 | ⏳ |
|
| P1-7 | codegen 恢复 typescript-operations(config + data-ana 两域先行关闭 skipDocumentsValidation) | 生成操作级类型;lib/api 对应域删除手写 interface;typecheck 通过 | ⏳ |
|
||||||
@@ -823,6 +823,27 @@ export default async function ExamsPage(): Promise<React.ReactElement> {
|
|||||||
- **单测**:`vitest run --reporter=verbose page-templates` → 19/19 passed(覆盖 4 个模板的三态、字段渲染、提交按钮禁用、errorSummary alert 等)
|
- **单测**:`vitest run --reporter=verbose page-templates` → 19/19 passed(覆盖 4 个模板的三态、字段渲染、提交按钮禁用、errorSummary alert 等)
|
||||||
- **质量校验**:`tsc --noEmit` 通过;`eslint src/shared/components/page-templates src/app/shell/dev src/shared/lib/route-permissions.ts` 通过;`vitest run` 全量 21 test files / 231 tests 全部通过(212 原有 + 19 新增)
|
- **质量校验**:`tsc --noEmit` 通过;`eslint src/shared/components/page-templates src/app/shell/dev src/shared/lib/route-permissions.ts` 通过;`vitest run` 全量 21 test files / 231 tests 全部通过(212 原有 + 19 新增)
|
||||||
|
|
||||||
|
**P1-4 验收证据(2026-07-22)**:
|
||||||
|
|
||||||
|
- **next-intl v4.13.2 接入(无 i18n 路由模式)**:
|
||||||
|
- [next.config.js](file:///e:/Desktop/Edu/apps/portal-shell/next.config.js):`createNextIntlPlugin("./src/i18n/request.ts")` 包装 `nextConfig`,Turbopack resolveAlias 注入 `next-intl/config`
|
||||||
|
- [src/i18n/request.ts](file:///e:/Desktop/Edu/apps/portal-shell/src/i18n/request.ts):`getRequestConfig` 从 `NEXT_LOCALE` cookie 读取 locale(缺省 `zh-CN`),动态 import 对应 messages JSON
|
||||||
|
- [src/app/layout.tsx](file:///e:/Desktop/Edu/apps/portal-shell/src/app/layout.tsx):`async RootLayout` + `getLocale()` / `getMessages()` + `<NextIntlClientProvider>` 注入全局 messages;`<html lang={locale}>` 随 cookie 切换
|
||||||
|
- **messages 合并迁移**:
|
||||||
|
- [src/messages/zh-CN.json](file:///e:/Desktop/Edu/apps/portal-shell/src/messages/zh-CN.json):从 teacher-portal 合并 + 新增 `shell.dev.templates` 命名空间(title/description/list/detail/form/workbench 及其 listExample 等子键)
|
||||||
|
- [src/messages/en.json](file:///e:/Desktop/Edu/apps/portal-shell/src/messages/en.json):与 zh-CN.json 结构完全对称
|
||||||
|
- **自造 i18n 删除**:
|
||||||
|
- [src/providers/ThemeI18nProvider.tsx](file:///e:/Desktop/Edu/apps/portal-shell/src/providers/ThemeI18nProvider.tsx) 已删除(含 `useT()` 函数 + `DEFAULT_MESSAGES` 常量)
|
||||||
|
- [src/providers/ThemeProvider.tsx](file:///e:/Desktop/Edu/apps/portal-shell/src/providers/ThemeProvider.tsx):新建,仅保留主题切换(`usePluginStore(s => s.theme)` + `document.documentElement.classList` 切换 `.dark`)
|
||||||
|
- [src/shell/PluginStore.ts](file:///e:/Desktop/Edu/apps/portal-shell/src/shell/PluginStore.ts):移除 `locale` / `setLocale` 字段
|
||||||
|
- `grep -rn "useT(\|ThemeI18nProvider\|DEFAULT_MESSAGES" src` → 无匹配(自造函数全删除)
|
||||||
|
- **locale-switcher 改造**:[src/widgets/topbar/locale-switcher/index.tsx](file:///e:/Desktop/Edu/apps/portal-shell/src/widgets/topbar/locale-switcher/index.tsx) 使用 `useLocale()` + `useTranslations()` + cookie 写入 + `router.refresh()` 触发 RSC 重新渲染
|
||||||
|
- **dev/templates 页面演示**:[src/app/shell/dev/templates/page.tsx](file:///e:/Desktop/Edu/apps/portal-shell/src/app/shell/dev/templates/page.tsx) 使用 `getTranslations("shell.dev.templates")`(Server Component)
|
||||||
|
- **locale 切换 HTTP 验证**(dev server `next dev --turbopack -p 4010`):
|
||||||
|
- `GET /login`(无 cookie)→ `<html lang="zh-CN">` + `NextIntlClientProvider locale="zh-CN"` + 中文文案("保存"/"取消"/"切换侧栏")
|
||||||
|
- `GET /login`(`Cookie: NEXT_LOCALE=en`)→ `<html lang="en">` + `NextIntlClientProvider locale="en"` + 英文文案("Save"/"Cancel"/"Toggle sidebar")
|
||||||
|
- **质量校验**:`tsc --noEmit` 通过;`eslint src` → 0 errors, 2 warnings(`__generated__/types.ts` 生成文件);`vitest run` 全量 21 test files / 231 tests 全部通过
|
||||||
|
|
||||||
### P2 · 教师域页面(2–3 周,可与 P3 部分并行)
|
### P2 · 教师域页面(2–3 周,可与 P3 部分并行)
|
||||||
|
|
||||||
- 范围:§9.1 全表(~50 页)。顺序建议:exams → homework → grades → lesson-plans → questions/textbooks → attendance/classes/students → diagnostic/error-book/analytics → elective/course-plans → ai-* → practice/schedule-changes/leave。
|
- 范围:§9.1 全表(~50 页)。顺序建议:exams → homework → grades → lesson-plans → questions/textbooks → attendance/classes/students → diagnostic/error-book/analytics → elective/course-plans → ai-* → practice/schedule-changes/leave。
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
/**
|
/**
|
||||||
* Next.js 配置(v2.1 M8 + v0.2 Tailwind v4 + Next 16 Turbopack)
|
* Next.js 配置(v2.1 M8 + v0.2 Tailwind v4 + Next 16 Turbopack + P1-4 next-intl)
|
||||||
*
|
*
|
||||||
* 角色:插件化仪表盘宿主(单 Next.js App Router · 单 Docker)
|
* 角色:插件化仪表盘宿主(单 Next.js App Router · 单 Docker)
|
||||||
* - output: standalone(单容器部署)
|
* - output:standalone(单容器部署)
|
||||||
* - transpilePackages: @edu/* workspace 包
|
* - transpilePackages: @edu/* workspace 包
|
||||||
* - 反向代理:/api/v1/* → api-gateway :8080(JWT 校验 + 注入 x-user-id/x-user-role)
|
* - 反向代理:/api/v1/* → api-gateway :8080(JWT 校验 + 注入 x-user-id/x-user-role)
|
||||||
* - GraphQL 查询走 apollo-router :3000(M8 验收点,由 Apollo Client 直连)
|
* - GraphQL 查询走 apollo-router :3000(M8 验收点,由 Apollo Client 直连)
|
||||||
|
* - next-intl:无 i18n 路由模式(locale 由 cookie 决定,ARCHITECTURE.md §3.4 V3-A6)
|
||||||
*
|
*
|
||||||
* Next 16 默认 Turbopack:
|
* Next 16 默认 Turbopack:
|
||||||
* - turbopack.resolveExtensions 处理 ESM 包 .js 后缀导入源码 TS 文件的映射
|
* - turbopack.resolveExtensions 处理 ESM 包 .js 后缀导入源码 TS 文件的映射
|
||||||
* - webpack 配置保留作为 fallback(--webpack flag 时生效)
|
* - webpack 配置保留作为 fallback(--webpack flag 时生效)
|
||||||
*
|
*
|
||||||
* 关联:portal-shell spec §2、project_rules §3.2
|
* 关联:portal-shell ARCHITECTURE.md §3.4 V3-A6、spec §2、project_rules §3.2
|
||||||
*/
|
*/
|
||||||
|
import createNextIntlPlugin from "next-intl/plugin";
|
||||||
|
|
||||||
|
const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts");
|
||||||
|
|
||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
@@ -65,4 +69,4 @@ const nextConfig = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default nextConfig;
|
export default withNextIntl(nextConfig);
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
"jose": "^5.9.6",
|
"jose": "^5.9.6",
|
||||||
"lucide-react": "^0.562.0",
|
"lucide-react": "^0.562.0",
|
||||||
"next": "^16.0.10",
|
"next": "^16.0.10",
|
||||||
|
"next-intl": "^4.13.2",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"react": "^19.2.1",
|
"react": "^19.2.1",
|
||||||
"react-dom": "^19.2.1",
|
"react-dom": "^19.2.1",
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import "./globals.css";
|
|||||||
import type { Metadata, Viewport } from "next";
|
import type { Metadata, Viewport } from "next";
|
||||||
import { Inter } from "next/font/google";
|
import { Inter } from "next/font/google";
|
||||||
import type { ReactNode } from "react";
|
import type { ReactNode } from "react";
|
||||||
|
import { NextIntlClientProvider } from "next-intl";
|
||||||
|
import { getLocale, getMessages } from "next-intl/server";
|
||||||
|
|
||||||
import { Toaster } from "@/shared/components/ui/sonner";
|
import { Toaster } from "@/shared/components/ui/sonner";
|
||||||
|
|
||||||
@@ -31,24 +33,35 @@ export const viewport: Viewport = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RootLayout
|
* RootLayout(P1-4:next-intl 接入)
|
||||||
*
|
*
|
||||||
* 仅负责 <html>/<body> 与字体变量 + 全局 Toaster。
|
* 职责:
|
||||||
* 业务 Providers(Apollo/Auth/ThemeI18n)在 ClientShell 中挂载(spec §5.5)。
|
* - <html lang={locale}>:从 next-intl getLocale() 获取(cookie 驱动)
|
||||||
|
* - NextIntlClientProvider:将 messages 注入客户端,useTranslations 全局可用
|
||||||
|
* - 字体变量 + 全局 Toaster
|
||||||
*
|
*
|
||||||
* suppressHydrationWarning:ThemeI18nProvider 在客户端切换 .dark class,
|
* 业务 Providers(Apollo/Auth/Theme)在 ClientShell 中挂载(spec §5.5)。
|
||||||
|
*
|
||||||
|
* suppressHydrationWarning:ThemeProvider 在客户端切换 .dark class,
|
||||||
* 与 SSR 输出的 <html class=""> 不一致,需抑制 hydration 警告。
|
* 与 SSR 输出的 <html class=""> 不一致,需抑制 hydration 警告。
|
||||||
|
*
|
||||||
|
* 关联:portal-shell ARCHITECTURE.md §3.4 V3-A6、§8.7
|
||||||
*/
|
*/
|
||||||
export default function RootLayout({
|
export default async function RootLayout({
|
||||||
children,
|
children,
|
||||||
}: {
|
}: {
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
}): ReactNode {
|
}): Promise<ReactNode> {
|
||||||
|
const locale = await getLocale();
|
||||||
|
const messages = await getMessages();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<html lang="zh-CN" suppressHydrationWarning className={inter.variable}>
|
<html lang={locale} suppressHydrationWarning className={inter.variable}>
|
||||||
<body className="font-sans antialiased">
|
<body className="font-sans antialiased">
|
||||||
|
<NextIntlClientProvider locale={locale} messages={messages}>
|
||||||
{children}
|
{children}
|
||||||
<Toaster />
|
<Toaster />
|
||||||
|
</NextIntlClientProvider>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,65 +1,68 @@
|
|||||||
import { notFound } from "next/navigation";
|
import { notFound } from "next/navigation";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { getTranslations } from "next-intl/server";
|
||||||
|
|
||||||
import { PageHeader } from "@/shared/components/ui/page-header";
|
import { PageHeader } from "@/shared/components/ui/page-header";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模板预览首页(ARCHITECTURE.md §10 P1-3)
|
* 模板预览首页(ARCHITECTURE.md §10 P1-3 + P1-4 next-intl)
|
||||||
*
|
*
|
||||||
* /shell/dev/templates — 仅 dev 可见
|
* /shell/dev/templates — 仅 dev 可见
|
||||||
*
|
*
|
||||||
* 生产环境调用 notFound() 渲染 404,避免模板示例暴露到线上。
|
* 生产环境调用 notFound() 渲染 404,避免模板示例暴露到线上。
|
||||||
* middleware 已放行 /shell/dev/**(仅校验登录),此文件做二次守卫。
|
* middleware 已放行 /shell/dev/**(仅校验登录),此文件做二次守卫。
|
||||||
*
|
*
|
||||||
|
* P1-4:文案走 next-intl getTranslations(Server Component),
|
||||||
|
* 切换 NEXT_LOCALE cookie 后页面文案即时切换。
|
||||||
|
*
|
||||||
* 注:原 ARCHITECTURE.md 使用 `_dev` 命名,但 Next.js 将下划线开头的文件夹
|
* 注:原 ARCHITECTURE.md 使用 `_dev` 命名,但 Next.js 将下划线开头的文件夹
|
||||||
* 视为私有文件夹(不参与路由),故改用 `dev` 命名。
|
* 视为私有文件夹(不参与路由),故改用 `dev` 命名。
|
||||||
*/
|
*/
|
||||||
export default function TemplatesIndexPage(): React.ReactElement {
|
export default async function TemplatesIndexPage(): Promise<React.ReactElement> {
|
||||||
if (process.env.NODE_ENV === "production") {
|
if (process.env.NODE_ENV === "production") {
|
||||||
notFound();
|
notFound();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const t = await getTranslations("shell.dev.templates");
|
||||||
|
|
||||||
const templates = [
|
const templates = [
|
||||||
{
|
{
|
||||||
href: "/shell/dev/templates/list",
|
href: "/shell/dev/templates/list",
|
||||||
title: "列表页模板",
|
title: t("list"),
|
||||||
description: "PageHeader + FilterBar + DataTable + Pagination + 三态",
|
description: t("listDescription"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: "/shell/dev/templates/detail",
|
href: "/shell/dev/templates/detail",
|
||||||
title: "详情页模板",
|
title: t("detail"),
|
||||||
description: "PageHeader + 信息区 + Tabs/分区 + 关联列表",
|
description: t("detailDescription"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: "/shell/dev/templates/form",
|
href: "/shell/dev/templates/form",
|
||||||
title: "表单页模板",
|
title: t("form"),
|
||||||
description: "PageHeader + 表单 + 提交/取消 + 错误摘要",
|
description: t("formDescription"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: "/shell/dev/templates/workbench",
|
href: "/shell/dev/templates/workbench",
|
||||||
title: "工作台页模板",
|
title: t("workbench"),
|
||||||
description: "三栏(树/画布/属性)复合组件",
|
description: t("workbenchDescription"),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-6">
|
<div className="flex flex-col gap-6">
|
||||||
<PageHeader
|
<PageHeader title={t("title")} description={t("description")} />
|
||||||
title="页面模板四件套"
|
|
||||||
description="P1-3 验收用示例页(仅 dev 可见,生产环境 404)"
|
|
||||||
/>
|
|
||||||
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
||||||
{templates.map((t) => (
|
{templates.map((tpl) => (
|
||||||
<Link
|
<Link
|
||||||
key={t.href}
|
key={tpl.href}
|
||||||
href={t.href}
|
href={tpl.href}
|
||||||
className="block rounded-xl border bg-card p-6 transition-colors hover:bg-accent"
|
className="block rounded-xl border bg-card p-6 transition-colors hover:bg-accent"
|
||||||
>
|
>
|
||||||
<h2 className="text-lg font-semibold">{t.title}</h2>
|
<h2 className="text-lg font-semibold">{tpl.title}</h2>
|
||||||
<p className="mt-1 text-sm text-muted-foreground">
|
<p className="mt-1 text-sm text-muted-foreground">
|
||||||
{t.description}
|
{tpl.description}
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-3 text-xs text-muted-foreground">{t.href}</p>
|
<p className="mt-3 text-xs text-muted-foreground">{tpl.href}</p>
|
||||||
</Link>
|
</Link>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
32
apps/portal-shell/src/i18n/request.ts
Normal file
32
apps/portal-shell/src/i18n/request.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/**
|
||||||
|
* next-intl 请求配置(App Router 无 i18n 路由模式)
|
||||||
|
*
|
||||||
|
* ARCHITECTURE.md §3.4 V3-A6:next-intl 正式接入
|
||||||
|
*
|
||||||
|
* 采用"无 i18n 路由"策略(locale 不出现在 URL 中):
|
||||||
|
* - locale 由 NEXT_LOCALE cookie 决定(locale-switcher 写入)
|
||||||
|
* - 缺省 locale = zh-CN
|
||||||
|
* - 切换 locale 时设置 cookie + router.refresh() 触发 RSC 重新渲染
|
||||||
|
*
|
||||||
|
* 关联:portal-shell ARCHITECTURE.md §3.4 V3-A6、§8.7、§11.2
|
||||||
|
*/
|
||||||
|
import { getRequestConfig } from "next-intl/server";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
|
||||||
|
export const locales = ["zh-CN", "en"] as const;
|
||||||
|
export type Locale = (typeof locales)[number];
|
||||||
|
export const defaultLocale: Locale = "zh-CN";
|
||||||
|
|
||||||
|
export default getRequestConfig(async () => {
|
||||||
|
const cookieStore = await cookies();
|
||||||
|
const cookieLocale = cookieStore.get("NEXT_LOCALE")?.value;
|
||||||
|
const locale: Locale =
|
||||||
|
cookieLocale && locales.includes(cookieLocale as Locale)
|
||||||
|
? (cookieLocale as Locale)
|
||||||
|
: defaultLocale;
|
||||||
|
|
||||||
|
return {
|
||||||
|
locale,
|
||||||
|
messages: (await import(`../messages/${locale}.json`)).default,
|
||||||
|
};
|
||||||
|
});
|
||||||
214
apps/portal-shell/src/messages/en.json
Normal file
214
apps/portal-shell/src/messages/en.json
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"brand": "Edu",
|
||||||
|
"button": {
|
||||||
|
"save": "Save",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"edit": "Edit",
|
||||||
|
"export": "Export",
|
||||||
|
"search": "Search",
|
||||||
|
"delete": "Delete",
|
||||||
|
"retry": "Retry",
|
||||||
|
"back": "Back"
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"search": "Search",
|
||||||
|
"loading": "Loading...",
|
||||||
|
"student": "Student",
|
||||||
|
"studentNo": "Student No.",
|
||||||
|
"score": "Score",
|
||||||
|
"feedback": "Feedback",
|
||||||
|
"class": "Class",
|
||||||
|
"subject": "Subject",
|
||||||
|
"name": "Name",
|
||||||
|
"email": "Email",
|
||||||
|
"roles": "Roles"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"loading": "Loading...",
|
||||||
|
"saved": "Saved"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"loadFailed": "Failed to load: {message}",
|
||||||
|
"pageError": "Something went wrong"
|
||||||
|
},
|
||||||
|
"nav": {
|
||||||
|
"empty": "No viewports available",
|
||||||
|
"loadError": "Navigation failed to load: {message}",
|
||||||
|
"logout": "Log out",
|
||||||
|
"noRoles": "No roles"
|
||||||
|
},
|
||||||
|
"locale": {
|
||||||
|
"label": "Language",
|
||||||
|
"zhCN": "简体中文",
|
||||||
|
"en": "English"
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"title": "No data",
|
||||||
|
"description": "Adjust filters and retry, or create your first record"
|
||||||
|
},
|
||||||
|
"navLabel": {
|
||||||
|
"dashboard": "Dashboard",
|
||||||
|
"classes": "Classes",
|
||||||
|
"exams": "Exams",
|
||||||
|
"homework": "Homework",
|
||||||
|
"grades": "Grades",
|
||||||
|
"analytics": "Analytics",
|
||||||
|
"knowledgeGraph": "Knowledge Graph",
|
||||||
|
"notifications": "Notifications",
|
||||||
|
"aiAssist": "AI Assist",
|
||||||
|
"aiLessonPlan": "AI Lesson Plan",
|
||||||
|
"aiReport": "AI Report",
|
||||||
|
"attendance": "Attendance",
|
||||||
|
"questions": "Questions",
|
||||||
|
"textbooks": "Textbooks",
|
||||||
|
"lessonPlans": "Lesson Plans",
|
||||||
|
"coursePlans": "Course Plans",
|
||||||
|
"diagnostic": "Diagnostic",
|
||||||
|
"errorBook": "Error Book",
|
||||||
|
"practice": "Practice",
|
||||||
|
"elective": "Elective",
|
||||||
|
"leave": "Leave Requests",
|
||||||
|
"scheduleChanges": "Schedule Changes",
|
||||||
|
"settings": "Settings",
|
||||||
|
"students": "Students"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shell": {
|
||||||
|
"toggleSidebar": "Toggle sidebar",
|
||||||
|
"layout": "Layout",
|
||||||
|
"empty": "No visible plugins",
|
||||||
|
"dev": {
|
||||||
|
"templates": {
|
||||||
|
"title": "Page Templates Quartet",
|
||||||
|
"description": "P1-3 preview pages (dev only, 404 in production)",
|
||||||
|
"list": "List Page Template",
|
||||||
|
"listDescription": "PageHeader + FilterBar + DataTable + Pagination + 3 states",
|
||||||
|
"detail": "Detail Page Template",
|
||||||
|
"detailDescription": "PageHeader + info area + Tabs/sections + related list",
|
||||||
|
"form": "Form Page Template",
|
||||||
|
"formDescription": "PageHeader + form + submit/cancel + error summary",
|
||||||
|
"workbench": "Workbench Page Template",
|
||||||
|
"workbenchDescription": "Three-column (tree/canvas/properties) composite",
|
||||||
|
"listExample": {
|
||||||
|
"title": "Exam Management",
|
||||||
|
"subtitle": "List page template example",
|
||||||
|
"searchPlaceholder": "Search exam name...",
|
||||||
|
"newExam": "New Exam"
|
||||||
|
},
|
||||||
|
"detailExample": {
|
||||||
|
"title": "2026 Spring Final Exam",
|
||||||
|
"subtitle": "Detail page template example"
|
||||||
|
},
|
||||||
|
"formExample": {
|
||||||
|
"title": "New Exam",
|
||||||
|
"subtitle": "Form page template example"
|
||||||
|
},
|
||||||
|
"workbenchExample": {
|
||||||
|
"title": "Lesson Plan Editor",
|
||||||
|
"subtitle": "Workbench page template example"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"title": "Login"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Welcome",
|
||||||
|
"greeting": "Welcome, {name}",
|
||||||
|
"subtitle": "{email} · Roles: {roles} · Data scope: {dataScope}",
|
||||||
|
"subtitleNoRoles": "None",
|
||||||
|
"error": {
|
||||||
|
"loadFailed": "Dashboard failed to load: {message}"
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"title": "No data",
|
||||||
|
"description": "Dashboard data is not ready yet"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"classes": "Total Classes",
|
||||||
|
"exams": "Total Exams",
|
||||||
|
"pendingGrading": "Pending Grading"
|
||||||
|
},
|
||||||
|
"classes": {
|
||||||
|
"title": "My Classes",
|
||||||
|
"count": "{count} total",
|
||||||
|
"viewAll": "View all",
|
||||||
|
"emptyTitle": "No classes",
|
||||||
|
"emptyDescription": "Please contact the administrator to assign classes",
|
||||||
|
"grade": "Grade: {gradeId}",
|
||||||
|
"studentCount": "{count} students",
|
||||||
|
"viewStudents": "View students"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"classes": {
|
||||||
|
"title": "Classes"
|
||||||
|
},
|
||||||
|
"exams": {
|
||||||
|
"title": "Exams"
|
||||||
|
},
|
||||||
|
"homework": {
|
||||||
|
"title": "Homework"
|
||||||
|
},
|
||||||
|
"grades": {
|
||||||
|
"title": "Grades"
|
||||||
|
},
|
||||||
|
"analytics": {
|
||||||
|
"title": "Analytics"
|
||||||
|
},
|
||||||
|
"knowledgeGraph": {
|
||||||
|
"title": "Knowledge Graph"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"title": "Notifications"
|
||||||
|
},
|
||||||
|
"aiAssist": {
|
||||||
|
"title": "AI Assist"
|
||||||
|
},
|
||||||
|
"aiLessonPlan": {
|
||||||
|
"title": "AI Lesson Plan"
|
||||||
|
},
|
||||||
|
"aiReport": {
|
||||||
|
"title": "AI Report"
|
||||||
|
},
|
||||||
|
"attendance": {
|
||||||
|
"title": "Attendance"
|
||||||
|
},
|
||||||
|
"questions": {
|
||||||
|
"title": "Questions"
|
||||||
|
},
|
||||||
|
"textbooks": {
|
||||||
|
"title": "Textbooks"
|
||||||
|
},
|
||||||
|
"lessonPlans": {
|
||||||
|
"title": "Lesson Plans"
|
||||||
|
},
|
||||||
|
"coursePlans": {
|
||||||
|
"title": "Course Plans"
|
||||||
|
},
|
||||||
|
"diagnostic": {
|
||||||
|
"title": "Diagnostic"
|
||||||
|
},
|
||||||
|
"errorBook": {
|
||||||
|
"title": "Error Book"
|
||||||
|
},
|
||||||
|
"practice": {
|
||||||
|
"title": "Practice"
|
||||||
|
},
|
||||||
|
"elective": {
|
||||||
|
"title": "Elective"
|
||||||
|
},
|
||||||
|
"leave": {
|
||||||
|
"title": "Leave Requests"
|
||||||
|
},
|
||||||
|
"scheduleChanges": {
|
||||||
|
"title": "Schedule Changes"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Settings"
|
||||||
|
},
|
||||||
|
"students": {
|
||||||
|
"title": "Students"
|
||||||
|
}
|
||||||
|
}
|
||||||
214
apps/portal-shell/src/messages/zh-CN.json
Normal file
214
apps/portal-shell/src/messages/zh-CN.json
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"brand": "Edu",
|
||||||
|
"button": {
|
||||||
|
"save": "保存",
|
||||||
|
"cancel": "取消",
|
||||||
|
"edit": "编辑",
|
||||||
|
"export": "导出",
|
||||||
|
"search": "搜索",
|
||||||
|
"delete": "删除",
|
||||||
|
"retry": "重试",
|
||||||
|
"back": "返回"
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"search": "搜索",
|
||||||
|
"loading": "加载中...",
|
||||||
|
"student": "学生",
|
||||||
|
"studentNo": "学号",
|
||||||
|
"score": "分数",
|
||||||
|
"feedback": "反馈",
|
||||||
|
"class": "班级",
|
||||||
|
"subject": "学科",
|
||||||
|
"name": "姓名",
|
||||||
|
"email": "邮箱",
|
||||||
|
"roles": "角色"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"loading": "加载中...",
|
||||||
|
"saved": "已保存"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"loadFailed": "加载失败:{message}",
|
||||||
|
"pageError": "页面出错了"
|
||||||
|
},
|
||||||
|
"nav": {
|
||||||
|
"empty": "暂无可用视口",
|
||||||
|
"loadError": "导航加载失败:{message}",
|
||||||
|
"logout": "退出登录",
|
||||||
|
"noRoles": "无角色"
|
||||||
|
},
|
||||||
|
"locale": {
|
||||||
|
"label": "语言",
|
||||||
|
"zhCN": "简体中文",
|
||||||
|
"en": "English"
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"title": "暂无数据",
|
||||||
|
"description": "调整筛选条件后重试,或新建第一条记录"
|
||||||
|
},
|
||||||
|
"navLabel": {
|
||||||
|
"dashboard": "仪表盘",
|
||||||
|
"classes": "班级管理",
|
||||||
|
"exams": "考试管理",
|
||||||
|
"homework": "作业管理",
|
||||||
|
"grades": "成绩查询",
|
||||||
|
"analytics": "学情分析",
|
||||||
|
"knowledgeGraph": "知识图谱",
|
||||||
|
"notifications": "通知中心",
|
||||||
|
"aiAssist": "AI 辅助",
|
||||||
|
"aiLessonPlan": "AI 教案",
|
||||||
|
"aiReport": "AI 学情报告",
|
||||||
|
"attendance": "考勤管理",
|
||||||
|
"questions": "题库",
|
||||||
|
"textbooks": "教材",
|
||||||
|
"lessonPlans": "备课",
|
||||||
|
"coursePlans": "课程计划",
|
||||||
|
"diagnostic": "诊断报告",
|
||||||
|
"errorBook": "错题本",
|
||||||
|
"practice": "练习分析",
|
||||||
|
"elective": "选修课",
|
||||||
|
"leave": "请假审批",
|
||||||
|
"scheduleChanges": "调课申请",
|
||||||
|
"settings": "个人设置",
|
||||||
|
"students": "学生"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shell": {
|
||||||
|
"toggleSidebar": "切换侧栏",
|
||||||
|
"layout": "布局",
|
||||||
|
"empty": "暂无可见插件",
|
||||||
|
"dev": {
|
||||||
|
"templates": {
|
||||||
|
"title": "页面模板四件套",
|
||||||
|
"description": "P1-3 验收用示例页(仅 dev 可见,生产环境 404)",
|
||||||
|
"list": "列表页模板",
|
||||||
|
"listDescription": "PageHeader + FilterBar + DataTable + Pagination + 三态",
|
||||||
|
"detail": "详情页模板",
|
||||||
|
"detailDescription": "PageHeader + 信息区 + Tabs/分区 + 关联列表",
|
||||||
|
"form": "表单页模板",
|
||||||
|
"formDescription": "PageHeader + 表单 + 提交/取消 + 错误摘要",
|
||||||
|
"workbench": "工作台页模板",
|
||||||
|
"workbenchDescription": "三栏(树/画布/属性)复合组件",
|
||||||
|
"listExample": {
|
||||||
|
"title": "考试管理",
|
||||||
|
"subtitle": "列表页模板示例",
|
||||||
|
"searchPlaceholder": "搜索考试名称...",
|
||||||
|
"newExam": "新建考试"
|
||||||
|
},
|
||||||
|
"detailExample": {
|
||||||
|
"title": "2026 春季期末考试",
|
||||||
|
"subtitle": "详情页模板示例"
|
||||||
|
},
|
||||||
|
"formExample": {
|
||||||
|
"title": "新建考试",
|
||||||
|
"subtitle": "表单页模板示例"
|
||||||
|
},
|
||||||
|
"workbenchExample": {
|
||||||
|
"title": "教案编辑器",
|
||||||
|
"subtitle": "工作台页模板示例"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"title": "登录"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "欢迎",
|
||||||
|
"greeting": "欢迎,{name}",
|
||||||
|
"subtitle": "{email} · 角色:{roles} · 数据范围:{dataScope}",
|
||||||
|
"subtitleNoRoles": "无",
|
||||||
|
"error": {
|
||||||
|
"loadFailed": "仪表盘加载失败:{message}"
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"title": "暂无数据",
|
||||||
|
"description": "仪表盘数据尚未就绪"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"classes": "班级总数",
|
||||||
|
"exams": "考试总数",
|
||||||
|
"pendingGrading": "待批改"
|
||||||
|
},
|
||||||
|
"classes": {
|
||||||
|
"title": "我的班级",
|
||||||
|
"count": "{count} 个",
|
||||||
|
"viewAll": "查看全部",
|
||||||
|
"emptyTitle": "暂无班级",
|
||||||
|
"emptyDescription": "请联系管理员分配班级",
|
||||||
|
"grade": "年级:{gradeId}",
|
||||||
|
"studentCount": "{count} 名学生",
|
||||||
|
"viewStudents": "查看学生"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"classes": {
|
||||||
|
"title": "班级管理"
|
||||||
|
},
|
||||||
|
"exams": {
|
||||||
|
"title": "考试管理"
|
||||||
|
},
|
||||||
|
"homework": {
|
||||||
|
"title": "作业管理"
|
||||||
|
},
|
||||||
|
"grades": {
|
||||||
|
"title": "成绩查询"
|
||||||
|
},
|
||||||
|
"analytics": {
|
||||||
|
"title": "学情分析"
|
||||||
|
},
|
||||||
|
"knowledgeGraph": {
|
||||||
|
"title": "知识图谱"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"title": "通知中心"
|
||||||
|
},
|
||||||
|
"aiAssist": {
|
||||||
|
"title": "AI 辅助"
|
||||||
|
},
|
||||||
|
"aiLessonPlan": {
|
||||||
|
"title": "AI 教案"
|
||||||
|
},
|
||||||
|
"aiReport": {
|
||||||
|
"title": "AI 学情报告"
|
||||||
|
},
|
||||||
|
"attendance": {
|
||||||
|
"title": "考勤管理"
|
||||||
|
},
|
||||||
|
"questions": {
|
||||||
|
"title": "题库"
|
||||||
|
},
|
||||||
|
"textbooks": {
|
||||||
|
"title": "教材"
|
||||||
|
},
|
||||||
|
"lessonPlans": {
|
||||||
|
"title": "备课"
|
||||||
|
},
|
||||||
|
"coursePlans": {
|
||||||
|
"title": "课程计划"
|
||||||
|
},
|
||||||
|
"diagnostic": {
|
||||||
|
"title": "诊断报告"
|
||||||
|
},
|
||||||
|
"errorBook": {
|
||||||
|
"title": "错题本"
|
||||||
|
},
|
||||||
|
"practice": {
|
||||||
|
"title": "练习分析"
|
||||||
|
},
|
||||||
|
"elective": {
|
||||||
|
"title": "选修课"
|
||||||
|
},
|
||||||
|
"leave": {
|
||||||
|
"title": "请假审批"
|
||||||
|
},
|
||||||
|
"scheduleChanges": {
|
||||||
|
"title": "调课申请"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "个人设置"
|
||||||
|
},
|
||||||
|
"students": {
|
||||||
|
"title": "学生"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
"use client";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 主题 + i18n Provider(v2.1 M8)
|
|
||||||
*
|
|
||||||
* 通过 PluginStore(Zustand)管理 theme(light/dark)与 locale(zh-CN/en),
|
|
||||||
* 将主题类名同步到 <html>,locale 用于基础文案切换。
|
|
||||||
*
|
|
||||||
* 关联:portal-shell spec §5.2.2 Zustand Store、§9.1 providers
|
|
||||||
*/
|
|
||||||
import { useEffect, type ReactNode } from "react";
|
|
||||||
import { usePluginStore } from "@/shell/PluginStore";
|
|
||||||
|
|
||||||
const DEFAULT_MESSAGES = {
|
|
||||||
"zh-CN": {
|
|
||||||
"shell.toggleSidebar": "切换侧栏",
|
|
||||||
"shell.layout": "布局",
|
|
||||||
"shell.empty": "暂无可见插件",
|
|
||||||
},
|
|
||||||
en: {
|
|
||||||
"shell.toggleSidebar": "Toggle sidebar",
|
|
||||||
"shell.layout": "Layout",
|
|
||||||
"shell.empty": "No visible plugins",
|
|
||||||
},
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
type MessageKey = keyof (typeof DEFAULT_MESSAGES)["zh-CN"];
|
|
||||||
|
|
||||||
export function ThemeI18nProvider({
|
|
||||||
children,
|
|
||||||
}: {
|
|
||||||
children: ReactNode;
|
|
||||||
}): ReactNode {
|
|
||||||
const theme = usePluginStore((s) => s.theme);
|
|
||||||
const locale = usePluginStore((s) => s.locale);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (typeof document === "undefined") return;
|
|
||||||
const root = document.documentElement;
|
|
||||||
if (theme === "dark") {
|
|
||||||
root.classList.add("dark");
|
|
||||||
} else {
|
|
||||||
root.classList.remove("dark");
|
|
||||||
}
|
|
||||||
root.lang = locale;
|
|
||||||
}, [theme, locale]);
|
|
||||||
|
|
||||||
return <>{children}</>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 简易 i18n 翻译函数(MVP,复用 PluginStore 的 locale) */
|
|
||||||
export function useT(): (key: MessageKey) => string {
|
|
||||||
const locale = usePluginStore((s) => s.locale);
|
|
||||||
return (key: MessageKey) => DEFAULT_MESSAGES[locale][key];
|
|
||||||
}
|
|
||||||
32
apps/portal-shell/src/providers/ThemeProvider.tsx
Normal file
32
apps/portal-shell/src/providers/ThemeProvider.tsx
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ThemeProvider(v3.0 P1-4:i18n 已迁移至 next-intl)
|
||||||
|
*
|
||||||
|
* 仅管理主题(light/dark),将主题类名同步到 <html>。
|
||||||
|
* locale 现由 next-intl 管理(cookie 驱动),<html lang> 在 root layout 设置。
|
||||||
|
*
|
||||||
|
* 关联:portal-shell ARCHITECTURE.md §3.4 V3-A6、spec §5.2.2 Zustand Store
|
||||||
|
*/
|
||||||
|
import { useEffect, type ReactNode } from "react";
|
||||||
|
import { usePluginStore } from "@/shell/PluginStore";
|
||||||
|
|
||||||
|
export function ThemeProvider({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: ReactNode;
|
||||||
|
}): ReactNode {
|
||||||
|
const theme = usePluginStore((s) => s.theme);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (typeof document === "undefined") return;
|
||||||
|
const root = document.documentElement;
|
||||||
|
if (theme === "dark") {
|
||||||
|
root.classList.add("dark");
|
||||||
|
} else {
|
||||||
|
root.classList.remove("dark");
|
||||||
|
}
|
||||||
|
}, [theme]);
|
||||||
|
|
||||||
|
return <>{children}</>;
|
||||||
|
}
|
||||||
@@ -253,9 +253,5 @@ function WorkPageShellLoading({
|
|||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}): React.ReactElement {
|
}): React.ReactElement {
|
||||||
return (
|
return <WorkbenchPageShell title="t" loading center={children} />;
|
||||||
<WorkbenchPageShell title="t" loading>
|
|
||||||
{children}
|
|
||||||
</WorkbenchPageShell>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
import { use, useState, type ReactNode } from "react";
|
import { use, useState, type ReactNode } from "react";
|
||||||
import { ApolloProvider } from "@/providers/ApolloProvider";
|
import { ApolloProvider } from "@/providers/ApolloProvider";
|
||||||
import { AuthProvider, type AuthUser } from "@/providers/AuthProvider";
|
import { AuthProvider, type AuthUser } from "@/providers/AuthProvider";
|
||||||
import { ThemeI18nProvider } from "@/providers/ThemeI18nProvider";
|
import { ThemeProvider } from "@/providers/ThemeProvider";
|
||||||
import { Shell } from "./Shell";
|
import { Shell } from "./Shell";
|
||||||
import { usePluginConfig } from "@/lib/usePluginConfig";
|
import { usePluginConfig } from "@/lib/usePluginConfig";
|
||||||
import type { PluginConfigResponse, Role } from "@/lib/types";
|
import type { PluginConfigResponse, Role } from "@/lib/types";
|
||||||
@@ -105,7 +105,7 @@ export function ClientShell({
|
|||||||
return (
|
return (
|
||||||
<ApolloProvider>
|
<ApolloProvider>
|
||||||
<AuthProvider user={user}>
|
<AuthProvider user={user}>
|
||||||
<ThemeI18nProvider>
|
<ThemeProvider>
|
||||||
{useStreaming && configPromise ? (
|
{useStreaming && configPromise ? (
|
||||||
<ShellContent
|
<ShellContent
|
||||||
configPromise={configPromise}
|
configPromise={configPromise}
|
||||||
@@ -124,7 +124,7 @@ export function ClientShell({
|
|||||||
onDismiss={() => setConfigChanged(false)}
|
onDismiss={() => setConfigChanged(false)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</ThemeI18nProvider>
|
</ThemeProvider>
|
||||||
</AuthProvider>
|
</AuthProvider>
|
||||||
</ApolloProvider>
|
</ApolloProvider>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,31 +1,28 @@
|
|||||||
/**
|
/**
|
||||||
* PluginStore - Zustand 全局状态(v2.1 M8)
|
* PluginStore - Zustand 全局状态(v2.1 M8 + v3.0 P1-4)
|
||||||
*
|
*
|
||||||
* 管理纯 UI、不可分享的全局状态(portal-shell spec §5.2.2):
|
* 管理纯 UI、不可分享的全局状态(portal-shell spec §5.2.2):
|
||||||
* - theme(light/dark)
|
* - theme(light/dark)
|
||||||
* - locale(zh-CN/en)
|
|
||||||
* - sidebarCollapsed
|
* - sidebarCollapsed
|
||||||
*
|
*
|
||||||
|
* locale 已迁移至 next-intl(cookie 驱动,ARCHITECTURE.md §3.4 V3-A6)。
|
||||||
|
*
|
||||||
* 跨插件可分享状态走 URL Search Params,不进此 Store。
|
* 跨插件可分享状态走 URL Search Params,不进此 Store。
|
||||||
*
|
*
|
||||||
* 关联:portal-shell spec §5.2.2、§9.1
|
* 关联:portal-shell spec §5.2.2、§9.1、ARCHITECTURE.md §3.4 V3-A6
|
||||||
*/
|
*/
|
||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
|
|
||||||
export interface PluginStore {
|
export interface PluginStore {
|
||||||
theme: "light" | "dark";
|
theme: "light" | "dark";
|
||||||
locale: "zh-CN" | "en";
|
|
||||||
sidebarCollapsed: boolean;
|
sidebarCollapsed: boolean;
|
||||||
setTheme: (theme: "light" | "dark") => void;
|
setTheme: (theme: "light" | "dark") => void;
|
||||||
setLocale: (locale: "zh-CN" | "en") => void;
|
|
||||||
toggleSidebar: () => void;
|
toggleSidebar: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const usePluginStore = create<PluginStore>((set) => ({
|
export const usePluginStore = create<PluginStore>((set) => ({
|
||||||
theme: "light",
|
theme: "light",
|
||||||
setTheme: (theme) => set({ theme }),
|
setTheme: (theme) => set({ theme }),
|
||||||
locale: "zh-CN",
|
|
||||||
setLocale: (locale) => set({ locale }),
|
|
||||||
sidebarCollapsed: false,
|
sidebarCollapsed: false,
|
||||||
toggleSidebar: () => set((s) => ({ sidebarCollapsed: !s.sidebarCollapsed })),
|
toggleSidebar: () => set((s) => ({ sidebarCollapsed: !s.sidebarCollapsed })),
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -1,20 +1,21 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* locale-switcher(topbar / top)
|
* locale-switcher(topbar / top)— P1-4 next-intl 接入
|
||||||
*
|
*
|
||||||
* 语言切换器,通过 usePluginStore 读写 locale(zh-CN / en)。
|
* 语言切换器,通过 next-intl useLocale() 读取当前 locale,
|
||||||
* 无 GraphQL 查询,纯 UI 状态。
|
* 切换时写入 NEXT_LOCALE cookie + router.refresh() 触发 RSC 重新渲染。
|
||||||
*
|
*
|
||||||
* 关联:portal-shell spec §5.2.2、M8 验收
|
* 关联:portal-shell ARCHITECTURE.md §3.4 V3-A6、§8.7
|
||||||
*/
|
*/
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { usePluginStore } from "@/shell/PluginStore";
|
import { useRouter } from "next/navigation";
|
||||||
|
import { useLocale, useTranslations } from "next-intl";
|
||||||
import type { PluginProps } from "@/lib/types";
|
import type { PluginProps } from "@/lib/types";
|
||||||
|
|
||||||
const LOCALES = [
|
const LOCALES = [
|
||||||
{ value: "zh-CN", label: "简体中文" },
|
{ value: "zh-CN", labelKey: "common.locale.zhCN" },
|
||||||
{ value: "en", label: "English" },
|
{ value: "en", labelKey: "common.locale.en" },
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
type LocaleValue = (typeof LOCALES)[number]["value"];
|
type LocaleValue = (typeof LOCALES)[number]["value"];
|
||||||
@@ -22,12 +23,17 @@ type LocaleValue = (typeof LOCALES)[number]["value"];
|
|||||||
export default function LocaleSwitcher(
|
export default function LocaleSwitcher(
|
||||||
_props: PluginProps,
|
_props: PluginProps,
|
||||||
): React.ReactElement {
|
): React.ReactElement {
|
||||||
const locale = usePluginStore((s) => s.locale);
|
const locale = useLocale();
|
||||||
const setLocale = usePluginStore((s) => s.setLocale);
|
const t = useTranslations();
|
||||||
|
const router = useRouter();
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
const handleSelect = (value: LocaleValue): void => {
|
const handleSelect = (value: LocaleValue): void => {
|
||||||
setLocale(value);
|
if (value !== locale) {
|
||||||
|
// 写入 NEXT_LOCALE cookie,next-intl request.ts 读取此 cookie 决定 locale
|
||||||
|
document.cookie = `NEXT_LOCALE=${value};path=/;max-age=31536000;samesite=strict`;
|
||||||
|
router.refresh();
|
||||||
|
}
|
||||||
setOpen(false);
|
setOpen(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -35,7 +41,7 @@ export default function LocaleSwitcher(
|
|||||||
<div className="relative">
|
<div className="relative">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
aria-label="切换语言"
|
aria-label={t("common.locale.label")}
|
||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
onClick={() => setOpen((v) => !v)}
|
onClick={() => setOpen((v) => !v)}
|
||||||
className="rounded-md bg-card px-sm py-xs text-sm text-foreground"
|
className="rounded-md bg-card px-sm py-xs text-sm text-foreground"
|
||||||
@@ -55,7 +61,7 @@ export default function LocaleSwitcher(
|
|||||||
: "w-full rounded-md px-sm py-xs text-left text-sm text-foreground"
|
: "w-full rounded-md px-sm py-xs text-left text-sm text-foreground"
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
{item.label}
|
{t(item.labelKey)}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* locale-switcher 插件清单(topbar)
|
* locale-switcher 插件清单(topbar)
|
||||||
*
|
*
|
||||||
* 语言切换器,插入 top slot。通过 usePluginStore 读写 locale。
|
* 语言切换器,插入 top slot。通过 next-intl useLocale() 读写 locale。
|
||||||
*/
|
*/
|
||||||
import type { PluginManifest } from "@/lib/types";
|
import type { PluginManifest } from "@/lib/types";
|
||||||
|
|
||||||
|
|||||||
479
pnpm-lock.yaml
generated
479
pnpm-lock.yaml
generated
@@ -372,6 +372,9 @@ importers:
|
|||||||
next:
|
next:
|
||||||
specifier: ^16.0.10
|
specifier: ^16.0.10
|
||||||
version: 16.2.10(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.61.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
|
version: 16.2.10(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.61.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
|
||||||
|
next-intl:
|
||||||
|
specifier: ^4.13.2
|
||||||
|
version: 4.13.2(@swc/helpers@0.5.23)(next@16.2.10(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.61.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)(typescript@5.6.2)
|
||||||
next-themes:
|
next-themes:
|
||||||
specifier: ^0.4.6
|
specifier: ^0.4.6
|
||||||
version: 0.4.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
|
version: 0.4.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
|
||||||
@@ -402,7 +405,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@graphql-codegen/cli':
|
'@graphql-codegen/cli':
|
||||||
specifier: ^5.0.0
|
specifier: ^5.0.0
|
||||||
version: 5.0.0(@types/node@22.20.1)(encoding@0.1.13)(graphql@16.14.2)
|
version: 5.0.0(@parcel/watcher@2.6.0)(@types/node@22.20.1)(encoding@0.1.13)(graphql@16.14.2)
|
||||||
'@graphql-codegen/typescript':
|
'@graphql-codegen/typescript':
|
||||||
specifier: ^4.0.0
|
specifier: ^4.0.0
|
||||||
version: 4.1.1(graphql@16.14.2)
|
version: 4.1.1(graphql@16.14.2)
|
||||||
@@ -526,7 +529,7 @@ importers:
|
|||||||
version: 9.39.5
|
version: 9.39.5
|
||||||
'@graphql-codegen/cli':
|
'@graphql-codegen/cli':
|
||||||
specifier: ^5.0.0
|
specifier: ^5.0.0
|
||||||
version: 5.0.0(@types/node@22.20.1)(encoding@0.1.13)(graphql@16.14.2)
|
version: 5.0.0(@parcel/watcher@2.6.0)(@types/node@22.20.1)(encoding@0.1.13)(graphql@16.14.2)
|
||||||
'@graphql-codegen/client-preset':
|
'@graphql-codegen/client-preset':
|
||||||
specifier: ^4.5.0
|
specifier: ^4.5.0
|
||||||
version: 4.5.0(graphql@16.14.2)
|
version: 4.5.0(graphql@16.14.2)
|
||||||
@@ -902,7 +905,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(esbuild@0.19.7)(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)
|
||||||
'@nestjs/schematics':
|
'@nestjs/schematics':
|
||||||
specifier: ^10.2.0
|
specifier: ^10.2.0
|
||||||
version: 10.2.0(chokidar@3.6.0)(typescript@5.6.2)
|
version: 10.2.0(chokidar@3.6.0)(typescript@5.6.2)
|
||||||
@@ -1020,7 +1023,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@types/express':
|
'@types/express':
|
||||||
specifier: ^4.17.0
|
specifier: ^4.17.0
|
||||||
version: 4.17.25
|
version: 4.17.25
|
||||||
@@ -1129,7 +1132,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@types/express':
|
'@types/express':
|
||||||
specifier: ^4.17.0
|
specifier: ^4.17.0
|
||||||
version: 4.17.25
|
version: 4.17.25
|
||||||
@@ -1226,7 +1229,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@nestjs/schematics':
|
'@nestjs/schematics':
|
||||||
specifier: ^10.2.0
|
specifier: ^10.2.0
|
||||||
version: 10.2.0(chokidar@3.6.0)(typescript@5.6.2)
|
version: 10.2.0(chokidar@3.6.0)(typescript@5.6.2)
|
||||||
@@ -1341,7 +1344,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@types/bcrypt':
|
'@types/bcrypt':
|
||||||
specifier: ^5.0.0
|
specifier: ^5.0.0
|
||||||
version: 5.0.2
|
version: 5.0.2
|
||||||
@@ -1456,7 +1459,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@types/express':
|
'@types/express':
|
||||||
specifier: ^4.17.0
|
specifier: ^4.17.0
|
||||||
version: 4.17.25
|
version: 4.17.25
|
||||||
@@ -1550,7 +1553,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@types/express':
|
'@types/express':
|
||||||
specifier: ^4.17.0
|
specifier: ^4.17.0
|
||||||
version: 4.17.25
|
version: 4.17.25
|
||||||
@@ -1650,7 +1653,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@types/express':
|
'@types/express':
|
||||||
specifier: ^4.17.0
|
specifier: ^4.17.0
|
||||||
version: 4.17.25
|
version: 4.17.25
|
||||||
@@ -1735,7 +1738,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nestjs/cli':
|
'@nestjs/cli':
|
||||||
specifier: ^10.4.0
|
specifier: ^10.4.0
|
||||||
version: 10.4.0(lightningcss@1.32.0)
|
version: 10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
'@types/express':
|
'@types/express':
|
||||||
specifier: ^4.17.0
|
specifier: ^4.17.0
|
||||||
version: 4.17.25
|
version: 4.17.25
|
||||||
@@ -2680,15 +2683,27 @@ packages:
|
|||||||
'@formatjs/fast-memoize@2.2.0':
|
'@formatjs/fast-memoize@2.2.0':
|
||||||
resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==}
|
resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==}
|
||||||
|
|
||||||
|
'@formatjs/fast-memoize@3.1.7':
|
||||||
|
resolution: {integrity: sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==}
|
||||||
|
|
||||||
'@formatjs/icu-messageformat-parser@2.7.8':
|
'@formatjs/icu-messageformat-parser@2.7.8':
|
||||||
resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==}
|
resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==}
|
||||||
|
|
||||||
|
'@formatjs/icu-messageformat-parser@3.5.15':
|
||||||
|
resolution: {integrity: sha512-5o4grXKotAB3JqQuisLApHG43g17N+paoRTa92Jiz35Zvfemq0cVf4EDvuxyHAzmsJji7igaEowicLO/VmfJ8Q==}
|
||||||
|
|
||||||
'@formatjs/icu-skeleton-parser@1.8.2':
|
'@formatjs/icu-skeleton-parser@1.8.2':
|
||||||
resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==}
|
resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==}
|
||||||
|
|
||||||
|
'@formatjs/icu-skeleton-parser@2.1.11':
|
||||||
|
resolution: {integrity: sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==}
|
||||||
|
|
||||||
'@formatjs/intl-localematcher@0.5.4':
|
'@formatjs/intl-localematcher@0.5.4':
|
||||||
resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==}
|
resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==}
|
||||||
|
|
||||||
|
'@formatjs/intl-localematcher@0.8.13':
|
||||||
|
resolution: {integrity: sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg==}
|
||||||
|
|
||||||
'@graphql-codegen/add@5.0.3':
|
'@graphql-codegen/add@5.0.3':
|
||||||
resolution: {integrity: sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==}
|
resolution: {integrity: sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -5158,6 +5173,88 @@ packages:
|
|||||||
'@paralleldrive/cuid2@2.2.2':
|
'@paralleldrive/cuid2@2.2.2':
|
||||||
resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
|
resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
|
||||||
|
|
||||||
|
'@parcel/watcher-android-arm64@2.6.0':
|
||||||
|
resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@parcel/watcher-darwin-arm64@2.6.0':
|
||||||
|
resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@parcel/watcher-darwin-x64@2.6.0':
|
||||||
|
resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@parcel/watcher-freebsd-x64@2.6.0':
|
||||||
|
resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm-glibc@2.6.0':
|
||||||
|
resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm-musl@2.6.0':
|
||||||
|
resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm64-glibc@2.6.0':
|
||||||
|
resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm64-musl@2.6.0':
|
||||||
|
resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-x64-glibc@2.6.0':
|
||||||
|
resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-x64-musl@2.6.0':
|
||||||
|
resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
|
'@parcel/watcher-win32-arm64@2.6.0':
|
||||||
|
resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@parcel/watcher-win32-x64@2.6.0':
|
||||||
|
resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@parcel/watcher@2.6.0':
|
||||||
|
resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==}
|
||||||
|
engines: {node: '>= 10.0.0'}
|
||||||
|
|
||||||
'@peculiar/asn1-schema@2.8.0':
|
'@peculiar/asn1-schema@2.8.0':
|
||||||
resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==}
|
resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==}
|
||||||
|
|
||||||
@@ -5861,6 +5958,9 @@ packages:
|
|||||||
'@swc/helpers':
|
'@swc/helpers':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@schummar/icu-type-parser@1.21.5':
|
||||||
|
resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==}
|
||||||
|
|
||||||
'@sentry-internal/browser-utils@8.55.2':
|
'@sentry-internal/browser-utils@8.55.2':
|
||||||
resolution: {integrity: sha512-GnKod+gL/Y+1FUM/RGV8q6le1CoyiGbT40MitEK7eVwWe+bfTRq1gN7ioupyHFMUg1RlQkDQ4/sENmio/uow5A==}
|
resolution: {integrity: sha512-GnKod+gL/Y+1FUM/RGV8q6le1CoyiGbT40MitEK7eVwWe+bfTRq1gN7ioupyHFMUg1RlQkDQ4/sENmio/uow5A==}
|
||||||
engines: {node: '>=14.18'}
|
engines: {node: '>=14.18'}
|
||||||
@@ -5983,6 +6083,93 @@ packages:
|
|||||||
'@sqltools/formatter@1.2.5':
|
'@sqltools/formatter@1.2.5':
|
||||||
resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
|
resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
|
||||||
|
|
||||||
|
'@swc/core-darwin-arm64@1.15.46':
|
||||||
|
resolution: {integrity: sha512-IsISIT22EfktVJrlvIpnAxG2u/A9aob9l99HMlx80x72WlFmFPk1V3UhkEzx86eJP8hw049KTFv/RISho2cq2Q==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@swc/core-darwin-x64@1.15.46':
|
||||||
|
resolution: {integrity: sha512-4Tj4ppVIPCmUMpmGFiGtyEriwLyJ+yi/US4WfBrP/ok8COGddDZXLEzQETnKyK46mjvr1v0jevrS23zjoff7vA==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@swc/core-linux-arm-gnueabihf@1.15.46':
|
||||||
|
resolution: {integrity: sha512-i8tUGnNjyOgMmfmgFSg4aeJLQoFyfpIHK5FjpQAwpRyQIqEUB2w1e8zIDQzY1WhOxx8NoS1S5iUL813Un4Sf5A==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@swc/core-linux-arm64-gnu@1.15.46':
|
||||||
|
resolution: {integrity: sha512-c0OnhqzdhfOvv6qhNCcByepB+sNYOGZyhtr2Qa6ZCHvAWTYhSRw4j/u92Stue9PbZ/6q74b9nHzi76+kVzqQHQ==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@swc/core-linux-arm64-musl@1.15.46':
|
||||||
|
resolution: {integrity: sha512-imyRpNEcUzFQFV2LE4jL68ErvmKEuZCbvZru77iQREunJ+bR4i658cupTgtG1mLYM3F1Tzy3Sb9xYb02KghWTg==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
|
'@swc/core-linux-ppc64-gnu@1.15.46':
|
||||||
|
resolution: {integrity: sha512-ctEfcl/HcUeomK33cbySiHZm98GEDIxTm1EkpBsYCiHxElYBzvTXVeuQT2YwbUXn9XCrjiw4ipyUNk33k26qRg==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@swc/core-linux-s390x-gnu@1.15.46':
|
||||||
|
resolution: {integrity: sha512-DxlMdnt84TtRVTv7WL/thWyz9+QU8QZNNoAP9rrk0P68LziuhfePp8MjQ44zIprpTHTsEwyziIuGUUN5iSC1bQ==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [s390x]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@swc/core-linux-x64-gnu@1.15.46':
|
||||||
|
resolution: {integrity: sha512-SKxI7J6t90XPl8hRUqtJi9NfGdunN/E/vZMc7Bc0figeRdOPDBT+Tm8g7cx9xM0T0mewh2l+8dewa3Am27/P+A==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@swc/core-linux-x64-musl@1.15.46':
|
||||||
|
resolution: {integrity: sha512-qj9T6B7bosI0VEsrWOVXZN1OXxS8Tp63ywyrLxNdOycnUtLdkgYcoBsN5y8ImnDDsnwrEWZOy1e+J4xSe7mA3Q==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
|
'@swc/core-win32-arm64-msvc@1.15.46':
|
||||||
|
resolution: {integrity: sha512-8p7l4c3LU+eA5g9Et1JPhNeMC1oQwXTGU+uah8DPIBX7YXzqswvaBtyKVmXefVGi/DJU1x3YJsc3mbAp9aWzSQ==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@swc/core-win32-ia32-msvc@1.15.46':
|
||||||
|
resolution: {integrity: sha512-tUEnfr3Bn9u6FOjUb3PN9p+09qZC2j+wNDLKHzXXZn22rqGcUqR/ohCRSS+nG9B9+X+U+3FewNEHJkTmdIvMjQ==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@swc/core-win32-x64-msvc@1.15.46':
|
||||||
|
resolution: {integrity: sha512-Vux7UDzBJYQggSuPfcl2w9iu+IJpgpRCxHzgCaVkELnAXAE4XZMOTX9HNcaNiwfeIDqdu2rkr69RuDm6wY8neA==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@swc/core@1.15.46':
|
||||||
|
resolution: {integrity: sha512-Ri3em2mBpq3h2zSPliCYl63otDGqek8PPEfv2nWgRQEbZ/VBCNyypVTVQ6cEbTCXBhy+WE2T3fQb08moIyuYaw==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
peerDependencies:
|
||||||
|
'@swc/helpers': '>=0.5.17'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@swc/helpers':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@swc/counter@0.1.3':
|
'@swc/counter@0.1.3':
|
||||||
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
|
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
|
||||||
|
|
||||||
@@ -5995,6 +6182,9 @@ packages:
|
|||||||
'@swc/helpers@0.5.5':
|
'@swc/helpers@0.5.5':
|
||||||
resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
|
resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
|
||||||
|
|
||||||
|
'@swc/types@0.1.27':
|
||||||
|
resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==}
|
||||||
|
|
||||||
'@tailwindcss/node@4.3.2':
|
'@tailwindcss/node@4.3.2':
|
||||||
resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==}
|
resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==}
|
||||||
|
|
||||||
@@ -8547,6 +8737,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==}
|
resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
icu-minify@4.13.2:
|
||||||
|
resolution: {integrity: sha512-XhYQTEnBXBCyF6ERiwItFweoOXDUciujaGjIWCA7RhOCEPDfhVSTtuwfRq6HdVk7tKnYJh+yaurP96zGnaKsPg==}
|
||||||
|
|
||||||
idb-keyval@6.3.0:
|
idb-keyval@6.3.0:
|
||||||
resolution: {integrity: sha512-um+2dgAWmYsu615EXpWVwSmapJhON0G43t3Ka/EVaohzPQXSMqKEqeDK/oIW3Ow+BXaF2PvSc+oBTFp793A5Ow==}
|
resolution: {integrity: sha512-um+2dgAWmYsu615EXpWVwSmapJhON0G43t3Ka/EVaohzPQXSMqKEqeDK/oIW3Ow+BXaF2PvSc+oBTFp793A5Ow==}
|
||||||
|
|
||||||
@@ -8653,6 +8846,9 @@ packages:
|
|||||||
intl-messageformat@10.5.14:
|
intl-messageformat@10.5.14:
|
||||||
resolution: {integrity: sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==}
|
resolution: {integrity: sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==}
|
||||||
|
|
||||||
|
intl-messageformat@11.2.12:
|
||||||
|
resolution: {integrity: sha512-KW70Xxfcvy7vV3qODfvShWkFDPMqKDAa4N+hSyVBWGNtVhTUFYaqlD/l88DaYPKiVcPP4rPQ3qnH7i5K82Mg7g==}
|
||||||
|
|
||||||
invariant@2.2.4:
|
invariant@2.2.4:
|
||||||
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
|
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
|
||||||
|
|
||||||
@@ -9552,6 +9748,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
|
resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
|
negotiator@1.0.0:
|
||||||
|
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
|
||||||
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
neo-async@2.6.2:
|
neo-async@2.6.2:
|
||||||
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
|
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
|
||||||
|
|
||||||
@@ -9564,12 +9764,25 @@ packages:
|
|||||||
neo4j-driver@5.28.3:
|
neo4j-driver@5.28.3:
|
||||||
resolution: {integrity: sha512-k7c0wEh3HoONv1v5AyLp9/BDAbYHJhz2TZvzWstSEU3g3suQcXmKEaYBfrK2UMzxcy3bCT0DrnfRbzsOW5G/Ag==}
|
resolution: {integrity: sha512-k7c0wEh3HoONv1v5AyLp9/BDAbYHJhz2TZvzWstSEU3g3suQcXmKEaYBfrK2UMzxcy3bCT0DrnfRbzsOW5G/Ag==}
|
||||||
|
|
||||||
|
next-intl-swc-plugin-extractor@4.13.2:
|
||||||
|
resolution: {integrity: sha512-O30N/Y4ifzRe5Sz80jD1Qkg4VY6Zfef4SbHNNE166QkHswBf3/Kygpdd1X52sUUwTCk6uvdisO8ybfAN/VYJHQ==}
|
||||||
|
|
||||||
next-intl@3.20.0:
|
next-intl@3.20.0:
|
||||||
resolution: {integrity: sha512-0bCZcc38HfAZk/T+PNNcnJZknC+caS5rBK+WYRd1HsOL5O6puEu2H3kya8oT9s8piHjrTf7P0UHeahOFleOnrw==}
|
resolution: {integrity: sha512-0bCZcc38HfAZk/T+PNNcnJZknC+caS5rBK+WYRd1HsOL5O6puEu2H3kya8oT9s8piHjrTf7P0UHeahOFleOnrw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0
|
next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0
|
||||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||||
|
|
||||||
|
next-intl@4.13.2:
|
||||||
|
resolution: {integrity: sha512-iCYycEP7/PE+1ue4MWBuz1qns6ESA+SGzuXxNMNN1qiYUh2fLhJPiZvHW1zZC7zMTn44aJUglOVZxUb1+hUz6g==}
|
||||||
|
peerDependencies:
|
||||||
|
next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
|
||||||
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
|
||||||
|
typescript: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
|
||||||
next-themes@0.4.6:
|
next-themes@0.4.6:
|
||||||
resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
|
resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -9628,6 +9841,9 @@ packages:
|
|||||||
node-addon-api@5.0.0:
|
node-addon-api@5.0.0:
|
||||||
resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==}
|
resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==}
|
||||||
|
|
||||||
|
node-addon-api@7.1.1:
|
||||||
|
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
|
||||||
|
|
||||||
node-domexception@1.0.0:
|
node-domexception@1.0.0:
|
||||||
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
||||||
engines: {node: '>=10.5.0'}
|
engines: {node: '>=10.5.0'}
|
||||||
@@ -9969,6 +10185,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
|
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
|
po-parser@2.1.1:
|
||||||
|
resolution: {integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==}
|
||||||
|
|
||||||
possible-typed-array-names@1.1.0:
|
possible-typed-array-names@1.1.0:
|
||||||
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
|
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@@ -11463,6 +11682,11 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||||
|
|
||||||
|
use-intl@4.13.2:
|
||||||
|
resolution: {integrity: sha512-p6/gCromeBoec+wEuOIkPaytH77RBjW94KWv8MRsNrbI4UOx8QgwNhgl9lbPOKM/b0dpanLhCYztLEH5yQUjtg==}
|
||||||
|
peerDependencies:
|
||||||
|
react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
|
||||||
|
|
||||||
use-sidecar@1.1.3:
|
use-sidecar@1.1.3:
|
||||||
resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
|
resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@@ -12775,28 +12999,40 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
|
'@formatjs/fast-memoize@3.1.7': {}
|
||||||
|
|
||||||
'@formatjs/icu-messageformat-parser@2.7.8':
|
'@formatjs/icu-messageformat-parser@2.7.8':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@formatjs/ecma402-abstract': 2.0.0
|
'@formatjs/ecma402-abstract': 2.0.0
|
||||||
'@formatjs/icu-skeleton-parser': 1.8.2
|
'@formatjs/icu-skeleton-parser': 1.8.2
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
|
'@formatjs/icu-messageformat-parser@3.5.15':
|
||||||
|
dependencies:
|
||||||
|
'@formatjs/icu-skeleton-parser': 2.1.11
|
||||||
|
|
||||||
'@formatjs/icu-skeleton-parser@1.8.2':
|
'@formatjs/icu-skeleton-parser@1.8.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@formatjs/ecma402-abstract': 2.0.0
|
'@formatjs/ecma402-abstract': 2.0.0
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
|
'@formatjs/icu-skeleton-parser@2.1.11': {}
|
||||||
|
|
||||||
'@formatjs/intl-localematcher@0.5.4':
|
'@formatjs/intl-localematcher@0.5.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
|
'@formatjs/intl-localematcher@0.8.13':
|
||||||
|
dependencies:
|
||||||
|
'@formatjs/fast-memoize': 3.1.7
|
||||||
|
|
||||||
'@graphql-codegen/add@5.0.3(graphql@16.14.2)':
|
'@graphql-codegen/add@5.0.3(graphql@16.14.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.14.2)
|
'@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.14.2)
|
||||||
graphql: 16.14.2
|
graphql: 16.14.2
|
||||||
tslib: 2.6.3
|
tslib: 2.6.3
|
||||||
|
|
||||||
'@graphql-codegen/cli@5.0.0(@types/node@22.20.1)(encoding@0.1.13)(graphql@16.14.2)':
|
'@graphql-codegen/cli@5.0.0(@parcel/watcher@2.6.0)(@types/node@22.20.1)(encoding@0.1.13)(graphql@16.14.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/generator': 7.29.7
|
'@babel/generator': 7.29.7
|
||||||
'@babel/template': 7.29.7
|
'@babel/template': 7.29.7
|
||||||
@@ -12833,6 +13069,8 @@ snapshots:
|
|||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
yaml: 2.9.0
|
yaml: 2.9.0
|
||||||
yargs: 17.7.3
|
yargs: 17.7.3
|
||||||
|
optionalDependencies:
|
||||||
|
'@parcel/watcher': 2.6.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@fastify/websocket'
|
- '@fastify/websocket'
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
@@ -13924,7 +14162,7 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@apollo/subgraph': 2.14.2(graphql@16.14.2)
|
'@apollo/subgraph': 2.14.2(graphql@16.14.2)
|
||||||
|
|
||||||
'@nestjs/cli@10.4.0(esbuild@0.19.7)(lightningcss@1.32.0)':
|
'@nestjs/cli@10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@angular-devkit/core': 17.3.8(chokidar@3.6.0)
|
'@angular-devkit/core': 17.3.8(chokidar@3.6.0)
|
||||||
'@angular-devkit/schematics': 17.3.8(chokidar@3.6.0)
|
'@angular-devkit/schematics': 17.3.8(chokidar@3.6.0)
|
||||||
@@ -13934,7 +14172,7 @@ snapshots:
|
|||||||
chokidar: 3.6.0
|
chokidar: 3.6.0
|
||||||
cli-table3: 0.6.5
|
cli-table3: 0.6.5
|
||||||
commander: 4.1.1
|
commander: 4.1.1
|
||||||
fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1(esbuild@0.19.7)(lightningcss@1.32.0))
|
fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0))
|
||||||
glob: 10.4.2
|
glob: 10.4.2
|
||||||
inquirer: 8.2.6
|
inquirer: 8.2.6
|
||||||
node-emoji: 1.11.0
|
node-emoji: 1.11.0
|
||||||
@@ -13944,8 +14182,10 @@ snapshots:
|
|||||||
tsconfig-paths: 4.2.0
|
tsconfig-paths: 4.2.0
|
||||||
tsconfig-paths-webpack-plugin: 4.1.0
|
tsconfig-paths-webpack-plugin: 4.1.0
|
||||||
typescript: 5.3.3
|
typescript: 5.3.3
|
||||||
webpack: 5.92.1(esbuild@0.19.7)(lightningcss@1.32.0)
|
webpack: 5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)
|
||||||
webpack-node-externals: 3.0.0
|
webpack-node-externals: 3.0.0
|
||||||
|
optionalDependencies:
|
||||||
|
'@swc/core': 1.15.46(@swc/helpers@0.5.23)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@minify-html/node'
|
- '@minify-html/node'
|
||||||
- '@swc/css'
|
- '@swc/css'
|
||||||
@@ -13960,7 +14200,7 @@ snapshots:
|
|||||||
- uglify-js
|
- uglify-js
|
||||||
- webpack-cli
|
- webpack-cli
|
||||||
|
|
||||||
'@nestjs/cli@10.4.0(lightningcss@1.32.0)':
|
'@nestjs/cli@10.4.0(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@angular-devkit/core': 17.3.8(chokidar@3.6.0)
|
'@angular-devkit/core': 17.3.8(chokidar@3.6.0)
|
||||||
'@angular-devkit/schematics': 17.3.8(chokidar@3.6.0)
|
'@angular-devkit/schematics': 17.3.8(chokidar@3.6.0)
|
||||||
@@ -13970,7 +14210,7 @@ snapshots:
|
|||||||
chokidar: 3.6.0
|
chokidar: 3.6.0
|
||||||
cli-table3: 0.6.5
|
cli-table3: 0.6.5
|
||||||
commander: 4.1.1
|
commander: 4.1.1
|
||||||
fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1(lightningcss@1.32.0))
|
fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0))
|
||||||
glob: 10.4.2
|
glob: 10.4.2
|
||||||
inquirer: 8.2.6
|
inquirer: 8.2.6
|
||||||
node-emoji: 1.11.0
|
node-emoji: 1.11.0
|
||||||
@@ -13980,8 +14220,10 @@ snapshots:
|
|||||||
tsconfig-paths: 4.2.0
|
tsconfig-paths: 4.2.0
|
||||||
tsconfig-paths-webpack-plugin: 4.1.0
|
tsconfig-paths-webpack-plugin: 4.1.0
|
||||||
typescript: 5.3.3
|
typescript: 5.3.3
|
||||||
webpack: 5.92.1(lightningcss@1.32.0)
|
webpack: 5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
webpack-node-externals: 3.0.0
|
webpack-node-externals: 3.0.0
|
||||||
|
optionalDependencies:
|
||||||
|
'@swc/core': 1.15.46(@swc/helpers@0.5.23)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@minify-html/node'
|
- '@minify-html/node'
|
||||||
- '@swc/css'
|
- '@swc/css'
|
||||||
@@ -16130,6 +16372,62 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@noble/hashes': 1.1.5
|
'@noble/hashes': 1.1.5
|
||||||
|
|
||||||
|
'@parcel/watcher-android-arm64@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-darwin-arm64@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-darwin-x64@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-freebsd-x64@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm-glibc@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm-musl@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm64-glibc@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-arm64-musl@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-x64-glibc@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-linux-x64-musl@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-win32-arm64@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher-win32-x64@2.6.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@parcel/watcher@2.6.0':
|
||||||
|
dependencies:
|
||||||
|
detect-libc: 2.1.2
|
||||||
|
is-glob: 4.0.3
|
||||||
|
node-addon-api: 7.1.1
|
||||||
|
picomatch: 4.0.5
|
||||||
|
optionalDependencies:
|
||||||
|
'@parcel/watcher-android-arm64': 2.6.0
|
||||||
|
'@parcel/watcher-darwin-arm64': 2.6.0
|
||||||
|
'@parcel/watcher-darwin-x64': 2.6.0
|
||||||
|
'@parcel/watcher-freebsd-x64': 2.6.0
|
||||||
|
'@parcel/watcher-linux-arm-glibc': 2.6.0
|
||||||
|
'@parcel/watcher-linux-arm-musl': 2.6.0
|
||||||
|
'@parcel/watcher-linux-arm64-glibc': 2.6.0
|
||||||
|
'@parcel/watcher-linux-arm64-musl': 2.6.0
|
||||||
|
'@parcel/watcher-linux-x64-glibc': 2.6.0
|
||||||
|
'@parcel/watcher-linux-x64-musl': 2.6.0
|
||||||
|
'@parcel/watcher-win32-arm64': 2.6.0
|
||||||
|
'@parcel/watcher-win32-x64': 2.6.0
|
||||||
|
|
||||||
'@peculiar/asn1-schema@2.8.0':
|
'@peculiar/asn1-schema@2.8.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@peculiar/utils': 2.0.3
|
'@peculiar/utils': 2.0.3
|
||||||
@@ -16743,6 +17041,8 @@ snapshots:
|
|||||||
'@module-federation/runtime-tools': 2.7.0
|
'@module-federation/runtime-tools': 2.7.0
|
||||||
'@swc/helpers': 0.5.23
|
'@swc/helpers': 0.5.23
|
||||||
|
|
||||||
|
'@schummar/icu-type-parser@1.21.5': {}
|
||||||
|
|
||||||
'@sentry-internal/browser-utils@8.55.2':
|
'@sentry-internal/browser-utils@8.55.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@sentry/core': 8.55.2
|
'@sentry/core': 8.55.2
|
||||||
@@ -16970,6 +17270,61 @@ snapshots:
|
|||||||
|
|
||||||
'@sqltools/formatter@1.2.5': {}
|
'@sqltools/formatter@1.2.5': {}
|
||||||
|
|
||||||
|
'@swc/core-darwin-arm64@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-darwin-x64@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-linux-arm-gnueabihf@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-linux-arm64-gnu@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-linux-arm64-musl@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-linux-ppc64-gnu@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-linux-s390x-gnu@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-linux-x64-gnu@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-linux-x64-musl@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-win32-arm64-msvc@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-win32-ia32-msvc@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core-win32-x64-msvc@1.15.46':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@swc/core@1.15.46(@swc/helpers@0.5.23)':
|
||||||
|
dependencies:
|
||||||
|
'@swc/counter': 0.1.3
|
||||||
|
'@swc/types': 0.1.27
|
||||||
|
optionalDependencies:
|
||||||
|
'@swc/core-darwin-arm64': 1.15.46
|
||||||
|
'@swc/core-darwin-x64': 1.15.46
|
||||||
|
'@swc/core-linux-arm-gnueabihf': 1.15.46
|
||||||
|
'@swc/core-linux-arm64-gnu': 1.15.46
|
||||||
|
'@swc/core-linux-arm64-musl': 1.15.46
|
||||||
|
'@swc/core-linux-ppc64-gnu': 1.15.46
|
||||||
|
'@swc/core-linux-s390x-gnu': 1.15.46
|
||||||
|
'@swc/core-linux-x64-gnu': 1.15.46
|
||||||
|
'@swc/core-linux-x64-musl': 1.15.46
|
||||||
|
'@swc/core-win32-arm64-msvc': 1.15.46
|
||||||
|
'@swc/core-win32-ia32-msvc': 1.15.46
|
||||||
|
'@swc/core-win32-x64-msvc': 1.15.46
|
||||||
|
'@swc/helpers': 0.5.23
|
||||||
|
|
||||||
'@swc/counter@0.1.3': {}
|
'@swc/counter@0.1.3': {}
|
||||||
|
|
||||||
'@swc/helpers@0.5.15':
|
'@swc/helpers@0.5.15':
|
||||||
@@ -16985,6 +17340,10 @@ snapshots:
|
|||||||
'@swc/counter': 0.1.3
|
'@swc/counter': 0.1.3
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
|
'@swc/types@0.1.27':
|
||||||
|
dependencies:
|
||||||
|
'@swc/counter': 0.1.3
|
||||||
|
|
||||||
'@tailwindcss/node@4.3.2':
|
'@tailwindcss/node@4.3.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/remapping': 2.3.5
|
'@jridgewell/remapping': 2.3.5
|
||||||
@@ -19452,7 +19811,7 @@ snapshots:
|
|||||||
cross-spawn: 7.0.6
|
cross-spawn: 7.0.6
|
||||||
signal-exit: 4.1.0
|
signal-exit: 4.1.0
|
||||||
|
|
||||||
fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1(esbuild@0.19.7)(lightningcss@1.32.0)):
|
fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.29.7
|
'@babel/code-frame': 7.29.7
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
@@ -19467,9 +19826,9 @@ snapshots:
|
|||||||
semver: 7.8.5
|
semver: 7.8.5
|
||||||
tapable: 2.3.3
|
tapable: 2.3.3
|
||||||
typescript: 5.3.3
|
typescript: 5.3.3
|
||||||
webpack: 5.92.1(esbuild@0.19.7)(lightningcss@1.32.0)
|
webpack: 5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)
|
||||||
|
|
||||||
fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1(lightningcss@1.32.0)):
|
fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.29.7
|
'@babel/code-frame': 7.29.7
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
@@ -19484,7 +19843,7 @@ snapshots:
|
|||||||
semver: 7.8.5
|
semver: 7.8.5
|
||||||
tapable: 2.3.3
|
tapable: 2.3.3
|
||||||
typescript: 5.3.3
|
typescript: 5.3.3
|
||||||
webpack: 5.92.1(lightningcss@1.32.0)
|
webpack: 5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
|
|
||||||
form-data@4.0.6:
|
form-data@4.0.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19926,6 +20285,10 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer: 2.1.2
|
safer-buffer: 2.1.2
|
||||||
|
|
||||||
|
icu-minify@4.13.2:
|
||||||
|
dependencies:
|
||||||
|
'@formatjs/icu-messageformat-parser': 3.5.15
|
||||||
|
|
||||||
idb-keyval@6.3.0: {}
|
idb-keyval@6.3.0: {}
|
||||||
|
|
||||||
ieee754@1.2.1: {}
|
ieee754@1.2.1: {}
|
||||||
@@ -20071,6 +20434,11 @@ snapshots:
|
|||||||
'@formatjs/icu-messageformat-parser': 2.7.8
|
'@formatjs/icu-messageformat-parser': 2.7.8
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
|
intl-messageformat@11.2.12:
|
||||||
|
dependencies:
|
||||||
|
'@formatjs/fast-memoize': 3.1.7
|
||||||
|
'@formatjs/icu-messageformat-parser': 3.5.15
|
||||||
|
|
||||||
invariant@2.2.4:
|
invariant@2.2.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
@@ -20908,6 +21276,8 @@ snapshots:
|
|||||||
|
|
||||||
negotiator@0.6.4: {}
|
negotiator@0.6.4: {}
|
||||||
|
|
||||||
|
negotiator@1.0.0: {}
|
||||||
|
|
||||||
neo-async@2.6.2: {}
|
neo-async@2.6.2: {}
|
||||||
|
|
||||||
neo4j-driver-bolt-connection@5.28.3:
|
neo4j-driver-bolt-connection@5.28.3:
|
||||||
@@ -20924,6 +21294,8 @@ snapshots:
|
|||||||
neo4j-driver-core: 5.28.3
|
neo4j-driver-core: 5.28.3
|
||||||
rxjs: 7.8.2
|
rxjs: 7.8.2
|
||||||
|
|
||||||
|
next-intl-swc-plugin-extractor@4.13.2: {}
|
||||||
|
|
||||||
next-intl@3.20.0(next@14.2.35(@opentelemetry/api@1.9.1)(@playwright/test@1.61.1)(react-dom@18.3.0(react@18.3.0))(react@18.3.0))(react@18.3.0):
|
next-intl@3.20.0(next@14.2.35(@opentelemetry/api@1.9.1)(@playwright/test@1.61.1)(react-dom@18.3.0(react@18.3.0))(react@18.3.0))(react@18.3.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@formatjs/intl-localematcher': 0.5.4
|
'@formatjs/intl-localematcher': 0.5.4
|
||||||
@@ -20932,6 +21304,23 @@ snapshots:
|
|||||||
react: 18.3.0
|
react: 18.3.0
|
||||||
use-intl: 3.20.0(react@18.3.0)
|
use-intl: 3.20.0(react@18.3.0)
|
||||||
|
|
||||||
|
next-intl@4.13.2(@swc/helpers@0.5.23)(next@16.2.10(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.61.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react@19.2.7)(typescript@5.6.2):
|
||||||
|
dependencies:
|
||||||
|
'@formatjs/intl-localematcher': 0.8.13
|
||||||
|
'@parcel/watcher': 2.6.0
|
||||||
|
'@swc/core': 1.15.46(@swc/helpers@0.5.23)
|
||||||
|
icu-minify: 4.13.2
|
||||||
|
negotiator: 1.0.0
|
||||||
|
next: 16.2.10(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.61.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
|
||||||
|
next-intl-swc-plugin-extractor: 4.13.2
|
||||||
|
po-parser: 2.1.1
|
||||||
|
react: 19.2.7
|
||||||
|
use-intl: 4.13.2(react@19.2.7)
|
||||||
|
optionalDependencies:
|
||||||
|
typescript: 5.6.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@swc/helpers'
|
||||||
|
|
||||||
next-themes@0.4.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
|
next-themes@0.4.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
|
||||||
dependencies:
|
dependencies:
|
||||||
react: 19.2.7
|
react: 19.2.7
|
||||||
@@ -21003,6 +21392,8 @@ snapshots:
|
|||||||
|
|
||||||
node-addon-api@5.0.0: {}
|
node-addon-api@5.0.0: {}
|
||||||
|
|
||||||
|
node-addon-api@7.1.1: {}
|
||||||
|
|
||||||
node-domexception@1.0.0: {}
|
node-domexception@1.0.0: {}
|
||||||
|
|
||||||
node-emoji@1.11.0:
|
node-emoji@1.11.0:
|
||||||
@@ -21357,6 +21748,8 @@ snapshots:
|
|||||||
|
|
||||||
pluralize@8.0.0: {}
|
pluralize@8.0.0: {}
|
||||||
|
|
||||||
|
po-parser@2.1.1: {}
|
||||||
|
|
||||||
possible-typed-array-names@1.1.0: {}
|
possible-typed-array-names@1.1.0: {}
|
||||||
|
|
||||||
postcss-import@15.1.0(postcss@8.5.18):
|
postcss-import@15.1.0(postcss@8.5.18):
|
||||||
@@ -22568,17 +22961,29 @@ snapshots:
|
|||||||
- bare-abort-controller
|
- bare-abort-controller
|
||||||
- react-native-b4a
|
- react-native-b4a
|
||||||
|
|
||||||
terser-webpack-plugin@5.6.1(esbuild@0.19.7)(lightningcss@1.32.0)(webpack@5.92.1(esbuild@0.19.7)(lightningcss@1.32.0)):
|
terser-webpack-plugin@5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/trace-mapping': 0.3.31
|
'@jridgewell/trace-mapping': 0.3.31
|
||||||
jest-worker: 27.4.5
|
jest-worker: 27.4.5
|
||||||
schema-utils: 4.3.3
|
schema-utils: 4.3.3
|
||||||
terser: 5.49.0
|
terser: 5.49.0
|
||||||
webpack: 5.92.1(esbuild@0.19.7)(lightningcss@1.32.0)
|
webpack: 5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
|
'@swc/core': 1.15.46(@swc/helpers@0.5.23)
|
||||||
esbuild: 0.19.7
|
esbuild: 0.19.7
|
||||||
lightningcss: 1.32.0
|
lightningcss: 1.32.0
|
||||||
|
|
||||||
|
terser-webpack-plugin@5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)):
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/trace-mapping': 0.3.31
|
||||||
|
jest-worker: 27.4.5
|
||||||
|
schema-utils: 4.3.3
|
||||||
|
terser: 5.49.0
|
||||||
|
webpack: 5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)
|
||||||
|
optionalDependencies:
|
||||||
|
'@swc/core': 1.15.46(@swc/helpers@0.5.23)
|
||||||
|
lightningcss: 1.32.0
|
||||||
|
|
||||||
terser-webpack-plugin@5.6.1(lightningcss@1.32.0)(postcss@8.5.18)(webpack@5.92.1(lightningcss@1.32.0)(postcss@8.5.18)):
|
terser-webpack-plugin@5.6.1(lightningcss@1.32.0)(postcss@8.5.18)(webpack@5.92.1(lightningcss@1.32.0)(postcss@8.5.18)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/trace-mapping': 0.3.31
|
'@jridgewell/trace-mapping': 0.3.31
|
||||||
@@ -22590,16 +22995,6 @@ snapshots:
|
|||||||
lightningcss: 1.32.0
|
lightningcss: 1.32.0
|
||||||
postcss: 8.5.18
|
postcss: 8.5.18
|
||||||
|
|
||||||
terser-webpack-plugin@5.6.1(lightningcss@1.32.0)(webpack@5.92.1(lightningcss@1.32.0)):
|
|
||||||
dependencies:
|
|
||||||
'@jridgewell/trace-mapping': 0.3.31
|
|
||||||
jest-worker: 27.4.5
|
|
||||||
schema-utils: 4.3.3
|
|
||||||
terser: 5.49.0
|
|
||||||
webpack: 5.92.1(lightningcss@1.32.0)
|
|
||||||
optionalDependencies:
|
|
||||||
lightningcss: 1.32.0
|
|
||||||
|
|
||||||
terser@5.49.0:
|
terser@5.49.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/source-map': 0.3.11
|
'@jridgewell/source-map': 0.3.11
|
||||||
@@ -22993,6 +23388,14 @@ snapshots:
|
|||||||
intl-messageformat: 10.5.14
|
intl-messageformat: 10.5.14
|
||||||
react: 18.3.0
|
react: 18.3.0
|
||||||
|
|
||||||
|
use-intl@4.13.2(react@19.2.7):
|
||||||
|
dependencies:
|
||||||
|
'@formatjs/fast-memoize': 3.1.7
|
||||||
|
'@schummar/icu-type-parser': 1.21.5
|
||||||
|
icu-minify: 4.13.2
|
||||||
|
intl-messageformat: 11.2.12
|
||||||
|
react: 19.2.7
|
||||||
|
|
||||||
use-sidecar@1.1.3(@types/react@19.2.17)(react@19.2.7):
|
use-sidecar@1.1.3(@types/react@19.2.17)(react@19.2.7):
|
||||||
dependencies:
|
dependencies:
|
||||||
detect-node-es: 1.1.0
|
detect-node-es: 1.1.0
|
||||||
@@ -23166,7 +23569,7 @@ snapshots:
|
|||||||
|
|
||||||
webpack-virtual-modules@0.5.0: {}
|
webpack-virtual-modules@0.5.0: {}
|
||||||
|
|
||||||
webpack@5.92.1(esbuild@0.19.7)(lightningcss@1.32.0):
|
webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/eslint-scope': 3.7.3
|
'@types/eslint-scope': 3.7.3
|
||||||
'@types/estree': 1.0.9
|
'@types/estree': 1.0.9
|
||||||
@@ -23189,7 +23592,7 @@ snapshots:
|
|||||||
neo-async: 2.6.2
|
neo-async: 2.6.2
|
||||||
schema-utils: 3.3.0
|
schema-utils: 3.3.0
|
||||||
tapable: 2.3.3
|
tapable: 2.3.3
|
||||||
terser-webpack-plugin: 5.6.1(esbuild@0.19.7)(lightningcss@1.32.0)(webpack@5.92.1(esbuild@0.19.7)(lightningcss@1.32.0))
|
terser-webpack-plugin: 5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(esbuild@0.19.7)(lightningcss@1.32.0))
|
||||||
watchpack: 2.5.2
|
watchpack: 2.5.2
|
||||||
webpack-sources: 3.5.1
|
webpack-sources: 3.5.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -23206,7 +23609,7 @@ snapshots:
|
|||||||
- postcss
|
- postcss
|
||||||
- uglify-js
|
- uglify-js
|
||||||
|
|
||||||
webpack@5.92.1(lightningcss@1.32.0):
|
webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/eslint-scope': 3.7.3
|
'@types/eslint-scope': 3.7.3
|
||||||
'@types/estree': 1.0.9
|
'@types/estree': 1.0.9
|
||||||
@@ -23229,7 +23632,7 @@ snapshots:
|
|||||||
neo-async: 2.6.2
|
neo-async: 2.6.2
|
||||||
schema-utils: 3.3.0
|
schema-utils: 3.3.0
|
||||||
tapable: 2.3.3
|
tapable: 2.3.3
|
||||||
terser-webpack-plugin: 5.6.1(lightningcss@1.32.0)(webpack@5.92.1(lightningcss@1.32.0))
|
terser-webpack-plugin: 5.6.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0)(webpack@5.92.1(@swc/core@1.15.46(@swc/helpers@0.5.23))(lightningcss@1.32.0))
|
||||||
watchpack: 2.5.2
|
watchpack: 2.5.2
|
||||||
webpack-sources: 3.5.1
|
webpack-sources: 3.5.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ allowBuilds:
|
|||||||
'@apollo/protobufjs': false
|
'@apollo/protobufjs': false
|
||||||
'@module-federation/nextjs-mf': true
|
'@module-federation/nextjs-mf': true
|
||||||
'@nestjs/core': true
|
'@nestjs/core': true
|
||||||
|
'@parcel/watcher': set this to true or false
|
||||||
'@sentry/cli': true
|
'@sentry/cli': true
|
||||||
'@swc/core': true
|
'@swc/core': true
|
||||||
bcrypt: true
|
bcrypt: true
|
||||||
|
|||||||
Reference in New Issue
Block a user