@einfach-excel/react-excel 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +9 -0
- package/README.md +218 -2
- package/dist/Spreadsheet.d.ts +8 -0
- package/dist/THIRD_PARTY_NOTICES.txt +14020 -0
- package/dist/artifact-manifest.json +46 -0
- package/dist/assets/workbook.worker-x_d_i2qm.js +6 -0
- package/dist/i18n/runtime.d.ts +5 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +10 -0
- package/dist/page/WorkbookPresentationProvider.d.ts +16 -0
- package/dist/page/WorkbookRuntimeProvider.d.ts +13 -0
- package/dist/page/WorkbookStoreProvider.d.ts +11 -0
- package/dist/style.css +2 -0
- package/dist/workbook/shell/WorkbookView.d.ts +2 -0
- package/docs/package/README.md +101 -0
- package/docs/package/host-data.md +61 -0
- package/docs/package/release.md +59 -0
- package/package.json +88 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) dol
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Einfach React Excel
|
|
2
|
+
Copyright (c) dol. Licensed under the MIT license in LICENSE.
|
|
3
|
+
|
|
4
|
+
The inlined @einfach-excel/react-cells, @einfach-excel/canvas-cells and @einfach-excel/canvas
|
|
5
|
+
implementations belong to this repository and retain its MIT license.
|
|
6
|
+
The precompiled Worker includes the Rust/WASM engine. Its third-party license
|
|
7
|
+
texts and package attributions are included in dist/THIRD_PARTY_NOTICES.txt.
|
|
8
|
+
React, react-dom, Einfach core/react/UI Core and Lingui remain external
|
|
9
|
+
dependencies; their installed packages carry their respective license notices.
|
package/README.md
CHANGED
|
@@ -1,3 +1,219 @@
|
|
|
1
|
-
#
|
|
1
|
+
# React Excel
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
可嵌入浏览器宿主的 React 工作簿组件包,同时保留独立 Vite 演示站。主线为
|
|
4
|
+
React DOM → UI Core command atom → Rust Worker/WASM → atom 结果 → React。
|
|
5
|
+
|
|
6
|
+
外部接入请读[安装、尺寸、语言与 Worker](docs/package/README.md)、
|
|
7
|
+
[同 Store 原始值与修改事件](docs/package/host-data.md)和[兼容范围及发行清单](docs/package/release.md)。
|
|
8
|
+
当前改动尚未发布到 npm;本地可通过 `pnpm prepare:package-consumers` 安装模拟发行 tarball。
|
|
9
|
+
|
|
10
|
+
默认 Sales Orders 保留原有 66 组合并与 128 列演示画布,不为测试删改样例。
|
|
11
|
+
需要完整 1,000 条订单的 E2E 使用 `e2e/fixtures/plain-sales-orders/`,
|
|
12
|
+
仅隔离导入数据,仍复用产品视图、UI Core 和真实 Rust/WASM Worker。
|
|
13
|
+
|
|
14
|
+
## 当前能力
|
|
15
|
+
|
|
16
|
+
已接入编辑、选区与导航、常用格式、剪贴板、工作表管理、行列尺寸、冻结、查找及状态栏统计。
|
|
17
|
+
填充支持定向复制、序列面板与四方向拖拽;详细操作、原始样例与已知限制统一放在
|
|
18
|
+
[当前能力与操作说明](docs/current-capabilities.md),完整计划见[功能进度](FEATURE_PROGRESS.md)。
|
|
19
|
+
|
|
20
|
+
## 本版六项进阶能力(完整回归通过)
|
|
21
|
+
|
|
22
|
+
Ctrl/⌘ 点击或拖拽可[手动追加非连续选区](docs/multi-range-selection/manual-selection.md),
|
|
23
|
+
普通点击替换、Escape 保留主区;复用原多区格式、清除与统计。
|
|
24
|
+
[跨表剪切](docs/cross-sheet-cut/contract.md)沿原剪贴板移动数据、格式与可安全重定位的引用,
|
|
25
|
+
一次撤销恢复两端;部分范围、命名范围重叠、合并、Table 等不安全边界明确原子拒绝。
|
|
26
|
+
函数选择器新增[参数填写表单](docs/formula-arguments/README.md),按原生签名生成原公式栏草稿,Enter 才写入。
|
|
27
|
+
[高级筛选](docs/advanced-filter/README.md)支持组内 AND、组间 OR 及完整搜索结果全选;
|
|
28
|
+
[高级格式](docs/advanced-formatting/README.md)支持 Unicode 通配符和按基础显示文本比较重复/唯一值。
|
|
29
|
+
独立 Async formulas demo 使用项目扩展 [FETCHJSON](docs/async-formulas/FETCHJSON.md),
|
|
30
|
+
经真实同源 HTTP 与原生异步队列更新依赖,不是 Office 内置函数,也不执行文件脚本。
|
|
31
|
+
FETCHJSON 需手填公式,不伪装为原生内置目录或参数表单的元数据条目。
|
|
32
|
+
2026-10-21 最终单次真实 Worker/WASM 完整回归 2617/2617 通过,同一 JSON 核验 998/998 登记操作,
|
|
33
|
+
原955个绑定保留,零失败、跳过、重试或 flaky;完整 Vitest 6425/6425 通过。
|
|
34
|
+
原生双配置、WASM/Chrome、类型、构建、静态门禁及中英1280px/390px截图独立审阅均通过。
|
|
35
|
+
运行全程4236个输入冻结,结束后逐文件核对一致;未提交或推送。下方2474/955仅为前版历史证据。
|
|
36
|
+
|
|
37
|
+
## 前版七项扩展(完整回归通过)
|
|
38
|
+
|
|
39
|
+
Insert 中的 Note 保存独立纯文本备注,Comments 保存含显示名、本机时间及解决/重开事件的本地线程;
|
|
40
|
+
二者可在同格共存,不会替代值或公式。显示名不是认证身份,也不提供远程协作或通知。
|
|
41
|
+
Data 中的 Worksheet protection 在保护前配置允许编辑范围;允许区保留内容/格式编辑,工作表设置仍锁定。
|
|
42
|
+
条件格式可覆盖自动端点,支持数值、百分比、百分位和公式阈值,以及三箭头/交通灯/旗帜图标。
|
|
43
|
+
数据验证可用相对公式、选格提示及 Stop/Warning/Information 错误级别;后两者必须明确 Continue 才提交。
|
|
44
|
+
函数选择器、格内编辑与公式栏展示当前原生构件的参数、重复组、示例及实现限制,不宣称 Office 全兼容。
|
|
45
|
+
Formulas 中的 Custom formulas 将参数表达式保存为工作簿数据,沿原生 LAMBDA 求值;单元格引用经实参传入,
|
|
46
|
+
不执行文件内 JavaScript 或外部脚本。
|
|
47
|
+
|
|
48
|
+
Sales Orders B2 是备注示例;Summary 原生示例:A71:A73 允许区(初始不保护)、H75:H79 图标阈值、H83 的 ORDER_NET 调用、H84 线程。
|
|
49
|
+
这些种子不产生启动历史。2026-10-21 最终单次真实 Worker/WASM 完整回归 2474/2474 通过,
|
|
50
|
+
同一报告核验 955/955 已登记操作,零失败、跳过或重试;1280px/390px 中英文截图已独立审阅。
|
|
51
|
+
原生双配置、WASM、JavaScript、类型、构建及静态门禁证据均已收齐;本轮未提交或推送,
|
|
52
|
+
不据此宣称整个功能计划或 Office 兼容范围完成。
|
|
53
|
+
|
|
54
|
+
## Rust-only 运行边界
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
React 视图
|
|
58
|
+
→ @einfach/react(useAtomValue / useSetAtom)
|
|
59
|
+
→ @einfach-excel/spreadsheet-ui-core(状态 atom / command atom)
|
|
60
|
+
→ rustWorkbookConnectionAtom
|
|
61
|
+
→ @einfach-excel/spreadsheet-ui-core/rust-worker(纯传输)
|
|
62
|
+
→ Rust/WASM workbook
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
类型化工作簿命令与轻量 Rust/WASM runtime 均由 UI-core 所有。React 不依赖
|
|
66
|
+
`@einfach-excel/solid-excel`;生产路径没有 `SpreadsheetBackend`、TypeScript engine 或运行时 fallback。
|
|
67
|
+
|
|
68
|
+
- Rust/WASM 负责工作簿权威数据、计算和 mutation 结果。
|
|
69
|
+
- `spreadsheet-ui-core` 负责创建连接、初始化工作簿、导入数据、运行状态、销毁连接、工作簿状态、
|
|
70
|
+
跨 atom 状态转换、可见窗口与 Rust 命令。
|
|
71
|
+
- React 负责共享视图、挂载 effect、DOM 事件、焦点、pointer capture 和滚动事件适配。
|
|
72
|
+
- React 源码不使用 `useState/useReducer`,也不在本包内声明工作簿 atom。
|
|
73
|
+
- 共享 Provider 通过标准模块 URL 启动随包 Worker;所有 demo 复用同一装配,不要求宿主 Vite loader。
|
|
74
|
+
|
|
75
|
+
普通单元格提交只走一次 `cell.setInput` Worker RPC,结果包含严格 ACK 和同一修订版投影。提交期间
|
|
76
|
+
如果用户滚动,独立的滚动投影优先,旧窗口的编辑投影不会覆盖新窗口。
|
|
77
|
+
UI Core 不再用 JavaScript 判断输入是数字还是公式,只把原字符串交给 Rust `set_cell_input`。
|
|
78
|
+
Rust 输入解析也供外部剪贴板复用;百分比输入的数值与格式在同一条命令内完成,不再追加格式 RPC。
|
|
79
|
+
|
|
80
|
+
## 撤销、重做与最近操作
|
|
81
|
+
|
|
82
|
+
- 工具栏 `Undo` / `Redo`;网格中支持 `⌘/Ctrl+Z`、`⌘/Ctrl+Shift+Z`、`Ctrl+Y`。
|
|
83
|
+
- `Recent operations` 显示操作名称、工作表、范围及已撤销状态;Escape 关闭并还原按钮焦点。
|
|
84
|
+
- 当前覆盖单格输入、格式、清除内容/格式/全部、行列尺寸、行列隐藏/恢复、粘贴、同表/跨表剪切及工作表管理。
|
|
85
|
+
- 历史由 Rust 保存,最多 50 步及约 32 MiB 估算预算;不跨刷新持久化。初始化数据不计入历史。
|
|
86
|
+
- 修改 E2 后切换 Summary,再撤销,可看到公式回到原值,当前工作表不会跳回 Sales Orders。
|
|
87
|
+
- 复制、切表保留历史;粘贴、创建/改名/删除/移动工作表均记入同一 Rust 历史栈。
|
|
88
|
+
新修改会丢弃重做分支,无变化的提交和失败操作不会。
|
|
89
|
+
- 结构撤销尽量保留当前表;撤销新增导致当前表消失时,切到相邻表 A1。恢复表保留原数据、格式和画布尺寸。
|
|
90
|
+
结构撤销/重做会使旧剪贴板失效,粘贴时提示重新复制;不会悄悄改成往其他表粘贴。
|
|
91
|
+
- 普通粘贴、选择性模式、列宽、转置、跳过空白、平铺、加减乘除均可撤销;剪切的一步撤销会恢复源格、
|
|
92
|
+
目标原值和被改写的引用公式。重做不读取系统剪贴板,旧剪切仍不能再次粘贴。
|
|
93
|
+
- 编辑框里的撤销交给浏览器处理,不应触发工作簿撤销;先提交或取消草稿再使用工具栏历史。
|
|
94
|
+
|
|
95
|
+
## 计算列演示
|
|
96
|
+
|
|
97
|
+
Summary 的 `A46:C49` 是 `CalculatedOrders`:数量 × 单价,`C47:C49` 初始为 10、40、90,
|
|
98
|
+
`B6` 显示合计 140。修改 C48 的公式会更新整列;在 B50 输入单价、A50 输入数量,可验证新行继承。
|
|
99
|
+
手工改写某格后形成例外,后续公式输入不会覆盖其它行。每次操作沿用 Rust 的一次撤销/重做。
|
|
100
|
+
种子在建表后调用原生输入建立计算列,不在 React 生成逐行公式;初始化不计入历史。
|
|
101
|
+
|
|
102
|
+
## 目录结构
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
src/
|
|
106
|
+
├── main.tsx
|
|
107
|
+
├── app/ # 演示站入口和全局样式
|
|
108
|
+
├── i18n/ # Lingui 界面语言与中英文 PO 词典
|
|
109
|
+
├── page/
|
|
110
|
+
│ ├── DemoPage.tsx # 左侧导航与当前 demo 内容
|
|
111
|
+
│ ├── PageSidebar.tsx # 根据注册表渲染 demo 菜单
|
|
112
|
+
│ ├── WorkbookRuntimeProvider.tsx # 共享 Rust runtime 的挂载边界
|
|
113
|
+
│ ├── WorkbookStoreProvider.tsx # 测试与受控消费者的 Store 注入边界
|
|
114
|
+
│ └── demo/
|
|
115
|
+
│ ├── demo-registry.ts # demo 注册与 URL 解析
|
|
116
|
+
│ └── sales-orders/
|
|
117
|
+
│ ├── PageSalesOrders.tsx # Sales Orders 页面组件
|
|
118
|
+
│ ├── sales-orders-workbook.ts # 纯工作簿定义
|
|
119
|
+
│ └── data/ # 唯一 schema 与 Rust 导入数据
|
|
120
|
+
└── workbook/
|
|
121
|
+
├── shell/ # 所有 demo 共用的工作簿视图组合
|
|
122
|
+
├── chrome/
|
|
123
|
+
│ ├── header/ # 通用工作簿身份区
|
|
124
|
+
│ ├── ribbon/ # 通用命令入口展示
|
|
125
|
+
│ ├── formula-bar/ # 通用名称框与公式编辑
|
|
126
|
+
│ └── footer/ # 通用工作表标签与状态栏
|
|
127
|
+
├── grid/
|
|
128
|
+
│ ├── cells/ # 投影单元格表格
|
|
129
|
+
│ ├── editor/ # 单元格内编辑器
|
|
130
|
+
│ └── viewport/ # 通用网格窗口与 DOM 事件适配
|
|
131
|
+
├── projection/ # 可见窗口与投影的 React 接入
|
|
132
|
+
├── clipboard/ # 浏览器剪贴板与网格事件适配
|
|
133
|
+
└── selection/ # pointer 手势的 React 事件适配
|
|
134
|
+
|
|
135
|
+
test/
|
|
136
|
+
├── app/ # demo 选择与页面外壳测试
|
|
137
|
+
├── page/ # 共享 runtime、demo 数据和 Store 隔离测试
|
|
138
|
+
└── workbook/
|
|
139
|
+
├── editing/ # 编辑交互与并发滚动测试
|
|
140
|
+
├── projection/ # 可见窗口和滚动测试
|
|
141
|
+
└── selection/ # 点击、拖选和取消测试
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
产品内部使用精确的相对路径;包根只公开 Spreadsheet、三个装配组件及其 Props 类型。
|
|
145
|
+
|
|
146
|
+
## 新增 demo
|
|
147
|
+
|
|
148
|
+
新增第二个 demo 时,新增一个显式 `PageXxx.tsx` 页面组件、一个 `RustWorkbookDefinition` 和对应
|
|
149
|
+
数据文件。页面只组合共享的 `WorkbookRuntimeProvider` 与 `WorkbookView`,然后在
|
|
150
|
+
`demo-registry.ts` 注册页面组件。不要为 demo 新增 runtime、Worker 或专属 Workbook 视图;
|
|
151
|
+
`App.tsx`、`DemoPage.tsx`、`WorkbookRuntimeProvider.tsx` 与 `workbook/**` 都不需要修改。
|
|
152
|
+
|
|
153
|
+
## 启动与验证
|
|
154
|
+
|
|
155
|
+
开发环境要求 Node.js **22.19+**、pnpm 10。当前主线使用 Vite 8、React 插件 6、Vitest 5;
|
|
156
|
+
暂停中的 Solid/Vue 应用不随本轮迁移。仓库根 `vitest.config.ts` 通过 `test.projects` 统一运行主线测试。
|
|
157
|
+
|
|
158
|
+
### 界面语言
|
|
159
|
+
|
|
160
|
+
右上角选择 English/中文,或打开 `/?locale=zh-CN`、`/?locale=en-US`。
|
|
161
|
+
初始化优先级是 URL、已保存的语言偏好、浏览器语言,最后回退英文;不支持的语言会跳过。
|
|
162
|
+
切换时保存偏好,已有 `locale` 参数也会同步,刷新后不反跳。存储被禁用时仍能切换。
|
|
163
|
+
|
|
164
|
+
覆盖工具栏、现有功能弹窗、统计详情、工作表操作、加载状态及可访问标签。
|
|
165
|
+
编辑拒绝、复制粘贴、定位、排序筛选、文件恢复等已知提示在显示时翻译;
|
|
166
|
+
Core/Rust 返回值不变,未知诊断保留原文,不能据词典“缺失为零”宣称所有底层异常已翻译。
|
|
167
|
+
原始数据、表名、公式函数名和工作簿数字格式语义不翻译。
|
|
168
|
+
|
|
169
|
+
库组件默认各用独立 Lingui 实例;只有宿主显式注入同一个 I18n 才共享语言。
|
|
170
|
+
各工作簿必须使用不同 Store 与 Rust runtime,demo 的 URL/存储语言策略只属于演示站。
|
|
171
|
+
使用官方 `I18nProvider`、`useLingui`/`Trans`/`msg`,不新增语言 atom 或自定义翻译 Hook。
|
|
172
|
+
Vite 与 Vitest 共用官方 Lingui 插件的原生宏转换,直接编译 `.po`,修改词典走 Vite 热更新,
|
|
173
|
+
不提交另一份编译后的 JS 词典,也不依赖 Babel 宏插件。
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
pnpm --filter @einfach-excel/react-excel i18n:extract # 从源码提取并清理词条
|
|
177
|
+
# 编辑 src/i18n/locales/zh/messages.po,再检查缺失/非法翻译
|
|
178
|
+
pnpm --filter @einfach-excel/react-excel i18n:check
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
生产构建也会拒绝词典缺失和编译错误。新增文案必须用可静态提取的宏,
|
|
182
|
+
模块级菜单用 `msg` 保存描述符、渲染时 `i18n._()`,不能提前翻译或用动态字符串充当消息 ID。
|
|
183
|
+
Core 的已知提示收在 `i18n/feedback-messages.ts`,带参数结果由 `translate-feedback.ts` 精确匹配。
|
|
184
|
+
这两个文件只处理展现文案,不能用于翻译用户数据。新增提示应补提取词条及对应回归。
|
|
185
|
+
`test/i18n/source-copy.test.ts` 阻止产品 JSX 和可访问标签重新出现未标记的英文常量。
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
pnpm --filter @einfach-excel/excel-wasm build:wasm # Rust 源码变化后重建本地 WASM
|
|
189
|
+
pnpm --filter @einfach-excel/react-excel dev
|
|
190
|
+
pnpm --filter @einfach-excel/react-excel typecheck
|
|
191
|
+
pnpm --filter @einfach-excel/react-excel test
|
|
192
|
+
pnpm check:e2e-features # 功能点逐项对应可执行 E2E,不代表已运行通过
|
|
193
|
+
pnpm --filter @einfach-excel/react-excel e2e:install # 首次运行或 Playwright 升级后安装配套浏览器
|
|
194
|
+
pnpm --filter @einfach-excel/react-excel e2e
|
|
195
|
+
pnpm --filter @einfach-excel/react-excel e2e:serial # 长时间卡顿排查才使用单 worker 全量
|
|
196
|
+
pnpm --filter @einfach-excel/react-excel e2e:input-stall # 原两处卡顿场景专项,固定单 worker
|
|
197
|
+
pnpm --filter @einfach-excel/react-excel build
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
开发服务器地址为 `http://127.0.0.1:5183`。
|
|
201
|
+
|
|
202
|
+
React 测试覆盖 demo 数据、共享启动生命周期、Store 隔离、选区交互、可见窗口投影、连续单元格编辑,
|
|
203
|
+
以及 mutation 等待期间滚动后仍保持最新窗口等场景。UI-core 的 command atom 测试位于
|
|
204
|
+
`excel/spreadsheet-ui-core/test/`。
|
|
205
|
+
|
|
206
|
+
功能点与独立主用例登记在 [E2E 对照表](e2e/FEATURES.md)。鼠标 Shift 点击、键盘 Shift 扩选、
|
|
207
|
+
Shift 行列头扩选分别验收,不能互相替代。`e2e` 命令会先检查缺失/改名/重复绑定/跳过用例;
|
|
208
|
+
CI 也运行此元数据门禁。历史细项仍在逐项回填,不凭 E2E 总数宣称所有交互已覆盖。
|
|
209
|
+
真实执行后用 `pnpm check:e2e-features --results /path/to/playwright.json` 核对报告中的逐项结果。
|
|
210
|
+
|
|
211
|
+
日常 E2E 本地默认 2 个 worker,CI 每个 runner 默认 1 个,通过 4 个 runner 并发;文件内保持顺序,
|
|
212
|
+
可用 `--workers=4` 覆盖,但应按机器内存实测,避免同时加载多份 WASM 后反而变慢。
|
|
213
|
+
每个用例使用独立浏览器上下文,截图/下载写入各自的测试目录;
|
|
214
|
+
同一运行的 worker 共用只读页面服务,不为每个 worker 重建消费者。
|
|
215
|
+
不要同时启动两个使用默认端口和输出目录的本地 E2E 命令。
|
|
216
|
+
|
|
217
|
+
CI 将全量按文件拆为 4 个独立 runner,分别准备真实包消费者,保留各分片的 blob 和失败证据。
|
|
218
|
+
全部分片结束后合并为一份 JSON,再运行上述功能结果门禁;缺少分片报告、任一分片失败,或已登记
|
|
219
|
+
主用例失败/跳过/重试,都不能通过汇总门禁。串行专项保持独立,不把日常并发通过当作历史偶发卡顿已修复。
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
import { type WorkbookRuntimeProviderProps } from './page/WorkbookRuntimeProvider';
|
|
3
|
+
export interface SpreadsheetProps extends Omit<WorkbookRuntimeProviderProps, 'children'> {
|
|
4
|
+
readonly className?: string;
|
|
5
|
+
readonly style?: CSSProperties;
|
|
6
|
+
}
|
|
7
|
+
/** React 只组合完整视图;文档初始化与 Worker 所有权由现有 Core runtime 负责。 */
|
|
8
|
+
export declare function Spreadsheet({ className, style, ...runtime }: SpreadsheetProps): ReactNode;
|