@veltra/sheet 2.0.1 → 2.2.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.
Files changed (339) hide show
  1. package/dist/components/report/binding-badge.js +76 -0
  2. package/dist/components/report/designer/cell-coords.js +46 -0
  3. package/dist/components/report/designer/col-widths.js +15 -0
  4. package/dist/components/report/designer/conditional-rules/helpers.js +139 -0
  5. package/dist/components/report/designer/drop-highlight-overlay.js +76 -0
  6. package/dist/components/report/designer/float-panel.js +385 -0
  7. package/dist/components/report/designer/role.js +17 -0
  8. package/dist/components/report/designer/rule-preview.js +33 -0
  9. package/dist/components/report/designer/rule-row.js +269 -0
  10. package/dist/components/report/designer/rules-dialog.js +135 -0
  11. package/dist/components/report/designer/topology-overlay.js +122 -0
  12. package/dist/components/report/designer/topology.js +64 -0
  13. package/dist/components/report/designer/use-grid-overlay.js +75 -0
  14. package/dist/components/report/designer-hub.js +177 -0
  15. package/dist/components/report/field-panel-helpers.js +33 -0
  16. package/dist/components/report/field-panel.js +132 -0
  17. package/dist/components/report/filter-bar.js +74 -0
  18. package/dist/components/report/hub-connection-form.js +145 -0
  19. package/dist/components/report/hub-dataset-editor.js +394 -0
  20. package/dist/components/report/report-designer.js +343 -0
  21. package/dist/components/report/report-viewer.js +111 -0
  22. package/dist/components/report/style.d.ts +17 -0
  23. package/dist/components/report/style.js +18 -0
  24. package/dist/components/report/style2.css +869 -0
  25. package/dist/components/report/use-report-designer.js +360 -0
  26. package/dist/components/report/use-report-viewer.js +50 -0
  27. package/dist/components/sheet/formula-bar.js +393 -0
  28. package/dist/components/sheet/formula-suggest-list.js +66 -0
  29. package/dist/components/sheet/import-file.js +140 -0
  30. package/dist/components/sheet/insert-count-menu-item.js +68 -0
  31. package/dist/components/sheet/insert-image.js +79 -0
  32. package/dist/components/sheet/popup-helpers.js +73 -0
  33. package/dist/components/sheet/popups/border-popup.js +75 -0
  34. package/dist/components/sheet/popups/border-preset-glyph.js +106 -0
  35. package/dist/components/sheet/popups/export-popup.js +51 -0
  36. package/dist/components/sheet/popups/fill-color-popup.js +37 -0
  37. package/dist/components/sheet/popups/find-popup.js +113 -0
  38. package/dist/components/sheet/popups/font-color-popup.js +37 -0
  39. package/dist/components/sheet/popups/font-size-popup.js +63 -0
  40. package/dist/components/sheet/popups/import.worker.d.ts +21 -0
  41. package/dist/components/sheet/popups/import.worker.js +41 -0
  42. package/dist/components/sheet/popups/insert-image-popup.js +38 -0
  43. package/dist/components/sheet/sheet-context-menu.js +200 -0
  44. package/dist/components/sheet/sheet-tabs.js +162 -0
  45. package/dist/components/sheet/sheet-toolbar.js +106 -0
  46. package/dist/components/sheet/sheet.js +198 -0
  47. package/dist/components/sheet/style.d.ts +11 -0
  48. package/dist/components/sheet/style.js +12 -0
  49. package/dist/components/sheet/style2.css +654 -0
  50. package/dist/components/sheet/use-find-replace.js +161 -0
  51. package/dist/components/sheet/use-formula-ref-select.js +37 -0
  52. package/dist/components/sheet/use-formula-suggest.js +126 -0
  53. package/dist/components/sheet/use-sheet-grid.js +188 -0
  54. package/dist/components/sheet/use-sheet-state.js +122 -0
  55. package/dist/components/sheet/use-sheet-tabs-bar.js +90 -0
  56. package/dist/components/sheet/use-tool-groups.js +42 -0
  57. package/dist/components/sheet/use-tool-popup.js +123 -0
  58. package/dist/components/sheet/use-toolbar-scroll.js +72 -0
  59. package/dist/index.d.ts +18 -26
  60. package/dist/index.js +14 -24
  61. package/dist/report/binding.d.ts +45 -0
  62. package/dist/report/binding.js +175 -0
  63. package/dist/report/connector.d.ts +66 -0
  64. package/dist/report/connector.js +159 -0
  65. package/dist/report/export-xlsx.d.ts +19 -0
  66. package/dist/report/export-xlsx.js +95 -0
  67. package/dist/report/filter-bar.d.ts +10 -0
  68. package/dist/report/filter-bar.js +31 -0
  69. package/dist/report/index.d.ts +12 -0
  70. package/dist/report/params.d.ts +13 -0
  71. package/dist/report/params.js +61 -0
  72. package/dist/report/render/aggregate.js +157 -0
  73. package/dist/report/render/builder.d.ts +12 -0
  74. package/dist/report/render/builder.js +139 -0
  75. package/dist/report/render/coordinate.d.ts +25 -0
  76. package/dist/report/render/coordinate.js +733 -0
  77. package/dist/report/render/index.d.ts +14 -0
  78. package/dist/report/render/index.js +21 -0
  79. package/dist/report/render/style-resolver.js +50 -0
  80. package/dist/report/render/template-index.d.ts +24 -0
  81. package/dist/report/render/template-index.js +137 -0
  82. package/dist/report/rules/evaluate.d.ts +25 -0
  83. package/dist/report/rules/evaluate.js +82 -0
  84. package/dist/report/rules/index.d.ts +2 -0
  85. package/dist/report/template.d.ts +59 -0
  86. package/dist/report/template.js +80 -0
  87. package/dist/report/types.d.ts +85 -0
  88. package/dist/tools/builtin.js +279 -8
  89. package/dist/tools/context.d.ts +54 -11
  90. package/dist/tools/context.js +28 -5
  91. package/dist/tools/download.js +68 -0
  92. package/dist/tools/export.worker.d.ts +16 -0
  93. package/dist/tools/export.worker.js +29 -0
  94. package/dist/tools/registry.d.ts +7 -4
  95. package/dist/tools/registry.js +1 -3
  96. package/dist/types/index.d.ts +3 -1
  97. package/dist/types/report-designer.d.ts +36 -0
  98. package/dist/types/report-viewer.d.ts +38 -0
  99. package/dist/types/sheet.d.ts +22 -5
  100. package/package.json +10 -7
  101. package/src/components/report/__test__/conditional-rules-helpers.test.ts +87 -0
  102. package/src/components/report/__test__/field-panel-helpers.test.ts +65 -0
  103. package/src/components/report/__test__/float-panel-position.test.ts +45 -0
  104. package/src/components/report/__test__/report-designer.test.ts +388 -0
  105. package/src/components/report/__test__/report-viewer.test.ts +334 -0
  106. package/src/components/report/__test__/topology.test.ts +143 -0
  107. package/src/components/report/__test__/use-report-designer.test.ts +565 -0
  108. package/src/components/report/binding-badge.ts +73 -0
  109. package/src/components/report/designer/cell-coords.ts +94 -0
  110. package/src/components/report/designer/col-widths.ts +33 -0
  111. package/src/components/report/designer/conditional-rules/helpers.ts +186 -0
  112. package/src/components/report/designer/drop-highlight-overlay.vue +74 -0
  113. package/src/components/report/designer/float-panel.vue +387 -0
  114. package/src/components/report/designer/role.ts +32 -0
  115. package/src/components/report/designer/rule-preview.vue +40 -0
  116. package/src/components/report/designer/rule-row.vue +252 -0
  117. package/src/components/report/designer/rules-dialog.vue +126 -0
  118. package/src/components/report/designer/topology-overlay.vue +127 -0
  119. package/src/components/report/designer/topology.ts +124 -0
  120. package/src/components/report/designer/use-grid-overlay.ts +113 -0
  121. package/src/components/report/designer-hub.vue +198 -0
  122. package/src/components/report/field-panel-helpers.ts +44 -0
  123. package/src/components/report/field-panel.vue +136 -0
  124. package/src/components/report/filter-bar.vue +77 -0
  125. package/src/components/report/hub-connection-form.vue +124 -0
  126. package/src/components/report/hub-dataset-editor.vue +369 -0
  127. package/src/components/report/index.ts +2 -0
  128. package/src/components/report/report-designer.vue +356 -0
  129. package/src/components/report/report-viewer.vue +128 -0
  130. package/src/components/report/style-designer.scss +583 -0
  131. package/src/components/report/style-hub.scss +292 -0
  132. package/src/components/report/style-viewer.scss +104 -0
  133. package/src/components/report/style.scss +3 -0
  134. package/src/components/report/style.ts +20 -0
  135. package/src/components/report/use-report-designer.ts +547 -0
  136. package/src/components/report/use-report-viewer.ts +79 -0
  137. package/src/components/sheet/__test__/formula-bar.test.ts +474 -0
  138. package/src/components/sheet/__test__/import-file.test.ts +183 -0
  139. package/src/components/sheet/__test__/insert-count-menu-item.test.ts +123 -0
  140. package/src/components/sheet/__test__/insert-image-popup.test.ts +89 -0
  141. package/src/components/sheet/__test__/insert-image.test.ts +100 -0
  142. package/src/components/sheet/__test__/sheet-component.test.ts +993 -0
  143. package/src/components/sheet/__test__/sheet-context-menu.test.ts +206 -0
  144. package/src/components/sheet/__test__/use-formula-ref-select.test.ts +35 -0
  145. package/src/components/sheet/__test__/use-formula-suggest.test.ts +83 -0
  146. package/src/components/sheet/formula-bar.vue +473 -0
  147. package/src/components/sheet/formula-suggest-list.vue +64 -0
  148. package/src/components/sheet/import-file.ts +173 -0
  149. package/src/components/sheet/insert-count-menu-item.vue +69 -0
  150. package/src/components/sheet/insert-image.ts +90 -0
  151. package/src/components/sheet/parsing.ts +11 -0
  152. package/src/components/sheet/popup-helpers.ts +50 -0
  153. package/src/components/sheet/popups/border-popup.vue +93 -0
  154. package/src/components/sheet/popups/border-preset-glyph.vue +111 -0
  155. package/src/components/sheet/popups/export-popup.vue +52 -0
  156. package/src/components/sheet/popups/fill-color-popup.vue +39 -0
  157. package/src/components/sheet/popups/find-popup.vue +111 -0
  158. package/src/components/sheet/popups/font-color-popup.vue +39 -0
  159. package/src/components/sheet/popups/font-size-popup.vue +52 -0
  160. package/src/components/sheet/popups/import.worker.ts +66 -0
  161. package/src/components/sheet/popups/insert-image-popup.vue +39 -0
  162. package/src/components/sheet/sheet-context-menu.ts +229 -0
  163. package/src/components/sheet/sheet-tabs.vue +162 -0
  164. package/src/components/sheet/sheet-toolbar.vue +91 -0
  165. package/src/components/sheet/sheet.vue +211 -0
  166. package/src/components/sheet/style.scss +737 -0
  167. package/src/components/sheet/style.ts +13 -0
  168. package/src/components/sheet/use-find-replace.ts +200 -0
  169. package/src/components/sheet/use-formula-ref-select.ts +34 -0
  170. package/src/components/sheet/use-formula-suggest.ts +150 -0
  171. package/src/components/sheet/use-sheet-grid.ts +247 -0
  172. package/src/components/sheet/use-sheet-state.ts +161 -0
  173. package/src/components/sheet/use-sheet-tabs-bar.ts +115 -0
  174. package/src/components/sheet/use-tool-groups.ts +61 -0
  175. package/src/components/sheet/use-tool-popup.ts +150 -0
  176. package/src/components/sheet/use-toolbar-scroll.ts +95 -0
  177. package/src/env.d.ts +11 -0
  178. package/src/index.ts +39 -14
  179. package/src/report/__test__/binding.test.ts +218 -0
  180. package/src/report/__test__/connector.test.ts +218 -0
  181. package/src/report/__test__/export-xlsx.test.ts +118 -0
  182. package/src/report/__test__/filter-bar.test.ts +58 -0
  183. package/src/report/__test__/params.test.ts +156 -0
  184. package/src/report/__test__/render.test.ts +728 -0
  185. package/src/report/__test__/rules.test.ts +131 -0
  186. package/src/report/__test__/template.test.ts +355 -0
  187. package/src/report/binding.ts +243 -0
  188. package/src/report/connector.ts +205 -0
  189. package/src/report/export-xlsx.ts +118 -0
  190. package/src/report/filter-bar.ts +36 -0
  191. package/src/report/index.ts +13 -0
  192. package/src/report/params.ts +96 -0
  193. package/src/report/render/__test__/aggregate.test.ts +16 -0
  194. package/src/report/render/__test__/coordinate.test.ts +405 -0
  195. package/src/report/render/aggregate.ts +240 -0
  196. package/src/report/render/builder.ts +211 -0
  197. package/src/report/render/coordinate.ts +1239 -0
  198. package/src/report/render/index.ts +30 -0
  199. package/src/report/render/style-resolver.ts +68 -0
  200. package/src/report/render/template-index.ts +200 -0
  201. package/src/report/rules/evaluate.ts +113 -0
  202. package/src/report/rules/index.ts +7 -0
  203. package/src/report/template.ts +141 -0
  204. package/src/report/types.ts +96 -0
  205. package/src/tools/__test__/builtin.test.ts +208 -66
  206. package/src/tools/__test__/context.test.ts +62 -2
  207. package/src/tools/builtin.ts +350 -6
  208. package/src/tools/context.ts +89 -11
  209. package/src/tools/download.ts +82 -0
  210. package/src/tools/export.worker.ts +61 -0
  211. package/src/tools/registry.ts +16 -1
  212. package/src/types/index.ts +2 -0
  213. package/src/types/report-designer.ts +36 -0
  214. package/src/types/report-viewer.ts +37 -0
  215. package/src/types/sheet.ts +26 -3
  216. package/dist/core/address.d.ts +0 -60
  217. package/dist/core/address.js +0 -142
  218. package/dist/core/address.js.map +0 -1
  219. package/dist/core/cell-store.d.ts +0 -61
  220. package/dist/core/cell-store.js +0 -135
  221. package/dist/core/cell-store.js.map +0 -1
  222. package/dist/core/command/default-registry.d.ts +0 -10
  223. package/dist/core/command/default-registry.js +0 -18
  224. package/dist/core/command/default-registry.js.map +0 -1
  225. package/dist/core/command/history.d.ts +0 -64
  226. package/dist/core/command/history.js +0 -127
  227. package/dist/core/command/history.js.map +0 -1
  228. package/dist/core/command/merge-cells.d.ts +0 -21
  229. package/dist/core/command/merge-cells.js +0 -74
  230. package/dist/core/command/merge-cells.js.map +0 -1
  231. package/dist/core/command/registry.d.ts +0 -17
  232. package/dist/core/command/registry.js +0 -26
  233. package/dist/core/command/registry.js.map +0 -1
  234. package/dist/core/command/set-cell-formula.d.ts +0 -17
  235. package/dist/core/command/set-cell-formula.js +0 -29
  236. package/dist/core/command/set-cell-formula.js.map +0 -1
  237. package/dist/core/command/set-cell-value.d.ts +0 -22
  238. package/dist/core/command/set-cell-value.js +0 -35
  239. package/dist/core/command/set-cell-value.js.map +0 -1
  240. package/dist/core/command/types.d.ts +0 -68
  241. package/dist/core/events.js +0 -29
  242. package/dist/core/events.js.map +0 -1
  243. package/dist/core/fill.d.ts +0 -34
  244. package/dist/core/fill.js +0 -320
  245. package/dist/core/fill.js.map +0 -1
  246. package/dist/core/formula/ast.d.ts +0 -58
  247. package/dist/core/formula/ast.js +0 -38
  248. package/dist/core/formula/ast.js.map +0 -1
  249. package/dist/core/formula/dependency-graph.d.ts +0 -70
  250. package/dist/core/formula/dependency-graph.js +0 -269
  251. package/dist/core/formula/dependency-graph.js.map +0 -1
  252. package/dist/core/formula/errors.d.ts +0 -25
  253. package/dist/core/formula/errors.js +0 -36
  254. package/dist/core/formula/errors.js.map +0 -1
  255. package/dist/core/formula/evaluator.d.ts +0 -41
  256. package/dist/core/formula/evaluator.js +0 -154
  257. package/dist/core/formula/evaluator.js.map +0 -1
  258. package/dist/core/formula/functions.d.ts +0 -30
  259. package/dist/core/formula/functions.js +0 -209
  260. package/dist/core/formula/functions.js.map +0 -1
  261. package/dist/core/formula/parser.d.ts +0 -7
  262. package/dist/core/formula/parser.js +0 -208
  263. package/dist/core/formula/parser.js.map +0 -1
  264. package/dist/core/formula/tokenizer.d.ts +0 -37
  265. package/dist/core/formula/tokenizer.js +0 -146
  266. package/dist/core/formula/tokenizer.js.map +0 -1
  267. package/dist/core/merge-manager.d.ts +0 -64
  268. package/dist/core/merge-manager.js +0 -111
  269. package/dist/core/merge-manager.js.map +0 -1
  270. package/dist/core/selection.d.ts +0 -31
  271. package/dist/core/selection.js +0 -62
  272. package/dist/core/selection.js.map +0 -1
  273. package/dist/core/sheet.d.ts +0 -116
  274. package/dist/core/sheet.js +0 -224
  275. package/dist/core/sheet.js.map +0 -1
  276. package/dist/core/workbook.d.ts +0 -43
  277. package/dist/core/workbook.js +0 -77
  278. package/dist/core/workbook.js.map +0 -1
  279. package/dist/grid/sheet-grid.d.ts +0 -81
  280. package/dist/grid/sheet-grid.js +0 -331
  281. package/dist/grid/sheet-grid.js.map +0 -1
  282. package/dist/grid/vtable-theme.js +0 -80
  283. package/dist/grid/vtable-theme.js.map +0 -1
  284. package/dist/tools/builtin.js.map +0 -1
  285. package/dist/tools/context.js.map +0 -1
  286. package/dist/tools/registry.js.map +0 -1
  287. package/dist/vue/index.d.ts +0 -2
  288. package/dist/vue/sheet.js +0 -211
  289. package/dist/vue/sheet.js.map +0 -1
  290. package/dist/vue/sheet.vue.d.ts +0 -24
  291. package/dist/vue/style.d.ts +0 -1
  292. package/dist/vue/style.js +0 -2
  293. package/dist/vue/style2.css +0 -93
  294. package/src/core/__test__/address.test.ts +0 -113
  295. package/src/core/__test__/cell-store.test.ts +0 -97
  296. package/src/core/__test__/command.test.ts +0 -377
  297. package/src/core/__test__/fill.test.ts +0 -140
  298. package/src/core/__test__/formula-adversarial.test.ts +0 -265
  299. package/src/core/__test__/formula-engine.test.ts +0 -470
  300. package/src/core/__test__/formula-functions.test.ts +0 -178
  301. package/src/core/__test__/formula-parser.test.ts +0 -160
  302. package/src/core/__test__/history.test.ts +0 -225
  303. package/src/core/__test__/merge-manager.test.ts +0 -106
  304. package/src/core/__test__/sheet.test.ts +0 -142
  305. package/src/core/address.ts +0 -166
  306. package/src/core/cell-store.ts +0 -173
  307. package/src/core/command/default-registry.ts +0 -15
  308. package/src/core/command/history.ts +0 -167
  309. package/src/core/command/index.ts +0 -7
  310. package/src/core/command/merge-cells.ts +0 -74
  311. package/src/core/command/registry.ts +0 -30
  312. package/src/core/command/set-cell-formula.ts +0 -29
  313. package/src/core/command/set-cell-value.ts +0 -38
  314. package/src/core/command/types.ts +0 -73
  315. package/src/core/events.ts +0 -37
  316. package/src/core/fill.ts +0 -314
  317. package/src/core/formula/ast.ts +0 -66
  318. package/src/core/formula/dependency-graph.ts +0 -329
  319. package/src/core/formula/errors.ts +0 -41
  320. package/src/core/formula/evaluator.ts +0 -219
  321. package/src/core/formula/functions.ts +0 -266
  322. package/src/core/formula/index.ts +0 -7
  323. package/src/core/formula/parser.ts +0 -198
  324. package/src/core/formula/tokenizer.ts +0 -160
  325. package/src/core/merge-manager.ts +0 -158
  326. package/src/core/selection.ts +0 -66
  327. package/src/core/sheet.ts +0 -282
  328. package/src/core/workbook.ts +0 -99
  329. package/src/grid/__test__/canvas-mock.ts +0 -49
  330. package/src/grid/__test__/setup.ts +0 -3
  331. package/src/grid/__test__/sheet-grid-formula.test.ts +0 -140
  332. package/src/grid/__test__/sheet-grid.test.ts +0 -275
  333. package/src/grid/sheet-grid.ts +0 -407
  334. package/src/grid/vtable-theme.ts +0 -61
  335. package/src/vue/__test__/sheet-component.test.ts +0 -267
  336. package/src/vue/sheet.vue +0 -235
  337. package/src/vue/style.scss +0 -94
  338. package/src/vue/style.ts +0 -2
  339. /package/src/{vue → components/sheet}/index.ts +0 -0
@@ -0,0 +1,654 @@
1
+ @charset "UTF-8";
2
+ /** flex布局 */
3
+ /**
4
+ * 设置css变量
5
+ * 参数1:变量前缀
6
+ * 参数2: 一个由值组成的列表或者由key, value组成的map
7
+ * css-var(height, (
8
+ * large: 40px
9
+ * default: 32px
10
+ * small: 24px
11
+ * ))
12
+ * 生成的css变量:
13
+ * --u-height-large: 40px;
14
+ * --u-height-default: 32px;
15
+ * --u-height-small: 24px;
16
+ */
17
+ /** 暗色:data-theme 与系统偏好,与 UITheme.injectBuiltInThemes 选择器策略一致 */
18
+ .u-sheet {
19
+ position: relative;
20
+ display: flex;
21
+ flex-direction: column;
22
+ overflow: hidden;
23
+ border: var(--u-border);
24
+ border-radius: var(--u-radius-default);
25
+ background-color: var(--u-bg-color-top);
26
+ }
27
+ .u-sheet__toolbar-wrap {
28
+ position: relative;
29
+ }
30
+ .u-sheet__toolbar {
31
+ display: flex;
32
+ align-items: center;
33
+ gap: var(--u-gap-small);
34
+ padding: var(--u-gap-small);
35
+ border-bottom: 1px solid var(--u-border-muted-color);
36
+ }
37
+ .u-sheet {
38
+ /* 单行滚动视口:工具超出视口时左右箭头导航(不再换行挤压 grid) */
39
+ }
40
+ .u-sheet__toolbar-scroll {
41
+ flex: 1;
42
+ min-width: 0;
43
+ overflow-x: auto;
44
+ overscroll-behavior-x: contain;
45
+ scrollbar-width: none; /* Firefox */
46
+ }
47
+ .u-sheet__toolbar-scroll::-webkit-scrollbar {
48
+ display: none;
49
+ }
50
+ .u-sheet__toolbar-list {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: var(--u-gap-small);
54
+ }
55
+ .u-sheet__toolbar-nav {
56
+ display: inline-flex;
57
+ flex: 0 0 auto;
58
+ align-items: center;
59
+ justify-content: center;
60
+ width: var(--u-form-component-height-small);
61
+ height: var(--u-form-component-height-small);
62
+ padding: 0;
63
+ border: none;
64
+ border-radius: var(--u-radius-small);
65
+ background: transparent;
66
+ color: var(--u-text-color-second);
67
+ cursor: pointer;
68
+ user-select: none;
69
+ transition: background-color var(--u-transition-fast) var(--u-transition-ease), color var(--u-transition-fast) var(--u-transition-ease);
70
+ }
71
+ .u-sheet__toolbar-nav:hover:not(:disabled) {
72
+ background-color: var(--u-bg-color-hover);
73
+ color: var(--u-color-primary);
74
+ }
75
+ .u-sheet__toolbar-nav:disabled {
76
+ color: var(--u-text-color-disabled);
77
+ cursor: not-allowed;
78
+ }
79
+ .u-sheet__toolbar-divider {
80
+ width: 1px;
81
+ align-self: stretch;
82
+ margin: 2px 0;
83
+ background-color: var(--u-border-muted-color);
84
+ }
85
+ .u-sheet__tool {
86
+ display: inline-flex;
87
+ align-items: center;
88
+ justify-content: center;
89
+ gap: 4px;
90
+ min-width: var(--u-form-component-height-small);
91
+ height: var(--u-form-component-height-small);
92
+ padding: 0 6px;
93
+ border: none;
94
+ border-radius: var(--u-radius-small);
95
+ background: transparent;
96
+ color: var(--u-text-color-main);
97
+ font-size: var(--u-font-size-main-small);
98
+ white-space: nowrap;
99
+ cursor: pointer;
100
+ transition: background-color var(--u-transition-fast) var(--u-transition-ease), color var(--u-transition-fast) var(--u-transition-ease);
101
+ }
102
+ .u-sheet__tool:hover:not(:disabled) {
103
+ background-color: var(--u-bg-color-hover);
104
+ }
105
+ .u-sheet__tool.is-active {
106
+ background-color: var(--u-bg-color-hover);
107
+ color: var(--u-color-primary);
108
+ }
109
+ .u-sheet__tool:disabled {
110
+ color: var(--u-text-color-disabled);
111
+ cursor: not-allowed;
112
+ }
113
+ .u-sheet__tool-icon {
114
+ display: block;
115
+ width: 16px;
116
+ height: 16px;
117
+ font-size: 16px;
118
+ }
119
+ .u-sheet__export-menu {
120
+ display: flex;
121
+ flex-direction: column;
122
+ min-width: 180px;
123
+ padding: 4px 0;
124
+ }
125
+ .u-sheet__export-option {
126
+ display: block;
127
+ width: 100%;
128
+ padding: 6px 12px;
129
+ border: none;
130
+ background: transparent;
131
+ color: var(--u-text-color-main);
132
+ font-size: var(--u-font-size-main-small);
133
+ text-align: left;
134
+ cursor: pointer;
135
+ }
136
+ .u-sheet__export-option:hover {
137
+ background-color: var(--u-bg-color-hover);
138
+ }
139
+ .u-sheet__formula-bar {
140
+ display: flex;
141
+ align-items: center;
142
+ gap: var(--u-gap-small);
143
+ padding: var(--u-gap-small);
144
+ border-bottom: 1px solid var(--u-border-muted-color);
145
+ position: relative;
146
+ z-index: 30;
147
+ }
148
+ .u-sheet__fx-editor {
149
+ position: relative;
150
+ flex: 1;
151
+ min-width: 0;
152
+ height: var(--u-form-component-height-small);
153
+ }
154
+ .u-sheet__fx-input-panel {
155
+ position: absolute;
156
+ top: 0;
157
+ right: 0;
158
+ left: 0;
159
+ z-index: 1;
160
+ border-radius: var(--u-radius-small);
161
+ }
162
+ .u-sheet__fx-input-panel.is-expanded {
163
+ box-shadow: var(--u-shadow-sm);
164
+ }
165
+ .u-sheet__fx-suggest {
166
+ position: absolute;
167
+ top: calc(100% + 2px);
168
+ left: 0;
169
+ z-index: 20;
170
+ min-width: 280px;
171
+ border: 1px solid var(--u-border-muted-color);
172
+ border-radius: var(--u-radius-small);
173
+ background-color: var(--u-bg-color-top);
174
+ box-shadow: var(--u-shadow-sm);
175
+ }
176
+ .u-sheet {
177
+ /* UScroll 容器:滚动条由 desktop scroll 承担(不再用原生 overflow) */
178
+ }
179
+ .u-sheet__fx-suggest-scroll {
180
+ width: 100%;
181
+ }
182
+ .u-sheet__fx-suggest-list {
183
+ margin: 0;
184
+ padding: 4px 0;
185
+ list-style: none;
186
+ }
187
+ .u-sheet__fx-suggest-item {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: 2px;
191
+ padding: 6px 10px;
192
+ cursor: pointer;
193
+ }
194
+ .u-sheet__fx-suggest-item:hover {
195
+ background-color: var(--u-bg-color-hover);
196
+ }
197
+ .u-sheet__fx-suggest-item.is-active {
198
+ background-color: var(--u-bg-color-hover);
199
+ }
200
+ .u-sheet__fx-suggest-sig {
201
+ color: var(--u-text-color-main);
202
+ font-size: var(--u-font-size-main-small);
203
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
204
+ }
205
+ .u-sheet__fx-suggest-desc {
206
+ color: var(--u-text-color-second);
207
+ font-size: var(--u-font-size-main-small);
208
+ }
209
+ .u-sheet__name-box {
210
+ width: 110px;
211
+ height: var(--u-form-component-height-small);
212
+ flex-shrink: 0;
213
+ padding: 0 6px;
214
+ border: 1px solid var(--u-border-muted-color);
215
+ border-radius: var(--u-radius-small);
216
+ background: transparent;
217
+ color: var(--u-text-color-main);
218
+ font-size: var(--u-font-size-main-small);
219
+ outline: none;
220
+ }
221
+ .u-sheet__name-box:focus {
222
+ border-color: var(--u-color-primary);
223
+ }
224
+ .u-sheet__fx-label {
225
+ display: inline-flex;
226
+ flex-shrink: 0;
227
+ align-items: center;
228
+ height: var(--u-form-component-height-small);
229
+ color: var(--u-text-color-second);
230
+ font-size: var(--u-font-size-main-small);
231
+ font-style: italic;
232
+ user-select: none;
233
+ }
234
+ .u-sheet__fx-input {
235
+ display: block;
236
+ box-sizing: border-box;
237
+ width: 100%;
238
+ min-height: var(--u-form-component-height-small);
239
+ max-height: calc(var(--u-form-component-height-small) * 8);
240
+ padding: 2px 6px;
241
+ border: 1px solid var(--u-border-muted-color);
242
+ border-radius: var(--u-radius-small);
243
+ background-color: var(--u-bg-color-top);
244
+ color: var(--u-text-color-main);
245
+ font-size: var(--u-font-size-main-small);
246
+ line-height: 1.4;
247
+ resize: none;
248
+ overflow-x: hidden;
249
+ overflow-y: auto;
250
+ outline: none;
251
+ }
252
+ .u-sheet__fx-input:focus {
253
+ border-color: var(--u-color-primary);
254
+ }
255
+ .u-sheet__fx-input:disabled {
256
+ color: var(--u-text-color-disabled);
257
+ }
258
+ .u-sheet__fx-btn {
259
+ display: inline-flex;
260
+ align-items: center;
261
+ justify-content: center;
262
+ width: 22px;
263
+ height: 22px;
264
+ flex-shrink: 0;
265
+ padding: 0;
266
+ border: 1px solid var(--u-border-muted-color);
267
+ border-radius: var(--u-radius-small);
268
+ background: transparent;
269
+ color: var(--u-text-color-main);
270
+ font-size: var(--u-font-size-main-small);
271
+ line-height: 1;
272
+ cursor: pointer;
273
+ transition: background-color var(--u-transition-fast) var(--u-transition-ease), color var(--u-transition-fast) var(--u-transition-ease);
274
+ }
275
+ .u-sheet__fx-btn:hover {
276
+ background-color: var(--u-bg-color-hover);
277
+ }
278
+ .u-sheet__popup {
279
+ /* UDropdown content 内层内容容器:定位/边框/背景/阴影由 dropdown 弹层提供 */
280
+ display: flex;
281
+ flex-direction: column;
282
+ gap: var(--u-gap-small);
283
+ padding: var(--u-gap-small);
284
+ }
285
+ .u-sheet__popup-row {
286
+ display: flex;
287
+ flex-wrap: wrap;
288
+ align-items: center;
289
+ gap: 6px;
290
+ max-width: 360px;
291
+ }
292
+ .u-sheet__popup-label {
293
+ color: var(--u-text-color-second);
294
+ font-size: var(--u-font-size-main-small);
295
+ }
296
+ .u-sheet__popup-line {
297
+ display: inline-flex;
298
+ align-items: center;
299
+ justify-content: center;
300
+ width: 24px;
301
+ height: 20px;
302
+ padding: 0 4px;
303
+ border: 1px solid var(--u-border-muted-color);
304
+ border-radius: var(--u-radius-small);
305
+ background: transparent;
306
+ cursor: pointer;
307
+ }
308
+ .u-sheet__popup-line.is-active {
309
+ border-color: var(--u-color-primary);
310
+ }
311
+ .u-sheet__popup-line-swatch {
312
+ width: 100%;
313
+ height: 4px;
314
+ }
315
+ .u-sheet__popup-preset {
316
+ display: inline-flex;
317
+ align-items: center;
318
+ justify-content: center;
319
+ width: 28px;
320
+ height: 28px;
321
+ padding: 0;
322
+ border: 1px solid var(--u-border-muted-color);
323
+ border-radius: var(--u-radius-small);
324
+ background: transparent;
325
+ color: var(--u-text-color-main);
326
+ cursor: pointer;
327
+ }
328
+ .u-sheet__popup-preset:hover {
329
+ background-color: var(--u-bg-color-hover);
330
+ }
331
+ .u-sheet__popup-preset.is-active {
332
+ border-color: var(--u-color-primary);
333
+ }
334
+ .u-sheet__popup-preset-glyph {
335
+ display: block;
336
+ flex-shrink: 0;
337
+ }
338
+ .u-sheet {
339
+ /* UScroll 容器:滚动条/滚动由 desktop scroll 组件承担(popup-size-list 不再自滚) */
340
+ }
341
+ .u-sheet__popup-size-scroll {
342
+ width: 48px;
343
+ }
344
+ .u-sheet__popup-size-list {
345
+ display: flex;
346
+ flex-direction: column;
347
+ gap: 2px;
348
+ }
349
+ .u-sheet__popup-size-item {
350
+ padding: 5px 12px;
351
+ border: none;
352
+ border-radius: var(--u-radius-small);
353
+ background: transparent;
354
+ color: var(--u-text-color-main);
355
+ font-size: var(--u-font-size-main-small);
356
+ text-align: left;
357
+ white-space: nowrap;
358
+ cursor: pointer;
359
+ }
360
+ .u-sheet__popup-size-item:hover {
361
+ background-color: var(--u-bg-color-hover);
362
+ }
363
+ .u-sheet__popup-size-item.is-active {
364
+ background-color: var(--u-bg-color-hover);
365
+ color: var(--u-color-primary);
366
+ }
367
+ .u-sheet__insert-count-menu {
368
+ display: flex;
369
+ align-items: center;
370
+ gap: 4px;
371
+ flex-shrink: 0;
372
+ user-select: none;
373
+ }
374
+ .u-sheet__insert-count-prefix, .u-sheet__insert-count-suffix {
375
+ flex-shrink: 0;
376
+ white-space: nowrap;
377
+ font-size: var(--u-font-size-main-small);
378
+ }
379
+ .u-sheet__insert-count-input {
380
+ width: 72px;
381
+ flex-shrink: 0;
382
+ }
383
+ .u-sheet__find-row {
384
+ display: flex;
385
+ align-items: center;
386
+ gap: 6px;
387
+ }
388
+ .u-sheet__find-input {
389
+ width: 140px;
390
+ }
391
+ .u-sheet__find-count {
392
+ min-width: 44px;
393
+ color: var(--u-text-color-second);
394
+ font-size: var(--u-font-size-main-small);
395
+ text-align: center;
396
+ white-space: nowrap;
397
+ }
398
+ .u-sheet__find-nav {
399
+ width: 22px;
400
+ height: 22px;
401
+ padding: 0;
402
+ border: 1px solid var(--u-border-muted-color);
403
+ border-radius: var(--u-radius-small);
404
+ background: transparent;
405
+ color: var(--u-text-color-main);
406
+ line-height: 1;
407
+ cursor: pointer;
408
+ }
409
+ .u-sheet__find-nav:hover:not(:disabled) {
410
+ background-color: var(--u-bg-color-hover);
411
+ }
412
+ .u-sheet__find-nav:disabled {
413
+ color: var(--u-text-color-disabled);
414
+ cursor: not-allowed;
415
+ }
416
+ .u-sheet__find-close {
417
+ width: 22px;
418
+ height: 22px;
419
+ margin-left: auto;
420
+ padding: 0;
421
+ border: none;
422
+ border-radius: var(--u-radius-small);
423
+ background: transparent;
424
+ color: var(--u-text-color-second);
425
+ line-height: 1;
426
+ cursor: pointer;
427
+ }
428
+ .u-sheet__find-close:hover {
429
+ background-color: var(--u-bg-color-hover);
430
+ color: var(--u-text-color-main);
431
+ }
432
+ .u-sheet__find-btn {
433
+ padding: 3px 10px;
434
+ border: 1px solid var(--u-border-muted-color);
435
+ border-radius: var(--u-radius-small);
436
+ background: transparent;
437
+ color: var(--u-text-color-main);
438
+ font-size: var(--u-font-size-main-small);
439
+ white-space: nowrap;
440
+ cursor: pointer;
441
+ }
442
+ .u-sheet__find-btn:hover:not(:disabled) {
443
+ background-color: var(--u-bg-color-hover);
444
+ }
445
+ .u-sheet__find-btn:disabled {
446
+ color: var(--u-text-color-disabled);
447
+ cursor: not-allowed;
448
+ }
449
+ .u-sheet__find-option {
450
+ display: inline-flex;
451
+ align-items: center;
452
+ gap: 4px;
453
+ color: var(--u-text-color-second);
454
+ font-size: var(--u-font-size-main-small);
455
+ white-space: nowrap;
456
+ cursor: pointer;
457
+ }
458
+ .u-sheet__find-select {
459
+ border: 1px solid var(--u-border-muted-color);
460
+ border-radius: var(--u-radius-small);
461
+ background: transparent;
462
+ color: var(--u-text-color-main);
463
+ font-size: var(--u-font-size-main-small);
464
+ }
465
+ .u-sheet__insert-image-picker {
466
+ min-width: 220px;
467
+ cursor: pointer;
468
+ }
469
+ .u-sheet__insert-image-picker:hover {
470
+ color: var(--u-color-primary);
471
+ }
472
+ .u-sheet__insert-image-hint {
473
+ padding: 8px 10px;
474
+ border: 1px dashed var(--u-border-muted-color);
475
+ border-radius: var(--u-radius-small);
476
+ text-align: center;
477
+ font-size: var(--u-font-size-main-small);
478
+ }
479
+ .u-sheet__insert-image-sub {
480
+ margin-top: 4px;
481
+ color: var(--u-text-color-second);
482
+ font-size: var(--u-font-size-assist-small);
483
+ }
484
+ .u-sheet__grid {
485
+ position: relative;
486
+ flex: 1;
487
+ min-height: 0;
488
+ overflow: hidden;
489
+ }
490
+ .u-sheet {
491
+ /* 导入解析覆盖层(自绘:遮罩 + 动画 + 文字同一层,不依赖 desktop Loading 的
492
+ text 能力;层级高于 v-loading 遮罩与 grid 实例,文字不被掩盖) */
493
+ }
494
+ .u-sheet__loading-mask {
495
+ position: absolute;
496
+ inset: 0;
497
+ z-index: 10;
498
+ background-color: var(--u-bg-color-top-alpha);
499
+ display: flex;
500
+ justify-content: center;
501
+ align-items: center;
502
+ flex-wrap: nowrap;
503
+ flex-direction: column;
504
+ }
505
+ .u-sheet {
506
+ /* 旋转圈动画(与 desktop dual-ring 同风格:border 圆环 + 顶部高亮 + 旋转) */
507
+ }
508
+ .u-sheet__loading-spinner {
509
+ width: 36px;
510
+ aspect-ratio: 1;
511
+ border-radius: 50%;
512
+ border: 3px solid var(--u-color-primary-a-22);
513
+ border-top-color: currentColor;
514
+ color: var(--u-color-primary);
515
+ animation: u-sheet-loading-spin 0.8s linear infinite;
516
+ }
517
+ .u-sheet__loading-spinner::after {
518
+ content: "";
519
+ position: absolute;
520
+ inset: 5px;
521
+ border-radius: 50%;
522
+ border: 2px solid var(--u-color-primary-a-22);
523
+ border-bottom-color: currentColor;
524
+ animation: u-sheet-loading-spin 1.2s linear infinite reverse;
525
+ }
526
+ .u-sheet__loading-text {
527
+ margin-top: var(--u-gap-small);
528
+ color: var(--u-text-color-secondary);
529
+ font-size: 12px;
530
+ line-height: 1.5;
531
+ text-align: center;
532
+ white-space: nowrap;
533
+ }
534
+ @keyframes u-sheet-loading-spin {
535
+ to {
536
+ transform: rotate(360deg);
537
+ }
538
+ }
539
+ .u-sheet {
540
+ /* LRU 缓存实例容器:absolute 堆叠于 grid 区,非激活实例 visibility:hidden
541
+ (保持尺寸不触发 VTable resize,切回仅翻转可见性 + 选区回驱) */
542
+ }
543
+ .u-sheet__grid-instance {
544
+ position: absolute;
545
+ inset: 0;
546
+ visibility: hidden;
547
+ }
548
+ .u-sheet__tabs {
549
+ display: flex;
550
+ align-items: center;
551
+ gap: 2px;
552
+ min-width: 0;
553
+ padding: 2px var(--u-gap-small);
554
+ border-top: 1px solid var(--u-border-muted-color);
555
+ background-color: var(--u-bg-color-middle);
556
+ }
557
+ .u-sheet__tabs-nav {
558
+ display: inline-flex;
559
+ flex: 0 0 auto;
560
+ align-items: center;
561
+ justify-content: center;
562
+ width: 22px;
563
+ height: 22px;
564
+ padding: 0;
565
+ border: none;
566
+ border-radius: var(--u-radius-small);
567
+ background: transparent;
568
+ color: var(--u-text-color-second);
569
+ cursor: pointer;
570
+ user-select: none;
571
+ transition: background-color var(--u-transition-fast) var(--u-transition-ease), color var(--u-transition-fast) var(--u-transition-ease);
572
+ }
573
+ .u-sheet__tabs-nav:hover:not(:disabled) {
574
+ background-color: var(--u-bg-color-hover);
575
+ color: var(--u-color-primary);
576
+ }
577
+ .u-sheet__tabs-nav:disabled {
578
+ color: var(--u-text-color-disabled);
579
+ cursor: not-allowed;
580
+ }
581
+ .u-sheet__tabs-viewport {
582
+ flex: 0 1 auto;
583
+ min-width: 0;
584
+ max-width: 100%;
585
+ overflow-x: auto;
586
+ overflow-y: hidden;
587
+ overscroll-behavior-x: contain;
588
+ scrollbar-width: none; /* Firefox */
589
+ }
590
+ .u-sheet__tabs-viewport::-webkit-scrollbar {
591
+ display: none;
592
+ }
593
+ .u-sheet__tabs-list {
594
+ display: inline-flex;
595
+ flex-wrap: nowrap;
596
+ flex-shrink: 0;
597
+ align-items: center;
598
+ gap: 2px;
599
+ width: max-content;
600
+ }
601
+ .u-sheet__tab {
602
+ display: inline-flex;
603
+ flex-shrink: 0;
604
+ align-items: center;
605
+ padding: 4px 12px;
606
+ border: none;
607
+ border-radius: var(--u-radius-small);
608
+ background: transparent;
609
+ color: var(--u-text-color-second);
610
+ font-size: var(--u-font-size-main-small);
611
+ white-space: nowrap;
612
+ cursor: pointer;
613
+ user-select: none;
614
+ transition: background-color var(--u-transition-fast) var(--u-transition-ease), color var(--u-transition-fast) var(--u-transition-ease);
615
+ }
616
+ .u-sheet__tab:hover {
617
+ background-color: var(--u-bg-color-hover);
618
+ }
619
+ .u-sheet__tab.is-active {
620
+ background-color: var(--u-bg-color-top);
621
+ color: var(--u-color-primary);
622
+ }
623
+ .u-sheet__tab-rename-input {
624
+ width: 96px;
625
+ height: 20px;
626
+ padding: 0 4px;
627
+ border: 1px solid var(--u-color-primary);
628
+ border-radius: var(--u-radius-small);
629
+ outline: none;
630
+ color: var(--u-text-color-main);
631
+ font-size: var(--u-font-size-main-small);
632
+ }
633
+ .u-sheet__tab-add {
634
+ display: inline-flex;
635
+ flex: 0 0 auto;
636
+ align-items: center;
637
+ justify-content: center;
638
+ width: 24px;
639
+ height: 24px;
640
+ margin-left: 2px;
641
+ padding: 0;
642
+ border: none;
643
+ border-radius: var(--u-radius-small);
644
+ background: transparent;
645
+ color: var(--u-text-color-second);
646
+ font-size: var(--u-font-size-main-small);
647
+ line-height: 1;
648
+ cursor: pointer;
649
+ transition: background-color var(--u-transition-fast) var(--u-transition-ease), color var(--u-transition-fast) var(--u-transition-ease);
650
+ }
651
+ .u-sheet__tab-add:hover {
652
+ background-color: var(--u-bg-color-hover);
653
+ color: var(--u-color-primary);
654
+ }