diff --git a/AGENTS.md b/AGENTS.md index 9b0bdb8..fe8474f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -347,7 +347,7 @@ interface FileViewerProps { |---|---|---|---| | `none` | 不需要字节 | (无) | 自渲染(如纯 UI) | | `fsRead` | `/sidebar/api` 的 `fs.read` | `content`, `truncated` | 文本类(CSV/JSON/XML) | -| `mediaUrl` | `/sidebar/file` 媒体路由 URL | `mediaUrl` | 图片/PDF/Office(viewer 自己 fetch 字节) | +| `mediaUrl` | `/sidebar/file` 媒体路由 URL | `mediaUrl` | 图片/PDF(viewer 自己 fetch 字节) | | `custom` | viewer 的 `load()` 函数 | `customData` | 自定义协议(如远程拉取) | | `binary-download` | 不预览,显示下载按钮 | (无) | 无客户端渲染器的二进制格式 | @@ -362,7 +362,7 @@ interface FileViewerProps { > **head 字节从哪来**:第一次匹配(纯扩展名)没有 head。`fsRead` 策略读取后若文件为二进制,host 的 `fs.read` 响应会带 `head` 字段(base64,前 4KB),编辑器会用它对 `detect` viewer **重匹配一次**——所以 detect 型 viewer 的实际触发场景是"扩展名匹配落空/二进制文件"。文本文件的 detect 嗅探不在内置流程内(用 `exts` 或 `custom` 策略替代)。 -> **内置 viewer**(不可重复注册,全部 9 个):image(0) / pdf(0) / docx(0) / xlsx(0) / pptx(0) / markdown(0, fsRead) / html(0, fsRead, 沙箱 iframe 预览) / code(-100, catch-all, fsRead) / binary-download(-50, exts doc/xls/ppt + NUL detect)。 +> **内置 viewer**(不可重复注册,全部 6 个):image(0) / pdf(0) / markdown(0, fsRead) / html(0, fsRead, 沙箱 iframe 预览) / code(-100, catch-all, fsRead) / binary-download(-50, exts doc/xls/ppt + NUL detect)。Office 三件套预览(.docx/.xlsx/.pptx)**不再内置**——已迁至推荐插件(设置页「添加插件」→ 文件预览弹窗里的 Office 预览插件),该插件以相同 id 经 `ctx.betterSidebar.registerFileViewer` 注册。 > code 是兜底 viewer:任何其他 viewer 未认领的文件都会落到 code(CodeMirror 文本编辑);二进制文件经 head 重匹配被 binary-download 的 NUL detect 认领(下载按钮)。外部 viewer 注册同扩展名 + 更高 priority 即可覆盖。 ### 4.5 注册示例 @@ -517,7 +517,7 @@ interface OpenTabSeed { | **portal 限制** | 整面板 slot 由 ui-layout 独占,外部 tab 只能进入 better-sidebar 的 portal 内部,无法全屏替换 | | **id 冲突** | `registerTab` / `registerFileViewer` 对重复 id 抛错;建议用包前缀(`my-plugin:xxx`) | | **i18n 跟随** | 侧边栏界面文案跟随 DSH 的 `ctx.locale`(`@deepseek-ai/dsh-client-locale`):词典注册在 `betterSidebar` 命名空间,语言偏好(Host-backed `locale.preference`)与浏览器语言不一致时以 DSH 为准并实时切换;locale 服务缺失时回退浏览器语言。插件自身的 `t()`(`src/client/locales.ts`)由 `apply()` 挂接服务;消费插件**不要**依赖此内部函数——标题等字段传字符串或 `() => string` 即可(i18n 友好)。⚠️ 渲染 DSH 的 `MarkdownText` 时必须传 `codeLabels={{ copyLabel: t('copy'), copiedLabel: t('copied') }}`——该组件 cordis-free,漏传则代码块复制按钮回退硬编码中文 | -| **懒加载 chunk** | 内置重依赖(Univer/xterm/CodeMirror/pptx/docx)在独立 bundle(`lib/client-.js`)中,经 `/sidebar/bundle` 路由按需下发;每个脚本把 factory 赋到插件自有全局注册表 `globalThis.__dshChunks__[]`,由 `src/client/chunk-loader.ts` 用自定义 require(externals 经 `__DSH_MODULES__` seed 分支解析)物化——**不经过** `__ModuleLoader__` 注册;**核心 bundle 禁止静态 import `src/client/chunks/*`**(会把库拖回启动路径);对消费插件透明——懒加载只作用于内置 descriptor,`component` 契约(`(props) => ReactNode` 纯渲染函数)不变 | +| **懒加载 chunk** | 内置重依赖(xterm/CodeMirror)在独立 bundle(`lib/client-.js`)中,经 `/sidebar/bundle` 路由按需下发;每个脚本把 factory 赋到插件自有全局注册表 `globalThis.__dshChunks__[]`,由 `src/client/chunk-loader.ts` 用自定义 require(externals 经 `__DSH_MODULES__` seed 分支解析)物化——**不经过** `__ModuleLoader__` 注册;**核心 bundle 禁止静态 import `src/client/chunks/*`**(会把库拖回启动路径);对消费插件透明——懒加载只作用于内置 descriptor,`component` 契约(`(props) => ReactNode` 纯渲染函数)不变 | --- @@ -601,11 +601,12 @@ function parseCsv(text: string): string[][] { /* ... */ } better-sidebar 自己的内置 tab 和 viewer 就是参考实现("吃狗粮"): -- **`src/client/builtins/`**:7 个内置 tab(explorer/git/subagent/terminal/browser/editor/diff)+ 9 个内置 viewer(image/pdf/docx/xlsx/pptx/markdown/html/code/binary-download)的注册代码(tabs.tsx / viewers.tsx / index.ts) +- **`src/client/builtins/`**:7 个内置 tab(explorer/git/subagent/terminal/browser/editor/diff)+ 6 个内置 viewer(image/pdf/markdown/html/code/binary-download)的注册代码(tabs.tsx / viewers.tsx / index.ts;Office 预览已迁至推荐插件,见 plugins-viewers.ts) - **`src/client/service.ts`**:`BetterSidebarService` 接口 + `createBetterSidebarService` 工厂实现 - **`src/client/SideCardSection.tsx`**:声明式设置页(注册表驱动清单 + `settings.toggles` 嵌套设置行:switch/text/number + 持久化) - **`tests/service.spec.ts`**:注册表生命周期 / 匹配算法 / dedupe / createTab / 启用态 gating 测试 -- **`tests/builtins.spec.ts`**:内置注册清单断言(7 tab + 9 viewer + 声明式元数据) -- **`docs/plans/2026-08-11-service-registry-design.md`** / **`docs/plans/2026-08-11-declarative-sidebar-settings-design.md`**:设计文档(含实施偏差记录) +- **`tests/builtins.spec.ts`**:内置注册清单断言(7 tab + 6 viewer + 声明式元数据) +- **`src/client/plugins-tabs.ts`** / **`src/client/plugins-viewers.ts`**:推荐插件目录(名字/url/简介/安装脚本,分别对应 Tab 注册与文件预览注册),在设置页两个「添加插件」弹窗展示(共享类型在 `plugins-shared.ts`);插件作者可按扩展点加一条数据(弹窗内「跳转」直达仓库、「复制」把安装命令写入剪贴板,粘贴到 DSH 所在环境的终端执行)——数据完整性由 `tests/plugin-list.spec.ts` 守护 +- **`docs/plans/2026-08-11-service-registry-design.md`** / **`docs/plans/2026-08-11-declarative-sidebar-settings-design.md`** / **`docs/plans/2026-08-14-add-plugins-modal-design.md`**:设计文档(含实施偏差记录) 调试时直接读这些文件即可看到所有 API 的真实用法。 diff --git a/README.md b/README.md index 348ea04..2731356 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ https://github.com/user-attachments/assets/23187822-047e-45cc-b480-fe997bd55b86 - **🗂️ 资源管理器**:懒加载目录树(根 = 会话 cwd),点击打开、`@文件` 引用、右键复制路径 - **📝 编辑与预览**:CodeMirror 6 编辑(Ctrl/Cmd+S 原子保存,切 Tab 不丢草稿);图片 / Markdown / HTML / PDF / Word / Excel / PPT 内联预览(HTML 走沙箱 iframe) -- **⚡ 客户端懒加载**:启动只拉 ~325KB 核心,Office / 终端 / 编辑器等重依赖用到才按需拉取(详见 `docs/plans/2026-08-12-lazy-chunks-design.md`) +- **⚡ 客户端懒加载**:启动只拉 ~325KB 核心,终端 / 编辑器等重依赖用到才按需拉取(详见 `docs/plans/2026-08-12-lazy-chunks-design.md`) - **🌐 浏览器**:多开内嵌网页 tab,后退/前进/刷新;内容运行在沙箱 iframe(无法访问界面数据与本地文件,拒绝本机地址),可临时解锁(红色警示);被站点拒绝嵌入时显示原因;外链默认在侧边栏打开 - **💻 终端**:xterm.js + node-pty 真实 shell、断线重连回放;可选为模型注入 `terminal_*` 工具;支持自定义字体(字体族 + 9–32px 字号,实时生效) - **🌿 Git 面板**:真 diff + VSCode 式 diff tab、历史、右键暂存/提交/还原等 @@ -37,6 +37,7 @@ https://github.com/user-attachments/assets/23187822-047e-45cc-b480-fe997bd55b86 - **🔁 会话隔离**:布局 / Tab / 面板状态按会话持久化,陈旧状态自动净化;「产出文件」在侧边栏打开 - **⚙️ 声明式设置**:设置页「侧边卡片」按注册表渲染开关网格,逐项独立开/关;二级设置(自动展开、终端工具、沙箱等)经齿轮弹窗编辑 - **🔌 服务化(基座)**:暴露 `ctx.betterSidebar`,其他插件可注册 tab 与文件预览器(内置 7 tab + 9 viewer 同走一服务);v0.12.0 起支持角标/生命周期回调/状态订阅/定向打开/插件自有设置(见 [AGENTS.md](./AGENTS.md) 与 [外部插件接入指南](./docs/external-plugin-guide.md)) +- **➕ 添加插件**:设置页「侧边卡片」两个网格(侧边栏内容 / 文件预览)末尾的虚线卡片分别打开 Tab / 预览插件弹窗:声明扩展点、「在 GitHub 上浏览更多插件」按钮、推荐插件目录(「跳转」直达仓库、「复制」安装命令到剪贴板);弹窗不打开终端、无失败路径,不阻塞启动与侧边栏 - **🌏 多语言**:界面文案跟随 DSH 语言(zh/en)实时切换,无需刷新 ## 🚀 安装 @@ -220,6 +221,15 @@ v0.12.0 起补齐基座能力:类型导出完整(消费者可直接命名 `S - **[`AGENTS.md`](./AGENTS.md)**——仓库内维护的接入文档(全字段、匹配算法、HMR 陷阱、声明式设置、版本探测); - **[`docs/external-plugin-guide.md`](./docs/external-plugin-guide.md)**——面向外部插件开发者的接入指南(含完整最小示例)。 +### ➕ 添加插件(推荐插件目录) + +设置页「侧边卡片」→「侧边栏内容」网格末尾的**虚线卡片**打开「添加 Tab 插件」弹窗、「文件预览」网格末尾的**虚线卡片**打开「添加预览插件」弹窗:各自声明对应扩展点可由插件扩展(`ctx.betterSidebar` 服务)、提供「**在 GitHub 上浏览更多插件**」按钮(新标签页打开 [GitHub topic `dsh-better-sidebar`](https://github.com/topics/dsh-better-sidebar))、并展示对应 kind 的推荐插件目录(名字 / 仓库链接 / 简介 / 安装脚本)。每个条目两个按钮: + +- **跳转**:新标签页直达插件仓库; +- **复制**:把安装命令(`cd ~/.dsh && dsh plugin --profile web add <包名>`)写入剪贴板,按钮闪现「已复制」——粘贴到 DSH 所在环境的终端执行即可。弹窗保持打开、不打开终端、无失败路径。 + +**收录新插件**:按扩展点把一条 `PluginEntry`(`id` = npm 包名、`name`、`url`、`description`(i18n 友好,可在 `src/client/locales.ts` 加 `pluginXxxDesc` 键)、`install` = 完整安装命令)追加到 [`src/client/plugins-tabs.ts`](./src/client/plugins-tabs.ts)(Tab 注册)或 [`src/client/plugins-viewers.ts`](./src/client/plugins-viewers.ts)(文件预览注册),并把仓库打上 `dsh-better-sidebar` topic;数据完整性由 `tests/plugin-list.spec.ts` 守护。 + ## 🛠️ 开发与构建 ```sh @@ -242,7 +252,7 @@ pnpm watch # tsdown --watch - Git 无 push/pull/fetch;无文件 watcher(手动刷新);工具行内文件打开按钮不可拦截 - 终端 Tab 拖到另一分栏会重挂载(shell 重开) -- `.xlsx` 预览不保留单元格样式(SheetJS 社区版限制);Office/PPTX 预览内联进 client bundle(约 23MB),首次加载较慢 +- Office 三件套预览(.docx/.xlsx/.pptx)已移至「推荐插件」(Office 预览插件,见设置页「添加插件」弹窗);未安装时此类文件走代码/下载查看兜底 - 浏览器沙箱无登录态/第三方 Cookie 受限,部分站点登录需走弹窗;被 `X-Frame-Options`/`frame-ancestors` 拒绝嵌入的站点(如 arxiv.org)显示原因面板(含「在浏览器中打开」);iframe 内部跳转不进后退栈 - HTML 预览渲染的是已保存文件(不反映未保存草稿) - 移动端(<768px)无底部面板:进入窄屏时其标签页一次性并入右侧栏(迁移后回桌面仍保留在右侧栏),桌面端的底部面板只在宽视口下可用;移动端底部首展自动开终端不触发 diff --git a/README_EN.md b/README_EN.md index f015e02..5502e0b 100644 --- a/README_EN.md +++ b/README_EN.md @@ -27,7 +27,7 @@ https://github.com/user-attachments/assets/23187822-047e-45cc-b480-fe997bd55b86 - **🗂️ File Explorer**: lazy-loading directory tree (root = session cwd), click to open, `@file` reference, right-click to copy path - **📝 Edit & Preview**: CodeMirror 6 editing (Ctrl/Cmd+S atomic save, drafts survive tab switches); inline preview for images / Markdown / HTML / PDF / Word / Excel / PPT (HTML in a sandboxed iframe) -- **⚡ Client-side Lazy Loading**: only ~325KB core at startup; heavy deps (Office / terminal / editor) load on demand (see `docs/plans/2026-08-12-lazy-chunks-design.md`) +- **⚡ Client-side Lazy Loading**: only ~325KB core at startup; heavy deps (terminal / editor) load on demand (see `docs/plans/2026-08-12-lazy-chunks-design.md`) - **🌐 Browser**: multiple embedded web tabs, back/forward/refresh; pages run in a sandboxed iframe (no access to UI data or local files, rejects local addresses), temporarily unlockable (red warning); sites refusing embedding show a reason panel; external links open in the sidebar by default - **💻 Terminal**: xterm.js + node-pty real shell, reconnect with transcript replay; optionally injects `terminal_*` tools for the model; custom font (family + 9–32px size, applied live) - **🌿 Git Panel**: real diff + VSCode-style diff tabs, history, right-click to stage/commit/revert etc. @@ -38,6 +38,7 @@ https://github.com/user-attachments/assets/23187822-047e-45cc-b480-fe997bd55b86 - **🔁 Session Isolation**: layout / tabs / panel states persisted per session, stale state auto-purged; "produced files" open in the sidebar - **⚙️ Declarative Settings**: the "Side Cards" settings section renders a registry-driven toggle grid, each item independently switchable; secondary settings (auto-expand, terminal tools, sandbox, etc.) edited in a native dialog via the gear button - **🔌 Service API**: exposes `ctx.betterSidebar` — other plugins can register tabs and file viewers (the 7 built-in tabs + 9 viewers share the same service, see [AGENTS.md](./AGENTS.md) and the [external plugin guide](./docs/external-plugin-guide.md)) +- **➕ Add Plugins**: dashed cards at the end of both settings grids ("Sidebar content" / "File viewers") open tab / previewer plugin modals: the extension point declaration, a "Browse more plugins on GitHub" BUTTON, and the recommended plugin catalog ("Open" jumps to the repo, "Copy" puts the install command on the clipboard); no terminal is opened, nothing can fail — never blocking startup or the sidebar - **🌏 i18n**: UI text follows DSH's language setting (zh/en) with live switching, no refresh needed ## 🚀 Installation @@ -221,6 +222,15 @@ Full integration docs: - **[`AGENTS.md`](./AGENTS.md)** — the in-repo integration doc (full fields, matching algorithm, HMR pitfalls, declarative settings, version detection); - **[`docs/external-plugin-guide.md`](./docs/external-plugin-guide.md)** — the external-plugin guide (with a complete minimal example). +### ➕ Add Plugins (recommended plugin catalog) + +The dashed card at the end of the "Sidebar content" grid in the "Side Cards" settings section opens the **Add tab plugins** modal; the one at the end of the "File viewers" grid opens the **Add preview plugins** modal. Each declares that its extension point is open to plugins (via the `ctx.betterSidebar` service), offers a "**Browse more plugins on GitHub**" button (opens the [GitHub topic `dsh-better-sidebar`](https://github.com/topics/dsh-better-sidebar) in a new tab), and lists the recommended catalog of its kind (name / repo URL / description / install script). Each entry has two buttons: + +- **Open**: jumps to the plugin repo in a new browser tab; +- **Copy**: writes the install command (`cd ~/.dsh && dsh plugin --profile web add `) to the clipboard with a transient "Copied" feedback — paste and run it in a terminal where your DSH profile lives. The modal stays open; nothing is opened, nothing can fail. + +**Curating a new plugin**: append a `PluginEntry` to [`src/client/plugins-tabs.ts`](./src/client/plugins-tabs.ts) (tab registrations) or [`src/client/plugins-viewers.ts`](./src/client/plugins-viewers.ts) (file-previewer registrations) — `id` = npm package name, `name`, `url`, `description` (i18n-friendly; add a `pluginXxxDesc` key in `src/client/locales.ts` if needed), `install` = the full install command — and tag your repo with the `dsh-better-sidebar` topic; data integrity is guarded by `tests/plugin-list.spec.ts`. + ## 🛠️ Development & Build ```sh @@ -243,7 +253,7 @@ pnpm watch # tsdown --watch - Git has no push/pull/fetch; no file watcher (manual refresh); tool inline file-open buttons cannot be intercepted - Dragging a terminal tab to another pane remounts it (shell restarts) -- `.xlsx` preview does not preserve cell styles (SheetJS community-edition limitation); Office/PPTX preview is inlined into the client bundle (~23MB), slower on first load +- Office-suite preview (.docx/.xlsx/.pptx) moved to the recommended office plugin (see the "Add plugins" modals in settings); without it these files fall through to the code/download fallbacks - Browser sandbox has no login state / third-party cookies are restricted; some sites need popup login; sites that refuse embedding via `X-Frame-Options`/`frame-ancestors` (e.g. arxiv.org) show a reason panel (with "Open in browser"); in-iframe navigation does not enter the back stack - HTML preview renders the saved file (not unsaved drafts) - No bottom panel on mobile (<768px): on narrow screens its tabs merge into the right sidebar once (after migrating back to desktop they stay in the right sidebar); the desktop bottom panel is only available on wide viewports; auto-open terminal on first bottom-panel expand does not trigger on mobile diff --git a/docs/external-plugin-guide.md b/docs/external-plugin-guide.md index 38efa29..eeac352 100644 --- a/docs/external-plugin-guide.md +++ b/docs/external-plugin-guide.md @@ -14,7 +14,7 @@ better-sidebar 从 v0.4.0 起把自己改造成一个**注册表服务**: - **新页面(tab)**:注册一种新的侧边栏 tab 类型,出现在侧边栏 `+` 菜单里,用户点击后在自己的分栏里打开你的 React 页面; - **文件预览器(file viewer)**:注册一种文件类型预览器,让用户在侧边栏打开文件时走你的渲染组件(覆盖或补充内置的 image/pdf/code 等)。 -内置的 7 个 tab(explorer / git / subagent / terminal / browser / editor / diff)和 9 个 viewer(image / pdf / docx / xlsx / pptx / markdown / html / code / binary-download)**自己也是通过同一套 API 注册的**(吃自己的狗粮),所以外部插件的能力与内置功能完全对等。 +内置的 7 个 tab(explorer / git / subagent / terminal / browser / editor / diff)和 6 个 viewer(image / pdf / markdown / html / code / binary-download)**自己也是通过同一套 API 注册的**(吃自己的狗粮),所以外部插件的能力与内置功能完全对等。 关键机制一句话:better-sidebar 的 client half 在 `apply()` 开头执行 `ctx.provide('betterSidebar', service)`(`src/client/index.tsx`),消费插件在 `inject` 里声明 `'betterSidebar'`,Cordis 保证服务就绪后才激活你的插件,然后你调用 `ctx.betterSidebar.registerTab(...)` / `registerFileViewer(...)` 完成注册,返回的 disposer 由 Cordis fiber 在卸载(HMR / 禁用)时自动调用。 @@ -390,7 +390,7 @@ interface FileViewerProps { |---|---|---|---| | `none` | 不需要字节 | (无) | 自渲染(如纯 UI) | | `fsRead` | `/sidebar/api` 的 `fs.read` | `content`, `truncated` | 文本类(CSV/JSON/XML) | -| `mediaUrl` | `/sidebar/file` 媒体路由 URL | `mediaUrl` | 图片/PDF/Office(viewer 自己 fetch 字节) | +| `mediaUrl` | `/sidebar/file` 媒体路由 URL | `mediaUrl` | 图片/PDF(viewer 自己 fetch 字节) | | `custom` | viewer 的 `load()` 函数 | `customData` | 自定义协议(如远程拉取) | | `binary-download` | 不预览,显示下载按钮 | (无) | 无客户端渲染器的二进制格式 | @@ -405,7 +405,7 @@ interface FileViewerProps { > **head 字节从哪来**:第一次匹配(纯扩展名)没有 head。`fsRead` 策略读取后若文件为二进制,host 的 `fs.read` 响应会带 `head` 字段(base64,前 4KB,`src/index.ts` 的 `READ_HEAD_LIMIT`),编辑器会用它对 `detect` viewer **重匹配一次**——所以 detect 型 viewer 的实际触发场景是"扩展名匹配落空/二进制文件"。文本文件的 detect 嗅探不在内置流程内(用 `exts` 或 `custom` 策略替代)。 -> **内置 viewer**(不可重复注册,全部 9 个):image(0) / pdf(0) / docx(0) / xlsx(0) / pptx(0) / markdown(0, fsRead) / html(0, fsRead, 沙箱 iframe 预览) / code(-100, catch-all, fsRead) / binary-download(-50, exts doc/xls/ppt + NUL detect)。 +> **内置 viewer**(不可重复注册,全部 6 个):image(0) / pdf(0) / markdown(0, fsRead) / html(0, fsRead, 沙箱 iframe 预览) / code(-100, catch-all, fsRead) / binary-download(-50, exts doc/xls/ppt + NUL detect)。Office 三件套预览(.docx/.xlsx/.pptx)**不再内置**——已迁至推荐插件(设置页「添加插件」→ 文件预览弹窗里的 Office 预览插件)。 > code 是兜底 viewer:任何其他 viewer 未认领的文件都会落到 code(CodeMirror 文本编辑);二进制文件经 head 重匹配被 binary-download 的 NUL detect 认领(下载按钮)。外部 viewer 注册同扩展名 + 更高 priority 即可覆盖。 ### 5.5 注册示例 @@ -761,7 +761,7 @@ function parseCsv(text: string): string[][] { /* ... */ } better-sidebar 的内置 tab 和 viewer 就是参考实现("吃狗粮"): -- **`src/client/builtins/`**:7 个内置 tab(tabs.tsx)+ 9 个内置 viewer(viewers.tsx)的注册代码 + 聚合与 disposer 生命周期(index.ts) +- **`src/client/builtins/`**:7 个内置 tab(tabs.tsx)+ 6 个内置 viewer(viewers.tsx)的注册代码 + 聚合与 disposer 生命周期(index.ts) - **`src/client/service.ts`**:`BetterSidebarService` 接口 + `createBetterSidebarService` 工厂实现(含匹配算法、dedupe、createTab、启用态 gating) - **`src/client/Sidebar.tsx`**:`TabContent` 分发(查 `getTab` → 调 descriptor.component;未注册 → ``)、`+` 菜单构建(order 排序 + available disabled + 禁用过滤) - **`src/client/SideCardSection.tsx`**:声明式设置页(注册表驱动清单 + `settings.toggles` 嵌套开关 + 开关持久化) diff --git a/docs/plans/2026-08-14-add-plugins-modal-design.md b/docs/plans/2026-08-14-add-plugins-modal-design.md new file mode 100644 index 0000000..9cb21df --- /dev/null +++ b/docs/plans/2026-08-14-add-plugins-modal-design.md @@ -0,0 +1,69 @@ +# 「添加插件」弹窗 + 推荐插件列表 + 复制安装命令 设计 + +**日期**:2026-08-14 +**状态**:已批准,已实施 +**作者**:opencode + 用户 +**当前版本**:v0.12.0(分支 `feat/plugin-api-v012`,已合入 main 后 rebase) +**目标版本**:v0.12.0(不 bump) + +## 1. 目标 + +1. 为「侧边栏内容(Tab)」与「文件预览(viewer)」两类扩展点分别增加**添加入口**:DSH 设置页「Side card」分区的两个响应式网格(侧边栏内容 / 文件预览)末尾各新增一个与其他卡片同尺寸的**虚线边框**添加卡片(「添加 Tab 插件」/「添加预览插件」)。 +2. 点击后弹出对应 kind 的原生 Modal:声明该类扩展点可由插件扩展(`ctx.betterSidebar` 服务),提供「在 GitHub 上浏览更多插件」**按钮**(打开 `https://github.com/topics/dsh-better-sidebar`,新标签页),并展示仓库**推荐**的同 kind 插件列表(名字 / url / 简介 / 安装脚本)。 +3. 每个条目两个动作:**「跳转」按钮**(`window.open` 新标签页直达插件仓库,绕过链接接管)与**「复制」按钮**——点击只把安装脚本写入剪贴板(`writeClipboard`,按钮闪现「已复制」反馈),用户自行粘贴到 DSH 所在环境的终端执行。 +4. **不关闭任何窗口、不打开终端、无失败路径**:复制是纯 client 动作,不依赖会话/终端/配额,弹窗保持打开可连续复制多个插件。 +5. 推荐列表为仓库静态数据、**分为两个文件**(`plugins-tabs.ts` Tab 注册目录 / `plugins-viewers.ts` 文件预览注册目录),初始在 viewer 目录收录唯一真实三方插件 `@huanlin/dsh-plugin-better-sidebar-plugin-office`(简介不注版本前提);后续插件只加一条数据。 +6. 内置 Office 预览(docx/xlsx/pptx)**从本体移除**——已迁至上述推荐插件(见偏差记录),`docx/xlsx/pptx` 文件在未装插件时落 code/下载兜底。 + +## 2. 非目标(Out of Scope) + +- **不打开终端**:不做终端预填安装流(曾实现的 `OpenTabSeed.expand`、`TerminalSeedMeta` 预填/提示条、service meta 透传等已全部删除回滚)。 +- 不加 + 菜单入口、不加编辑器空态入口(入口只在设置页)。 +- 不做插件在线拉取 / 动态发现(列表为仓库推荐静态数据)。 +- 不改 host 半的服务契约(`service.ts` 相对 v0.12.0 无 API 变化;host 半仅在 office 移除时缩减了 chunk 白名单)。 + +## 3. 实施要点 + +### 3.1 数据层:两个目录文件 + 共享词汇 + +- `src/client/plugins-shared.ts`:`PluginEntry { id, name, url, description, install }` + `PLUGIN_TOPIC_URL`。 +- `src/client/plugins-tabs.ts`:`builtinTabPlugins`(当前为空,空态展示)。 +- `src/client/plugins-viewers.ts`:`builtinViewerPlugins`(种子:office 插件,install = `cd ~/.dsh && dsh plugin --profile web add @huanlin/dsh-plugin-better-sidebar-plugin-office`)。 + +### 3.2 UI 层:`src/client/add-plugin-modal.tsx` + `SideCardSection` + +- 两个网格末尾各一个虚线卡片(复用 `.card` 配方 + `IconPlusOutline16`),`addPluginsOpen: PluginKind | null` 状态;Modal 仅在打开时条件挂载(Modal 原语无条件跑 hooks,SSR 规则同 settingsFor)。 +- `PluginListBody`(提取组件,直接可测):topic 按钮(`window.open`)+「推荐插件」分组(`groupHeading` + count)+ 条目(名字链接 / 简介 / mono 安装命令 / 跳转按钮 / 复制按钮)+ 空态。 +- **复制**:`void writeClipboard(entry.install)` + `copiedId` 状态闪现 `t('copied')`(1.5s 后还原)。不关闭、不打开、不抛错。 + +### 3.3 i18n + +新增键:`addPluginsTabCard/TabCardDesc/ViewerCard/ViewerCardDesc/TabDesc/ViewerDesc`、`addPluginsBrowseMore`、`addPluginsRecommended`(推荐插件)、`addPluginsEmpty`、`openPlugin`(跳转)、`copyInstall`(复制安装命令,按钮 aria-label);复用 `copy`/`copied`/`close`/`settingsDone`。已删除废弃键:`install`、`installNotice`、`installError*`、office 相关键(`viewerDocx/Xlsx/Pptx`、`officeTooLarge/Corrupt/Encrypted/LoadFailed`、`previousSlide/nextSlide/zoom/zoomHint`)。 + +### 3.4 内置 Office 预览移除(与推荐插件衔接) + +删除 3 个 viewer 描述符 + 10 个源文件(docx-view/xlsx-view/PptxView/office-view/office-shared/office-types/xlsx-to-univer + chunks/docx|xlsx|pptx)+ 3 个图标 + office CSS + office locale 键;chunk 白名单 5→2(terminal/editor,同步 `bundle-route.ts` / `chunk-loader.ts` / `tsdown.config.ts` / `scripts/package-registry.mjs`);`tests/builtins.spec.ts` 断言 6 个 viewer 且不含 office id。`.docx`(zip、无 NUL)未装插件时落 code 兜底。 + +## 4. 边界情况与失败模式 + +- **复制失败**:`writeClipboard` 尽力而为(navigator.clipboard → execCommand 兜底),失败静默;按钮反馈照常闪现。无会话/无终端/配额等一切前置条件均不涉及——复制与它们无关。 +- **空目录**:Tab 目录当前为空,弹窗渲染空态 + topic 按钮。 +- **版本号**:v0.12.0(`package.json` / `dsh.plugin.json` / `service.ts` 的 `SIDEBAR_SERVICE_VERSION` 三处一致,manifest-consistency 测试守护)。 + +## 5. 实施偏差记录 + +- **评审修改(第一批)**:入口由 + 菜单/编辑器空态改为**仅设置页虚线卡片**;安装命令并入「安装按钮」单一交互。 +- **评审修改(第二批)**:① topic 链接改为**按钮**(`window.open` 新标签页);② 添加按钮拆为**两个**(Tab 注册 / 文件预览注册),列表数据拆为**两个文件**;③ 安装错误只内联显示在设置内(预检 + try/catch);④ 终端提示条用品牌高亮色。 +- **评审修改(第三批)**:内置 Office 预览整体移除(迁至推荐插件);「内置插件」全部改名**「推荐插件」**。 +- **评审修改(第四批,最终形态)**:设置窗口关闭问题无法根治(openTab 的 store 涟漪会复活弹窗),且用户实测弹窗关闭不可靠——**放弃终端安装流**:安装按钮改为**只复制安装脚本**(`writeClipboard` + 「已复制」反馈),弹窗保持打开;随之删除整个终端预填流:`terminal-meta.ts`、`TerminalView` 的 meta/预填/提示条、`tabs.tsx` 的 meta 透传与 `uiTerminalCount` 导出、`service.ts` 的 `OpenTabSeed.expand` 与 createTab meta 透传(全部回滚到 v0.12.0 原始 API 面)、`.terminalNotice` CSS、相关测试与文档;`install`/`installNotice`/`installError*` 文案键删除,新增 `copyInstall`。 +- 测试中 `AddPluginModal` 不能 renderToString(React 18 server renderer 拒绝 portal),改为 createRoot + act 挂载后断言 `document.body`(portal 落点)。 + +## 6. 验收清单 + +- [x] 设置页两个网格末尾各出现虚线边框添加卡片,尺寸与既有卡片一致 +- [x] 两个弹窗(kind 区分):声明文案 + GitHub topic **按钮** + 对应推荐插件条目(名字/url/简介/安装命令/跳转按钮/复制按钮) +- [x] 点「复制」:安装脚本写入剪贴板,按钮闪现「已复制」,弹窗不关闭、不打开终端、无失败路径 +- [x] 点「跳转」:`window.open` 新标签页直达插件仓库 +- [x] 内置 Office 预览已移除;chunk 白名单 2 个;无「内置插件」残留文案 +- [x] 版本号 v0.12.0 三处一致;`pnpm typecheck` / `pnpm test` / `pnpm build` 全绿 +- [x] README/README_EN/AGENTS.md 更新到位 diff --git a/package.json b/package.json index e4a66e8..6d6241b 100644 --- a/package.json +++ b/package.json @@ -58,9 +58,6 @@ "lib/invariant.js", "lib/client.js", "lib/client-registry.js", - "lib/client-docx.js", - "lib/client-xlsx.js", - "lib/client-pptx.js", "lib/client-terminal.js", "lib/client-editor.js", "lib/types/**/*.d.ts", @@ -110,7 +107,6 @@ } }, "dependencies": { - "@aiden0z/pptx-renderer": "^1.2.4", "@codemirror/commands": "^6.10.4", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", @@ -132,16 +128,12 @@ "@codemirror/state": "^6.7.1", "@codemirror/view": "^6.43.8", "@lezer/highlight": "^1.2.3", - "@univerjs/preset-sheets-core": "^0.25.1", - "@univerjs/presets": "^0.25.1", "@xterm/addon-fit": "^0.10.0", "clsx": "^2.1.1", - "docx-preview": "^0.4.0", "node-pty": "^1.1.0", "rxjs": "^7.8.2", "schemastery": "^3.18.0", "ws": "^8.18.0", - "xlsx": "^0.18.5", "xterm": "^5.3.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 496cfc5..c3b55b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - '@aiden0z/pptx-renderer': - specifier: ^1.2.4 - version: 1.2.4 '@codemirror/commands': specifier: ^6.10.4 version: 6.10.4 @@ -77,21 +74,12 @@ importers: '@lezer/highlight': specifier: ^1.2.3 version: 1.2.3 - '@univerjs/preset-sheets-core': - specifier: ^0.25.1 - version: 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/presets': - specifier: ^0.25.1 - version: 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) '@xterm/addon-fit': specifier: ^0.10.0 version: 0.10.0(@xterm/xterm@5.4.0) clsx: specifier: ^2.1.1 version: 2.1.1 - docx-preview: - specifier: ^0.4.0 - version: 0.4.0 node-pty: specifier: ^1.1.0 version: 1.1.0 @@ -104,9 +92,6 @@ importers: ws: specifier: ^8.18.0 version: 8.21.3 - xlsx: - specifier: ^0.18.5 - version: 0.18.5 xterm: specifier: ^5.3.0 version: 5.3.0 @@ -198,14 +183,6 @@ importers: packages: - '@aiden0z/pptx-renderer@1.2.4': - resolution: {integrity: sha512-/4X/BApiknc/JM4nAWQRp5zrnA2GKSMv5r1u3XLsMvySw9DTQjyXIKRtltRsmIYfoN32tHGFnrSlGok7nFS60w==} - peerDependencies: - pdfjs-dist: '>=5 <7' - peerDependenciesMeta: - pdfjs-dist: - optional: true - '@asamuzakjp/css-color@5.1.11': resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -221,10 +198,6 @@ packages: '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@babel/runtime@7.29.7': - resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} - engines: {node: '>=6.9.0'} - '@bramus/specificity@2.4.2': resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true @@ -940,39 +913,9 @@ packages: '@noble/hashes': optional: true - '@flatten-js/interval-tree@1.1.3': - resolution: {integrity: sha512-xhFWUBoHJFF77cJO1D6REjdgJEMRf2Y2Z+eKEPav8evGKcLSnj1ud5pLXQSbGuxF3VSvT1rWhMfVpXEKJLTL+A==} - - '@floating-ui/core@1.8.0': - resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - - '@floating-ui/dom@1.8.0': - resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - - '@floating-ui/react-dom@2.1.9': - resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.12': - resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - - '@grpc/grpc-js@1.14.4': - resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.8.1': - resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} - engines: {node: '>=6'} - hasBin: true - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - '@lezer/common@1.5.2': resolution: {integrity: sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==} @@ -1024,13 +967,6 @@ packages: '@marijn/find-cluster-break@1.0.3': resolution: {integrity: sha512-FY+MKLBoTsLNJF/eLWaOsXGdz6uh3Iu1axjPf6TUq92IYumcTcXWHoS747JARLkcdlJ/Waiaxc5wQfFO8jC6NA==} - '@noble/ciphers@2.3.0': - resolution: {integrity: sha512-Clu/xdfgVTf9o7ngLOURaxePwR0j8sjclKEtVij10/jGulwFsPWCvvRgG/XjUVf8Nei+jLG6uwyXzUTGY1DQrw==} - engines: {node: '>= 20.19.0'} - - '@noble/ed25519@3.1.0': - resolution: {integrity: sha512-pfcObRY3CtvwfaG9Mt5XqZdKmAQppl37tHUeuBhDUbiwJBCVY4/A4lbMvb1xKhMDx96AqAqZpMWuBX1HulhX4g==} - '@noble/hashes@2.2.0': resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} engines: {node: '>= 20.19.0'} @@ -1038,354 +974,9 @@ packages: '@oxc-project/types@0.144.0': resolution: {integrity: sha512-nuhZIOLuI6TFQ32I/WnUx+SCPY7SdSKwgnFHydAuoS1+Z4BRcaP+RRJmGzl9lw+0OFF7UmaESf7KQRXaNLHypg==} - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.5': - resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} - - '@protobufjs/eventemitter@1.1.1': - resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} - - '@protobufjs/fetch@1.1.1': - resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.2': - resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==} - '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@radix-ui/primitive@1.1.7': - resolution: {integrity: sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==} - - '@radix-ui/react-arrow@1.1.15': - resolution: {integrity: sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-collection@1.1.15': - resolution: {integrity: sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-compose-refs@1.1.5': - resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.2.2': - resolution: {integrity: sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dialog@1.1.23': - resolution: {integrity: sha512-Ksw4WeROkO4rC9k/onilX/Ao2Cr1ku1unMNH+XSCcP4jSXYu7HDsg9n4ojMjVb22XpYjAQ9qfrFlVbru1vXDUA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-direction@1.1.4': - resolution: {integrity: sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dismissable-layer@1.1.19': - resolution: {integrity: sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-dropdown-menu@2.1.24': - resolution: {integrity: sha512-geq8l2rJkxvkXsT9RMgtUE3P8pITFpTsvYpbySi1IH4fZEABD/Gp85myayFgxk0ktljGMJnCbeFkyTusvSvv7g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-focus-guards@1.1.6': - resolution: {integrity: sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.1.16': - resolution: {integrity: sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-hover-card@1.1.23': - resolution: {integrity: sha512-H8qONfZd3ltrU3+jHCIgITbWo6e1iTKvP9DHdrvYbX48ooRM5FjEDTn16AMwdfuOGkWdZEhpl3PLL/Wk/AnHDQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-id@1.1.4': - resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-menu@2.1.24': - resolution: {integrity: sha512-uW7RVuU6Lp/ZtfeY4b3kL32zccgEWvPv1+cf17ubYzHa9cL8AHokmk36cG/XEiH/smbQvumnieXX9j/e9RqJWA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popover@1.1.23': - resolution: {integrity: sha512-mw58MrBlyHWFisTOYignD0vf/3gdcgAR+9of1s9G/38CbFiUwH1nCDkc0AUM9IrXFgN5Ue8n45j9WCgyM1sbiQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.3.7': - resolution: {integrity: sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.17': - resolution: {integrity: sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-presence@1.1.10': - resolution: {integrity: sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.10': - resolution: {integrity: sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-roving-focus@1.1.19': - resolution: {integrity: sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-separator@1.1.15': - resolution: {integrity: sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.3.3': - resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-callback-ref@1.1.4': - resolution: {integrity: sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.2.6': - resolution: {integrity: sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-effect-event@0.0.5': - resolution: {integrity: sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-is-hydrated@0.1.3': - resolution: {integrity: sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.4': - resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-rect@1.1.4': - resolution: {integrity: sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-size@1.1.4': - resolution: {integrity: sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/rect@1.1.3': - resolution: {integrity: sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==} - '@rolldown/binding-android-arm64@1.2.4': resolution: {integrity: sha512-jHC2cnyKz5xU2fhECtFl8OZ83cYNt13GZQD+0uMJ/X3o+ijmd56okHhTUwxVSHPx1IRVIJEZ1/1pPzeLCU6XKA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1558,548 +1149,6 @@ packages: '@ungap/structured-clone@1.3.3': resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} - '@univerjs-pro/collaboration-client-ui@0.25.1': - resolution: {integrity: sha512-cpHvRNCWeYAPibzzy2s3FwWBiNiVP52/QZMO4BhYj+Ft2OYVrrpcu6EtKSTXUiuyqVtbFobOu71atJGYc+12xw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/collaboration-client@0.25.1': - resolution: {integrity: sha512-QZ1WHsAlb618i0Ta3tVpZJFjjY3aBmTQXwdrFp0thJI/aNZ+Mpug1dkHe25bt+dRmv7BMpb2yg+UFG6aGw4AZg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/collaboration@0.25.1': - resolution: {integrity: sha512-54aiegetXmkr5TgucrvHAuziw5O9+6fw0oHAdo86yfhAJRCinM+DHyH4BiIej8q5UfhHCv841MBjwT3Pm5YRpA==} - - '@univerjs-pro/docs-exchange-client@0.25.1': - resolution: {integrity: sha512-9AzGATwSvisQ2PpkEDIZehqbeuKhBFqMRVyVDmhw7hRUzGackiEojxRw0BZCLp3Dxot5rvH7T3EtJaYB9ogHUA==} - - '@univerjs-pro/docs-print@0.25.1': - resolution: {integrity: sha512-HlxPHGP3Wl0HLsQcupkGMCCgPyb9gE0uNkhv4ZQVFlZZMwmfh1bNQhHSA8xGwhP6IC33QA51trhO7oCHZTzWpQ==} - - '@univerjs-pro/edit-history-loader@0.25.1': - resolution: {integrity: sha512-pK5TtIYwv9YZl35r8hm3bVvsvsNDFyOdB8t82zNVO4vm/f1Rbz1LEzyVet8LuYD5/+q/z29w7LeyJFL72oqINw==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/edit-history-viewer@0.25.1': - resolution: {integrity: sha512-U9NHs9kI1vaIRIDKHjU5oFCvmsYTrF6L5R2DOXCaYh0FkzW72Z83A5DwWkNTsQ7cdF5ilfjHeiYxMo04yBOdhA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/engine-chart@0.25.1': - resolution: {integrity: sha512-o9RZh6hzBq4Wh/IuK4ai5E99TUvuw+XI6oL3iBtSSW2EDFH0IvsePtAaJR/1o1YxSDySPCB0tBFNWPUx4uVCcQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/engine-formula@0.25.1': - resolution: {integrity: sha512-oPREHYb4Jk+L4FiAht3+g4TGQSILHSN7dfG2XOyAGJRktN9ApNDIACaOnHxIzw6LQKUqpsstZjrcxR01nypxVg==} - - '@univerjs-pro/engine-pivot@0.25.1': - resolution: {integrity: sha512-Dk5FbO1lhKESUeY5i8Qc/eFJzXunfPk8rsndIvG5w7c4DQgwjFryd8wZk9NIvwW+YrAX5J/NX7HmgSKreODt7g==} - - '@univerjs-pro/engine-shape@0.25.1': - resolution: {integrity: sha512-U0i0STMYc0W9MHIetiP4nvEFZjsVlmzcpRrcEEPTkj83KW9FpQV8xE6wER/0cSSbuvBfKbiHpZC8YoEgZVQaaw==} - - '@univerjs-pro/exchange-client@0.25.1': - resolution: {integrity: sha512-UgZTUOk+9VCRrODyIWplhesa4tOaXEr1OOuBXxmUi2NkMjJVteBRJacQBGR7cqUQUmhM7vqYiAeP8B5EjCsTEQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/license@0.25.1': - resolution: {integrity: sha512-pXK47oWmDZWtCYzXam0EHAqi2zuE0+uR3HVolfFU5aP3k0GdHidOF1ZugOSBzkuV34rRU0g+/gXln+Xw6KkRQg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/print@0.25.1': - resolution: {integrity: sha512-VPIK197YPFnDb/CsF/2Euaw72rC4BRvZNFhFNi62kx44tp8ppJ1kBOZwLSoudt51eNk4139yiWsGI7p5vsWmzw==} - - '@univerjs-pro/sheets-chart-ui@0.25.1': - resolution: {integrity: sha512-0hxQEQwpaceANnzfU+eN/ktvfj6UXFOlupXGq8+ivI6MS4oAB7njI4W6q3mfo2VOi6btMUYfRT6E9cvtXdlyMw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-chart@0.25.1': - resolution: {integrity: sha512-YqufhKXIJD2dQcRJDGsqCN77k5Ii6/7qXeDC6+8sc3UCuUJXymmPPkEhqK09ofqu6u32z72Zri5jyUdrLsCa4A==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-exchange-client@0.25.1': - resolution: {integrity: sha512-gtSXuneb/wcn/8r7+2sbQUtN6GeaVeARZwIidixHT8/vPOpajbZlYYVpybyR6EP0qkZr7ufLgtNfeNP8PXGVsg==} - - '@univerjs-pro/sheets-outline-ui@0.25.1': - resolution: {integrity: sha512-e5tv6FhbjFiZJ3b10aGIaJ3cI0gRSMS+s7MnKJVRzDFadMrULLHCFaX/XiqfB4atHEKwXgOBO7CbeLVcU7pJlw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-outline@0.25.1': - resolution: {integrity: sha512-LFfkrvel33khqEbYrhWXsQY6LwSGXd22JXRjleirJoWIVw+vVX6yDKkHVHhLHmG/RcJEqrNIgGsq7cBpSQKcgA==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-pivot-ui@0.25.1': - resolution: {integrity: sha512-VDbmWSJaCzeEImfhtNWSaU+mFKvlfjhDBuzkvKLxNvtRc1uJXzohYvCNlE2CBdq1zasA6UENrRc+ES5dRZa/Kw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-pivot@0.25.1': - resolution: {integrity: sha512-VZ9rewAX/JK0j7W58u2rPgC3ONQ9JYrg8+jFtR+3ma5DZ2P1iicvVr1WG92MbaUaZi1C3zGWM/7nrPzSmuHIBQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-print@0.25.1': - resolution: {integrity: sha512-RXU9Cnc++H5ZF/bDpTOuXjuDLkpjVDQzQRHbeF0Zd5MrEQxgmdBUny1UqunfDTki788CB21NeBcvLjqKQ4FS3g==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-shape-ui@0.25.1': - resolution: {integrity: sha512-GfIFKWsqM5NpcZBbkl20l8oB1dHPzEa2dBMeMw1nerUCP7rvgOY2QbXoKL76IgqqD0srnAeWxXeT33L56O+czw==} - engines: {node: '>=16.0.0', npm: '>=8.0.0'} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-shape@0.25.1': - resolution: {integrity: sha512-84I8/IS1nzgXpzr8que6fHPFkPuF4PnIIGJjQ/IOhn22oL8MPm8Km15cM52oLPqOGiq+4hs0E6Vjyb7AOXyyng==} - engines: {node: '>=16.0.0', npm: '>=8.0.0'} - - '@univerjs-pro/sheets-sparkline-ui@0.25.1': - resolution: {integrity: sha512-NBD5Trimk6JEggDgtJDLokyaD+0rbtD44oLkmCb0jzzI5j+XZlm4YVlYxDab6O9TElxgLpW5D6jATC/JCDXqFQ==} - engines: {node: '>=16.0.0', npm: '>=8.0.0'} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs-pro/sheets-sparkline@0.25.1': - resolution: {integrity: sha512-+2eq/n/QeyVBNxDifnayr+z5QpcNJMl7mYzVIddjgHrrHHp+lJHw89vesA8NlQSZEVkgz/wdghN0wBHqCcAgDQ==} - engines: {node: '>=16.0.0', npm: '>=8.0.0'} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs-pro/thread-comment-datasource@0.25.1': - resolution: {integrity: sha512-Bbfu4Mb3O/5zO1jft3HaUAC3owSaG8sk7eFiT0J85EKLJsy9Pp3U/D88Q5JSvHwJENRrWMBYdo2TDbxnkGBo1Q==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/core@0.25.1': - resolution: {integrity: sha512-0FQjuL1HdPtl8NsU5muT8HNtuA4yMEvbBLgewyqUVQmT5oks89a3jdqxi5/dvHYDRvW7wssVjZitfbL79el3Jg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/data-validation@0.25.1': - resolution: {integrity: sha512-MLSOXYpQWNgwFnVXcdh5YbVjDFRYs9WZy1YwvN3aUDVYgy6dDoU2N52IE+IbDhTi33TZI0JdVLu5000bmv+bcQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/design@0.25.1': - resolution: {integrity: sha512-tqKzxh/HhUiHsZZzkFUHGBTEsRfOsSNgIGAjY6PTvbucpLJTYzijrQxEZfgOMC/tEQykUFJUo/WDRTXZEHMPXg==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - '@univerjs/docs-drawing-ui@0.25.1': - resolution: {integrity: sha512-dNolVFpRKpDXAmFQ64rkzkNDDu7mpXgqQWGOndpHs/hPrIbOUgPuCk5t+dzejravAw89edDYs7qVJLqjW44i5Q==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/docs-drawing@0.25.1': - resolution: {integrity: sha512-xkDGZ/dcwpH6Q/+iYhVKQy8RsxXfLqmO9I9iJXMiZB5ZKZlWSHBKcMp/d09hf/n37ajkwtNCcxNayOAEnRyQXQ==} - - '@univerjs/docs-hyper-link-ui@0.25.1': - resolution: {integrity: sha512-k2rZU9d6md4yn3mmT2B+UwcK0ZKGmYymW9qt5X1YiQB8Cc5atDH9uM/BkiEigD1gFwzy0IXC2ONaV9b5p7/vuA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/docs-hyper-link@0.25.1': - resolution: {integrity: sha512-8EAQmyusCPD3z7P1b4romx3f490T/mn7rkDOtlqpmVMk1ojA2mPjOKP+HURsBr+f65wLbbhHdX/JYqlxvJplMw==} - - '@univerjs/docs-thread-comment-ui@0.25.1': - resolution: {integrity: sha512-eiamay2YqODtv2eQQHVLNeDbjqgClP7PdTNoIeeDxATjhJBwwmY+NT3gpaKFx6bcwV9VIK3RBtfFaNGwuvs++g==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/docs-ui@0.25.1': - resolution: {integrity: sha512-Oy5iPjf+gJlijUe3pQj5iIAILR/4YzCvOVtGy4FPyksXXrYYy1oMZ5JnEP3U7AUKhQ4yTNIFoaTYT6LwbshG+A==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/docs@0.25.1': - resolution: {integrity: sha512-U85iZNLBxRCaiU3++N8rCBgUMTpFGsm1G0U6UcsZxAy0XGhRjD+vhtvgQNis25sNjksmy/25kXtYqWMrk/XWbw==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/drawing-ui@0.25.1': - resolution: {integrity: sha512-SqctH5TFOpH9JILi9awe72uMS+VWkEtS4WhUkiN3hjLKZajzGrRBYjr0Sy2ix+AxiEG8tSc8K43FJHRBvuBxGQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/drawing@0.25.1': - resolution: {integrity: sha512-ZS+YpSo/RWoh21zZAHM0Hg57FyqqW/9P5zoQ8hL1vGoEN3ZhbZA8jwiQHv1PFqlzXPzKWO0bysc4yB8BtJW8Pg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/engine-formula@0.25.1': - resolution: {integrity: sha512-ZNx8ndlz7d8zASwoE/pK1csreW553tSxoYJmEgHSAiCHtSYkdk6OiynkFjyDIUCMe56n5pdQo9uHfynMBbOY7A==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/engine-render@0.25.1': - resolution: {integrity: sha512-CDbIjOQTbEwwVe8+l6NEQGxegsbRjVXWJ6Qrm91Z1gzwKzrl9P1mOaDsXGYgbp5ujTJBxOVePPuU2QuS/9iMeA==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/find-replace@0.25.1': - resolution: {integrity: sha512-Xa+pkCqogQ0AHcIzUGpmqbb6driQJ0i4nqT6XPS/RYh/u0encY9/an7z3ly9b5Z24PChyPGTfrvrbFAnmON3WA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/icons@1.4.0': - resolution: {integrity: sha512-ohBfPk+EyLuSc+1Rvz06jiMDgEydwc6lLUOQyUjS/W3zBKYLhbXaEP4qq7/YQH8OhzkTsRQGvsTgYSg1roRXgg==} - peerDependencies: - react: '*' - react-dom: '*' - - '@univerjs/network@0.25.1': - resolution: {integrity: sha512-5sqyI9qKyn/fb+IMIoW6nQPJHlpJr1/WscCyDG4PmMtpMm/ipN/CZu31FIyMyM1jLOeJX1uMeldflviEq4iorA==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/preset-docs-advanced@0.25.1': - resolution: {integrity: sha512-Es/BlOdMYM9jPRkQSF5JQXC8UHWxVdSLM0mYYubSD1Un+PSoKDMle9k4J8QT6wANWVqRTGeAP4EVlyyFEd0ENA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-docs-collaboration@0.25.1': - resolution: {integrity: sha512-ZU6LIAxRfh72cR2Nyy9Sd56+GSPB+ugP5+fy8sjiSn2vOh10ZrQI7I1YNN9gB3CI4GRGtqEmbAV32VQDdfYcCQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-docs-core@0.25.1': - resolution: {integrity: sha512-V98oGWbMa2NjvHZEMFyHvVu0DXp8h4i/soJilAdK+mV+Ja0i2Eofj/Wsmoj9LT++nC1pXfGfNzpezy04uR/EVw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-docs-drawing@0.25.1': - resolution: {integrity: sha512-j6pYAGWSdNUhFWoydH0Cp4lpiKPjnXwQSByZhsK8yr51vkMe5AqBab0atPJYmYzu89Qth6e9Tnofe5qHUdu1aA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-docs-hyper-link@0.25.1': - resolution: {integrity: sha512-kN2vGhAgY7QBIynQasdwBOUxtimNufn29pJXSEmDeKpASNtcPFQI+VqfhPBuG6L5fJqYW9mYqnXIWes5wca3Ww==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-docs-node-core@0.25.1': - resolution: {integrity: sha512-alB/hLdIDMnd2/W8ZK1z9YrQI6zxqpt9jyXGXqo2aMz+eYuxJ9W2peKC04Iz8DAFlZnQmpcgxQzZ5tlxVV4lOQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/preset-docs-thread-comment@0.25.1': - resolution: {integrity: sha512-2SRYv/byKi5DYIo1+n6kxG6x4S6Iy+PEr2TXimkTlg5lnlMyNUaaFSaisnsXKdAjPkhF82S81L5U57bSuzh6Rw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-advanced@0.25.1': - resolution: {integrity: sha512-+bkHUk3W0ui6+ZvW+Alo0vf+qBaj1S1o3FgBEGmKhdqxKKv5CLAhuRD6zQm755EV9tQGXqAZ1heGGggOBPK1/w==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-collaboration@0.25.1': - resolution: {integrity: sha512-R/X0ZwkMWc5um8DE7kqNvb6gGt29IgCdq5qeJC+fU8BC4vgXpJhCEGsGk4HDPOnHH2rnZk9rPr1VzcUMThgFUA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-conditional-formatting@0.25.1': - resolution: {integrity: sha512-MsbzZEw6Z6L7UHpNxF1B1ua/aM0we1u9GRBf7ExZlPAzZbEicd5DM2n0yvO/5a7SmzFuFQZshX1JY5xSNLJvhw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-core@0.25.1': - resolution: {integrity: sha512-hCxvFUcWBZLEUf1SUOmqHvf3MN/17LW7AQYLcWIJIGQP2laa0XIrW1kXrTfmh8G0BTwDes286FIPf5y70SC0YA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-data-validation@0.25.1': - resolution: {integrity: sha512-9K3XOzmfjxJ39iR9GQCH9FGrLdMqc0FOFv1BLfMyWwwh2N3sWaz+Ae1sKjpKPLDuOn8uYH6QRRAxif8UK1V49A==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-drawing@0.25.1': - resolution: {integrity: sha512-QLTWlzCx/K2eVq4TXTiGH8aIYBuTNEaPLLdzgguPJIqxCLjcmLwWAsTKgoSq058st+JOPVR9GCnx2VhEx9HBkQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-filter@0.25.1': - resolution: {integrity: sha512-ox6OAUFetC9Al1XY7eb4JNPvNwto7ZWZBXiD5nNGzeK6R8LKrN31Yhu69RgCTpuymVlv7rNROtDKeXxroJzUbg==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-find-replace@0.25.1': - resolution: {integrity: sha512-eao9xoiPsnn3qfk9pRVEip7Yte36RgBWpdZ72xj0WtX7r0pKOsCWHLpluQwO2tR8YR6BBTB009qarxDMTeQw3g==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-hyper-link@0.25.1': - resolution: {integrity: sha512-nKROwzxzYadnetwlGVAGtpuMP8Cn2qdiJiWQjXjPI217TUtojYKXIRdOhK909/BFAR/l7oalX4x+fKLWSdU5ag==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-node-core@0.25.1': - resolution: {integrity: sha512-AtHLj63zdM3SdT8Ya2kDsQ2N20Dp+RPEubXv5d4jA4aSZXJTzHRA4MOTMmlosowd5KQwoJO5/ewqM6ZKBgwrcQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-note@0.25.1': - resolution: {integrity: sha512-Lo0lhMfHHzSPJaAxUQ5F9TANtXwL7xIjoNdVPLDMz5dumPCPHKH3j7fewI4pOrSVqvcVyWvmDxwUQqMDYSk8SQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-sort@0.25.1': - resolution: {integrity: sha512-xebD11RrtJ+JY6Tn3pYoQf28jMuLAlOEAoDYqB8Rh4mzKLimBcB/emmXNg+KfNbbXFelFRvjr8uaLL5P41R5WQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-table@0.25.1': - resolution: {integrity: sha512-ycZlK/ZgyRXgsw0pYulFpUa++mJIGNX4D37M9Vg1pNOmdJWygPF8Q4zEZUK9bARYMalIdUommQ+93rl1jNiXWw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/preset-sheets-thread-comment@0.25.1': - resolution: {integrity: sha512-/zlzXHNWVQkp9fr+d6kSeGEwtb5nnGhKbCmF0y+JSHpws6MPWBVjBD1MbzsGvT99P7OhLXtdFrbrQUMBsFduOg==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/presets@0.25.1': - resolution: {integrity: sha512-AHZyR0KTd9Z43A3ybFkGGH8PBT8NDsJa7xY4PMq8ZDHdxUZIVjqoIJlqUq+DAFxGAWInr27SXu6KaBpfZ1U43Q==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/protocol@0.25.1': - resolution: {integrity: sha512-RHkNl/Gm8T5VyrXGj3dnJ4CGgB12/oqP7BVUZ4DcfxezFh1vq/nIHD0fIqL8DZslZV6CGK/sxcNeGn3E/S3Xnw==} - - '@univerjs/rpc-node@0.25.1': - resolution: {integrity: sha512-573sHGgLVPzQa4alglAhTDxdEAh7XhlYIpYGhK1ueqjvn60g4/8HBAjq3yza0jW+rykHevkSg6tdatxn/0RyUg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/rpc@0.25.1': - resolution: {integrity: sha512-cwQJ+faKb983QRAGG/hkisASzb3HgjlWm4JMf6w1gVO/oYbLm6ObACu7zVHU+xhw8EKRFN3Kxl6SH0KTqFLOVQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-conditional-formatting-ui@0.25.1': - resolution: {integrity: sha512-/DZRAhClo1T9v3S8h6W7shSemckIeLvYYwygl3vlWe1opcUFraUt2A8iS/SToQeIgIstVEGGq3EZh5yeDJDvAQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-conditional-formatting@0.25.1': - resolution: {integrity: sha512-+3q3WS6+m3qNDyyv4LuppxqNQdOFT99fQHpkrc2WIi1pSgO/HnCXm348KP1RhpYoVwcHOV8eoFDTqK9Q1DrdOg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-data-validation-ui@0.25.1': - resolution: {integrity: sha512-jg40+G3S0gwtQILvfzB0bFnigLNHxUEcnuAGHwgdS+GRHxGb+GbtY2qy5Fob7tGCMlgIiL4vZBZ5LCRVq2ciLg==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-data-validation@0.25.1': - resolution: {integrity: sha512-I2NkLoiRJs9+zyijsa+wLnFviJNurqxJ77wAnh+ZZe6OLWmh1ErCsmu20sljvaPZgIKBqeXYi/sRYv9f4xY+2w==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-drawing-ui@0.25.1': - resolution: {integrity: sha512-GL9uteQK3xtkcJke0FJEfj+bfSilE0MJVF2BFAAa3x0iYSL0eUFAbqIG4TJ7zoHTzr4gToLk0xEma2zKT7NDVw==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-drawing@0.25.1': - resolution: {integrity: sha512-b1UknaJAgQ7687+ZN4QLo38ql1z+yEh0/a0Xng4K5pY+snDj2vaJAtyn6cj5fiQcXIaQoJdvnyAd7dPz5URNcQ==} - - '@univerjs/sheets-filter-ui@0.25.1': - resolution: {integrity: sha512-VROeSot8Fu/wUqeUuGaCgNHLllzOqrmnyeZO8oARlUZNaNSwZl1LfOxu35xR63HS1HuC7amaFspCdo5u4D1nsg==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-filter@0.25.1': - resolution: {integrity: sha512-pQl8KcHhR6Qj+VQQogKeaGbJ1yes39lfmTrCd5JUgXMXJwE2nrZsCBDXM4B3I4shMbE0vLvJVkHXxLV0ApVQvA==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-find-replace@0.25.1': - resolution: {integrity: sha512-AdpmCl1Y7hqSMgTvCI9NOCjcAS+mutPCkmVyxoNHNtdguob6hbP0FQxcOkHd2feSLptcK/EvRZu3BfquMqAGmw==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-formula-ui@0.25.1': - resolution: {integrity: sha512-iMDZZutB5mcwBGn1kL2QfsQoiOJKJhyLtzp3oRv0bEhbScGDPyoADuAoOCQjDnnUKTp3cTAvc0ACn3Gj3vOvRQ==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-formula@0.25.1': - resolution: {integrity: sha512-5zDcLfzAhO0H1gwYeCY0JYgZIxcKAhA02jS0wXRpOa+dVWs2/zcKy4CjDCbINIsA/aLrICAd9O8Q3VbU/G3rEg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-graphics@0.25.1': - resolution: {integrity: sha512-TBdA+5ab2ZiX+FUhdx4vA+h12uAKk0TIEOJurXSOk42NC3ZJcyOIbl5snY8dDTzfdPh2SOoQmsq1hzXmZoFKTg==} - - '@univerjs/sheets-hyper-link-ui@0.25.1': - resolution: {integrity: sha512-grb7WsYlbzKOzZeEXKYv1IkrdwXcykpfWYKix6MNdAsg9EIIm2N85JAxdmz/gUO4Skh5YW8sfUiQx/1IKe/W7A==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-hyper-link@0.25.1': - resolution: {integrity: sha512-hr9YkCeGZzy1ZStbRoyt3zS0HUa2PxzfeasaTQyAf0o82Patq2jyKVSplp/iOOMUTgtYRZHv+NntQ2/dm/c9vA==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-note-ui@0.25.1': - resolution: {integrity: sha512-TSYVH9WEv+5p9lwwXXWKXJuG2G2Vb9ZcB/ptLUKR48XE3AB4aNUr+Nw01E57aYp0/Q64a5pmYZwlhTWalZQi7Q==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-note@0.25.1': - resolution: {integrity: sha512-mGKYGJwI3HB4ySRlOyqFwZTzYP7IYdedt/rF6OIQCwHSiEqliokRVqSh5zcHw46HhbBc36BqnBLImXGr/ib9pQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-numfmt-ui@0.25.1': - resolution: {integrity: sha512-L8MzmnjYiWq/M/X+lv69ryOqiS0WTazv4CYTv10hO5mqmHsGVDx59ECkLhd3L8gN4CM9Wet7eU1Qf27H5i8RhA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-numfmt@0.25.1': - resolution: {integrity: sha512-yLuOfgFa8t+uDnBvCs+PjCjYBq6iJ+tIUEj7ana5YCnxUdKmDed4M8woSffgDRaMXcV8sY9SOexA2iwMLo9ioQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-sort-ui@0.25.1': - resolution: {integrity: sha512-KJPaD5Y+WqrlZncJYDggVhBG9T0DwpT00LNESZYdv55lbKUbH2Lc/ilUQ7xpVkkUml4UZtr/s/JB22m5++Gj6g==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-sort@0.25.1': - resolution: {integrity: sha512-xVKhNrdT5q7v3HIwx0Jp9gKkZWIEq/wQAIMPZkRZdtkGSMJ3wSvCXrWiiEalP2YOccfzxKzT58IiuqUpSgu82Q==} - - '@univerjs/sheets-table-ui@0.25.1': - resolution: {integrity: sha512-NufPBswZi8TtfxazeY313/MBHBP8sSM1cMD7AFMYeM+1wag6440qj3NRLBes8NmwVuZ1bdiWo1wleiAYjKl42Q==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-table@0.25.1': - resolution: {integrity: sha512-439D8+q1E7EotM2W02yREi67ZK0OBmJwJ0/0LIIn4h1+C2MbJtZfrn1Q9AKE4BCQF8jBTrLuVKiyGjdhtcVQFQ==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-thread-comment-ui@0.25.1': - resolution: {integrity: sha512-jjyGo7QRY/rLjlvV8wrJyUzH+FjAuO2SJojoRlR8U1zfyQGF7LDhCIkhmf5366hPUqvkzfz2Hkk+CAEp5zeg5g==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets-thread-comment@0.25.1': - resolution: {integrity: sha512-Kw3V/hAXJwx0TpJ/JewwPgwcSZhXEbhjz4ocREY2KzxPzIqzgNOGz5ZgyY1F0HwvQgr5ZpPXMFVAQpUenKcidg==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/sheets-ui@0.25.1': - resolution: {integrity: sha512-iCzUfuVc78iRYXCs4kzJKb7wdFQ05irvxxvMeeu5OfOMRef1z1Hr8fvChXfOfjDv6HzQ4nfTO7iGNzD59eE78g==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/sheets@0.25.1': - resolution: {integrity: sha512-VcHtHgCOStJZO4XLstvV6oWHxBwhGCpArKJaEe22EmKNY1lfsibOrvwIjEW/Xpm9Ago9ybTvmuIvByrCd60pew==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/telemetry@0.25.1': - resolution: {integrity: sha512-eAGiFs2OUAIBrC0g3gASRAvr7++KkmnPS49yAoa95gd6TW8R8o0YASOXyrahysMhDriBXmFGN7hHNLXRo9UlGw==} - - '@univerjs/themes@0.25.1': - resolution: {integrity: sha512-21iH3Z3Ai9pRV+l2weuHJu2V8XB3T5Hr8VEPlOyctFbqOJMTNRC5peYJdn7Ra5kMdO+Wa7uWsZf6qurHouswmg==} - - '@univerjs/thread-comment-ui@0.25.1': - resolution: {integrity: sha512-cCTPxMLjSzdLRXmdfFv4LtjBZFDG5VeCnqm6o9+XYPIVbZ7UAYRKGPOzv1204lDJu1XJgYgTnMJr4Ms2Yh2bUg==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - - '@univerjs/thread-comment@0.25.1': - resolution: {integrity: sha512-TL7Pj5oCA0rD+EjmRIjoTG7tHgRVIBewTL27Ow79JkbJDUAMqaxGAyZc1BpuIM/Fvjp6+hcPO+9FribwRgj+6A==} - peerDependencies: - rxjs: '>=7.0.0' - - '@univerjs/ui@0.25.1': - resolution: {integrity: sha512-DapFtWHIcidxE+vfueIL/sDQeVnf5MRY4MzrK1ag+VHuN6/bU4jwFXDEmyGi1otL03cYg8PFJja2lkV73cbYJA==} - peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - rxjs: '>=7.0.0' - '@vitest/expect@4.1.10': resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} @@ -2129,14 +1178,6 @@ packages: '@vitest/utils@4.1.10': resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} - '@wendellhu/redi@1.1.1': - resolution: {integrity: sha512-y2fuAgHJ2n8sI8Pe/1QtAuPQ6ZbZ9/Dn3uVQI8cctVqLZzp/0OpLM7DSMOU6vmGYXNsIQwsquR91WcxZ4jrRvA==} - peerDependencies: - react: '>=16.8.0' - peerDependenciesMeta: - react: - optional: true - '@xterm/addon-fit@0.10.0': resolution: {integrity: sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==} peerDependencies: @@ -2280,21 +1321,9 @@ packages: '@yuku-toolchain/types@0.8.5': resolution: {integrity: sha512-ELNzrhwfi9+VCTaj6QcLCb5MlUK6pmVqPqH8bBmer1FTHvgEITnpwB73L/Wx5KKPPVWAokfeeU9V2rJy/9kMlg==} - adler-32@1.3.1: - resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} - engines: {node: '>=0.8'} - anser@2.3.5: resolution: {integrity: sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==} - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.0.0: - resolution: {integrity: sha512-8zjUtFJ3db/QoPXuuEMloS2AUf79/yeyttJ7Abr3hteopJu9HK8vsgGviGUMq+zyA6cZZO6gAyZoMTF6TgaEjA==} - engines: {node: '>=8'} - ansis@4.3.1: resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} @@ -2302,17 +1331,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - async-lock@1.4.1: - resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} - bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -2323,10 +1345,6 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - cfb@1.2.2: - resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} - engines: {node: '>=0.8'} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -2340,35 +1358,10 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - cjk-regex@3.4.0: - resolution: {integrity: sha512-m+gbmlIP6gAG7tDvo2kpeSPAz/uh5wY5/zx10ymjdpbbiTHNTNoYnP2lCiyqtmbLxwhEdq8/lsVbsy4GTc9oUw==} - engines: {node: '>=16'} - - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - codepage@1.15.0: - resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} - engines: {node: '>=0.8'} - - collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2391,17 +1384,9 @@ packages: '@cordisjs/plugin-loader': optional: true - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cosmokit@1.8.1: resolution: {integrity: sha512-PDBv4l90xZKrUsZ0vtoycgZpO/j4iFsqJXrAxsyBDsnQRI7ZMJXIjgDJsKNjd5L8jnVnnlrDCdhkFbTncgCVjQ==} - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - crelt@1.0.7: resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} @@ -2442,18 +1427,9 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - docx-preview@0.4.0: - resolution: {integrity: sha512-OdKtE/uj3M4RfGarLkGjahUzRg8/kBp0Sraj1r1NAY1tp/sTpHOBqDrzVf9onMBt9vxP6SdQ6bpLCUCsFwjgcA==} - - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dts-resolver@3.0.0: resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} engines: {node: ^22.18.0 || >=24.0.0} @@ -2463,12 +1439,6 @@ packages: oxc-resolver: optional: true - echarts@6.1.0: - resolution: {integrity: sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - empathic@2.0.1: resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} engines: {node: '>=14'} @@ -2480,10 +1450,6 @@ packages: es-module-lexer@2.3.1: resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2495,9 +1461,6 @@ packages: resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2507,32 +1470,14 @@ packages: picomatch: optional: true - fflate@0.4.9: - resolution: {integrity: sha512-zdxgIEddhfsyCaWpJ2SdXEP8ZMrKJ6+5jl4OupODcywU0IhRk6gdXuVGcPICyfx2H97hVK7xmJtRLPjkxAX8Vw==} - fflate@0.8.3: resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} - frac@1.1.2: - resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} - engines: {node: '>=0.8'} - - franc-min@6.2.0: - resolution: {integrity: sha512-1uDIEUSlUZgvJa2AKYR/dmJC66v/PvGQ9mWfI9nOr/kPpMFyvswK0gPXOwpYJYiYD008PpHLkGfG58SPjQJFxw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - get-tsconfig@5.0.0-beta.5: resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} engines: {node: '>=20.20.0'} @@ -2553,9 +1498,6 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immer@10.1.1: resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} @@ -2563,19 +1505,9 @@ packages: resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==} engines: {node: ^22.18.0 || >=24.0.0} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - js-tokens@3.0.0: resolution: {integrity: sha512-poXEQHPMmTrYZuJgNRll2sbc3kJsSU1m/g1Q93IE6txNj3p6xOOOmdj1G/zCVGawYSPzTkSoWGg1otqbeqKJeg==} @@ -2592,22 +1524,10 @@ packages: canvas: optional: true - jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - katex@0.16.47: resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} hasBin: true - kdbush@4.1.0: - resolution: {integrity: sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==} - - lie@3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} - - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lightningcss-android-arm64@1.33.0: resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} engines: {node: '>= 12.0.0'} @@ -2682,18 +1602,6 @@ packages: resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} engines: {node: '>= 12.0.0'} - localforage@1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - - lodash-es@4.18.1: - resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -2846,19 +1754,11 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - n-gram@2.0.2: - resolution: {integrity: sha512-S24aGsn+HLBxUGVAUFOwGpKs7LBcG4RudKU//eWzt/mQ97/NMKQxDWHyHx63UNWk/OOdihgmzoETn1tf5nQDzQ==} - 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} hasBin: true - nanoid@5.1.11: - resolution: {integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==} - engines: {node: ^18 || >=20} - hasBin: true - node-addon-api@7.1.0: resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} engines: {node: ^16 || ^18 || >= 20} @@ -2866,13 +1766,6 @@ packages: node-pty@1.1.0: resolution: {integrity: sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg==} - numfmt@3.2.6: - resolution: {integrity: sha512-MXc2KP3j+2usdHTY5/ENUc2S+3BRF/cJqnR6RHeq6LBqKoIZOAQ62DQw974nnaZOencbfkmkTPyTmMnlkCpjzg==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - obug@2.1.4: resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} engines: {node: '>=12.20.0'} @@ -2883,19 +1776,6 @@ packages: oniguruma-to-es@4.3.6: resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} - opentype.js@2.0.0: - resolution: {integrity: sha512-kCyjv6xdDY1W/jLWZ/L3QhhTlKUqDZMQ5+Jdlw12b3dXkKNpYBqqlMMj0YDQPShWFTMwgZI1hG14kN3XUDSg/A==} - hasBin: true - - ot-json1@1.0.2: - resolution: {integrity: sha512-IhxkqVWQqlkWULoi/Q2AdzKk0N5vQRbUMUwubFXFCPcY4TsOZjmp2YKrk0/z1TeiECPadWEK060sdFdQ3Grokg==} - - ot-text-unicode@4.0.0: - resolution: {integrity: sha512-W7ZLU8QXesY2wagYFv47zErXud3E93FGImmSGJsQnBzE+idcPPyo2u2KMilIrTwBh4pbCizy71qRjmmV6aDhcQ==} - - pako@1.0.2: - resolution: {integrity: sha512-qCaDHl8pk5JSbz5k1Bi5zTZf430DUuV13pmcFEHHan4fW++WIwm2HXUirpzfciBRyFUN+eeZW11bfIM/Y4Zeog==} - parse5@8.0.1: resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} @@ -2913,19 +1793,9 @@ packages: resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@7.2.0: resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} - protobufjs@7.6.5: - resolution: {integrity: sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==} - engines: {node: '>=12.0.0'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2933,63 +1803,15 @@ packages: quansync@1.0.0: resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - quickselect@3.0.0: - resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} - - rbush@4.0.1: - resolution: {integrity: sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==} - react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - react-remove-scroll@2.7.2: - resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -2999,14 +1821,6 @@ packages: regex@6.1.0: resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - regexp-util@2.0.3: - resolution: {integrity: sha512-GP6h9OgJmhAZpb3dbNbXTfRWVnGcoMhWRZv/HxgM4/qCVqs1P9ukQdYxaUhjWBSAs9oJ/uPXUUvGT1VMe0Bs0Q==} - engines: {node: '>=16'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -3041,9 +1855,6 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -3054,9 +1865,6 @@ packages: schemastery@3.18.0: resolution: {integrity: sha512-Jw2uxjoyyqc/yeurmChUEc/jbi8GsrdXV/KmqRUDZXJAXAmrJiPsz8vKa17l/VckyzljHZ9oGaul443CQiXxtA==} - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - shiki@4.4.3: resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} engines: {node: '>=20'} @@ -3064,16 +1872,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - sonner@2.0.8: - resolution: {integrity: sha512-UM/ByIoFra8yzV75n1o0Puu0bw5U/9UNnDacrJNspekBewIfsQ3D6ez1nvlWpt7aTsO6rujQtifBpycwIivqlg==} - peerDependencies: - '@types/react': ^18.0.0 || ^19.0.0 - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3081,39 +1879,21 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - ssf@0.11.2: - resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} - engines: {node: '>=0.8'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - style-mod@4.1.3: resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -3148,9 +1928,6 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - trigram-utils@2.0.1: - resolution: {integrity: sha512-nfWIXHEaB+HdyslAfMxSqWKDdmqY9I32jS7GnqpdWQnLH89r6A5sdk3fDVYqGAZ0CrT8ovAFSAo6HRiWcWNIGQ==} - trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -3188,9 +1965,6 @@ packages: unrun: optional: true - tslib@2.3.0: - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3209,13 +1983,6 @@ packages: resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} engines: {node: '>=20.18.1'} - unicode-regex@4.2.0: - resolution: {integrity: sha512-fEYz7CCnvHDAdrb8OYAP7qlQCWzXBO5cHXQ3XI+HoZaBpiAwyC6b2nixMGl91yrDYEIRm7NDskgTvnLZ7mqrKQ==} - engines: {node: '>=16'} - - unicount@1.1.0: - resolution: {integrity: sha512-RlwWt1ywVW4WErPGAVHw/rIuJ2+MxvTME0siJ6lk9zBhpDfExDbspe6SRlWT3qU6AucNjotPl9qAJRVjP7guCQ==} - unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -3234,38 +2001,11 @@ packages: unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@14.0.1: - resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} - hasBin: true - verkit@0.3.2: resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==} engines: {node: '>=18.12.0'} @@ -3384,18 +2124,6 @@ packages: engines: {node: '>=8'} hasBin: true - wmf@1.0.2: - resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} - engines: {node: '>=0.8'} - - word@0.3.0: - resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} - engines: {node: '>=0.8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - ws@8.21.3: resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} @@ -3408,11 +2136,6 @@ packages: utf-8-validate: optional: true - xlsx@0.18.5: - resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} - engines: {node: '>=0.8'} - hasBin: true - xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -3424,18 +2147,6 @@ packages: resolution: {integrity: sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==} deprecated: This package is now deprecated. Move to @xterm/xterm instead. - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.3: - resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} - engines: {node: '>=12'} - yuku-ast@0.8.5: resolution: {integrity: sha512-Ez2CI2BnPK/if0tVI7jB9UUDSNibcChjJDEPEKuWPJNRkbvzSoAQrSqpKtdzl8qTPp4ftVb87f/jx5HIKOieQw==} @@ -3448,9 +2159,6 @@ packages: zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} - zrender@6.1.0: - resolution: {integrity: sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==} - zustand@4.4.7: resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==} engines: {node: '>=12.7.0'} @@ -3471,11 +2179,6 @@ packages: snapshots: - '@aiden0z/pptx-renderer@1.2.4': - dependencies: - echarts: 6.1.0 - jszip: 3.10.1 - '@asamuzakjp/css-color@5.1.11': dependencies: '@asamuzakjp/generational-cache': 1.0.1 @@ -3496,8 +2199,6 @@ snapshots: '@asamuzakjp/nwsapi@2.3.9': {} - '@babel/runtime@7.29.7': {} - '@bramus/specificity@2.4.2': dependencies: css-tree: 3.2.1 @@ -4387,41 +3088,8 @@ snapshots: optionalDependencies: '@noble/hashes': 2.2.0 - '@flatten-js/interval-tree@1.1.3': {} - - '@floating-ui/core@1.8.0': - dependencies: - '@floating-ui/utils': 0.2.12 - - '@floating-ui/dom@1.8.0': - dependencies: - '@floating-ui/core': 1.8.0 - '@floating-ui/utils': 0.2.12 - - '@floating-ui/react-dom@2.1.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@floating-ui/dom': 1.8.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@floating-ui/utils@0.2.12': {} - - '@grpc/grpc-js@1.14.4': - dependencies: - '@grpc/proto-loader': 0.8.1 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.8.1': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.6.5 - yargs: 17.7.3 - '@jridgewell/sourcemap-codec@1.5.5': {} - '@js-sdsl/ordered-map@4.4.2': {} - '@lezer/common@1.5.2': {} '@lezer/cpp@1.1.6': @@ -4511,351 +3179,15 @@ snapshots: '@marijn/find-cluster-break@1.0.3': {} - '@noble/ciphers@2.3.0': {} - - '@noble/ed25519@3.1.0': {} - - '@noble/hashes@2.2.0': {} + '@noble/hashes@2.2.0': + optional: true '@oxc-project/types@0.144.0': {} - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.5': {} - - '@protobufjs/eventemitter@1.1.1': {} - - '@protobufjs/fetch@1.1.1': - dependencies: - '@protobufjs/aspromise': 1.1.2 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.2': {} - '@quansync/fs@1.0.0': dependencies: quansync: 1.0.0 - '@radix-ui/primitive@1.1.7': {} - - '@radix-ui/react-arrow@1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-collection@1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-slot': 1.3.3(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-compose-refs@1.1.5(@types/react@18.3.31)(react@18.2.0)': - dependencies: - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-context@1.2.2(@types/react@18.3.31)(react@18.2.0)': - dependencies: - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-dialog@1.1.23(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-focus-guards': 1.1.6(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.1.16(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-id': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-portal': 1.1.17(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-presence': 1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-slot': 1.3.3(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - aria-hidden: 1.2.6 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.7.2(@types/react@18.3.31)(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-direction@1.1.4(@types/react@18.3.31)(react@18.2.0)': - dependencies: - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-dismissable-layer@1.1.19(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-effect-event': 0.0.5(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-dropdown-menu@2.1.24(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-id': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-menu': 2.1.24(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-focus-guards@1.1.6(@types/react@18.3.31)(react@18.2.0)': - dependencies: - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-focus-scope@1.1.16(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-hover-card@1.1.23(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-popper': 1.3.7(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-portal': 1.1.17(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-presence': 1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-id@1.1.4(@types/react@18.3.31)(react@18.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-menu@2.1.24(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-collection': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-direction': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-focus-guards': 1.1.6(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.1.16(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-id': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-popper': 1.3.7(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-portal': 1.1.17(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-presence': 1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-roving-focus': 1.1.19(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-slot': 1.3.3(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@18.3.31)(react@18.2.0) - aria-hidden: 1.2.6 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.7.2(@types/react@18.3.31)(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-popover@1.1.23(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-focus-guards': 1.1.6(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.1.16(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-id': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-popper': 1.3.7(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-portal': 1.1.17(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-presence': 1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-slot': 1.3.3(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@18.3.31)(react@18.2.0) - aria-hidden: 1.2.6 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.7.2(@types/react@18.3.31)(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-popper@1.3.7(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@floating-ui/react-dom': 2.1.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-arrow': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-rect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-size': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/rect': 1.1.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-portal@1.1.17(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-presence@1.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-primitive@2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-slot': 1.3.3(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-roving-focus@1.1.19(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-collection': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-context': 1.2.2(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-direction': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-id': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-is-hydrated': 0.1.3(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-separator@1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.10(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-slot@1.3.3(@types/react@18.3.31)(react@18.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.5(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-use-callback-ref@1.1.4(@types/react@18.3.31)(react@18.2.0)': - dependencies: - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-use-controllable-state@1.2.6(@types/react@18.3.31)(react@18.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.7 - '@radix-ui/react-use-effect-event': 0.0.5(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-use-effect-event@0.0.5(@types/react@18.3.31)(react@18.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-use-is-hydrated@0.1.3(@types/react@18.3.31)(react@18.2.0)': - dependencies: - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-use-layout-effect@1.1.4(@types/react@18.3.31)(react@18.2.0)': - dependencies: - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-use-rect@1.1.4(@types/react@18.3.31)(react@18.2.0)': - dependencies: - '@radix-ui/rect': 1.1.3 - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/react-use-size@1.1.4(@types/react@18.3.31)(react@18.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@18.3.31)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.3.31 - - '@radix-ui/rect@1.1.3': {} - '@rolldown/binding-android-arm64@1.2.4': optional: true @@ -4990,1416 +3322,6 @@ snapshots: '@ungap/structured-clone@1.3.3': {} - '@univerjs-pro/collaboration-client-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/collaboration-client@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@noble/ciphers': 2.3.0 - '@univerjs-pro/collaboration': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/telemetry': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs-pro/collaboration@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-outline': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-conditional-formatting': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - uuid: 14.0.1 - transitivePeerDependencies: - - react - - rxjs - - '@univerjs-pro/docs-exchange-client@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/exchange-client': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react - - react-dom - - rxjs - - '@univerjs-pro/docs-print@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/print': 0.25.1 - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react - - react-dom - - rxjs - - '@univerjs-pro/edit-history-loader@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/edit-history-viewer': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-chart': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-chart-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-pivot': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-shape': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-shape-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-sparkline': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-sparkline-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-conditional-formatting': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-conditional-formatting-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-hyper-link-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-numfmt': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-table': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react - - react-dom - - '@univerjs-pro/edit-history-viewer@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-chart': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-pivot': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-shape': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-sparkline': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-conditional-formatting': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-table': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/engine-chart@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs-pro/engine-formula@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - react - - rxjs - - '@univerjs-pro/engine-pivot@0.25.1': {} - - '@univerjs-pro/engine-shape@0.25.1': {} - - '@univerjs-pro/exchange-client@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - fflate: 0.4.9 - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/license@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@noble/ed25519': 3.1.0 - '@noble/hashes': 2.2.0 - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs-pro/print@0.25.1': {} - - '@univerjs-pro/sheets-chart-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/engine-chart': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-chart': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/sheets-chart@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/engine-chart': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs-pro/sheets-exchange-client@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/exchange-client': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react - - react-dom - - rxjs - - '@univerjs-pro/sheets-outline-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/sheets-outline': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/sheets-outline@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs-pro/sheets-pivot-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/engine-pivot': 0.25.1 - '@univerjs-pro/sheets-pivot': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/sheets-pivot@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/engine-pivot': 0.25.1 - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs-pro/sheets-print@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration-client': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/print': 0.25.1 - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/sheets-shape-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/engine-shape': 0.25.1 - '@univerjs-pro/sheets-shape': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/sheets-shape@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/engine-shape': 0.25.1 - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - react - - rxjs - - '@univerjs-pro/sheets-sparkline-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/sheets-sparkline': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-graphics': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs-pro/sheets-sparkline@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs-pro/thread-comment-datasource@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration-client': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react - - react-dom - - '@univerjs/core@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/protocol': 0.25.1 - '@univerjs/themes': 0.25.1 - '@wendellhu/redi': 1.1.1(react@18.2.0) - async-lock: 1.4.1 - fast-diff: 1.3.0 - kdbush: 4.1.0 - lodash-es: 4.18.1 - nanoid: 5.1.11 - numfmt: 3.2.6 - ot-json1: 1.0.2 - rbush: 4.0.1 - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/data-validation@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/design@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@radix-ui/react-dialog': 1.1.23(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-direction': 1.1.4(@types/react@18.3.31)(react@18.2.0) - '@radix-ui/react-dropdown-menu': 2.1.24(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-hover-card': 1.1.23(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-popover': 1.1.23(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-separator': 1.1.15(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-slot': 1.3.3(@types/react@18.3.31)(react@18.2.0) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - class-variance-authority: 0.7.1 - clsx: 2.1.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - sonner: 2.0.8(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - tailwind-merge: 2.6.0 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/docs-drawing-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/docs-drawing@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - react - - rxjs - - '@univerjs/docs-hyper-link-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/docs-hyper-link@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - react - - rxjs - - '@univerjs/docs-thread-comment-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/docs-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/docs@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/drawing-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/drawing@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - ot-json1: 1.0.2 - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/engine-formula@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@flatten-js/interval-tree': 1.1.3 - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - decimal.js: 10.6.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/engine-render@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@floating-ui/dom': 1.8.0 - '@floating-ui/utils': 0.2.12 - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - cjk-regex: 3.4.0 - franc-min: 6.2.0 - opentype.js: 2.0.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/find-replace@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/icons@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - '@univerjs/network@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/preset-docs-advanced@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/docs-exchange-client': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/docs-print': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/exchange-client': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-docs-collaboration@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-docs-core@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-docs-drawing@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/docs-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-docs-hyper-link@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/docs-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-hyper-link-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-docs-node-core@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc-node': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/preset-docs-thread-comment@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/docs-thread-comment-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-advanced@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/engine-chart': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/engine-shape': 0.25.1 - '@univerjs-pro/exchange-client': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/license': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-chart': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-chart-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-exchange-client': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-outline': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-outline-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-pivot': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-pivot-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-print': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-shape': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-shape-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-sparkline': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/sheets-sparkline-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-graphics': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-collaboration@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs-pro/collaboration': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/collaboration-client-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/edit-history-loader': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/edit-history-viewer': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs-pro/thread-comment-datasource': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-advanced': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-conditional-formatting@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/sheets-conditional-formatting': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-conditional-formatting-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-core@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/network': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-numfmt': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-numfmt-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-data-validation@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-drawing@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/docs-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-filter@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/sheets-filter': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-find-replace@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/find-replace': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-find-replace': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-hyper-link@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/sheets-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-hyper-link-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-node-core@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc-node': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-numfmt': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-sort': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/preset-sheets-note@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/sheets-note': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-note-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-sort@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/sheets-sort': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-sort-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-table@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/sheets-table': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-table-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/preset-sheets-thread-comment@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/sheets-thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-thread-comment-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/presets@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-docs-advanced': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-docs-collaboration': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-docs-core': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-docs-drawing': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-docs-hyper-link': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-docs-node-core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-docs-thread-comment': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-advanced': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-collaboration': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-conditional-formatting': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-core': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-data-validation': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-drawing': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-filter': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-find-replace': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-hyper-link': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-node-core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-note': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-sort': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-table': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/preset-sheets-thread-comment': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - '@univerjs/protocol@0.25.1': - dependencies: - '@grpc/grpc-js': 1.14.4 - - '@univerjs/rpc-node@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/rpc@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-conditional-formatting-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-conditional-formatting': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-conditional-formatting@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-data-validation-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-numfmt': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-data-validation@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-drawing-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-drawing@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/drawing': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - react - - rxjs - - '@univerjs/sheets-filter-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-filter': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-filter@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-find-replace@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/find-replace': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react - - react-dom - - '@univerjs/sheets-formula-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-formula@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-graphics@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react - - react-dom - - rxjs - - '@univerjs/sheets-hyper-link-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-data-validation': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-hyper-link': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-hyper-link@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-note-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-note': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-note@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-numfmt-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-numfmt': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-numfmt@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-sort-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-sort': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-sort@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - react - - rxjs - - '@univerjs/sheets-table-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-formula-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-sort': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-table': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-table@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-thread-comment-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets-thread-comment@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/sheets-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/protocol': 0.25.1 - '@univerjs/sheets': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/telemetry': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/sheets@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-formula': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/protocol': 0.25.1 - '@univerjs/rpc': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/telemetry@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - transitivePeerDependencies: - - react - - rxjs - - '@univerjs/themes@0.25.1': {} - - '@univerjs/thread-comment-ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/docs-ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/thread-comment': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/ui': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2) - react: 18.2.0 - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - '@univerjs/thread-comment@0.25.1(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - rxjs: 7.8.2 - transitivePeerDependencies: - - react - - '@univerjs/ui@0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rxjs@7.8.2)': - dependencies: - '@univerjs/core': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/design': 0.25.1(@types/react-dom@18.3.1)(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@univerjs/engine-render': 0.25.1(react@18.2.0)(rxjs@7.8.2) - '@univerjs/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@wendellhu/redi': 1.1.1(react@18.2.0) - localforage: 1.10.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - rxjs: 7.8.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 @@ -6441,10 +3363,6 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.1 - '@wendellhu/redi@1.1.1(react@18.2.0)': - optionalDependencies: - react: 18.2.0 - '@xterm/addon-fit@0.10.0(@xterm/xterm@5.4.0)': dependencies: '@xterm/xterm': 5.4.0 @@ -6525,28 +3443,14 @@ snapshots: '@yuku-toolchain/types@0.8.5': {} - adler-32@1.3.1: {} - anser@2.3.5: {} - ansi-regex@5.0.1: {} - - ansi-styles@4.0.0: - dependencies: - color-convert: 2.0.1 - ansis@4.3.1: {} argparse@2.0.1: {} - aria-hidden@1.2.6: - dependencies: - tslib: 2.8.1 - assertion-error@2.0.1: {} - async-lock@1.4.1: {} - bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 @@ -6555,11 +3459,6 @@ snapshots: ccount@2.0.1: {} - cfb@1.2.2: - dependencies: - adler-32: 1.3.1 - crc-32: 1.2.2 - chai@6.2.2: {} character-entities-html4@2.1.0: {} @@ -6568,33 +3467,8 @@ snapshots: character-entities@2.0.2: {} - cjk-regex@3.4.0: - dependencies: - regexp-util: 2.0.3 - unicode-regex: 4.2.0 - - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - clsx@2.1.1: {} - codepage@1.15.0: {} - - collapse-white-space@2.1.0: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - comma-separated-tokens@2.0.3: {} commander@8.3.0: {} @@ -6608,12 +3482,8 @@ snapshots: optionalDependencies: '@cordisjs/plugin-loader': 1.0.0-rc.5(cordis@4.0.0-rc.8) - core-util-is@1.0.3: {} - cosmokit@1.8.1: {} - crc-32@1.2.2: {} - crelt@1.0.7: {} css-tree@3.2.1: @@ -6646,38 +3516,18 @@ snapshots: detect-libc@2.1.2: {} - detect-node-es@1.1.0: {} - devlop@1.1.0: dependencies: dequal: 2.0.3 - docx-preview@0.4.0: - dependencies: - jszip: 3.10.1 - - dom-helpers@5.2.1: - dependencies: - '@babel/runtime': 7.29.7 - csstype: 3.2.3 - dts-resolver@3.0.0: {} - echarts@6.1.0: - dependencies: - tslib: 2.3.0 - zrender: 6.1.0 - - emoji-regex@8.0.0: {} - empathic@2.0.1: {} entities@8.0.0: {} es-module-lexer@2.3.1: {} - escalade@3.2.0: {} - escape-string-regexp@5.0.0: {} estree-walker@3.0.3: @@ -6686,29 +3536,15 @@ snapshots: expect-type@1.4.0: {} - fast-diff@1.3.0: {} - fdir@6.5.0(picomatch@4.0.5): optionalDependencies: picomatch: 4.0.5 - fflate@0.4.9: {} - fflate@0.8.3: {} - frac@1.1.2: {} - - franc-min@6.2.0: - dependencies: - trigram-utils: 2.0.1 - fsevents@2.3.3: optional: true - get-caller-file@2.0.5: {} - - get-nonce@1.0.1: {} - get-tsconfig@5.0.0-beta.5: dependencies: resolve-pkg-maps: 1.0.0 @@ -6741,20 +3577,12 @@ snapshots: html-void-elements@3.0.0: {} - immediate@3.0.6: {} - immer@10.1.1: {} import-without-cache@0.4.0: {} - inherits@2.0.4: {} - - is-fullwidth-code-point@3.0.0: {} - is-potential-custom-element-name@1.0.1: {} - isarray@1.0.0: {} - js-tokens@3.0.0: {} js-yaml@4.3.1: @@ -6787,27 +3615,10 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - jszip@3.10.1: - dependencies: - lie: 3.3.0 - pako: 1.0.2 - readable-stream: 2.3.8 - setimmediate: 1.0.5 - katex@0.16.47: dependencies: commander: 8.3.0 - kdbush@4.1.0: {} - - lie@3.1.1: - dependencies: - immediate: 3.0.6 - - lie@3.3.0: - dependencies: - immediate: 3.0.6 - lightningcss-android-arm64@1.33.0: optional: true @@ -6857,16 +3668,6 @@ snapshots: lightningcss-win32-arm64-msvc: 1.33.0 lightningcss-win32-x64-msvc: 1.33.0 - localforage@1.10.0: - dependencies: - lie: 3.1.1 - - lodash-es@4.18.1: {} - - lodash.camelcase@4.3.0: {} - - long@5.3.2: {} - longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -7222,22 +4023,14 @@ snapshots: ms@2.1.3: {} - n-gram@2.0.2: {} - nanoid@3.3.18: {} - nanoid@5.1.11: {} - node-addon-api@7.1.0: {} node-pty@1.1.0: dependencies: node-addon-api: 7.1.0 - numfmt@3.2.6: {} - - object-assign@4.1.1: {} - obug@2.1.4: {} oniguruma-parser@0.12.2: {} @@ -7248,18 +4041,6 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 - opentype.js@2.0.0: {} - - ot-json1@1.0.2: - dependencies: - ot-text-unicode: 4.0.0 - - ot-text-unicode@4.0.0: - dependencies: - unicount: 1.1.0 - - pako@1.0.2: {} - parse5@8.0.1: dependencies: entities: 8.0.0 @@ -7276,98 +4057,22 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - process-nextick-args@2.0.1: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - property-information@7.2.0: {} - protobufjs@7.6.5: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.5 - '@protobufjs/eventemitter': 1.1.1 - '@protobufjs/fetch': 1.1.1 - '@protobufjs/float': 1.0.2 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.2 - '@types/node': 24.13.3 - long: 5.3.2 - punycode@2.3.1: {} quansync@1.0.0: {} - quickselect@3.0.0: {} - - rbush@4.0.1: - dependencies: - quickselect: 3.0.0 - react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - react-is@16.13.1: {} - - react-remove-scroll-bar@2.3.8(@types/react@18.3.31)(react@18.2.0): - dependencies: - react: 18.2.0 - react-style-singleton: 2.2.3(@types/react@18.3.31)(react@18.2.0) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.31 - - react-remove-scroll@2.7.2(@types/react@18.3.31)(react@18.2.0): - dependencies: - react: 18.2.0 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.31)(react@18.2.0) - react-style-singleton: 2.2.3(@types/react@18.3.31)(react@18.2.0) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.31)(react@18.2.0) - use-sidecar: 1.1.3(@types/react@18.3.31)(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - - react-style-singleton@2.2.3(@types/react@18.3.31)(react@18.2.0): - dependencies: - get-nonce: 1.0.1 - react: 18.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.31 - - react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@babel/runtime': 7.29.7 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react@18.2.0: dependencies: loose-envify: 1.4.0 - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -7378,10 +4083,6 @@ snapshots: dependencies: regex-utilities: 2.3.0 - regexp-util@2.0.3: {} - - require-directory@2.1.1: {} - require-from-string@2.0.2: {} resolve-pkg-maps@1.0.0: {} @@ -7424,8 +4125,6 @@ snapshots: dependencies: tslib: 2.8.1 - safe-buffer@5.1.2: {} - saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -7439,8 +4138,6 @@ snapshots: '@standard-schema/spec': 1.1.0 cosmokit: 1.8.1 - setimmediate@1.0.5: {} - shiki@4.4.3: dependencies: '@shikijs/core': 4.4.3 @@ -7454,50 +4151,23 @@ snapshots: siginfo@2.0.0: {} - sonner@2.0.8(@types/react@18.3.31)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.3.31 - source-map-js@1.2.1: {} space-separated-tokens@2.0.2: {} - ssf@0.11.2: - dependencies: - frac: 1.1.2 - stackback@0.0.2: {} std-env@4.2.0: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - style-mod@4.1.3: {} symbol-tree@3.2.4: {} - tailwind-merge@2.6.0: {} - tinybench@2.9.0: {} tinyexec@1.3.0: {} @@ -7525,11 +4195,6 @@ snapshots: tree-kill@1.2.2: {} - trigram-utils@2.0.1: - dependencies: - collapse-white-space: 2.1.0 - n-gram: 2.0.2 - trim-lines@3.0.1: {} tsdown@0.22.14(typescript@5.6.2): @@ -7557,8 +4222,6 @@ snapshots: - oxc-resolver - vue-tsc - tslib@2.3.0: {} - tslib@2.8.1: {} typescript@5.6.2: {} @@ -7572,12 +4235,6 @@ snapshots: undici@7.29.0: {} - unicode-regex@4.2.0: - dependencies: - regexp-util: 2.0.3 - - unicount@1.1.0: {} - unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -7606,29 +4263,10 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - use-callback-ref@1.3.3(@types/react@18.3.31)(react@18.2.0): - dependencies: - react: 18.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.31 - - use-sidecar@1.1.3(@types/react@18.3.31)(react@18.2.0): - dependencies: - detect-node-es: 1.1.0 - react: 18.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.31 - use-sync-external-store@1.2.0(react@18.2.0): dependencies: react: 18.2.0 - util-deprecate@1.0.2: {} - - uuid@14.0.1: {} - verkit@0.3.2: {} vfile-message@4.0.3: @@ -7703,48 +4341,14 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - wmf@1.0.2: {} - - word@0.3.0: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - ws@8.21.3: {} - xlsx@0.18.5: - dependencies: - adler-32: 1.3.1 - cfb: 1.2.2 - codepage: 1.15.0 - crc-32: 1.2.2 - ssf: 0.11.2 - wmf: 1.0.2 - word: 0.3.0 - xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} xterm@5.3.0: {} - y18n@5.0.8: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.3: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yuku-ast@0.8.5: dependencies: '@yuku-toolchain/types': 0.8.5 @@ -7786,10 +4390,6 @@ snapshots: zod@4.4.3: {} - zrender@6.1.0: - dependencies: - tslib: 2.3.0 - zustand@4.4.7(@types/react@18.3.31)(immer@10.1.1)(react@18.2.0): dependencies: use-sync-external-store: 1.2.0(react@18.2.0) diff --git a/scripts/package-registry.mjs b/scripts/package-registry.mjs index 18f5862..3aa4c96 100644 --- a/scripts/package-registry.mjs +++ b/scripts/package-registry.mjs @@ -31,12 +31,6 @@ const files = [ 'lib/client-registry.js.map', // Lazy chunks: the client fetches these from the host's /sidebar/bundle // route on first use (see src/client/chunk-loader.ts / src/bundle-route.ts). - 'lib/client-docx.js', - 'lib/client-docx.js.map', - 'lib/client-xlsx.js', - 'lib/client-xlsx.js.map', - 'lib/client-pptx.js', - 'lib/client-pptx.js.map', 'lib/client-terminal.js', 'lib/client-terminal.js.map', 'lib/client-editor.js', diff --git a/src/bundle-route.ts b/src/bundle-route.ts index da2c664..f031d2c 100644 --- a/src/bundle-route.ts +++ b/src/bundle-route.ts @@ -19,7 +19,7 @@ import { fileURLToPath } from 'node:url' import type { Context, SidebarHttpRequest, SidebarHttpResponse } from './context-types.ts' /** The chunk names the client may request (mirror of src/client/chunk-loader.ts). */ -export const CHUNK_NAMES = ['docx', 'xlsx', 'pptx', 'terminal', 'editor'] as const +export const CHUNK_NAMES = ['terminal', 'editor'] as const export type ChunkName = (typeof CHUNK_NAMES)[number] /** Directory of this host-half module (lib/ — the chunk scripts live next to it). */ diff --git a/src/client/PptxView.tsx b/src/client/PptxView.tsx deleted file mode 100644 index 676ad0e..0000000 --- a/src/client/PptxView.tsx +++ /dev/null @@ -1,131 +0,0 @@ -/** High-fidelity browser-native PPTX preview with slide navigation. */ -import { useEffect, useRef, useState } from 'react' -import { downloadUrl, mediaUrl, type SessionScope } from './api.ts' -import { t } from './locales.ts' -import css from './sidebar.module.css' - -type PptxViewerInstance = import('@aiden0z/pptx-renderer').PptxViewer - -type LoadState = - | { status: 'loading' } - | { status: 'ready'; count: number } - | { status: 'error'; message: string } - -export function PptxView(props: { scope: SessionScope; path: string; title: string }) { - const { scope, path, title } = props - const hostRef = useRef(null) - const viewerRef = useRef(null) - const [load, setLoad] = useState({ status: 'loading' }) - const [slide, setSlide] = useState(0) - const [navigating, setNavigating] = useState(false) - - useEffect(() => { - const controller = new AbortController() - const host = hostRef.current - if (host === null) return - setLoad({ status: 'loading' }) - setSlide(0) - void (async () => { - try { - const response = await fetch(mediaUrl(scope, path), { signal: controller.signal }) - if (!response.ok) throw new Error(`HTTP ${response.status}`) - const bytes = await response.arrayBuffer() - if (controller.signal.aborted) return - const { PptxViewer, RECOMMENDED_ZIP_LIMITS } = await import('@aiden0z/pptx-renderer') - if (controller.signal.aborted) return - const viewer = await PptxViewer.open(bytes, host, { - renderMode: 'slide', - fitMode: 'contain', - lazyMedia: true, - lazySlides: true, - pdfjs: false, - signal: controller.signal, - zipLimits: RECOMMENDED_ZIP_LIMITS, - onSlideChange: (index) => { - if (!controller.signal.aborted) setSlide(index) - }, - }) - if (controller.signal.aborted) { - viewer.destroy() - return - } - viewerRef.current = viewer - setSlide(viewer.currentSlideIndex) - setLoad({ status: 'ready', count: viewer.slideCount }) - } catch (error) { - if (controller.signal.aborted) return - try { - viewerRef.current?.destroy() - } catch { - // Partially initialized viewer — ignore disposal errors. - } - viewerRef.current = null - host.innerHTML = '' - setLoad({ status: 'error', message: error instanceof Error ? error.message : String(error) }) - } - })() - return () => { - controller.abort() - try { - viewerRef.current?.destroy() - } catch { - // Already destroyed. - } - viewerRef.current = null - host.innerHTML = '' - } - }, [scope.sessionId, scope.cwd, path]) - - const navigate = (target: number): void => { - const viewer = viewerRef.current - if (viewer === null || load.status !== 'ready' || navigating) return - const next = Math.max(0, Math.min(load.count - 1, target)) - if (next === slide) return - setNavigating(true) - void viewer.goToSlide(next, { behavior: 'auto' }).then(() => { - setSlide(viewer.currentSlideIndex) - }).catch((error: unknown) => { - setLoad({ status: 'error', message: error instanceof Error ? error.message : String(error) }) - }).finally(() => { - setNavigating(false) - }) - } - - return ( -
-
- - - {load.status === 'ready' ? `${slide + 1} / ${load.count}` : '– / –'} - - - - {t('downloadToView')} - -
-
-
- {load.status !== 'ready' && ( -
- {load.status === 'loading' &&
{t('loading')}
} - {load.status === 'error' &&
{load.message}
} -
- )} -
-
- ) -} diff --git a/src/client/SideCardSection.module.css b/src/client/SideCardSection.module.css index ed858c7..18f9823 100644 --- a/src/client/SideCardSection.module.css +++ b/src/client/SideCardSection.module.css @@ -198,6 +198,38 @@ text-overflow: ellipsis; } +/* The "add plugin" card: same grid cell / chrome as the inventory cards + (it shares .card), but a DASHED border — the repo's first dashed surface; + the hover accent follows the existing drag-drop dashed outlines + (sidebar.module.css .dropCenter / .tabBarDrop). */ +.addCard { + align-items: flex-start; + padding: 12px; + border-style: dashed; + border-color: var(--dsw-alias-border-l2); + text-align: left; +} + +.addCard:hover { + background: var(--dsw-alias-interactive-bg-hover); + border-color: var(--dsw-alias-interactive-bg-hover-accent); + color: var(--dsw-alias-label-primary); +} + +.addCard:hover .cardTitle { + color: var(--dsw-alias-label-primary); +} + +.addCard:hover .cardIconChip { + border-color: color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent); + color: var(--dsw-alias-button-primary-fill); +} + +.addCard:focus-visible { + outline: 2px solid var(--dsw-alias-border-l4); + outline-offset: 2px; +} + .cardOn .cardDesc { color: var(--dsw-alias-label-secondary); } @@ -412,6 +444,189 @@ color: var(--dsw-alias-state-error-primary); } +/* ── "Add plugin" modal ──────────────────────────────────────────────── */ + +/* A wide dialog like the settings popup (doubled class keeps the width + rule above the primitive's .dialog regardless of stylesheet order). */ +.pluginModal.pluginModal { + width: min(560px, 100%); +} + +.pluginList { + display: flex; + flex-direction: column; + gap: 12px; + width: 100%; +} + +/* The GitHub topic entry: a full-width secondary BUTTON (not a link — it + opens a real new browser tab via window.open, bypassing the sidebar + link takeover). */ +.pluginTopicBtn { + width: 100%; + appearance: none; + border: 1px solid var(--dsw-alias-border-l2); + border-radius: 8px; + padding: 6px 12px; + font: inherit; + font-size: 12px; + line-height: 18px; + color: var(--dsw-alias-label-secondary); + background: var(--dsw-alias-bg-layer-1); + cursor: pointer; +} + +.pluginTopicBtn:hover { + background: var(--dsw-alias-interactive-bg-hover); + border-color: var(--dsw-alias-interactive-bg-hover-accent); + color: var(--dsw-alias-label-primary); +} + +.pluginTopicBtn:focus-visible { + outline: 2px solid var(--dsw-alias-border-l4); + outline-offset: 1px; +} + +.pluginEmpty { + padding: 20px 2px; + font-size: 12px; + line-height: 18px; + color: var(--dsw-alias-label-tertiary); +} + +.pluginEntries { + display: flex; + flex-direction: column; + gap: 10px; +} + +/* One catalog entry: name + install button on the head row, description, + then the install command in a mono block (the exact script that gets + pre-typed into the terminal — review it here before installing). */ +.pluginEntry { + display: flex; + flex-direction: column; + gap: 4px; + padding: 12px; + border: 1px solid var(--dsw-alias-border-l2); + border-radius: 12px; + background: var(--dsw-alias-bg-layer-1); +} + +.pluginEntryHead { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.pluginEntryActions { + display: inline-flex; + align-items: center; + gap: 6px; + flex: none; +} + +/* The per-entry "jump" button: opens the plugin repo in a REAL new browser + tab (window.open — a button, so the sidebar link takeover cannot reroute + it). Secondary style, quieter than the Install button. */ +.pluginJumpBtn { + flex: none; + appearance: none; + border: 1px solid var(--dsw-alias-border-l2); + border-radius: 8px; + padding: 3px 12px; + font: inherit; + font-size: 12px; + line-height: 1.5; + cursor: pointer; + background: transparent; + color: var(--dsw-alias-label-secondary); +} + +.pluginJumpBtn:hover { + background: var(--dsw-alias-interactive-bg-hover); + border-color: var(--dsw-alias-interactive-bg-hover-accent); + color: var(--dsw-alias-label-primary); +} + +.pluginJumpBtn:focus-visible { + outline: 2px solid var(--dsw-alias-border-l4); + outline-offset: 1px; +} + +/* The plugin name: a BUTTON (not an anchor — an anchor would be caught by + the sidebar link takeover at document capture, ignoring target=_blank) + styled like a link; opens the repo in a real new browser tab. */ +.pluginName { + appearance: none; + min-width: 0; + padding: 0; + border: 0; + background: transparent; + font: inherit; + font-size: 13px; + line-height: 20px; + font-weight: 600; + color: var(--dsw-alias-label-primary); + text-align: left; + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; +} + +.pluginName:hover { + text-decoration: underline; + color: var(--dsw-alias-button-primary-fill); +} + +.pluginDesc { + font-size: 12px; + line-height: 18px; + color: var(--dsw-alias-label-secondary); +} + +.pluginInstall { + display: block; + padding: 6px 10px; + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 11px; + line-height: 16px; + color: var(--dsw-alias-label-secondary); + background: var(--dsw-alias-bg-layer-2); + border: 1px solid var(--dsw-alias-border-l1); + border-radius: 8px; + overflow-x: auto; + white-space: nowrap; +} + +/* The per-entry copy button: copies the install script to the + clipboard (the settings primary-button recipe, smaller than .done). */ +.pluginCopyBtn { + flex: none; + appearance: none; + border: 1px solid transparent; + border-radius: 8px; + padding: 3px 12px; + font: inherit; + font-size: 12px; + line-height: 1.5; + cursor: pointer; + background: var(--dsw-alias-label-primary); + color: var(--dsw-alias-bg-layer-3); +} + +.pluginCopyBtn:hover { + background: var(--dsw-alias-button-primary-hover); +} + +.pluginCopyBtn:focus-visible { + outline: 2px solid var(--dsw-alias-brand-primary); + outline-offset: 1px; +} + @media (prefers-reduced-motion: reduce) { .card, .switchTrack, diff --git a/src/client/SideCardSection.tsx b/src/client/SideCardSection.tsx index 45876ce..c0e4950 100644 --- a/src/client/SideCardSection.tsx +++ b/src/client/SideCardSection.tsx @@ -41,6 +41,7 @@ import { Fragment, useEffect, useRef, useState, type ReactNode } from 'react' import { IconCheckOutline16, + IconPlusOutline16, IconSettingsOutline16, Input, Modal, @@ -57,6 +58,7 @@ import { } from '../prefs-shared.ts' import { api } from './api.ts' import { parsePrefs } from './prefs.ts' +import { AddPluginModal, type PluginKind } from './add-plugin-modal.tsx' import { t } from './locales.ts' import type { SidebarStore } from './state.ts' import type { @@ -378,6 +380,10 @@ export function SideCardSection({ store, service }: SideCardSectionProps) { const [error, setError] = useState(null) // Which feature's secondary settings popup is open (null = closed). const [settingsFor, setSettingsFor] = useState(null) + // Whether the "add plugin" modal (a dashed card at the end of the + // 侧边栏内容 / 文件预览 grids) is open, and for which extension point + // (null = closed). + const [addPluginsOpen, setAddPluginsOpen] = useState(null) // The LATEST optimistic prefs, kept in sync with the state. Nested-map // merges (tabsEnabled / viewersEnabled / pluginSettings) MUST build from // this ref, not from the render-time `prefs`: two same-tick writes (e.g. @@ -681,6 +687,22 @@ export function SideCardSection({ store, service }: SideCardSectionProps) { })} ))} + {/* The "add tab plugin" entry: same card size as the inventory, + but a dashed border — it opens the TAB-registration plugin + modal instead of toggling a feature. */} +
@@ -705,6 +727,21 @@ export function SideCardSection({ store, service }: SideCardSectionProps) { })} ))} + {/* The "add preview plugin" entry: dashed card opening the + FILE-PREVIEWER registration modal. */} + @@ -746,6 +783,21 @@ export function SideCardSection({ store, service }: SideCardSectionProps) { )} + {/* The "add plugin" modal (opened by the dashed cards above): declares + the extension point of the clicked kind, opens the GitHub topic, + and lists the matching recommended plugin catalog with per-entry + install buttons (the install flow opens a ~/.dsh terminal with + the command pre-typed; failures render inline here, in settings + only). Mounted only while open (Modal runs hooks unconditionally + — same SSR rule as the settings popup above). */} + {addPluginsOpen !== null && ( + { setAddPluginsOpen(null) }} + kind={addPluginsOpen} + /> + )} + {error !== null && (
{error} diff --git a/src/client/add-plugin-modal.tsx b/src/client/add-plugin-modal.tsx new file mode 100644 index 0000000..762353f --- /dev/null +++ b/src/client/add-plugin-modal.tsx @@ -0,0 +1,154 @@ +/** + * The "add plugin" modals (Side card settings → the dashed cards at the + * end of the 侧边栏内容 / 文件预览 grids): declare that the sidebar's + * extension points — tab pages and file previewers — are open to plugins + * (registered through `ctx.betterSidebar`), point at the GitHub topic page + * for discovery, and show the repo's recommended plugin catalog of the + * matching kind (name / url / description / install script). + * + * Per entry there are two actions: + * - 「跳转」opens the plugin's repo in a REAL new browser tab (window.open + * — a button, so the sidebar link takeover cannot reroute it); + * - 「安装」only COPIES the install script to the clipboard (writeClipboard) + * with a transient "已复制" feedback on the button — the user pastes and + * runs it wherever they manage their DSH profile. No terminal is opened, + * nothing is closed, nothing can fail outward. + * + * The body is extracted as {@link PluginListBody} so tests render it + * directly — the Modal primitive runs hooks unconditionally, so an open + * Modal must never be renderToString'd (same rule as the settingsFor popup + * in SideCardSection); the modal itself mounts only while open. + */ +import { useState } from 'react' +import { Modal, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives' +import type { BetterSidebarService } from './service.ts' +import { PLUGIN_TOPIC_URL, type PluginEntry } from './plugins-shared.ts' +import { builtinTabPlugins } from './plugins-tabs.ts' +import { builtinViewerPlugins } from './plugins-viewers.ts' +import { t } from './locales.ts' +import css from './SideCardSection.module.css' + +/** Which extension point the modal is adding a plugin for. */ +export type PluginKind = 'tab' | 'viewer' + +/** The catalog of one kind (kept in two repo files: plugins-tabs.ts / + * plugins-viewers.ts). */ +function catalogOf(kind: PluginKind): readonly PluginEntry[] { + return kind === 'tab' ? builtinTabPlugins : builtinViewerPlugins +} + +/** How long the "已复制" feedback stays on the copy button. */ +const COPIED_FEEDBACK_MS = 1500 + +/** The modal body: the GitHub topic button + the recommended plugin list + * with per-entry jump/copy buttons (extracted for direct testing). */ +export function PluginListBody(props: { service: BetterSidebarService; kind: PluginKind }) { + const { service, kind } = props + // Which entry's copy button currently shows the "已复制" feedback. + const [copiedId, setCopiedId] = useState(null) + + /** Copy the entry's install script to the clipboard and flash the button's + * "已复制" label for a moment. The feedback ONLY appears after a + * successful write — when the clipboard is unavailable or denied + * (writeClipboard resolves false) nothing is shown, so the user is never + * told to paste a command that was not placed on the clipboard. Never + * closes anything, never throws outward. */ + const copy = async (entry: PluginEntry): Promise => { + const written = await writeClipboard(entry.install) + if (!written) return + setCopiedId(entry.id) + window.setTimeout(() => { + setCopiedId(current => (current === entry.id ? null : current)) + }, COPIED_FEEDBACK_MS) + } + + /** Open the plugin's repo in a REAL new browser tab (window.open — a + * button, so the sidebar link takeover cannot reroute it). */ + const jump = (entry: PluginEntry): void => { + window.open(entry.url, '_blank', 'noopener') + } + + return ( +
+ +
+ {t('addPluginsRecommended')} + {catalogOf(kind).length} +
+ {catalogOf(kind).length === 0 ? ( +
{t('addPluginsEmpty')}
+ ) : ( +
+ {catalogOf(kind).map(entry => ( +
+
+ {/* The name is a BUTTON on the same window.open path as the + jump button: as an anchor it would be caught by the + document-capture link takeover (which ignores + target=_blank) and land in the sidebar browser. */} + + + + + +
+
+ {typeof entry.description === 'function' ? entry.description() : entry.description} +
+ {entry.install} +
+ ))} +
+ )} +
+ ) +} + +/** The modal itself (mounted only while open — see the module comment). */ +export function AddPluginModal(props: { service: BetterSidebarService; onClose: () => void; kind: PluginKind }) { + const { service, onClose, kind } = props + return ( + + {t('settingsDone')} + + )} + > + + + ) +} diff --git a/src/client/builtins/viewers.tsx b/src/client/builtins/viewers.tsx index 3ffd734..8e5f534 100644 --- a/src/client/builtins/viewers.tsx +++ b/src/client/builtins/viewers.tsx @@ -1,18 +1,22 @@ /** - * The 9 built-in file viewer descriptors: every preview surface is a - * registered viewer (image / pdf / docx / xlsx / pptx / markdown / html / - * code / binary-download), exactly like external plugins register theirs. - * The `binary-download` viewer sniffs NUL bytes via `detect` for unknown - * binaries and serves doc/xls/ppt by extension; `code` is the catch-all - * (`exts: []`, lowest priority) that claims any file no other viewer did. + * The 6 built-in file viewer descriptors: every preview surface is a + * registered viewer (image / pdf / markdown / html / code / + * binary-download), exactly like external plugins register theirs. Office + * previews (.docx / .xlsx / .pptx) are NOT built in anymore — they moved to + * the recommended office plugin (see plugins-viewers.ts), which registers + * the same ids through this service. * - * The heavy viewers (docx/xlsx/pptx and the CodeMirror-backed - * markdown/html/code) render through {@link lazyChunkComponent} wrappers — - * their libraries are fetched only when such a file is first opened (see - * chunk-loader.ts). The descriptor metadata (id/exts/priority/detect) is - * identical either way, so matching semantics and external-plugin - * overrides are unaffected; the `component` wrapper keeps the descriptor - * contract `(props) => ReactNode`. + * The `binary-download` viewer sniffs NUL bytes via `detect` for unknown + * binaries and serves legacy doc/xls/ppt by extension; `code` is the + * catch-all (`exts: []`, lowest priority) that claims any file no other + * viewer did. + * + * The heavy viewers (the CodeMirror-backed markdown/html/code) render + * through {@link lazyChunkComponent} wrappers — their libraries are fetched + * only when such a file is first opened (see chunk-loader.ts). The + * descriptor metadata (id/exts/priority/detect) is identical either way, + * so matching semantics and external-plugin overrides are unaffected; the + * `component` wrapper keeps the descriptor contract `(props) => ReactNode`. * * Every viewer carries the declarative settings-surface fields — `title` * and `icon` — so the Side card settings page can render the enable/disable @@ -26,9 +30,6 @@ import { IconImageOutline16, IconMarkdownOutline16, IconPdfOutline16, - IconDocxOutline16, - IconXlsxOutline16, - IconPptxOutline16, IconHtmlOutline16, } from '../icons.tsx' import type { ComponentType } from 'react' @@ -37,17 +38,14 @@ import { t } from '../locales.ts' import css from '../sidebar.module.css' /** - * Lazy wrappers over the chunk-resident viewer components. The `pick` - * functions are module-level (stable identity — the wrapper effect depends - * on them); the cast bridges the chunk exports record to the descriptor - * prop shape (the views read only their own subset of FileViewerProps). + * Lazy wrapper over the chunk-resident viewer component. The `pick` + * function is module-level (stable identity — the wrapper effect depends + * on it); the cast bridges the chunk exports record to the descriptor prop + * shape (the view reads only its own subset of FileViewerProps). */ -const LazyDocx = lazyChunkComponent('docx', (mod) => mod.DocxView as ComponentType | undefined) -const LazyXlsx = lazyChunkComponent('xlsx', (mod) => mod.XlsxView as ComponentType | undefined) -const LazyPptx = lazyChunkComponent('pptx', (mod) => mod.PptxView as ComponentType | undefined) const LazyTextEditor = lazyChunkComponent('editor', (mod) => mod.TextEditor as ComponentType | undefined) -/** The 9 built-in file viewer descriptors. */ +/** The 6 built-in file viewer descriptors. */ export function builtinViewers(): readonly FileViewerDescriptor[] { return [ { @@ -72,30 +70,6 @@ export function builtinViewers(): readonly FileViewerDescriptor[] { ), }, - { - id: 'docx', - title: () => t('viewerDocx'), - icon: (size: number) => , - exts: ['docx'], - fetchStrategy: 'mediaUrl', - component: (props) => , - }, - { - id: 'xlsx', - title: () => t('viewerXlsx'), - icon: (size: number) => , - exts: ['xlsx'], - fetchStrategy: 'mediaUrl', - component: (props) => , - }, - { - id: 'pptx', - title: () => t('viewerPptx'), - icon: (size: number) => , - exts: ['pptx'], - fetchStrategy: 'mediaUrl', - component: (props) => , - }, { id: 'markdown', title: () => t('viewerMarkdown'), diff --git a/src/client/chunk-loader.ts b/src/client/chunk-loader.ts index 30d974c..b765af6 100644 --- a/src/client/chunk-loader.ts +++ b/src/client/chunk-loader.ts @@ -1,9 +1,11 @@ /** * Lazy chunk loader for the client bundle. The heavy preview/terminal - * libraries (Univer, docx-preview, pptx-renderer, CodeMirror, xterm — the - * office/terminal/editor stacks, tens of MB) live in separate build-time - * bundles (`lib/client-.js`) fetched only on first use of the feature - * that needs them, so startup downloads/parses only the ~1MB core bundle. + * libraries (CodeMirror, xterm — the editor/terminal stacks, several MB) + * live in separate build-time bundles (`lib/client-.js`) fetched only + * on first use of the feature that needs them, so startup downloads/parses + * only the ~1MB core bundle. (The office stack — Univer / docx-preview / + * pptx-renderer — is no longer bundled here: Office previews moved to the + * recommended office plugin, see plugins-viewers.ts.) * * How a chunk script works (see tsdown.config.ts chunkBundle): * @@ -42,7 +44,7 @@ * open. Chunk-only source edits still need a manual page refresh (the HMR * poll watches only client.js). */ -export type ChunkName = 'docx' | 'xlsx' | 'pptx' | 'terminal' | 'editor' +export type ChunkName = 'terminal' | 'editor' /** The module exports a chunk factory provides (namespace-ish record). */ export type ChunkExports = Record diff --git a/src/client/chunks/docx.tsx b/src/client/chunks/docx.tsx deleted file mode 100644 index 9ccd57a..0000000 --- a/src/client/chunks/docx.tsx +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Lazy chunk entry: the .docx preview (docx-preview + jszip). Built as - * `lib/client-docx.js` and registered under `dsh-better-sidebar/docx` — - * fetched only when a .docx is first opened (see chunk-loader.ts and - * docs/plans/2026-08-12-lazy-chunks-design.md). Never import this module - * from the core bundle: it pulls the office library into the startup path. - */ -export { DocxView } from '../docx-view.tsx' diff --git a/src/client/chunks/pptx.tsx b/src/client/chunks/pptx.tsx deleted file mode 100644 index c908e1d..0000000 --- a/src/client/chunks/pptx.tsx +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Lazy chunk entry: the .pptx preview (pptx-renderer). Built as - * `lib/client-pptx.js` and registered under `dsh-better-sidebar/pptx` — - * fetched only when a .pptx is first opened (see chunk-loader.ts and - * docs/plans/2026-08-12-lazy-chunks-design.md). Never import this module - * from the core bundle: it pulls the renderer into the startup path. - */ -export { PptxView } from '../PptxView.tsx' diff --git a/src/client/chunks/xlsx.tsx b/src/client/chunks/xlsx.tsx deleted file mode 100644 index c990ad6..0000000 --- a/src/client/chunks/xlsx.tsx +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Lazy chunk entry: the .xlsx preview (Univer family + SheetJS, several MB). - * Built as `lib/client-xlsx.js` and registered under - * `dsh-better-sidebar/xlsx` — fetched only when a .xlsx is first opened - * (see chunk-loader.ts and docs/plans/2026-08-12-lazy-chunks-design.md). - * Never import this module from the core bundle: it pulls Univer into the - * startup path. - */ -export { XlsxView } from '../xlsx-view.tsx' diff --git a/src/client/docx-view.tsx b/src/client/docx-view.tsx deleted file mode 100644 index b9314e0..0000000 --- a/src/client/docx-view.tsx +++ /dev/null @@ -1,113 +0,0 @@ -/** - * The .docx preview component: renders via docx-preview (preserved - * styles/images/tables). Lives in its own module (split out of the former - * office-view.tsx) so it builds as a standalone lazy chunk - * (`lib/client-docx.js`) — the library is loaded only when a .docx is first - * opened, and never pulls in the Univer/xlsx stack. - * - * Errors degrade to the shared download-button affordance, so a corrupted / - * encrypted / oversized file always leaves the user with a way to get it. - */ -import { useEffect, useRef, useState } from 'react' -import { mediaUrl } from './api.ts' -import { t } from './locales.ts' -import { BinaryFallback, type LoadState, type OfficeViewProps } from './office-shared.tsx' -import css from './sidebar.module.css' - -/** - * Render a .docx file via docx-preview. The library renders into a container - * div (no canvas); images and styles are inlined. Unmounting clears the - * container's innerHTML — docx-preview has no dispose API, but tearing down - * the DOM is enough. - */ -export function DocxView(props: OfficeViewProps): JSX.Element { - const { scope, path, title } = props - const viewportRef = useRef(null) - const wrapRef = useRef(null) - const [load, setLoad] = useState({ status: 'loading' }) - const [zoom, setZoom] = useState(100) - - useEffect(() => { - let cancelled = false - const container = viewportRef.current - const wrap = wrapRef.current - if (container === null || wrap === null) return - setZoom(100) - void (async () => { - try { - const response = await fetch(mediaUrl(scope, path)) - if (cancelled) return - if (!response.ok) { - throw new Error(`HTTP ${response.status}`) - } - const buf = await response.arrayBuffer() - if (cancelled) return - // docx-preview ships its own CSS through the className option; the - // wrapper div scopes its render output. - const { renderAsync } = await import('docx-preview') - await renderAsync(buf, wrap, undefined, { - className: 'docx', - inWrapper: true, - ignoreWidth: false, - ignoreHeight: false, - breakPages: true, - experimental: false, - }) - if (!cancelled) setLoad({ status: 'ready' }) - } catch (error) { - if (!cancelled) { - setLoad({ status: 'error', message: error instanceof Error ? error.message : String(error) }) - } - } - })() - return () => { - cancelled = true - // Tear down the rendered DOM so a reopen starts clean. - if (wrap !== null) wrap.innerHTML = '' - } - }, [scope.sessionId, scope.cwd, path]) - - useEffect(() => { - const viewport = viewportRef.current - if (viewport === null) return - const onWheel = (event: WheelEvent): void => { - if (!event.altKey) return - event.preventDefault() - const delta = event.deltaY < 0 ? 10 : -10 - setZoom(current => Math.max(50, Math.min(200, current + delta))) - } - viewport.addEventListener('wheel', onWheel, { passive: false }) - return () => { viewport.removeEventListener('wheel', onWheel) } - }, []) - - return ( -
-
- {load.status === 'loading' &&
{t('loading')}
} - {load.status === 'error' && } - {load.status !== 'error' && ( -
- )} -
-
- {t('zoomHint')} - { setZoom(Number(event.currentTarget.value)) }} - /> - {zoom}% -
-
- ) -} diff --git a/src/client/icons.tsx b/src/client/icons.tsx index c761e18..0fa8e55 100644 --- a/src/client/icons.tsx +++ b/src/client/icons.tsx @@ -83,33 +83,6 @@ export const IconPdfOutline16 = ({ size = 16, className }: IconProps) => ( ) -/** Word viewer glyph: a document frame with a "W". */ -export const IconDocxOutline16 = ({ size = 16, className }: IconProps) => ( - - - - - - -) - -/** Excel viewer glyph: a spreadsheet grid. */ -export const IconXlsxOutline16 = ({ size = 16, className }: IconProps) => ( - - - - - -) - -/** PowerPoint viewer glyph: a chart with rising bars. */ -export const IconPptxOutline16 = ({ size = 16, className }: IconProps) => ( - - - - -) - /** Markdown viewer glyph: the classic "M with a down arrow" badge. */ export const IconMarkdownOutline16 = ({ size = 16, className }: IconProps) => ( diff --git a/src/client/index.tsx b/src/client/index.tsx index b5fbdd3..e0950f3 100644 --- a/src/client/index.tsx +++ b/src/client/index.tsx @@ -176,11 +176,12 @@ export function apply(ctx: Context): void { // The IME guard: composition keys (candidate arrows, confirm, cancel) // belong to the input method, never to page JS. Inlined third-party UI - // (Univer's office controls) has shipped unguarded keydown handlers that - // hijack ArrowUp/ArrowDown and break Chinese input (#562 regression); the - // document-capture guard neutralizes the whole class before React or any - // native listener sees the event. Registered as early as possible so no - // other capture-phase listener can win the ordering race. + // (formerly Univer's office controls, #562 regression) has shipped + // unguarded keydown handlers that hijack ArrowUp/ArrowDown and break + // Chinese input; the document-capture guard neutralizes the whole class + // before React or any native listener sees the event. Registered as + // early as possible so no other capture-phase listener can win the + // ordering race. ctx.effect( () => { try { diff --git a/src/client/locales.ts b/src/client/locales.ts index 18d974d..6d5915c 100644 --- a/src/client/locales.ts +++ b/src/client/locales.ts @@ -120,14 +120,6 @@ export const zh = { settingsConflict: '设置已被其他窗口修改,请重试', binaryNoPreview: '此文件类型不支持预览', downloadToView: '下载查看', - officeTooLarge: '文件过大,无法预览', - officeCorrupt: '文件损坏或格式无效', - officeEncrypted: '不支持加密文件', - officeLoadFailed: 'Office 预览组件加载失败', - previousSlide: '上一页', - nextSlide: '下一页', - zoom: '缩放', - zoomHint: 'Alt + 滚轮', settingsSubagentTitle: '检测到子代理时自动展开任务管理页', settingsSubagentDesc: '当前会话产生新的子代理时,自动展开侧边栏并打开任务管理页;关闭后需手动打开', settingsJobsTitle: '有新后台任务时自动展开后台任务页', @@ -149,9 +141,6 @@ export const zh = { settingsViewerCatchAll: '兜底:任意文件', viewerImage: '图片', viewerPdf: 'PDF', - viewerDocx: 'Word 文档', - viewerXlsx: 'Excel 表格', - viewerPptx: 'PPT 演示', viewerMarkdown: 'Markdown', viewerCode: '代码', viewerBinary: '二进制下载', @@ -217,6 +206,18 @@ export const zh = { jobKill: '终止', jobKillConfirm: '再次点击确认终止', jobKillError: '终止失败', + addPluginsTabCard: '添加 Tab 插件', + addPluginsTabCardDesc: '注册新的侧边栏页面', + addPluginsViewerCard: '添加预览插件', + addPluginsViewerCardDesc: '注册新的文件类型预览', + addPluginsTabDesc: '侧边栏页面(Tab)可以由插件扩展。插件通过 ctx.betterSidebar 服务注册;点击「安装」复制安装命令,粘贴到 DSH 所在环境的终端执行。', + addPluginsViewerDesc: '文件预览器可以由插件扩展。插件通过 ctx.betterSidebar 服务注册;点击「安装」复制安装命令,粘贴到 DSH 所在环境的终端执行。', + addPluginsBrowseMore: '在 GitHub 上浏览更多插件(topic: dsh-better-sidebar)', + addPluginsRecommended: '推荐插件', + addPluginsEmpty: '暂未收录插件,欢迎在 GitHub topic 下发布你的插件', + openPlugin: '跳转', + copyInstall: '复制安装命令', + pluginOfficeDesc: '为 better-sidebar 编辑器提供 Office 三件套预览(.docx / .xlsx / .pptx),把重型 Office 渲染库拆出主包、按需安装', } /** The en dictionary (key-set-equal to zh, enforced by the type annotation). */ @@ -330,14 +331,6 @@ export const en: Record = { settingsConflict: 'The setting changed in another window — please retry', binaryNoPreview: 'This file type cannot be previewed', downloadToView: 'Download to view', - officeTooLarge: 'File too large to preview', - officeCorrupt: 'File is corrupt or in an invalid format', - officeEncrypted: 'Encrypted files are not supported', - officeLoadFailed: 'Office preview component failed to load', - previousSlide: 'Previous', - nextSlide: 'Next', - zoom: 'Zoom', - zoomHint: 'Alt + wheel', settingsSubagentTitle: 'Auto-open the Tasks page when a subagent appears', settingsSubagentDesc: 'Expand the side card and open the Tasks page when the current conversation spawns a new subagent; turn off to open it manually', settingsJobsTitle: 'Auto-open the Jobs page on a new background job', @@ -359,9 +352,6 @@ export const en: Record = { settingsViewerCatchAll: 'Catch-all: any file', viewerImage: 'Image', viewerPdf: 'PDF', - viewerDocx: 'Word', - viewerXlsx: 'Excel', - viewerPptx: 'PowerPoint', viewerMarkdown: 'Markdown', viewerCode: 'Code', viewerBinary: 'Binary download', @@ -427,6 +417,18 @@ export const en: Record = { jobKill: 'Kill', jobKillConfirm: 'Click again to confirm kill', jobKillError: 'Kill failed', + addPluginsTabCard: 'Add tab plugins', + addPluginsTabCardDesc: 'Register a new sidebar page', + addPluginsViewerCard: 'Add preview plugins', + addPluginsViewerCardDesc: 'Register a file-type preview', + addPluginsTabDesc: 'Sidebar pages (tabs) can be extended by plugins. Plugins register through the ctx.betterSidebar service; clicking Install copies the install command — paste it into a terminal where your DSH profile lives and run it.', + addPluginsViewerDesc: 'File previewers can be extended by plugins. Plugins register through the ctx.betterSidebar service; clicking Install copies the install command — paste it into a terminal where your DSH profile lives and run it.', + addPluginsBrowseMore: 'Browse more plugins on GitHub (topic: dsh-better-sidebar)', + addPluginsRecommended: 'Recommended plugins', + addPluginsEmpty: 'No plugins curated yet — publish yours under the GitHub topic', + openPlugin: 'Open', + copyInstall: 'Copy install command', + pluginOfficeDesc: 'Office-suite preview (.docx / .xlsx / .pptx) for the better-sidebar editor, keeping the heavy Office render libraries out of the core bundle', } /** diff --git a/src/client/office-shared.tsx b/src/client/office-shared.tsx deleted file mode 100644 index 3cd0e43..0000000 --- a/src/client/office-shared.tsx +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Shared pieces of the Office preview views (docx / xlsx): the load-state - * union, the shared props, and the download fallback. The two views live in - * their own modules (docx-view.tsx / xlsx-view.tsx) so the bundler can emit - * them as separate lazy chunks — docx-preview and the Univer family (several - * MB) must never share a script (see docs/plans/2026-08-12-lazy-chunks-design.md). - */ -import { downloadUrl, type SessionScope } from './api.ts' -import { t } from './locales.ts' -import css from './sidebar.module.css' - -/** Loading / ready / error state shared by both views. */ -export type LoadState = - | { status: 'loading' } - | { status: 'ready' } - | { status: 'error'; message: string } - -/** Shared props. */ -export interface OfficeViewProps { - scope: SessionScope - path: string - title: string -} - -/** - * The shared error / fallback affordance: the failure reason plus a download - * link, so the user always has a path to the file. Used by both DocxView and - * XlsxView, and matches the binary placeholder download link. - */ -export function BinaryFallback(props: { scope: SessionScope; path: string; message: string }): JSX.Element { - const { scope, path, message } = props - return ( - - ) -} diff --git a/src/client/office-types.ts b/src/client/office-types.ts deleted file mode 100644 index 93a35df..0000000 --- a/src/client/office-types.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Office file type dispatch — pure functions mapping file extensions to - * preview kinds. Kept separate from the editor host so the mapping is - * unit-testable without mounting React or pulling in docx-preview / Univer. - * - * The host side never inspects Office extensions: the binary NUL probe in - * {@link ../index.ts} (readText) tags every Office file as binary, and the - * /sidebar/file media route serves raw bytes for any extension. This module - * is the client's sole source of truth for "is this previewable here". - */ - -/** Extensions rendered with docx-preview (preserved styles/images/tables). */ -export const OFFICE_DOCX_EXT = '.docx' as const - -/** Extensions rendered with Univer (sheets: data + formulas + formatting). */ -export const OFFICE_XLSX_EXT = '.xlsx' as const - -/** Extensions rendered with the browser-native PPTX viewer. */ -export const OFFICE_PPTX_EXT = '.pptx' as const - -/** Extensions that get a download-only affordance (no client-side renderer). */ -export const OFFICE_DOWNLOAD_ONLY_EXT = ['.doc', '.xls', '.ppt'] as readonly string[] - -/** - * The preview strategy for one path's extension. - * - `'docx'` — render via docx-preview. - * - `'xlsx'` — render via Univer. - * - `'pptx'` — render via pptx-renderer. - * - `'download-only'` — show the binary download button (no preview renderer - * covers legacy OLE .doc/.xls/.ppt on the client). - * - `null` — not an Office file; the caller's existing image / md / text / binary - * pipeline handles it. - */ -export type OfficeKind = 'docx' | 'xlsx' | 'pptx' | 'download-only' | null - -/** - * Map a lowercased extension (with leading dot) to its preview kind. - * - * @param ext - the path extension (with leading dot) (`.docx`, - * `.xlsx`, `.pptx`, `.doc`, `.xls`, `.ppt`, …); `''` when the path has none. - */ -export function officeKindForExt(ext: string): OfficeKind { - if (ext === OFFICE_DOCX_EXT) return 'docx' - if (ext === OFFICE_XLSX_EXT) return 'xlsx' - if (ext === OFFICE_PPTX_EXT) return 'pptx' - if (OFFICE_DOWNLOAD_ONLY_EXT.includes(ext)) return 'download-only' - return null -} diff --git a/src/client/office-view.tsx b/src/client/office-view.tsx deleted file mode 100644 index 559d042..0000000 --- a/src/client/office-view.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Compat re-export shim for the historical `src/client/office-view.tsx` - * path. The office preview views were split into docx-view.tsx / - * xlsx-view.tsx (+ office-shared.tsx) so the bundler can emit each library - * as its own lazy chunk (see docs/plans/2026-08-12-lazy-chunks-design.md). - * This module keeps deep imports of this path resolvable through the - * `./src/*` exports subpath — it deliberately re-exports BOTH views, so it - * must never be imported from the core bundle or a chunk entry (it would - * drag both libraries into that bundle). - */ -export { DocxView } from './docx-view.tsx' -export { XlsxView } from './xlsx-view.tsx' diff --git a/src/client/plugins-shared.ts b/src/client/plugins-shared.ts new file mode 100644 index 0000000..f3f4c90 --- /dev/null +++ b/src/client/plugins-shared.ts @@ -0,0 +1,26 @@ +/** + * Shared vocabulary of the recommended plugin catalogs: the entry shape and + * the GitHub topic URL. The two catalogs live in sibling modules — + * `plugins-tabs.ts` (tab registrations) and `plugins-viewers.ts` (file + * previewer registrations) — and are shown in the two "add plugin" modals + * (Side card settings → the dashed cards at the end of the 侧边栏内容 / + * 文件预览 grids). + */ + +/** The GitHub topic page listing every repo tagged `dsh-better-sidebar`. */ +export const PLUGIN_TOPIC_URL = 'https://github.com/topics/dsh-better-sidebar' + +/** One curated plugin entry (name / url / description / install script). */ +export interface PluginEntry { + /** Unique id (the npm package name). */ + id: string + /** Short display name. */ + name: string + /** GitHub repository URL. */ + url: string + /** One-line description (i18n friendly: string or () => string). */ + description: string | (() => string) + /** The full shell command pre-filled into the install terminal (not + * executed until the user presses Enter). */ + install: string +} diff --git a/src/client/plugins-tabs.ts b/src/client/plugins-tabs.ts new file mode 100644 index 0000000..372e5a4 --- /dev/null +++ b/src/client/plugins-tabs.ts @@ -0,0 +1,15 @@ +/** + * The built-in catalog of TAB-registration plugins (sidebar pages), + * shown in the "add tab plugin" modal (Side card settings → 侧边栏内容 grid + * → the dashed card). Adding an entry: append one object here (unique + * `id` = npm package name, `url` = GitHub repo, `description` = + * i18n-friendly, `install` = the full shell command pre-filled into the + * install terminal — it starts with `cd ~/.dsh` so the install runs with + * the DSH home as the working directory). Data integrity is guarded by + * `tests/plugin-list.spec.ts`. + */ +import type { PluginEntry } from './plugins-shared.ts' + +/** Tab-registration plugins (empty until a real one exists — the modal + * renders the empty state and points at the GitHub topic). */ +export const builtinTabPlugins: readonly PluginEntry[] = [] diff --git a/src/client/plugins-viewers.ts b/src/client/plugins-viewers.ts new file mode 100644 index 0000000..db131ce --- /dev/null +++ b/src/client/plugins-viewers.ts @@ -0,0 +1,23 @@ +/** + * The built-in catalog of FILE-PREVIEWER plugins (file-type previewers), + * shown in the "add preview plugin" modal (Side card settings → 文件预览 + * grid → the dashed card). Adding an entry: append one object here (unique + * `id` = npm package name, `url` = GitHub repo, `description` = + * i18n-friendly, `install` = the full shell command pre-filled into the + * install terminal — it starts with `cd ~/.dsh` so the install runs with + * the DSH home as the working directory). Data integrity is guarded by + * `tests/plugin-list.spec.ts`. + */ +import { t } from './locales.ts' +import type { PluginEntry } from './plugins-shared.ts' + +/** File-previewer plugins (alphabetical order). */ +export const builtinViewerPlugins: readonly PluginEntry[] = [ + { + id: '@huanlin/dsh-plugin-better-sidebar-plugin-office', + name: 'Office 预览插件', + url: 'https://github.com/HuanLinOTO/dsh-plugin-better-sidebar-plugin-office', + description: () => t('pluginOfficeDesc'), + install: 'cd ~/.dsh && dsh plugin --profile web add @huanlin/dsh-plugin-better-sidebar-plugin-office', + }, +] diff --git a/src/client/sidebar.module.css b/src/client/sidebar.module.css index c111191..68f709d 100644 --- a/src/client/sidebar.module.css +++ b/src/client/sidebar.module.css @@ -772,7 +772,7 @@ overflow-wrap: anywhere; } -/* Binary / download-only files (pptx, OLE .doc/.xls/.ppt, unknown binaries): +/* Binary / download-only files (legacy OLE .doc/.xls/.ppt, unknown binaries): a centered notice plus a download link — the user always gets the file. */ .editorBinary { flex: 1; @@ -1108,62 +1108,6 @@ background: var(--dsw-alias-interactive-bg-hover); } -/* Word preview: the document scrolls independently while the zoom control - stays pinned to the bottom edge. */ -.editorDocx { - flex: 1; - min-height: 0; - display: flex; - flex-direction: column; - background: var(--dsw-alias-bg-base); -} - -.editorDocxViewport { - flex: 1; - min-height: 0; - display: flex; - flex-direction: column; - overflow: auto; - background: var(--dsw-alias-bg-base); -} - -/* docx-preview renders into a wrapper div with .docx className; the host - above scrolls while the wrapper holds the page flow. */ -.editorDocxWrap { - flex: none; - padding: 16px; -} - -.editorDocxZoom { - flex: none; - display: flex; - align-items: center; - gap: 8px; - min-height: 34px; - padding: 4px 10px; - border-top: 1px solid var(--dsw-alias-border-l1); - background: var(--dsw-alias-bg-layer-1); -} - -.editorDocxZoomHint, -.editorDocxZoomValue { - flex: none; - font: var(--dsw-font-xxxs-11); - color: var(--dsw-alias-label-tertiary); -} - -.editorDocxZoomValue { - width: 36px; - text-align: right; -} - -.editorDocxZoomRange { - flex: 1; - min-width: 72px; - accent-color: var(--dsw-alias-brand-primary); - cursor: pointer; -} - .editorPdf { flex: 1; min-height: 0; @@ -1222,94 +1166,6 @@ pointer-events: auto !important; } -.editorXlsx { - position: relative; - flex: 1; - min-height: 0; - overflow: hidden; - background: var(--dsw-alias-bg-base); -} - -.editorUniverHost { - width: 100%; - height: 100%; - min-width: 0; - min-height: 0; -} - -.editorOfficeOverlay { - position: absolute; - inset: 0; - z-index: 2; - display: flex; - background: var(--dsw-alias-bg-base); -} - -.editorPptx { - flex: 1; - min-height: 0; - display: flex; - flex-direction: column; - background: var(--dsw-alias-bg-base); -} - -.editorPptxToolbar { - flex: none; - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - padding: 6px 8px; - border-bottom: 1px solid var(--dsw-alias-border-l1); -} - -.editorPptxToolbar .editorDownloadLink { - margin-left: auto; -} - -.editorPptxButton { - height: 28px; - padding: 0 10px; - border: 1px solid var(--dsw-alias-border-l2); - border-radius: 6px; - background: var(--dsw-alias-bg-layer-2); - color: var(--dsw-alias-label-secondary); - font: var(--dsw-font-xxs-strong-12); - cursor: pointer; -} - -.editorPptxButton:hover:not(:disabled) { - background: var(--dsw-alias-interactive-bg-hover); - color: var(--dsw-alias-label-primary); -} - -.editorPptxButton:disabled { - opacity: 0.4; - cursor: default; -} - -.editorPptxPosition { - min-width: 64px; - text-align: center; - font: var(--dsw-font-xxs-12); - color: var(--dsw-alias-label-tertiary); -} - -.editorPptxStage { - position: relative; - flex: 1; - min-height: 0; - overflow: hidden; -} - -.editorPptxHost { - width: 100%; - height: 100%; - min-width: 0; - min-height: 0; - overflow: auto; -} - /* ── Terminal ──────────────────────────────────────────────────────────── */ .terminalWrap { diff --git a/src/client/xlsx-to-univer.ts b/src/client/xlsx-to-univer.ts deleted file mode 100644 index 255e4ca..0000000 --- a/src/client/xlsx-to-univer.ts +++ /dev/null @@ -1,260 +0,0 @@ -/** - * Convert a SheetJS (xlsx) workbook into Univer's {@link IWorkbookData} so - * {@link XlsxView} can render it through the Univer sheets preset. - * - * v1 scope (matches docs/plans/2026-08-10-office-preview-design.md §3.6): - * - Sheet names + order - * - Cell values, typed (string / number / boolean / error → force-string) - * - Cell formulas (text form; Univer's formula engine computes them) - * - Merged cells (!merges → mergeData) - * - Column widths (!cols → columnData) and row heights (!rows → rowData) - * - * Out of scope for v1 (SheetJS community edition does not parse them and the - * Pro edition is commercial): cell styles (font/fill/border/alignment), - * conditional formatting, charts. Users who need style fidelity get the - * download button on the binary placeholder. - * - * The function is pure (no DOM, no Univer imports) so it is unit-testable - * without jsdom or canvas. - */ -import type * as XLSX from 'xlsx' -// Types come from @univerjs/presets (which re-exports @univerjs/core's type -// surface). The enum values BooleanNumber / CellValueType are imported as -// runtime values from the same module — the bundler inlines them, and the -// test environment has @univerjs/presets available as a dependency. -import { BooleanNumber, CellValueType, type LocaleType, type ICellData, type IColumnData, type IRowData, type IWorkbookData, type IWorksheetData, type IObjectArrayPrimitiveType, type IObjectMatrixPrimitiveType, type IRange } from '@univerjs/presets' - -/** SheetJS workbook (the slice of the module we use). */ -type XLSXWorkbook = XLSX.WorkBook - -/** - * Build a Univer workbook snapshot from a SheetJS workbook. - * - * @param wb - the parsed workbook from `XLSX.read(buf, { type: 'array' })` - * @param appVersion - the Univer package version, written into `appVersion` - * (Univer requires the field but does not gate on it). - * @param locale - the locale Univer should render in. - */ -export function xlsxWorkbookToUniver( - wb: XLSXWorkbook, - appVersion: string, - locale: LocaleType, -): IWorkbookData { - const sheetOrder: string[] = [] - const sheets: Record> = {} - - wb.SheetNames.forEach((name, index) => { - const sheetId = `sheet-${index}` - sheetOrder.push(sheetId) - sheets[sheetId] = worksheetToUniver(wb.Sheets[name] ?? {}, name, sheetId) - }) - - // Univer requires at least one sheet; an empty workbook gets a placeholder. - if (sheetOrder.length === 0) { - const fallbackId = 'sheet-0' - sheetOrder.push(fallbackId) - sheets[fallbackId] = { - id: fallbackId, - name: 'Sheet1', - rowCount: 20, - columnCount: 26, - cellData: {}, - rowData: {}, - columnData: {}, - mergeData: [], - } - } - - return { - id: 'workbook', - name: wb.Props?.Title || 'Workbook', - appVersion, - locale, - styles: {}, - sheetOrder, - sheets, - } -} - -/** Convert one SheetJS worksheet to a Univer IWorksheetData. */ -function worksheetToUniver( - ws: XLSX.WorkSheet, - name: string, - sheetId: string, -): Partial { - const cellData: IObjectMatrixPrimitiveType = {} - const merges: IRange[] = [] - - // Cell values + formulas: iterate every cell address (skip the !-prefixed - // special keys SheetJS uses for sheet-level metadata). - for (const addr of Object.keys(ws)) { - if (addr.startsWith('!')) continue - const cell = ws[addr] as XLSX.CellObject | undefined - if (cell === undefined) continue - const { r, c } = decodeAddr(addr) - const converted = convertCell(cell) - if (converted === null) continue - let row = cellData[r] - if (row === undefined) { - row = {} - cellData[r] = row - } - row[c] = converted - } - - // Merged cells: SheetJS's Range uses { s: { r, c }, e: { r, c } } (0-indexed), - // which is exactly Univer's IRange shape — copy verbatim. - if (Array.isArray(ws['!merges'])) { - for (const m of ws['!merges']!) { - if (m === undefined || m === null) continue - merges.push({ startRow: m.s.r, endRow: m.e.r, startColumn: m.s.c, endColumn: m.e.c }) - } - } - - const { rowCount, columnCount } = dimensions(ws, cellData) - - return { - id: sheetId, - name, - tabColor: '', - hidden: BooleanNumber.FALSE, - freeze: { startRow: -1, startColumn: -1, xSplit: 0, ySplit: 0 }, - rowCount, - columnCount, - defaultColumnWidth: 96, - defaultRowHeight: 22, - mergeData: merges, - cellData, - rowData: convertRows(ws['!rows']), - columnData: convertCols(ws['!cols']), - rowHeader: { width: 46 }, - columnHeader: { height: 20 }, - showGridlines: BooleanNumber.TRUE, - rightToLeft: BooleanNumber.FALSE, - } -} - -/** Map a SheetJS CellObject onto Univer's ICellData (or null for empty). */ -function convertCell(cell: XLSX.CellObject): ICellData | null { - const out: ICellData = {} - // Type mapping: b→BOOLEAN, n→NUMBER, s→STRING, d→STRING, e→FORCE_STRING, z→skip - switch (cell.t) { - case 'b': - out.t = CellValueType.BOOLEAN - out.v = cell.v === true - break - case 'n': - out.t = CellValueType.NUMBER - out.v = typeof cell.v === 'number' ? cell.v : Number(cell.v) - break - case 'e': - // Excel error strings like #REF! — display verbatim, no formula engine. - out.t = CellValueType.FORCE_STRING - out.v = String(cell.w ?? cell.v ?? '') - break - case 's': - case 'd': - case 'z': - default: - // String / date / stub. SheetJS renders dates as ISO strings in `w` - // when cellDates is on; otherwise `v` is the serial number. Use `w` - // (formatted text) when present so users see what Excel showed. - out.t = CellValueType.STRING - out.v = cell.w ?? (cell.v !== undefined ? String(cell.v) : '') - break - } - // Formula: keep as text; Univer's formula engine computes on load. - if (typeof cell.f === 'string' && cell.f !== '') { - out.f = cell.f - } - return out -} - -/** Convert SheetJS `!cols` (ColInfo[]) to Univer columnData (sparse, by index). */ -function convertCols(cols: XLSX.ColInfo[] | undefined): IObjectArrayPrimitiveType> { - if (!Array.isArray(cols)) return {} - const out: IObjectArrayPrimitiveType> = {} - cols.forEach((info, index) => { - if (info === undefined || info === null) return - const w = info.wpx ?? (info.width !== undefined ? Math.round(info.width * 7) : undefined) - out[index] = { - ...(w !== undefined ? { w } : {}), - ...(info.hidden === true ? { hd: BooleanNumber.TRUE } : {}), - } - }) - return out -} - -/** Convert SheetJS `!rows` (RowInfo[]) to Univer rowData (sparse, by index). */ -function convertRows(rows: XLSX.RowInfo[] | undefined): IObjectArrayPrimitiveType> { - if (!Array.isArray(rows)) return {} - const out: IObjectArrayPrimitiveType> = {} - rows.forEach((info, index) => { - if (info === undefined || info === null) return - const h = info.hpx ?? info.hpt - out[index] = { - ...(h !== undefined ? { h: Math.round(h) } : {}), - ...(info.hidden === true ? { hd: BooleanNumber.TRUE } : {}), - } - }) - return out -} - -/** - * Resolve the worksheet dimensions. SheetJS's `!ref` is authoritative when - * present; otherwise fall back to the max row/col we actually wrote, with a - * small floor so the canvas has somewhere to paint. - */ -function dimensions( - ws: XLSX.WorkSheet, - cellData: IObjectMatrixPrimitiveType, -): { rowCount: number; columnCount: number } { - const ref = ws['!ref'] - if (typeof ref === 'string' && ref !== '') { - const range = decodeRange(ref) - return { - rowCount: Math.max(range.endRow + 1, 20), - columnCount: Math.max(range.endColumn + 1, 10), - } - } - let maxRow = -1 - let maxCol = -1 - for (const r of Object.keys(cellData)) { - const rowNum = Number(r) - if (rowNum > maxRow) maxRow = rowNum - const rowObj = cellData[rowNum]! - for (const c of Object.keys(rowObj)) { - const colNum = Number(c) - if (colNum > maxCol) maxCol = colNum - } - } - return { - rowCount: Math.max(maxRow + 1, 20), - columnCount: Math.max(maxCol + 1, 10), - } -} - -/** Decode an A1-style address (e.g. "AB12") to 0-indexed {row, col}. */ -function decodeAddr(addr: string): { r: number; c: number } { - let col = 0 - let i = 0 - while (i < addr.length) { - const ch = addr.charCodeAt(i) - if (ch >= 65 && ch <= 90) { - col = col * 26 + (ch - 64) - i += 1 - } else { - break - } - } - const row = Number(addr.slice(i)) - 1 - return { r: row, c: col - 1 } -} - -/** Decode an A1-style range (e.g. "A1:AB12") to 0-indexed bounds. */ -function decodeRange(range: string): { startRow: number; endRow: number; startColumn: number; endColumn: number } { - const at = range.indexOf(':') - const start = decodeAddr(at === -1 ? range : range.slice(0, at)) - const end = at === -1 ? start : decodeAddr(range.slice(at + 1)) - return { startRow: start.r, endRow: end.r, startColumn: start.c, endColumn: end.c } -} diff --git a/src/client/xlsx-view.tsx b/src/client/xlsx-view.tsx deleted file mode 100644 index 023583c..0000000 --- a/src/client/xlsx-view.tsx +++ /dev/null @@ -1,116 +0,0 @@ -/** - * The .xlsx preview component: renders via the Univer sheets preset (data + - * formulas + formatting). Lives in its own module (split out of the former - * office-view.tsx) so it builds as a standalone lazy chunk - * (`lib/client-xlsx.js`) — the Univer family and SheetJS pull in several MB - * but are loaded only when a .xlsx is first opened. The docx stack never - * shares this script. - * - * Errors degrade to the shared download-button affordance, so a corrupted / - * encrypted / oversized file always leaves the user with a way to get it. - */ -import { useEffect, useRef, useState } from 'react' -import { mediaUrl } from './api.ts' -import { isZh, t } from './locales.ts' -import { BinaryFallback, type LoadState, type OfficeViewProps } from './office-shared.tsx' -import { xlsxWorkbookToUniver } from './xlsx-to-univer.ts' -import css from './sidebar.module.css' -// Univer's stylesheets ride the same dsh-css-inline pipeline as xterm's CSS -// (one