From 773d9619e02223f2695029b9c8cf9bf9478f0fde Mon Sep 17 00:00:00 2001 From: Jerry Date: Wed, 23 Sep 2026 12:13:35 +0800 Subject: [PATCH] chore(deps): phase-3 FullCalendar 7 and Tailwind CSS 4 FullCalendar 6 -> 7 - daygrid/timegrid/interaction/multimonth packages are gone; plugins come from @fullcalendar/react/* entrypoints, temporal-polyfill is a new peer, @fullcalendar/core is no longer a direct dependency - v7 ships no CSS: skeleton + Classic theme (the v6 look) + palette - types renamed (DateSelectArg -> DateSelectInfo, EventClickArg -> EventClickInfo, EventContentArg -> EventDisplayInfo) - the palette switches on an ancestor [data-color-scheme], now driven by the app theme, so the calendar follows dark mode - visible deltas: day numbers were blue in v6 only because antd colors bare ; column headers are no longer bold (v7 default) Tailwind CSS 3 -> 4 (umi 4.7 compiles it via @tailwindcss/webpack) - tailwind.config.js replaced by CSS-first config in tailwind.css: theme + utilities imports without preflight, @theme inline for the antd CSS-variable bridge (inline is required: the --ant-* vars live on .css-var-* scopes, not :root), @source limited to src ts/tsx, @source not inline() instead of blocklist - utilities are imported unlayered on purpose: layered utilities lose every conflict against antd CSS-in-JS, antd reset.css, CSS modules and third-party sheets; unlayered keeps v3 cascade semantics - the calendar sidebar's space-y-3 becomes the equivalent v3 selector (v4 space-y is a :where() margin-bottom that antd typography margins override) - stylelint knows the v4 at-rules; README states the new browser baseline (Chrome 111 / Firefox 128 / Safari 16.4) - .eslintignore un-ignores the root dotfile configs: lint-staged passed .stylelintrc.js explicitly, ESLint 8 warned "File ignored by default" and --max-warnings=0 blocked any commit touching it verified: 17 pages pixel-identical to phase 2 except the calendar (1440x900, dev build side by side); calendar select-create, click- delete, view tabs, weekends toggle; 24 routes clean console; size gate and both builds pass --- .claude/CLAUDE.md | 4 +- .eslintignore | 4 + .stylelintrc.js | 4 +- CHANGELOG.md | 6 + README.md | 4 +- package.json | 10 +- pnpm-lock.yaml | 344 ++++-------------- .../Feature/FullCalendar/event-utils.tsx | 2 +- src/pages/Feature/FullCalendar/index.tsx | 46 ++- tailwind.config.js | 28 -- tailwind.css | 46 ++- 11 files changed, 157 insertions(+), 341 deletions(-) delete mode 100644 tailwind.config.js diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 19c0ee4..cfd791a 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -10,7 +10,7 @@ umi-react-admin 是一个基于 Umi Max 的企业级 React 后台管理系统模 - **框架**: Umi Max 4.x + React 18 + TypeScript 5.x - **UI**: Ant Design 5 + Ant Design Pro Components -- **样式**: Tailwind CSS 3 + Less +- **样式**: Tailwind CSS 4(CSS 优先配置,工具类不分层,见 tailwind.css 头注释)+ Less - **状态管理**: Umi initialState(全局用户与主题)+ 组件内 state(未启用 valtio) - **地图**: Cesium.js、OpenLayers 9、高德地图 - **图表**: Ant Design Charts (plots)、D3.js @@ -83,7 +83,7 @@ config/ - [config/config.ts](config/config.ts) - Umi 构建配置 - [config/routes.ts](config/routes.ts) - 路由配置 -- [tailwind.config.js](tailwind.config.js) - Tailwind CSS 配置 +- [tailwind.css](tailwind.css) - Tailwind CSS 配置(v4 无 JS 配置文件) - [.prettierrc](.prettierrc) - Prettier 配置 - [.eslintrc.js](.eslintrc.js) - ESLint 配置 diff --git a/.eslintignore b/.eslintignore index f96785f..7199e87 100644 --- a/.eslintignore +++ b/.eslintignore @@ -8,3 +8,7 @@ src/.umi-production/ .claude/ .kilo/ coverage/ +# 根目录的 JS 配置是点文件,ESLint 默认忽略;lint-staged 显式传入时报「File ignored by default」 +# 警告,在 --max-warnings=0 下直接挡住提交。取消忽略,让它们与其他 JS 一样参与检查 +!.eslintrc.js +!.stylelintrc.js diff --git a/.stylelintrc.js b/.stylelintrc.js index 379c8c5..6cf508b 100644 --- a/.stylelintrc.js +++ b/.stylelintrc.js @@ -1,11 +1,11 @@ module.exports = { extends: require.resolve('@umijs/max/stylelint'), - // tailwindcss 报错 https://qiita.com/mizozobu/items/9e86b86df79f9988c7b3 + // Tailwind v4 的 CSS 指令(tailwind.css) rules: { 'at-rule-no-unknown': [ true, { - ignoreAtRules: ['tailwind', 'layer', 'apply'], + ignoreAtRules: ['theme', 'source', 'utility', 'variant', 'custom-variant', 'reference', 'layer', 'apply'], }, ], 'function-no-unknown': [ diff --git a/CHANGELOG.md b/CHANGELOG.md index 98843f8..3cf3eab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ ## [未发布] - 2026-09 治理批次(feat/next-umi) +### 依赖升级阶段 3(2026-09-23) + +- FullCalendar 6 → 7:五个插件包合并为 `@fullcalendar/react/*` 入口,新增 peer `temporal-polyfill`;v7 不再内置 CSS,改为引入 skeleton + Classic 主题(保持 v6 外观);类型改名(`DateSelectArg` → `DateSelectInfo` 等);日历随应用暗色主题切换(调色板读取祖先 `data-color-scheme`)。可见差异:v6 下日期数字被 antd 的链接色染成蓝色,v7 恢复正文色;列头默认不加粗 +- Tailwind CSS 3 → 4:删除 `tailwind.config.js`,配置迁入 `tailwind.css`(`@theme inline` 桥接 antd CSS 变量、`@source` 限定扫描范围、`@source not inline()` 替代 blocklist)。工具类刻意不放进 `@layer`,保持 v3 与 antd CSS-in-JS 的层叠语义;日历侧栏的 `space-y-3` 改为等价的 v3 选择器(v4 的 space-y 实现会输给 antd 排版外边距)。17 个页面与升级前逐像素对比无差异(日历页除外) +- 浏览器基线提高到 Chrome 111+ / Firefox 128+ / Safari 16.4+(Tailwind 4 要求),README 已注明 + ### 依赖升级阶段 2(2026-09-23) - 工程工具主版本:husky 9(`prepare` 改为 `husky`,hook 去掉 v8 的引导行)、lint-staged 17(需 Node ≥22.22.1;配置改名 `.lintstagedrc.json`,17 起无扩展名按 YAML 解析)、cross-env 10(`start` 脚本无环境变量,去掉无效包装)、prettier-plugin-organize-imports 4、prettier-plugin-packagejson 3 diff --git a/README.md b/README.md index 73335fe..404745d 100644 --- a/README.md +++ b/README.md @@ -74,10 +74,10 @@ src/ ## 功能说明 - **鉴权**:演示级登录闭环(任意用户名/密码),路由守卫与权限拦截开箱可用。开发环境走 umi mock;纯静态部署(GitHub Pages / Vercel / Docker)没有后端,演示 token 在前端本地签发与校验;接入真实后端配置 `UMI_APP_API_BASE` 即走 HTTP 接口(见 `src/services/auth.ts` 与 `src/services/demo/mode.ts`)。用户名 `dontHaveAccess` 可体验权限拦截。 -- **暗色模式**:顶栏调色盘图标热切换(antd5 算法 + 布局联动,localStorage 持久化)。地图与图表等非 AntD 绘制区域暂不随算法变化。 +- **暗色模式**:顶栏调色盘图标热切换(antd5 算法 + 布局联动,localStorage 持久化)。日历(FullCalendar 7 调色板)随主题切换;地图与图表等其余非 AntD 绘制区域暂不随算法变化。 - **多语言**:框架层页面(登录/错误页/全局提示)中英双语;功能演示页文案为中文示例。 - **无障碍**:`` 随语言切换、页面允许缩放;顶栏菜单为可聚焦按钮 + 下拉菜单(键盘可操作);图标按钮具可访问名称、图片有 alt。 -- **PDF**:基于 pdf.js 5,需要支持原生 `Promise.try` 的现代浏览器(Chrome 128+ / Firefox 134+ / Safari 18.2+)。 +- **浏览器基线**:Tailwind CSS 4 依赖 `@property` / `color-mix()`,全站需 Chrome 111+ / Firefox 128+ / Safari 16.4+;PDF 基于 pdf.js 5,需要支持原生 `Promise.try` 的浏览器(Chrome 128+ / Firefox 134+ / Safari 18.2+)。 ## 部署 diff --git a/package.json b/package.json index 79469eb..d0ff892 100644 --- a/package.json +++ b/package.json @@ -50,12 +50,7 @@ "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", - "@fullcalendar/core": "^6.1.21", - "@fullcalendar/daygrid": "^6.1.21", - "@fullcalendar/interaction": "^6.1.21", - "@fullcalendar/multimonth": "^6.1.21", - "@fullcalendar/react": "^6.1.21", - "@fullcalendar/timegrid": "^6.1.21", + "@fullcalendar/react": "^7.1.0", "@pansy/react-amap": "^2.21.0", "@tinymce/tinymce-react": "^6.3.0", "@turf/helpers": "^7.2.0", @@ -74,6 +69,7 @@ "pdfjs-dist": "5.4.296", "react-pdf": "^10.5.0", "signature_pad": "^5.1.4", + "temporal-polyfill": "^1.0.5", "tinymce": "^8.9.2", "wavesurfer.js": "^7.12.12", "xgplayer": "^3.0.26", @@ -94,7 +90,7 @@ "prettier": "^3.9.8", "prettier-plugin-organize-imports": "^4.3.0", "prettier-plugin-packagejson": "^3.0.2", - "tailwindcss": "^3.4.19", + "tailwindcss": "^4.3.3", "typescript": "^5.9.3", "vitest": "^5.0.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d96cd9c..364f304 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,24 +77,9 @@ importers: '@dnd-kit/utilities': specifier: ^3.2.2 version: 3.2.2(react@18.3.1) - '@fullcalendar/core': - specifier: ^6.1.21 - version: 6.1.21 - '@fullcalendar/daygrid': - specifier: ^6.1.21 - version: 6.1.21(@fullcalendar/core@6.1.21) - '@fullcalendar/interaction': - specifier: ^6.1.21 - version: 6.1.21(@fullcalendar/core@6.1.21) - '@fullcalendar/multimonth': - specifier: ^6.1.21 - version: 6.1.21(@fullcalendar/core@6.1.21) '@fullcalendar/react': - specifier: ^6.1.21 - version: 6.1.21(@fullcalendar/core@6.1.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@fullcalendar/timegrid': - specifier: ^6.1.21 - version: 6.1.21(@fullcalendar/core@6.1.21) + specifier: ^7.1.0 + version: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(temporal-polyfill@1.0.5) '@pansy/react-amap': specifier: ^2.21.0 version: 2.21.0(react@18.3.1) @@ -109,7 +94,7 @@ importers: version: 7.4.0 '@umijs/max': specifier: ^4.7.19 - version: 4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(dva@2.5.0-beta.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(jiti@1.21.7)(lightningcss@1.32.0)(prettier@3.9.8)(rc-field-form@2.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) + version: 4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(dva@2.5.0-beta.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(jiti@2.7.0)(lightningcss@1.32.0)(prettier@3.9.8)(rc-field-form@2.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) antd: specifier: ^5.29.3 version: 5.29.3(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -149,6 +134,9 @@ importers: signature_pad: specifier: ^5.1.4 version: 5.1.4 + temporal-polyfill: + specifier: ^1.0.5 + version: 1.0.5 tinymce: specifier: ^8.9.2 version: 8.9.2 @@ -205,14 +193,14 @@ importers: specifier: ^3.0.2 version: 3.0.2(prettier@3.9.8) tailwindcss: - specifier: ^3.4.19 - version: 3.4.19(yaml@2.8.3) + specifier: ^4.3.3 + version: 4.3.3 typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^5.0.1 - version: 5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.1)(vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) + version: 5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.1)(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) packages: @@ -1209,35 +1197,23 @@ packages: resolution: {integrity: sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ==} deprecated: the package is rather renamed to @formatjs/ecma-abstract with some changes in functionality (primarily selectUnit is removed and we don't plan to make any further changes to this package - '@fullcalendar/core@6.1.21': - resolution: {integrity: sha512-t3u/+sqh3Iq7TWtUnVLcGDUE6OWZh0UD3c04bI/l7lSLAgAKr3kngBmhHiQD1QXpwC8ZN5iNqG7a7gOVixhSKQ==} - - '@fullcalendar/daygrid@6.1.21': - resolution: {integrity: sha512-QYb1y40RGYLlOxKpYWg8O+7njEnKnFG8Tt7qjnubJGR35s1phQg67E+81y2TyAbbm59p2JFOCXGDk9t6KDujIA==} - peerDependencies: - '@fullcalendar/core': ~6.1.21 - - '@fullcalendar/interaction@6.1.21': - resolution: {integrity: sha512-WPYpqtljDWmU0Xm2cOtFrLlocgxv7cgkOppj34Q6OUUat8a6Cnd6kYo2JR+irP223PE5lBYHFNp1qh7SIpJc0w==} - peerDependencies: - '@fullcalendar/core': ~6.1.21 - - '@fullcalendar/multimonth@6.1.21': - resolution: {integrity: sha512-/5IZDDcdRzgO/h7V3RBEhzhrza5TIQ2T025IjA2Dfq3xbvxSnMAl2CMcy7VrSHsKaY1eWvxQXg/NZZm7hLmDYA==} + '@full-ui/headless-calendar@7.1.0': + resolution: {integrity: sha512-T54tSUik/ia9Jj4xduFHv1p98eVBgLnE33Q6qhpg+WWkqKCLBCbtVyMcTPPIOP5jjTV2MbtjrRvRt1RLSryGHA==} peerDependencies: - '@fullcalendar/core': ~6.1.21 + temporal-polyfill: ^1.0.1 - '@fullcalendar/react@6.1.21': - resolution: {integrity: sha512-TLpmGUd5k/PMdCh8XbeFC9PW9wuGvMms1oCxWgXyjK3EFPXAAd0PLfcvwKdyxoAS5eK1E4RJFkjMHvsYHpimcg==} + '@fullcalendar/core@7.1.0': + resolution: {integrity: sha512-a+ABP7zQpPWpwPT8EsOdShpeOVrJyx/XYStqERd8ibld/FLi/dzpd95r7w3RIdFqFm9iUv0gdGvBshSlI/dbPw==} peerDependencies: - '@fullcalendar/core': ~6.1.21 - react: ^16.7.0 || ^17 || ^18 || ^19 - react-dom: ^16.7.0 || ^17 || ^18 || ^19 + '@full-ui/headless-calendar': 7.1.0 + temporal-polyfill: ^1.0.1 - '@fullcalendar/timegrid@6.1.21': - resolution: {integrity: sha512-2DnShx/jallGmb8QCkr6pAOu/zuPhJrP7+uTrAtSnbqsX7GF3lTxqSeNGkTQwsgF5g/ia8udhQ+JNYaE+TN1cQ==} + '@fullcalendar/react@7.1.0': + resolution: {integrity: sha512-FI5hTnbiVLcW+/ZnPKteBgLpK/ldyTaSDWn9A3ri3vLToAbGt49JqRhQ9CMpH+nhmuNX4ihnCQcVzoqVCsIbBw==} peerDependencies: - '@fullcalendar/core': ~6.1.21 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + temporal-polyfill: ^1.0.1 '@hono/node-server@1.19.15': resolution: {integrity: sha512-Za2ai6TLdKjUvnur+eenO6nuYYipVAEhyCAdaV8IRvmU9kK8crOZUSYvIXn72E4f8fJqyAbpcJuTsYYmZp9Deg==} @@ -2782,9 +2758,6 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -2801,9 +2774,6 @@ packages: resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} engines: {node: '>= 10'} - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -3122,10 +3092,6 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -3256,10 +3222,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -3783,9 +3745,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -5035,10 +4994,6 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -5326,10 +5281,6 @@ packages: 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'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -5617,9 +5568,6 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.18: resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -5731,10 +5679,6 @@ packages: 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'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -6083,47 +6027,17 @@ packages: peerDependencies: postcss: 8.5.23 - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: 8.5.23 - postcss-initial@4.0.1: resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} peerDependencies: postcss: 8.5.23 - postcss-js@4.1.0: - resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: 8.5.23 - postcss-lab-function@4.2.1: resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: 8.5.23 - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: 8.5.23 - tsx: ^4.8.1 - yaml: 2.8.3 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - postcss-loader@8.2.1: resolution: {integrity: sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow==} engines: {node: '>= 18.12.0'} @@ -6176,12 +6090,6 @@ packages: peerDependencies: postcss: 8.5.23 - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: 8.5.23 - postcss-nesting@10.2.0: resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} engines: {node: ^12 || ^14 || >=16} @@ -6283,9 +6191,6 @@ packages: resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} engines: {node: ^10 || ^12 || >=14} - preact@10.12.1: - resolution: {integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6999,9 +6904,6 @@ packages: peerDependencies: react: '*' - read-cache@1.0.2: - resolution: {integrity: sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==} - read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -7629,11 +7531,6 @@ packages: stylis@4.4.0: resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - superjson@1.13.3: resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} engines: {node: '>=10'} @@ -7692,11 +7589,6 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tailwindcss@3.4.19: - resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} - engines: {node: '>=14.0.0'} - hasBin: true - tailwindcss@4.3.3: resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} @@ -7708,6 +7600,15 @@ packages: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} + temporal-polyfill@1.0.5: + resolution: {integrity: sha512-+H/mmY74i6wXCMcjIhGuSnODcyZnc4eois2myhOyX0UqRAKNXQY5m9iB1en5jQ/n4SXtjLXo1ElBI5bmn8tZwQ==} + + temporal-spec@1.0.1: + resolution: {integrity: sha512-wxVoanmDeavXie1vu2JaQ3WIc3JZnWAOYFBsJyATaVsXsycKYUflGsyBmrRSnoCpZJpwPyr38VpgSUlQ8CbFxg==} + + temporal-utils@1.0.3: + resolution: {integrity: sha512-9jbTSX3HvkOWvDpNpFzwX/d1mkCrgQgwLmVTOEiuocZGKHsrQJtttGZFmybJ2zYP5zCSZuU5ZyeS8+eOEPABiQ==} + terser-webpack-plugin@5.6.1: resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} engines: {node: '>= 10.13.0'} @@ -7776,13 +7677,6 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} @@ -7887,9 +7781,6 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -9744,33 +9635,22 @@ snapshots: '@formatjs/intl-utils@2.3.0': {} - '@fullcalendar/core@6.1.21': - dependencies: - preact: 10.12.1 - - '@fullcalendar/daygrid@6.1.21(@fullcalendar/core@6.1.21)': - dependencies: - '@fullcalendar/core': 6.1.21 - - '@fullcalendar/interaction@6.1.21(@fullcalendar/core@6.1.21)': + '@full-ui/headless-calendar@7.1.0(temporal-polyfill@1.0.5)': dependencies: - '@fullcalendar/core': 6.1.21 + temporal-polyfill: 1.0.5 - '@fullcalendar/multimonth@6.1.21(@fullcalendar/core@6.1.21)': + '@fullcalendar/core@7.1.0(@full-ui/headless-calendar@7.1.0(temporal-polyfill@1.0.5))(temporal-polyfill@1.0.5)': dependencies: - '@fullcalendar/core': 6.1.21 - '@fullcalendar/daygrid': 6.1.21(@fullcalendar/core@6.1.21) + '@full-ui/headless-calendar': 7.1.0(temporal-polyfill@1.0.5) + temporal-polyfill: 1.0.5 - '@fullcalendar/react@6.1.21(@fullcalendar/core@6.1.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@fullcalendar/react@7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(temporal-polyfill@1.0.5)': dependencies: - '@fullcalendar/core': 6.1.21 + '@full-ui/headless-calendar': 7.1.0(temporal-polyfill@1.0.5) + '@fullcalendar/core': 7.1.0(@full-ui/headless-calendar@7.1.0(temporal-polyfill@1.0.5))(temporal-polyfill@1.0.5) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - - '@fullcalendar/timegrid@6.1.21(@fullcalendar/core@6.1.21)': - dependencies: - '@fullcalendar/core': 6.1.21 - '@fullcalendar/daygrid': 6.1.21(@fullcalendar/core@6.1.21) + temporal-polyfill: 1.0.5 '@hono/node-server@1.19.15(hono@4.13.5)': dependencies: @@ -10946,20 +10826,20 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@umijs/bundler-vite@4.7.19(@types/node@26.6.2)(jiti@1.21.7)(lightningcss@1.32.0)(postcss@8.5.23)(rollup@4.63.4)(sass@1.54.0)(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3)': + '@umijs/bundler-vite@4.7.19(@types/node@26.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.23)(rollup@4.63.4)(sass@1.54.0)(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3)': dependencies: '@svgr/core': 6.5.1 '@umijs/bundler-utils': 4.7.19 '@umijs/bundler-webpack': 4.7.19(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)) '@umijs/utils': 4.7.19 - '@vitejs/plugin-react': 5.2.0(vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) + '@vitejs/plugin-react': 5.2.0(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) core-js: 3.34.0 less: 4.9.1 postcss-preset-env: 7.5.0(postcss@8.5.23) rollup-plugin-visualizer: 6.0.11(rollup@4.63.4) systemjs: 6.15.1 terser: 5.49.0 - vite: 7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - '@types/webpack' @@ -11123,14 +11003,14 @@ snapshots: - typescript - webpack - '@umijs/max@4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(dva@2.5.0-beta.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(jiti@1.21.7)(lightningcss@1.32.0)(prettier@3.9.8)(rc-field-form@2.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3)': + '@umijs/max@4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(dva@2.5.0-beta.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(jiti@2.7.0)(lightningcss@1.32.0)(prettier@3.9.8)(rc-field-form@2.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3)': dependencies: '@umijs/lint': 4.7.19(eslint@8.35.0)(stylelint@14.8.2)(typescript@5.9.3) '@umijs/plugins': 4.7.19(@babel/core@7.29.6)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(antd@4.24.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(dva@2.5.0-beta.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(rc-field-form@2.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)) antd: 4.24.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) eslint: 8.35.0 stylelint: 14.8.2 - umi: 4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react@18.3.31)(jiti@1.21.7)(lightningcss@1.32.0)(prettier@3.9.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) + umi: 4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(prettier@3.9.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) transitivePeerDependencies: - '@babel/core' - '@rspack/core' @@ -11240,7 +11120,7 @@ snapshots: - supports-color - webpack - '@umijs/preset-umi@4.7.19(@types/node@26.6.2)(@types/react@18.3.31)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3)': + '@umijs/preset-umi@4.7.19(@types/node@26.6.2)(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3)': dependencies: '@iconify/utils': 2.1.1 '@stagewise/toolbar': 0.6.2 @@ -11251,7 +11131,7 @@ snapshots: '@umijs/bundler-mako': 0.11.10(postcss@8.5.23)(sass@1.54.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)) '@umijs/bundler-utils': 4.7.19 '@umijs/bundler-utoopack': 4.7.19(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)) - '@umijs/bundler-vite': 4.7.19(@types/node@26.6.2)(jiti@1.21.7)(lightningcss@1.32.0)(postcss@8.5.23)(rollup@4.63.4)(sass@1.54.0)(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) + '@umijs/bundler-vite': 4.7.19(@types/node@26.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.23)(rollup@4.63.4)(sass@1.54.0)(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) '@umijs/bundler-webpack': 4.7.19(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)) '@umijs/core': 4.7.19 '@umijs/did-you-know': 1.0.4 @@ -11447,7 +11327,7 @@ snapshots: - supports-color - utf-8-validate - '@vitejs/plugin-react@5.2.0(vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3))': + '@vitejs/plugin-react@5.2.0(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.6 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.6) @@ -11455,7 +11335,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -11469,7 +11349,7 @@ snapshots: obug: 2.2.1 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.1)(vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) + vitest: 5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.1)(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) '@vitest/istanbul-lib-coverage@1.0.1': {} @@ -11477,14 +11357,14 @@ snapshots: dependencies: '@vitest/istanbul-lib-coverage': 1.0.1 - '@vitest/mocker@5.0.1(vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3))': + '@vitest/mocker@5.0.1(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.1 estree-walker: 3.0.3 magic-string: 1.4.1 optionalDependencies: - vite: 7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) '@vitest/spy@5.0.1': {} @@ -11781,8 +11661,6 @@ snapshots: - luxon - moment - any-promise@1.3.0: {} - anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -11824,8 +11702,6 @@ snapshots: tar-stream: 2.2.0 zip-stream: 4.1.1 - arg@5.0.2: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -12238,8 +12114,6 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.1 - camelcase-css@2.0.1: {} - camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 @@ -12386,8 +12260,6 @@ snapshots: commander@2.20.3: {} - commander@4.1.1: {} - commander@7.2.0: {} commander@8.3.0: {} @@ -12926,8 +12798,6 @@ snapshots: dependencies: path-type: 4.0.0 - dlv@1.1.3: {} - doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -14493,8 +14363,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@1.21.7: {} - jiti@2.7.0: {} js-sdsl@4.4.2: {} @@ -14743,8 +14611,6 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 - lilconfig@3.1.3: {} - lines-and-columns@1.2.4: {} lint-staged@17.5.1: @@ -14985,12 +14851,6 @@ snapshots: mute-stream@0.0.8: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - nanoid@3.3.18: {} natural-compare-lite@1.4.0: {} @@ -15142,8 +15002,6 @@ snapshots: object-assign@4.1.1: {} - object-hash@3.0.0: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -15495,36 +15353,16 @@ snapshots: postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-import@15.1.0(postcss@8.5.23): - dependencies: - postcss: 8.5.23 - postcss-value-parser: 4.2.0 - read-cache: 1.0.2 - resolve: 1.22.12 - postcss-initial@4.0.1(postcss@8.5.23): dependencies: postcss: 8.5.23 - postcss-js@4.1.0(postcss@8.5.23): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.23 - postcss-lab-function@4.2.1(postcss@8.5.23): dependencies: '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.5.23) postcss: 8.5.23 postcss-value-parser: 4.2.0 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.23)(yaml@2.8.3): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 1.21.7 - postcss: 8.5.23 - yaml: 2.8.3 - postcss-loader@8.2.1(postcss@8.5.23)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)): dependencies: cosmiconfig: 9.0.1(typescript@5.9.3) @@ -15567,11 +15405,6 @@ snapshots: icss-utils: 5.1.0(postcss@8.5.23) postcss: 8.5.23 - postcss-nested@6.2.0(postcss@8.5.23): - dependencies: - postcss: 8.5.23 - postcss-selector-parser: 6.1.3 - postcss-nesting@10.2.0(postcss@8.5.23): dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.3) @@ -15691,8 +15524,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.12.1: {} - prelude-ls@1.2.1: {} prettier-plugin-organize-imports@3.2.4(prettier@3.9.8)(typescript@5.9.3): @@ -16612,8 +16443,6 @@ snapshots: lodash: 4.18.1 react: 18.3.1 - read-cache@1.0.2: {} - read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -17365,16 +17194,6 @@ snapshots: stylis@4.4.0: {} - sucrase@3.35.1: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.17 - ts-interface-checker: 0.1.13 - superjson@1.13.3: dependencies: copy-anything: 3.0.5 @@ -17437,34 +17256,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@3.4.19(yaml@2.8.3): - dependencies: - '@alloc/quick-lru': 5.3.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.23 - postcss-import: 15.1.0(postcss@8.5.23) - postcss-js: 4.1.0(postcss@8.5.23) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.23)(yaml@2.8.3) - postcss-nested: 6.2.0(postcss@8.5.23) - postcss-selector-parser: 6.1.3 - resolve: 1.22.12 - sucrase: 3.35.1 - transitivePeerDependencies: - - tsx - - yaml - tailwindcss@4.3.3: {} tapable@2.3.3: {} @@ -17477,6 +17268,15 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + temporal-polyfill@1.0.5: + dependencies: + temporal-spec: 1.0.1 + temporal-utils: 1.0.3 + + temporal-spec@1.0.1: {} + + temporal-utils@1.0.3: {} + terser-webpack-plugin@5.6.1(lightningcss@1.32.0)(postcss@8.5.23)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -17521,14 +17321,6 @@ snapshots: text-table@0.2.0: {} - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - thread-stream@0.15.2: dependencies: real-require: 0.1.0 @@ -17608,8 +17400,6 @@ snapshots: trim-newlines@3.0.1: {} - ts-interface-checker@0.1.13: {} - tslib@1.14.1: {} tslib@2.6.1: {} @@ -17692,13 +17482,13 @@ snapshots: typescript@5.9.3: {} - umi@4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react@18.3.31)(jiti@1.21.7)(lightningcss@1.32.0)(prettier@3.9.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3): + umi@4.7.19(@babel/core@7.29.6)(@types/node@26.6.2)(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(prettier@3.9.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3): dependencies: '@babel/runtime': 7.28.4 '@umijs/bundler-utils': 4.7.19 '@umijs/bundler-webpack': 4.7.19(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23)) '@umijs/core': 4.7.19 - '@umijs/preset-umi': 4.7.19(@types/node@26.6.2)(@types/react@18.3.31)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) + '@umijs/preset-umi': 4.7.19(@types/node@26.6.2)(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.63.4)(sass@1.54.0)(styled-jsx@5.1.7(@babel/core@7.29.6)(react@18.3.1))(type-fest@1.4.0)(typescript@5.9.3)(webpack@5.104.1(lightningcss@1.32.0)(postcss@8.5.23))(yaml@2.8.3) '@umijs/renderer-react': 4.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@umijs/server': 4.7.19 '@umijs/test': 4.7.19(@babel/core@7.29.6) @@ -17859,7 +17649,7 @@ snapshots: vary@1.1.2: {} - vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3): + vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3): dependencies: esbuild: 0.28.2 fdir: 6.5.0(picomatch@4.0.7) @@ -17870,17 +17660,17 @@ snapshots: optionalDependencies: '@types/node': 26.6.2 fsevents: 2.3.3 - jiti: 1.21.7 + jiti: 2.7.0 less: 4.9.1 lightningcss: 1.32.0 sass: 1.54.0 terser: 5.49.0 yaml: 2.8.3 - vitest@5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.1)(vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)): + vitest@5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.1)(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.1(vite@7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) + '@vitest/mocker': 5.0.1(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3)) chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -17891,7 +17681,7 @@ snapshots: tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - vite: 7.3.6(@types/node@26.6.2)(jiti@1.21.7)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.9.1)(lightningcss@1.32.0)(sass@1.54.0)(terser@5.49.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.6.2 diff --git a/src/pages/Feature/FullCalendar/event-utils.tsx b/src/pages/Feature/FullCalendar/event-utils.tsx index ea742ee..298317d 100644 --- a/src/pages/Feature/FullCalendar/event-utils.tsx +++ b/src/pages/Feature/FullCalendar/event-utils.tsx @@ -1,4 +1,4 @@ -import { EventInput } from '@fullcalendar/core'; +import type { EventInput } from '@fullcalendar/react'; let eventGuid = 0; let todayStr = new Date().toISOString().replace(/T.*$/, ''); diff --git a/src/pages/Feature/FullCalendar/index.tsx b/src/pages/Feature/FullCalendar/index.tsx index 9342772..20e603a 100644 --- a/src/pages/Feature/FullCalendar/index.tsx +++ b/src/pages/Feature/FullCalendar/index.tsx @@ -1,18 +1,27 @@ import { ProCard } from '@ant-design/pro-components'; -import { DateSelectArg, EventApi, EventClickArg, EventContentArg } from '@fullcalendar/core'; -import zhLocale from '@fullcalendar/core/locales/zh-cn'; -import dayGridPlugin from '@fullcalendar/daygrid'; -import interactionPlugin from '@fullcalendar/interaction'; -import multiMonthPlugin from '@fullcalendar/multimonth'; -import FullCalendar from '@fullcalendar/react'; -import timeGridPlugin from '@fullcalendar/timegrid'; -import { useIntl } from '@umijs/max'; +import FullCalendar, { + type DateSelectInfo, + type EventApi, + type EventClickInfo, + type EventDisplayInfo, +} from '@fullcalendar/react'; +import dayGridPlugin from '@fullcalendar/react/daygrid'; +import interactionPlugin from '@fullcalendar/react/interaction'; +import zhLocale from '@fullcalendar/react/locales/zh-cn'; +import multiMonthPlugin from '@fullcalendar/react/multimonth'; +import classicTheme from '@fullcalendar/react/themes/classic'; +import timeGridPlugin from '@fullcalendar/react/timegrid'; +import { useIntl, useModel } from '@umijs/max'; import { App, Checkbox, Input, List, Modal, Typography } from 'antd'; import { useState } from 'react'; +import '@fullcalendar/react/skeleton.css'; +import '@fullcalendar/react/themes/classic/palette.css'; +import '@fullcalendar/react/themes/classic/theme.css'; + import { INITIAL_EVENTS, createEventId } from './event-utils'; -function renderEventContent(eventContent: EventContentArg) { +function renderEventContent(eventContent: EventDisplayInfo) { return ( <> {eventContent.timeText} @@ -23,6 +32,9 @@ function renderEventContent(eventContent: EventContentArg) { export default () => { const intl = useIntl(); + // v7 经典主题的调色板按祖先 [data-color-scheme] 切换暗色变量,与应用主题同源 + const { initialState } = useModel('@@initialState'); + const colorScheme = initialState?.theme === 'realDark' ? 'dark' : 'light'; // App 上下文中的 modal:随主题算法(暗色)渲染,静态 Modal.confirm 无法消费动态主题 const { modal } = App.useApp(); const dateFormatter = new Intl.DateTimeFormat(intl.locale, { year: 'numeric', month: 'short', day: 'numeric' }); @@ -34,7 +46,7 @@ export default () => { const [createState, setCreateState] = useState<{ open: boolean; title: string; - selectInfo: DateSelectArg | null; + selectInfo: DateSelectInfo | null; }>({ open: false, title: '', selectInfo: null }); const handleWeekendsToggle = () => { @@ -44,7 +56,7 @@ export default () => { })); }; - const handleDateSelect = (selectInfo: DateSelectArg) => { + const handleDateSelect = (selectInfo: DateSelectInfo) => { // 清除日期选中状态,避免多次触发选中高亮;暂存选区并弹窗收集标题 selectInfo.view.calendar.unselect(); setCreateState({ open: true, title: '', selectInfo }); @@ -69,7 +81,7 @@ export default () => { setCreateState({ open: false, title: '', selectInfo: null }); }; - const handleEventClick = (clickInfo: EventClickArg) => { + const handleEventClick = (clickInfo: EventClickInfo) => { // 替代 window.confirm 阻塞式交互 modal.confirm({ title: `确认删除事件「${clickInfo.event.title}」?`, @@ -89,8 +101,10 @@ export default () => { return (
- {/* 侧栏:AntD 组件化(原 demo-app* 样式类在仓库中从未定义,渲染为裸样式) */} -
+ {/* 侧栏:AntD 组件化(原 demo-app* 样式类在仓库中从未定义,渲染为裸样式)。 + 间距用与 v3 space-y-3 等价的选择器:v4 的 space-y 改为 :where() 零特异性的 margin-bottom, + 会输给 antd 排版组件自带的外边距,侧栏间距整体收紧 */} +
选择日期创建新事件;支持拖放与调整事件大小;单击事件可删除。 @@ -110,11 +124,11 @@ export default () => { />
-
+
包裹整个应用,其容器也带该类,弹层根节点各自带)。 - // 所以这些 token 类只在 antd 组件树内生效;切换暗色时 antd 重算变量,token 类自动跟随 - text: 'var(--ant-color-text)', - 'text-tertiary': 'var(--ant-color-text-tertiary)', - 'fill-tertiary': 'var(--ant-color-fill-tertiary)', - success: 'var(--ant-color-success)', - warning: 'var(--ant-color-warning)', - error: 'var(--ant-color-error)', - 'bg-container': 'var(--ant-color-bg-container)', - 'bg-layout': 'var(--ant-color-bg-layout)', - }, - }, - }, -}; diff --git a/tailwind.css b/tailwind.css index 6ad8e9f..2441429 100644 --- a/tailwind.css +++ b/tailwind.css @@ -1,11 +1,45 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +/* + * Tailwind CSS v4(CSS 优先配置,取代 tailwind.config.js;umi 经 @tailwindcss/webpack 编译本文件) + * + * 1. 不引入 preflight:基础 reset 交给 antd 的 reset.css 独占,避免压平全局标题样式。 + * 2. utilities 刻意不放进 @layer:v4 默认把工具类放进原生级联层,而 antd CSS-in-JS、antd reset、 + * CSS Modules 与第三方样式(xgplayer/ol/FullCalendar 等)都不在层内——未分层样式恒胜分层样式, + * 工具类会在任何冲突上落败(如顶栏 Divider 的 mx-5 h-7 被 antd 自身的 margin/height 覆盖)。 + * 不分层即保持 v3 的层叠语义:按选择器特异性与出现顺序决胜。 + * 3. 扫描范围与 v3 content 一致:只扫 src 下 ts/tsx,排除 umi 生成物。 + */ +@import 'tailwindcss/theme.css' layer(theme); +@import 'tailwindcss/utilities.css' source(none); + +@source './src/**/*.{ts,tsx}'; +@source not './src/.umi'; +@source not './src/.umi-production'; + +/* D3 等代码里以字符串字面量出现的词会被误判为类名(曾产出 .visible/.table 等死规则),直接拦截 */ +@source not inline('{visible,table,italic,outline,resize}'); + +/* + * antd5 CSS 变量桥接(app.tsx 已开 cssVar):变量不在 :root 上,而是挂在 antd 组件根的 + * .css-var-* 作用域内(umi 用 antd 包裹整个应用,其容器也带该类,弹层根节点各自带)。 + * 必须用 inline:否则工具类引用的是在 :root 上求值的 --color-*,那里 --ant-* 尚未定义。 + * 这些 token 类只在 antd 组件树内生效;切换暗色时 antd 重算变量,token 类自动跟随。 + */ +@theme inline { + --color-text: var(--ant-color-text); + --color-text-tertiary: var(--ant-color-text-tertiary); + --color-fill-tertiary: var(--ant-color-fill-tertiary); + --color-success: var(--ant-color-success); + --color-warning: var(--ant-color-warning); + --color-error: var(--ant-color-error); + --color-bg-container: var(--ant-color-bg-container); + --color-bg-layout: var(--ant-color-bg-layout); +} /* - * preflight 已关闭(见 tailwind.config.js),但 border 系工具类依赖 preflight 的边框基线: + * preflight 已去掉,但 border 系工具类依赖 preflight 的边框基线: * .border 只设 border-width,缺了 border-style: solid 时边框根本不显示。 - * 这里只补回 preflight 中与边框相关的两条(与 antd 组件显式声明的边框不冲突)。 + * 这里只补回 preflight 中与边框相关的两条;放在原生 base 层,任何未分层样式(含 antd)都能覆盖它。 + * 边框默认色沿用 v3 的 gray-200(v4 默认改为 currentColor)。 */ @layer base { *, @@ -13,7 +47,7 @@ ::after { border-width: 0; border-style: solid; - border-color: theme('borderColor.DEFAULT', currentcolor); + border-color: var(--color-gray-200, currentcolor); } /* 上面把 border-width 归零后,hr 需要恢复顶边线(同 preflight) */