@supos-grid-table/core 0.0.0-stage → 0.1.0-alpha.1

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 supOS
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/README.md CHANGED
@@ -1,3 +1,91 @@
1
- # Temporary Holding Version
1
+ # @supos-grid-table/core
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 免费、MIT、可用于商业应用的 UNS 多维表格基础组件与独立运行时。当前版本为 **alpha**;它不是完整 Teable 服务端,也不附带未经确认的 supOS 数据写入接口。
4
+
5
+ ## 使用
6
+
7
+ ```tsx
8
+ import { MultiTableApp } from '@supos-grid-table/core/react';
9
+ import '@supos-grid-table/core/style.css';
10
+
11
+ <MultiTableApp endpoint="/api/multitable" />;
12
+ ```
13
+
14
+ 前端要求 React 18.3 或 19,服务端/构建要求 Node 22.19+ 或 Bun。子路径 `./grid` 提供独立 Canvas Grid,`./server` 不引入浏览器代码,根入口只导出模型、公式、查询与校验。应用可以直接组合 Grid、字段编辑器、业务页面及自己的前端路由;不要求使用完整默认页面。
15
+
16
+ ```ts
17
+ import { TableRuntime, UnsAdapter } from '@supos-grid-table/core/server';
18
+
19
+ const adapter = new UnsAdapter(
20
+ { write: true, conditionalWrite: true, atomicBatch: true },
21
+ {
22
+ read: (actor, base) => readAllAuthorizedUnsRecords(actor, base),
23
+ commit: (base, actor, request) => commitUnsAtomicallyWithCasAndIdempotency(base, actor, request),
24
+ onChange: (invalidate) => subscribeUnsChanges(invalidate),
25
+ },
26
+ );
27
+ const runtime = new TableRuntime({
28
+ base,
29
+ adapter,
30
+ authorize: authenticateUsingYourAppSso,
31
+ saveBase: persistConfigWithVersionCheck,
32
+ });
33
+ // Mount under /api/multitable/* using the host's standard Request/Response API.
34
+ return runtime.handle(request);
35
+ ```
36
+
37
+ 示例中的 read/commit/SSO/config/subscribe 函数由宿主应用实现,**不是 supOS 已有接口名称**。版本校验、原子事务、提交 ID 去重必须由 UNS 权威存储完成。配置路径不是业务数据库;实际部署需要为其配置持久化。禁止先读后无条件覆盖来代替 CAS。
38
+
39
+ ## 模型与计算
40
+
41
+ `Base` 包含 `tables`,每张表配置稳定 ID 的 `fields` 与 `views`。`Dataset` 是 `{ [tableId]: Row[] }`,每条记录为 `{ id, version, values: { [fieldId]: value } }`。正式适配器必须读完完整授权查询数据;不接受只传可见页做统计。当前基于完整快照计算,适用于受控规模的业务轻应用,尚未实现海量数据服务端分页/增量计算。
42
+
43
+ ```json
44
+ {
45
+ "id": "stock", "name": "库存", "version": "1",
46
+ "tables": [
47
+ {
48
+ "id": "products", "name": "商品",
49
+ "fields": [
50
+ { "id": "name", "name": "商品名称", "type": "text", "required": true },
51
+ { "id": "quantity", "name": "库存数量", "type": "number" },
52
+ { "id": "safety", "name": "安全库存", "type": "number" },
53
+ { "id": "gap", "name": "补货缺口", "type": "formula", "formula": "MAX(0, {safety} - {quantity})" }
54
+ ],
55
+ "views": [{ "id": "all", "name": "全部商品", "type": "grid" }]
56
+ }
57
+ ]
58
+ }
59
+ ```
60
+
61
+ - 字段:text、textarea、number、boolean、date(`yyyy-MM-dd`)、select、multiSelect、relation、formula、lookup、rollup。
62
+ - 关联:`relation: { tableId, multiple }`,值为稳定记录 ID 数组。单选关系只允许最多一项。lookup/rollup 配置 `{ relationFieldId, targetFieldId, aggregate }`,aggregate 支持 sum/count/min/max/average。不自动创建逆向引用;双向关系需业务适配器在同一事务维护。
63
+ - 公式:`{fieldId}` 引用 ID,支持算术、比较、`&` 拼接,以及 IF、AND、OR、NOT、ISBLANK、SUM、COUNT、MIN、MAX、AVERAGE、ABS、ROUND、CONCAT。结构化解析,不执行 JS;缺失引用、循环和除零返回错误。配置检查采用字段依赖图,禁止循环关系计算。
64
+ - 视图:grid、kanban、form、calendar、dashboard;配置 filters、sorts、groupBy、fieldOrder、hiddenFields、widths、freezeColumns、dateFieldId。表格复制为 TSV、粘贴批量字段更新;关联/多选粘贴需使用详情表单。撤销重做最多 50 步,包含版本条件写入。看板拖动单选分组字段改变状态。
65
+ - 表单:响应式字段、关联选择、关联子记录草稿;关联记录随主记录原子提交,缺少原子批量能力时不可创建子记录。
66
+ - 协同:SSE 数据失效通知、在线客户端与位置、重连刷新、CAS 冲突反馈与输入保留。不是字符级 OT/CRDT 文本编辑器。
67
+
68
+ ## 数据与权限
69
+
70
+ 服务端 `authorize` 必须从可信身份系统读取角色 `read`、`write`、`configure`,不能读取客户端 body 角色。行级权限、UNS 对象授权、所有写者并发控制由适配器实现。前端隐藏按钮不是权限控制。
71
+
72
+ `MemoryAdapter` 明确用于测试/演示,重启后重置。它不会被自动选作 UNS 失败的替代存储。`copyTemplate` 仅复制模型/视图,清除数据绑定,不复制 Dataset。业务记录和凭据不得进入应用模板源码。
73
+
74
+ ## 源码与许可
75
+
76
+ Grid 来源于 [Teable packages/sdk](https://github.com/teableio/teable/tree/fc4126e945a212aa637c4134c373416df69bb982/packages/sdk/src/components/grid),固定提交、原文件 SHA256 见 `UPSTREAM.json`;源 MIT 许可证见 `licenses/Teable-MIT.txt`。本包未复制 Teable AGPL 的 apps 应用或后端,不使用其品牌资产。
77
+
78
+ 抽取调整包括:用本地 UI/图标/方向/类型适配器解除应用 Context 依赖、将纯声明键值枚举改为字面量、以 React Pointer Events 替换旧 React Hammer 包。自有多表模型、业务运行时与 React 页面使用根 LICENSE。第三方依赖各自许可证随 `licenses` 清单一并核对。
79
+
80
+ ## 开发验证
81
+
82
+ 在 app-builder 的 frontend-new 工作区运行:
83
+
84
+ ```sh
85
+ pnpm --filter @supos-grid-table/core check
86
+ pnpm --filter @supos-grid-table/core test
87
+ pnpm --filter @supos-grid-table/core build
88
+ pnpm --filter multitable-demo dev
89
+ ```
90
+
91
+ 仓库根目录 `tools/multitable_browser_check.py` 验证独立演示站。真实 UNS CRUD/CAS、实际 supOS SSO、持久化挂载、安装包及 Pi 模型生成需要目标环境联调,不能由内存适配器测试替代。
package/UPSTREAM.json ADDED
@@ -0,0 +1,363 @@
1
+ {
2
+ "repository": "https://github.com/teableio/teable",
3
+ "commit": "fc4126e945a212aa637c4134c373416df69bb982",
4
+ "license": "MIT",
5
+ "files": [
6
+ {
7
+ "path": "packages/sdk/src/components/grid/CellScroller.tsx",
8
+ "sha256": "96c8bdaf4af0ab68884ee637f7529eb6f3b6ef15da1aa576a84924d95fd2cf1e"
9
+ },
10
+ {
11
+ "path": "packages/sdk/src/components/grid/components/editor/BooleanEditor.tsx",
12
+ "sha256": "8378384dd35802b21eb8212cb8b0f15578148471533e4db7d50af521396eaade"
13
+ },
14
+ {
15
+ "path": "packages/sdk/src/components/grid/components/editor/EditorContainer.tsx",
16
+ "sha256": "52af1fcd37cadb61a7785bf0bcd313272386b7b02d209d630dd4ba75616c8fcd"
17
+ },
18
+ {
19
+ "path": "packages/sdk/src/components/grid/components/editor/index.ts",
20
+ "sha256": "f7f594f9d6f11fef8d6f5dcfe0a03b7fc2b01ce9b5fd694a7336e7e247da1126"
21
+ },
22
+ {
23
+ "path": "packages/sdk/src/components/grid/components/editor/RatingEditor.tsx",
24
+ "sha256": "6eab0da998364e2b70f56975a73c37b1b524f36102985e20e07601667b02fa9e"
25
+ },
26
+ {
27
+ "path": "packages/sdk/src/components/grid/components/editor/SelectEditor.tsx",
28
+ "sha256": "a6ce483228612a993c58ebbdf27ea54e71f18f283bcf7ffc2cee7670a1456768"
29
+ },
30
+ {
31
+ "path": "packages/sdk/src/components/grid/components/editor/TextEditor.tsx",
32
+ "sha256": "897f3435f3ee604ff955e93cdfb009c4e1b70914701964f7c29ea184e24b2465"
33
+ },
34
+ {
35
+ "path": "packages/sdk/src/components/grid/components/ErrorIndicator.tsx",
36
+ "sha256": "c97a936f83c6464bd2e8b2697d0824a6830621c170f34468888c2cac8eb77114"
37
+ },
38
+ {
39
+ "path": "packages/sdk/src/components/grid/components/index.ts",
40
+ "sha256": "12433f624a1068ce103bff207036851fe18badb3ce567eefe7e82b42f72d9717"
41
+ },
42
+ {
43
+ "path": "packages/sdk/src/components/grid/components/LoadingIndicator.tsx",
44
+ "sha256": "de82fe4b500366a7022eee8d4e8e08dcb6ef0943a12079cd542c7611faca29ae"
45
+ },
46
+ {
47
+ "path": "packages/sdk/src/components/grid/configs/grid.ts",
48
+ "sha256": "1047bd6580ecba693fbf4362cc23306526cb28057df61623b28176db3be7e558"
49
+ },
50
+ {
51
+ "path": "packages/sdk/src/components/grid/configs/gridTheme.ts",
52
+ "sha256": "d805ab98c868b06b8a46d2967388b2a42599c27b74db65475dbc0c463ef824a6"
53
+ },
54
+ {
55
+ "path": "packages/sdk/src/components/grid/configs/index.ts",
56
+ "sha256": "200c9a3c5ba001b0eb0c5faa8ecc8e6adac37a207c2c46dc41dede04bba7c892"
57
+ },
58
+ {
59
+ "path": "packages/sdk/src/components/grid/Grid.tsx",
60
+ "sha256": "ae1576f25c4340de2169cecb38baed12d607de8e0dcb76d9460fdc566e86d2d1"
61
+ },
62
+ {
63
+ "path": "packages/sdk/src/components/grid/hooks/index.ts",
64
+ "sha256": "f84c6015c42036b6037dc79726c64c3ca6f9ef2eccecf3b85356cb30d433207f"
65
+ },
66
+ {
67
+ "path": "packages/sdk/src/components/grid/hooks/useAutoScroll.ts",
68
+ "sha256": "7fa92c83c21bc9a7c3fc614455303481bbc08440ec5dbe8f5e10eebc34fc8e0c"
69
+ },
70
+ {
71
+ "path": "packages/sdk/src/components/grid/hooks/useColumnFreeze.ts",
72
+ "sha256": "2f0cf317789fd53e6929fe7aa7d9b120ea6b5f8c8fe9c1096a7f9c6b05baac01"
73
+ },
74
+ {
75
+ "path": "packages/sdk/src/components/grid/hooks/useColumnResize.ts",
76
+ "sha256": "9dc3e2da38c83672fefa5631302b37535b2a014fdae29b27b2b9d31acccbfdb1"
77
+ },
78
+ {
79
+ "path": "packages/sdk/src/components/grid/hooks/useDrag.ts",
80
+ "sha256": "2b51a2159ac8f03b9a103c35a9aa0e95887f711b0d09028a489919ce418d86bd"
81
+ },
82
+ {
83
+ "path": "packages/sdk/src/components/grid/hooks/useEventListener.ts",
84
+ "sha256": "45768ac9e71a0e55e0661b9cbbc6a4e9e006533ec52fc3998bfabf341e1d5555"
85
+ },
86
+ {
87
+ "path": "packages/sdk/src/components/grid/hooks/useKeyboardSelection.ts",
88
+ "sha256": "1c9a2d9f7ba367f283ae04829bcb970a0271f1b8d29254e05e24272a436b8ef4"
89
+ },
90
+ {
91
+ "path": "packages/sdk/src/components/grid/hooks/useResizeObserver.ts",
92
+ "sha256": "723ee9235d56526690a40302cf45731211940e54975810bc10bc96f16b3796ab"
93
+ },
94
+ {
95
+ "path": "packages/sdk/src/components/grid/hooks/useScrollFrameRate.ts",
96
+ "sha256": "e29e3a783b01a3e9a4f51422f8cb4bce9195b212c816e7cd19623bc5e2d78f24"
97
+ },
98
+ {
99
+ "path": "packages/sdk/src/components/grid/hooks/useSelection.ts",
100
+ "sha256": "ced8ec8a099bec3fae1a3d47cfc06a419c6875ce44e0d460911c1784ca4d4478"
101
+ },
102
+ {
103
+ "path": "packages/sdk/src/components/grid/hooks/useVisibleRegion.ts",
104
+ "sha256": "88769d588c62f96ad77849529950e1b9338d6b03991c5f8cb5053ea54fafb427"
105
+ },
106
+ {
107
+ "path": "packages/sdk/src/components/grid/index.ts",
108
+ "sha256": "9b3f2d69686b96558244ed86ebe741f99b44ecaf787fd510265de95d3511a1df"
109
+ },
110
+ {
111
+ "path": "packages/sdk/src/components/grid/InfiniteScroller.tsx",
112
+ "sha256": "10c14c0880cbc2d2997bbfffcc9ca02d78d27422ed5ea06d3157c34fc6fab3f0"
113
+ },
114
+ {
115
+ "path": "packages/sdk/src/components/grid/InteractionLayer.tsx",
116
+ "sha256": "d9e122f3e32c0fc5cc3060eb601b1e18e9d59b522c4933aa715ba3d235a9c808"
117
+ },
118
+ {
119
+ "path": "packages/sdk/src/components/grid/interface.ts",
120
+ "sha256": "91ec46e8d6b88b32cc5e5ef692cd042a9cd06e15adfa8adf0e8aaa8e1e104653"
121
+ },
122
+ {
123
+ "path": "packages/sdk/src/components/grid/managers/coordinate-manager/Coordinate-manager.spec.ts",
124
+ "sha256": "230d82f1ecb1181172871a67e6f7622f25fdeb3a936ea73972cc9d14eae77294"
125
+ },
126
+ {
127
+ "path": "packages/sdk/src/components/grid/managers/coordinate-manager/CoordinateManager.ts",
128
+ "sha256": "f02189ceb4a928431371743bf20e28dfdee1926e3003dc408fc509d8f58a54bd"
129
+ },
130
+ {
131
+ "path": "packages/sdk/src/components/grid/managers/coordinate-manager/index.ts",
132
+ "sha256": "65ad1d79b0387e4a8d6edbe8a2f799e05838626279b22d33efede8c8febd4a26"
133
+ },
134
+ {
135
+ "path": "packages/sdk/src/components/grid/managers/coordinate-manager/interface.ts",
136
+ "sha256": "139200e037ea47227187e42200f662bc1cde2dc5f4743084129151f4c2c5b31b"
137
+ },
138
+ {
139
+ "path": "packages/sdk/src/components/grid/managers/image-manager/ImageManager.spec.ts",
140
+ "sha256": "34fcb7c8c6a5bde618b9f080010a9c7a366192c79f13463753554abc563af374"
141
+ },
142
+ {
143
+ "path": "packages/sdk/src/components/grid/managers/image-manager/ImageManager.ts",
144
+ "sha256": "022c9c5253439605c69d8e10c8cd94b0570ce1ec90beece49df8a2c897a95a4d"
145
+ },
146
+ {
147
+ "path": "packages/sdk/src/components/grid/managers/image-manager/index.ts",
148
+ "sha256": "f0109eacf579fb37ea2f2f5232c50ffd4cd803035c998272d729cbfc6c833e5c"
149
+ },
150
+ {
151
+ "path": "packages/sdk/src/components/grid/managers/index.ts",
152
+ "sha256": "07c79d397dbfed9adcb19a32b487582e4b31b4397ab746d89346b0ddd061f026"
153
+ },
154
+ {
155
+ "path": "packages/sdk/src/components/grid/managers/performance-tracker/index.ts",
156
+ "sha256": "5024cc7870cb4d579106f9c628ff6129d774a8388a232f5a854bbac51021313e"
157
+ },
158
+ {
159
+ "path": "packages/sdk/src/components/grid/managers/performance-tracker/PerformanceTracker.ts",
160
+ "sha256": "401848bcd114a46d18e901fd699d81b59d3b6a673454441d841ac0e71acf0410"
161
+ },
162
+ {
163
+ "path": "packages/sdk/src/components/grid/managers/selection-manager/CombinedSelection.ts",
164
+ "sha256": "47c176162891e13f2706f1368bd173be4c373c86d8035d1698d24ad5c435f58a"
165
+ },
166
+ {
167
+ "path": "packages/sdk/src/components/grid/managers/selection-manager/index.ts",
168
+ "sha256": "d2b8ada435ebd15c8668ebbf8d0e0e2cff42fa718870238a4bad04cc7d9a58e9"
169
+ },
170
+ {
171
+ "path": "packages/sdk/src/components/grid/managers/sprite-manager/index.ts",
172
+ "sha256": "da120af4c50a8e270d7ebb47ddead07edf4d48e79091895e41ddd228eb0dcee9"
173
+ },
174
+ {
175
+ "path": "packages/sdk/src/components/grid/managers/sprite-manager/SpriteManager.ts",
176
+ "sha256": "7feec9b697fdc23eb15de11058e2e273b345dbf553c90e50763ab864d46dec28"
177
+ },
178
+ {
179
+ "path": "packages/sdk/src/components/grid/managers/sprite-manager/sprites.tsx",
180
+ "sha256": "66d51ef7eb1bb2456d3e2cadf35070c84b6d55877ca12527e28b252f8cea1e0d"
181
+ },
182
+ {
183
+ "path": "packages/sdk/src/components/grid/renderers/base-renderer/baseRenderer.spec.ts",
184
+ "sha256": "2aecd298db281f06cb20697c78440716675603ddad7afb39db19fc4e7da2f50d"
185
+ },
186
+ {
187
+ "path": "packages/sdk/src/components/grid/renderers/base-renderer/baseRenderer.ts",
188
+ "sha256": "fae26281d38f4bdab5f73b17307882caf4a3f8c3dc0c3ad6da99ea350ad979f5"
189
+ },
190
+ {
191
+ "path": "packages/sdk/src/components/grid/renderers/base-renderer/index.ts",
192
+ "sha256": "f725a09c21a3cd53cdabdc39ec0f4d1be3e86ace17f85252b3b971048a41e8cf"
193
+ },
194
+ {
195
+ "path": "packages/sdk/src/components/grid/renderers/base-renderer/interface.ts",
196
+ "sha256": "c238c69797f3dc0209210b6a96046d4cd9e55b8b286cfd1ef2d0d43d6faadc96"
197
+ },
198
+ {
199
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/booleanCellRenderer.ts",
200
+ "sha256": "9daa1f59f876d64d6d2106aa5316ad4d83c7c1dc43c80c7d126a5510750048cc"
201
+ },
202
+ {
203
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/buttonCellRenderer.ts",
204
+ "sha256": "d9e0d65cea3c30280fc97056121dd979096b1dc278eeb97e31ecf4d8b9bef622"
205
+ },
206
+ {
207
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/chartCellRenderer.ts",
208
+ "sha256": "848aa65873e81c85413053e341f2b53b1c392e0671a3edfe6bc3bb66521c69d2"
209
+ },
210
+ {
211
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/imageCellRenderer.ts",
212
+ "sha256": "c3501dd5a75038111da466b813f6753d188c06fc198e6acd6c42efdf774b64de"
213
+ },
214
+ {
215
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/index.ts",
216
+ "sha256": "ec4c8da19e5c90c003dee52b6e0ba507b82c843a6cad80aefc8fa48890d5ad7a"
217
+ },
218
+ {
219
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/interface.ts",
220
+ "sha256": "c2d5df846d9e75ea375c472d54990981e4e358fd74b269525cc8f297d127d3f2"
221
+ },
222
+ {
223
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/linkCellRenderer.ts",
224
+ "sha256": "3af13e1562ac42cc8febaf64ba0dcd45a032e24426b03eb0508fbb8799948ec3"
225
+ },
226
+ {
227
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/loadingCellRenderer.ts",
228
+ "sha256": "7d9f26b88fd85310a6f73f53b8e442da5e1fc709ae095819d2b2bf7df769af79"
229
+ },
230
+ {
231
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/numberCellRenderer.ts",
232
+ "sha256": "bf0adcd3b1440a3948873291500a9b4e63b5a96f85aa10fb58ff7af50f4d7205"
233
+ },
234
+ {
235
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/ratingCellRenderer.ts",
236
+ "sha256": "21eed9d74bb30e285915e20789b5a2c7f1931f29d3a6a40c0150419c953eadeb"
237
+ },
238
+ {
239
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/selectCellRenderer.ts",
240
+ "sha256": "14a2a95dda85800d25596e3e3c1e855f38fa59597d640638342294b0b0b2d14e"
241
+ },
242
+ {
243
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/textCellRenderer.spec.ts",
244
+ "sha256": "cff84fb000fdbdb478273104f13374f6c97e224f64378d34f7b28b03797924fc"
245
+ },
246
+ {
247
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/textCellRenderer.ts",
248
+ "sha256": "be370a36a483d2fe69380068421e194f4db12cc18e1953a88b6f0b812be99b57"
249
+ },
250
+ {
251
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/userCellRenderer.ts",
252
+ "sha256": "28a685741c754f43fe0ff88582900589e786b9b2a2fe5e07a209dace402cf4ad"
253
+ },
254
+ {
255
+ "path": "packages/sdk/src/components/grid/renderers/cell-renderer/utils.ts",
256
+ "sha256": "8ea59b12b3b598579174ddf1cab1c312fb8f6afe0389eb88de0410e9174917c1"
257
+ },
258
+ {
259
+ "path": "packages/sdk/src/components/grid/renderers/index.ts",
260
+ "sha256": "a88a13ae5d28ef1291d8b7a7b7fccb794c3f86c94b24c9005747c2ed75b0e333"
261
+ },
262
+ {
263
+ "path": "packages/sdk/src/components/grid/renderers/layout-renderer/index.ts",
264
+ "sha256": "99ef27c1dd391c567890cf115ef73105607ccb60f420894ca558537ddd09a310"
265
+ },
266
+ {
267
+ "path": "packages/sdk/src/components/grid/renderers/layout-renderer/interface.ts",
268
+ "sha256": "5f70961e5afde2df87228ae7fbfaf662c85d50a060538fefef4868bf757cb88a"
269
+ },
270
+ {
271
+ "path": "packages/sdk/src/components/grid/renderers/layout-renderer/layoutRenderer.ts",
272
+ "sha256": "36077123c30b1b644fcbed9f6cf00c7c6d1c47137e7bd150f277d4030fda2689"
273
+ },
274
+ {
275
+ "path": "packages/sdk/src/components/grid/RenderLayer.tsx",
276
+ "sha256": "b5c412a4ea7f3bb00690fa014b8d702d27f42a74041b34d93b84c37e4e04114a"
277
+ },
278
+ {
279
+ "path": "packages/sdk/src/components/grid/TouchLayer.tsx",
280
+ "sha256": "94d93a47c582e88b6b6310b13051776eb796a65e56cce796e155e18ac51d29c0"
281
+ },
282
+ {
283
+ "path": "packages/sdk/src/components/grid/utils/element.ts",
284
+ "sha256": "1eeb5407ffd6796dd06fdd1a188144ee9f4092de48a7dcdb0c389d7871e4c0d4"
285
+ },
286
+ {
287
+ "path": "packages/sdk/src/components/grid/utils/freeze.spec.ts",
288
+ "sha256": "8ae490aaa4d3f831d62d8bdb1c9d49ddc8b59c76610abd0fe7aef708d79571d9"
289
+ },
290
+ {
291
+ "path": "packages/sdk/src/components/grid/utils/freeze.ts",
292
+ "sha256": "72465b7aabc0151cd060503be8341657b3c0f18c8f57600a392db37128d19e6d"
293
+ },
294
+ {
295
+ "path": "packages/sdk/src/components/grid/utils/group.ts",
296
+ "sha256": "55828b66e49148cfa3590e99781fd97f381f8b5062ee678d0da6e401a877125c"
297
+ },
298
+ {
299
+ "path": "packages/sdk/src/components/grid/utils/hotkey.ts",
300
+ "sha256": "227b6a7f3dac1f58a19177799f6eb7a227dc5cc1f7bce55e570558371b9e6621"
301
+ },
302
+ {
303
+ "path": "packages/sdk/src/components/grid/utils/index.ts",
304
+ "sha256": "1ae31cfda85b596ea848854cb5e5bd35c54d5a14953c5f5f52e2631f997b97bb"
305
+ },
306
+ {
307
+ "path": "packages/sdk/src/components/grid/utils/measure.ts",
308
+ "sha256": "dd595f72426d8f789800d2a90be48d265e373896ef8d6603738208053390cc42"
309
+ },
310
+ {
311
+ "path": "packages/sdk/src/components/grid/utils/paste.spec.ts",
312
+ "sha256": "f5377c264fed05099c21330f137a21637206a32eac1a137502ee9c4969ab7aad"
313
+ },
314
+ {
315
+ "path": "packages/sdk/src/components/grid/utils/paste.ts",
316
+ "sha256": "7b34f225c60ccc0ae7242dc0b89353d9c6d4edddff39e5c5ab83ce32af15af75"
317
+ },
318
+ {
319
+ "path": "packages/sdk/src/components/grid/utils/range.ts",
320
+ "sha256": "852fa8e10ed4afa43fc8734ce72a8d18e93642fb2d53cbbd00cd96d545737347"
321
+ },
322
+ {
323
+ "path": "packages/sdk/src/components/grid/utils/region.spec.ts",
324
+ "sha256": "31c2f427bc7b2120157f5c779ba9947edde8d39ed210d10526be8c88a6a0678c"
325
+ },
326
+ {
327
+ "path": "packages/sdk/src/components/grid/utils/region.ts",
328
+ "sha256": "cf3fe16d5172fcbac4ad158c089920fea77c7b68268b9f2ecb6306865dee6642"
329
+ },
330
+ {
331
+ "path": "packages/sdk/src/components/grid/utils/rowControl.spec.ts",
332
+ "sha256": "cfc6dce7e51fc9577bb9b6d8b0acaabc8dc3d7d8ef696f23dae8a72c77ad2f0f"
333
+ },
334
+ {
335
+ "path": "packages/sdk/src/components/grid/utils/rowControl.ts",
336
+ "sha256": "56f44c65e8246086a48c6f0ad6d481a081b2a4413be3b295fa8dc5ebfa7a315a"
337
+ },
338
+ {
339
+ "path": "packages/sdk/src/components/grid/utils/scrollbar.spec.ts",
340
+ "sha256": "94476ee554a5220ee50bfa0da5e636d808597a324417ee348eeed4cee2323ada"
341
+ },
342
+ {
343
+ "path": "packages/sdk/src/components/grid/utils/scrollbar.ts",
344
+ "sha256": "775e281ab1d02ee2c13d3c3fcb5a39a93b580965c8f5439e1c7b06f3263ac105"
345
+ },
346
+ {
347
+ "path": "packages/sdk/src/components/grid/utils/utils.ts",
348
+ "sha256": "b11de44f795eed004b08fe3fb4fde14411f8a81fac119e543b2c83a46cdb372e"
349
+ },
350
+ {
351
+ "path": "packages/sdk/src/utils/text-direction.ts",
352
+ "sha256": "f028d6e6de2604b7deff5716587a531d206b7b824586c052a2b9aff0dee5c791"
353
+ },
354
+ {
355
+ "path": "packages/sdk/src/utils/find-urls.ts",
356
+ "sha256": "3b08fcabc86cb28d70d17814d70d23c00a2b993b4f6dbd96ffe093876f365df1"
357
+ }
358
+ ],
359
+ "changes": [
360
+ "External app imports replaced with local adapters",
361
+ "Pure direction helper retained"
362
+ ]
363
+ }