xiaodao-spreader 0.1.27 → 0.1.28
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/README.ZH.md +4 -15
- package/README.md +4 -15
- package/dist/style.css +1 -1
- package/dist/types/components/spreader/components/dropdown.vue.d.ts +3 -0
- package/dist/types/components/spreader/components/toolbar.vue.d.ts +4 -0
- package/dist/types/components/spreader/composables/core-state.d.ts +28 -1
- package/dist/types/components/spreader/composables/interactions.d.ts +3 -0
- package/dist/types/components/spreader/composables/sheets-ops.d.ts +1 -0
- package/dist/types/components/spreader/core/types.d.ts +19 -0
- package/dist/xiaodao-spreader.es.js +5352 -5028
- package/dist/xiaodao-spreader.umd.js +9 -9
- package/package.json +1 -1
package/README.ZH.md
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
- **多 Sheet 工作簿** — 标签栏支持新建、重命名、复制、删除、拖拽排序
|
|
24
24
|
- **公式引擎** — 支持 `=SUM()`、`=AVERAGE()`、`=COUNT()`、`=IF()`、`=VLOOKUP()`、`=CONCATENATE()`,支持依赖追踪与循环引用检测;工具栏与右键菜单提供一键求和/平均值/计数
|
|
25
25
|
- **合并单元格** — 合并居中、跨列合并、取消合并;合并区域边框按锚点存储、公共边渲染时统一解析
|
|
26
|
+
- **冻结窗格** — 固定顶部行/左侧列,使其在主体滚动时保持可见。工具栏「冻结窗格」下拉提供「冻结窗格」(以当前选区/活动单元格左上角为冻结点,等同 Excel 的 Freeze Panes)、「冻结首行」、「冻结首列」以及「取消冻结」(仅在已冻结时显示,替换「冻结窗格」项)。冻结状态为按工作表的视图状态(`freeze: { rows, cols }`),通过 v-model 持久化;跨冻结线的合并单元格也能正确处理——仅冻结部分固定,非冻结部分随滚动移出
|
|
26
27
|
- **丰富单元格格式** — 字体、字号(5–72)、加粗、斜体、下划线、删除线、文字颜色、填充颜色、水平/垂直对齐、自动换行
|
|
27
28
|
- **边框** — 上/下/左/右/外边框/全部/无,5 种预设样式及自定义颜色;独立边框池存储、公共边渲染时统一解析
|
|
28
29
|
- **撤销 / 重做** — 单元格、列宽、行高的完整状态快照(50 步)
|
|
@@ -156,6 +157,7 @@ interface SheetModelData {
|
|
|
156
157
|
styleId?: number;
|
|
157
158
|
}>;
|
|
158
159
|
merges?: Record<string, SelectionRange>;
|
|
160
|
+
freeze?: { rows: number; cols: number };
|
|
159
161
|
colWidths?: Record<number, number>;
|
|
160
162
|
rowHeights?: Record<number, number>;
|
|
161
163
|
/** 逻辑列数(0 基,不含)。省略时默认为 26。 */
|
|
@@ -169,6 +171,7 @@ interface SheetModelData {
|
|
|
169
171
|
- **`borders`**:边框池 —— `borders[0]` 始终为默认空边框 `{}`。样式通过下标(`borderId`)引用边框;省略时由旧版内联边框属性自动迁移。
|
|
170
172
|
- **`cells`**:键为 `"列,行"` 格式(如 `"0,0"` 代表 A1 单元格)。`styleId` 引用 `styles` 数组;`styleId=0` 或省略表示默认样式。
|
|
171
173
|
- **`merges`**:合并单元格定义,以合并锚点单元格为键。
|
|
174
|
+
- **`freeze`**:冻结窗格的视图状态 —— `{ rows, cols }` 冻结顶部 `rows` 行与左侧 `cols` 列;`{ rows: 0, cols: 0 }` 表示无冻结。按工作表持久化,切换工作表时恢复。
|
|
172
175
|
- **`colWidths` / `rowHeights`**:稀疏映射 — 仅存储非默认值。
|
|
173
176
|
|
|
174
177
|
### 类型导出
|
|
@@ -468,7 +471,7 @@ pnpm build:demo
|
|
|
468
471
|
|
|
469
472
|
### 中期
|
|
470
473
|
|
|
471
|
-
- [ ]
|
|
474
|
+
- [x] 冻结窗格(冻结行/列)—— *见 [冻结窗格](#功能特性)*
|
|
472
475
|
- [ ] 数据验证(下拉列表、输入约束)
|
|
473
476
|
- [ ] 行列分组与折叠
|
|
474
477
|
- [x] 排序与筛选 —— 按展示内容排序,含类 Excel「排序提醒」对话框(扩展选定区域 / 仅对选定区域排序);见 [排序与排序提醒](#功能特性)
|
|
@@ -499,20 +502,6 @@ pnpm build:demo
|
|
|
499
502
|
|
|
500
503
|
---
|
|
501
504
|
|
|
502
|
-
## 贡献指南
|
|
503
|
-
|
|
504
|
-
欢迎贡献代码!请按以下步骤操作:
|
|
505
|
-
|
|
506
|
-
1. Fork 仓库
|
|
507
|
-
2. 创建功能分支(`git checkout -b feature/amazing-feature`)
|
|
508
|
-
3. 提交更改(`git commit -m 'feat: add amazing feature'`)
|
|
509
|
-
4. 推送到分支(`git push origin feature/amazing-feature`)
|
|
510
|
-
5. 提交 Pull Request
|
|
511
|
-
|
|
512
|
-
提交前请确保类型检查通过(`pnpm type-check`)且构建成功(`pnpm build`)。
|
|
513
|
-
|
|
514
|
-
---
|
|
515
|
-
|
|
516
505
|
## 开源协议
|
|
517
506
|
|
|
518
507
|
本项目基于 MIT 协议 — 详见 [LICENSE](LICENSE) 文件。
|
package/README.md
CHANGED
|
@@ -22,6 +22,7 @@ A high-performance, canvas-based spreadsheet component for Vue 3 — bringing an
|
|
|
22
22
|
- **Multi-Sheet Workbook** — Tab bar with add, rename, duplicate, delete, reorder
|
|
23
23
|
- **Formula Engine** — `=SUM()`, `=AVERAGE()`, `=COUNT()`, `=IF()`, `=VLOOKUP()`, `=CONCATENATE()` with dependency tracking and circular-reference detection; toolbar and context menu provide one-click sum/average/count
|
|
24
24
|
- **Merge Cells** — Merge & Center, Merge Across, Unmerge; merged-region borders stored at the anchor, shared borders resolved at render time
|
|
25
|
+
- **Freeze Panes** — Pin frozen top rows / left columns so they keep visible while the body scrolls. The toolbar "Freeze Panes" dropdown exposes *Freeze Panes* (freezes at the top-left corner of the current selection / active cell — Excel's "Freeze Panes" behavior), *Freeze First Row*, *Freeze First Column*, and *Unfreeze* (shown only when a pane is already frozen, replacing the "Freeze Panes" entry). Per-sheet view state (`freeze: { rows, cols }`) persisted through v-model; merged cells straddling the freeze line are handled correctly — only the frozen portion stays pinned, the rest scrolls away
|
|
25
26
|
- **Rich Cell Formatting** — Font family, font size (5–72), bold, italic, underline, strikethrough, text color, fill color, horizontal & vertical alignment, wrap text
|
|
26
27
|
- **Borders** — Top / bottom / left / right / outside / all / none with 5 predefined styles and custom color; stored in a dedicated border pool, shared borders resolved at render time
|
|
27
28
|
- **Undo / Redo** — Full state snapshots for cells, column widths, and row heights (50 steps)
|
|
@@ -153,6 +154,7 @@ interface SheetModelData {
|
|
|
153
154
|
styleId?: number;
|
|
154
155
|
}>;
|
|
155
156
|
merges?: Record<string, SelectionRange>;
|
|
157
|
+
freeze?: { rows: number; cols: number };
|
|
156
158
|
colWidths?: Record<number, number>;
|
|
157
159
|
rowHeights?: Record<number, number>;
|
|
158
160
|
/** Logic column count (0-based exclusive). Defaults to 26 when omitted. */
|
|
@@ -166,6 +168,7 @@ interface SheetModelData {
|
|
|
166
168
|
- **`borders`**: Border pool — `borders[0]` is always the default empty border `{}`. Styles reference borders by index (`borderId`); auto-migrated from legacy inline border props when omitted.
|
|
167
169
|
- **`cells`**: Key is `"col,row"` (e.g., `"0,0"` for cell A1). `styleId` references into the `styles` array; `styleId=0` or omitted means default style.
|
|
168
170
|
- **`merges`**: Merge cell definitions, keyed by merge anchor cell.
|
|
171
|
+
- **`freeze`**: View state for frozen panes — `{ rows, cols }` freezes the top `rows` rows and the left `cols` columns; `{ rows: 0, cols: 0 }` means no freeze. Persisted per sheet and restored on sheet switch.
|
|
169
172
|
- **`colWidths` / `rowHeights`**: Sparse maps — only stores non-default values.
|
|
170
173
|
|
|
171
174
|
### Type Exports
|
|
@@ -465,7 +468,7 @@ The project includes a GitHub Actions workflow (`.github/workflows/publish.yml`)
|
|
|
465
468
|
|
|
466
469
|
### Mid-term
|
|
467
470
|
|
|
468
|
-
- [
|
|
471
|
+
- [x] Frozen panes (freeze rows/columns) — *see [Freeze Panes](#features)*
|
|
469
472
|
- [ ] Data validation (dropdown lists, input constraints)
|
|
470
473
|
- [ ] Column / row grouping and collapsing
|
|
471
474
|
- [x] Sort & filter — sort by displayed content with Excel-style Sort Warning dialog (expand selection / current selection only); see [Sorting & Sort Warning](#features)
|
|
@@ -496,20 +499,6 @@ The project includes a GitHub Actions workflow (`.github/workflows/publish.yml`)
|
|
|
496
499
|
|
|
497
500
|
---
|
|
498
501
|
|
|
499
|
-
## Contributing
|
|
500
|
-
|
|
501
|
-
Contributions are welcome! Please feel free to:
|
|
502
|
-
|
|
503
|
-
1. Fork the repository
|
|
504
|
-
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
505
|
-
3. Commit your changes (`git commit -m 'feat: add amazing feature'`)
|
|
506
|
-
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
507
|
-
5. Open a Pull Request
|
|
508
|
-
|
|
509
|
-
Before submitting, please ensure the type check passes (`pnpm type-check`) and the build succeeds (`pnpm build`).
|
|
510
|
-
|
|
511
|
-
---
|
|
512
|
-
|
|
513
502
|
## License
|
|
514
503
|
|
|
515
504
|
This project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.sp-dropdown[data-v-00f4d6e6]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-00f4d6e6]{display:flex;align-items:center;justify-content:space-between;gap:4px;width:100%;height:26px;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color, #444);font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;cursor:pointer;padding:0 5px;box-sizing:border-box}.sp-dropdown__trigger[data-v-00f4d6e6]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-00f4d6e6]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-00f4d6e6]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-00f4d6e6]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-00f4d6e6]{position:fixed;z-index:40000;display:flex;flex-direction:column;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;padding:4px;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;transform-origin:top center}.sp-dropdown__menu--up[data-v-00f4d6e6]{transform-origin:bottom center}.menu-pop-enter-active[data-v-00f4d6e6],.menu-pop-leave-active[data-v-00f4d6e6]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-00f4d6e6],.menu-pop-leave-to[data-v-00f4d6e6]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-00f4d6e6]{display:flex;align-items:center;justify-content:center;height:15px;min-height:15px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #666);cursor:pointer;padding:0;border-radius:3px}.sp-dropdown__nav[data-v-00f4d6e6]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-00f4d6e6]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-00f4d6e6]{width:10px;height:10px}.sp-dropdown__list[data-v-00f4d6e6]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__search[data-v-00f4d6e6]{flex:0 0 auto;height:26px;margin-bottom:4px;padding:0 8px;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:3px;font-size:12px;font-family:inherit;color:#1a1a1a;outline:none;box-sizing:border-box}.sp-dropdown__search[data-v-00f4d6e6]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.sp-dropdown__empty[data-v-00f4d6e6]{padding:6px 8px;font-size:12px;color:#999;text-align:center}.sp-dropdown__icon[data-v-00f4d6e6]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-00f4d6e6] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-00f4d6e6]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-00f4d6e6] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-00f4d6e6]{white-space:nowrap}.sp-dropdown__item[data-v-00f4d6e6]{display:flex;align-items:center;gap:6px;width:100%;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);font-size:12px;cursor:pointer;padding:4px 8px;box-sizing:border-box;border-radius:3px}.sp-dropdown__item[data-v-00f4d6e6]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-00f4d6e6]{background:#e5f1fb;color:#0078d7}.color-picker[data-v-70f3dfdc]{position:relative;display:inline-flex;height:26px}.color-picker__menu[data-v-70f3dfdc]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;padding:6px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;transform-origin:top right}.menu-pop-enter-active[data-v-70f3dfdc],.menu-pop-leave-active[data-v-70f3dfdc]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-70f3dfdc],.menu-pop-leave-to[data-v-70f3dfdc]{opacity:0;transform:scale(.9)}.color-picker__row[data-v-70f3dfdc]{display:flex;gap:4px;margin-bottom:4px}.color-picker__row[data-v-70f3dfdc]:last-child{margin-bottom:0}.color-picker__swatch[data-v-70f3dfdc]{width:20px;height:20px;padding:0;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .08s,box-shadow .08s;position:relative}.color-picker__swatch[data-v-70f3dfdc]:hover{transform:scale(1.18);box-shadow:0 0 0 1px #0003;z-index:1}.color-picker__swatch--selected[data-v-70f3dfdc]{box-shadow:0 0 0 2px #0078d7}.border-picker[data-v-551c0ffe]{position:relative;display:inline-flex;height:26px}.border-picker__menu[data-v-551c0ffe]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.border-picker__item[data-v-551c0ffe]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.border-picker__item[data-v-551c0ffe]:hover{background:#eef3f9}.border-picker__icon[data-v-551c0ffe]{width:18px;height:18px;flex-shrink:0}.border-picker__label[data-v-551c0ffe]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-551c0ffe],.menu-pop-leave-active[data-v-551c0ffe]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-551c0ffe],.menu-pop-leave-to[data-v-551c0ffe]{opacity:0;transform:scale(.9)}.sort-picker[data-v-45929b74]{position:relative;display:inline-flex;height:26px}.sort-picker__menu[data-v-45929b74]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.sort-picker__item[data-v-45929b74]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.sort-picker__item[data-v-45929b74]:hover{background:#eef3f9}.sort-picker__icon[data-v-45929b74]{width:18px;height:18px;flex-shrink:0}.sort-picker__label[data-v-45929b74]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-45929b74],.menu-pop-leave-active[data-v-45929b74]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-45929b74],.menu-pop-leave-to[data-v-45929b74]{opacity:0;transform:scale(.9)}.merge-picker[data-v-edd36208]{position:relative;display:inline-flex;height:26px}.merge-picker__menu[data-v-edd36208]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.merge-picker__item[data-v-edd36208]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.merge-picker__item[data-v-edd36208]:hover{background:#eef3f9}.merge-picker__icon[data-v-edd36208]{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.merge-picker__icon[data-v-edd36208] svg{width:18px;height:18px}.merge-picker__label[data-v-edd36208]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-edd36208],.menu-pop-leave-active[data-v-edd36208]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-edd36208],.menu-pop-leave-to[data-v-edd36208]{opacity:0;transform:scale(.9)}.calc-picker[data-v-01a18e00]{position:relative;display:inline-flex;height:26px}.calc-picker__menu[data-v-01a18e00]{position:fixed;z-index:9999;min-width:120px;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.calc-picker__item[data-v-01a18e00]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.calc-picker__item[data-v-01a18e00]:hover:not(.calc-picker__item--disabled){background:#eef3f9}.calc-picker__item--disabled[data-v-01a18e00]{color:var(--sp-toolbar-btn-disabled-color, #bbb);cursor:default}.calc-picker__label[data-v-01a18e00]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-01a18e00],.menu-pop-leave-active[data-v-01a18e00]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-01a18e00],.menu-pop-leave-to[data-v-01a18e00]{opacity:0;transform:scale(.9)}.toolbar[data-v-4f17f13a]{position:relative;display:flex;align-items:center;height:32px;min-height:32px;gap:2px;padding:0 6px;background:var(--sp-toolbar-bg);border-bottom:1px solid var(--sp-toolbar-border);-webkit-user-select:none;user-select:none}.tb-item[data-v-4f17f13a]{display:flex;align-items:center;flex:0 0 auto}.toolbar-sep[data-v-4f17f13a]{width:1px;height:18px;margin:0 4px;background:var(--sp-toolbar-border)}.toolbar-font[data-v-4f17f13a],.toolbar-number-format[data-v-4f17f13a],.toolbar-align[data-v-4f17f13a]{flex:0 0 auto}.toolbar-font-size[data-v-4f17f13a],.toolbar-number-format-group[data-v-4f17f13a]{display:inline-flex;align-items:center;gap:0;height:26px;position:relative}.toolbar-font-size__input[data-v-4f17f13a]{width:36px;height:26px;border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px;background:transparent;color:var(--sp-toolbar-btn-color);font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;text-align:left;padding:0 5px;outline:none;box-sizing:border-box;-webkit-appearance:none;appearance:none;-moz-appearance:textfield}.toolbar-font-size__input[data-v-4f17f13a]::-webkit-outer-spin-button,.toolbar-font-size__input[data-v-4f17f13a]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.toolbar-font-size__input[data-v-4f17f13a]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__input[data-v-4f17f13a]:focus{border-color:var(--sp-toolbar-border);background:#fff}.toolbar-font-size__btn[data-v-4f17f13a]{display:flex;align-items:center;justify-content:center;width:16px;height:26px;border:1px solid transparent;border-left:none;border-radius:0 3px 3px 0;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0}.toolbar-font-size__btn[data-v-4f17f13a]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__btn svg[data-v-4f17f13a]{width:10px;height:10px}.toolbar-font-size__dropdown[data-v-4f17f13a]{position:absolute;width:56px;height:26px;pointer-events:none}.toolbar-btn[data-v-4f17f13a]{display:flex;align-items:center;justify-content:center;width:30px;height:26px;border:none;border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0}.toolbar-btn[data-v-4f17f13a]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-btn[data-v-4f17f13a]:active:not(:disabled){opacity:.7}.toolbar-btn--active[data-v-4f17f13a]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-btn--step[data-v-4f17f13a]{width:26px;height:26px}.toolbar-btn--step svg[data-v-4f17f13a]{width:16px;height:16px}.toolbar-btn[data-v-4f17f13a]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.toolbar-btn__icon[data-v-4f17f13a]{width:18px;height:18px}.toolbar-btn svg[data-v-4f17f13a]:not(.toolbar-btn__icon){width:18px;height:18px}.toolbar-split[data-v-4f17f13a]{display:inline-flex;align-items:center;position:relative;height:26px}.toolbar-split__main[data-v-4f17f13a]{border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px}.toolbar-split__arrow[data-v-4f17f13a]{display:flex;align-items:center;justify-content:center;width:16px;height:26px;border:1px solid transparent;border-radius:0 3px 3px 0;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0}.toolbar-split__arrow[data-v-4f17f13a]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-split__arrow svg[data-v-4f17f13a]{width:10px!important;height:10px!important}.toolbar-more[data-v-4f17f13a]{display:flex;align-items:center;justify-content:center;width:30px;height:26px;border:none;border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0;flex:0 0 auto;margin-left:auto}.toolbar-more[data-v-4f17f13a]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-more--active[data-v-4f17f13a]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-more svg[data-v-4f17f13a]{width:18px;height:18px}.overflow-menu[data-v-4f17f13a]{min-width:180px;max-width:260px;max-height:calc(100vh - 40px);overflow-y:auto;background:var(--sp-toolbar-bg, #fff);border:1px solid var(--sp-toolbar-border);border-radius:4px;box-shadow:0 4px 12px #0000001f;padding:4px 6px;display:flex;flex-direction:column;gap:2px;z-index:1000;transform-origin:top right}.overflow-menu.no-anim[data-v-4f17f13a]{transition:none!important}.overflow-menu .tb-item[data-v-4f17f13a]{width:100%}.overflow-menu .toolbar-sep[data-v-4f17f13a]{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split[data-v-4f17f13a]{width:100%}.overflow-menu .toolbar-split__main[data-v-4f17f13a]{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size[data-v-4f17f13a],.overflow-menu .toolbar-number-format-group[data-v-4f17f13a]{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font[data-v-4f17f13a]{width:100%}.overflow-menu .toolbar-number-format[data-v-4f17f13a]{flex:1 1 auto;width:auto!important;min-width:0}.overflow-menu .toolbar-align[data-v-4f17f13a]{width:100%}.overflow-menu .toolbar-btn[data-v-4f17f13a]:not(.toolbar-btn--step):not(.toolbar-split__arrow):not(.toolbar-number-format__btn){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-number-format__btn[data-v-4f17f13a]{flex:0 0 auto;width:30px}.overflow-menu .toolbar-color[data-v-4f17f13a]{width:100%}.overflow-menu .toolbar-wrap[data-v-4f17f13a]{width:100%;justify-content:flex-start}.menu-pop-enter-active[data-v-4f17f13a],.menu-pop-leave-active[data-v-4f17f13a]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-4f17f13a],.menu-pop-leave-to[data-v-4f17f13a]{opacity:0;transform:scale(.9)}.overflow-menu .tb-item{width:100%}.overflow-menu .toolbar-sep{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split{width:100%}.overflow-menu .toolbar-split__main{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size,.overflow-menu .toolbar-number-format-group{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font{width:100%}.overflow-menu .toolbar-number-format{flex:1 1 auto;width:auto!important;min-width:0}.overflow-menu .toolbar-align{width:100%}.overflow-menu .toolbar-btn:not(.toolbar-btn--step):not(.toolbar-split__arrow):not(.toolbar-number-format__btn){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-number-format__btn{flex:0 0 auto;width:30px}.overflow-menu .toolbar-color{width:100%}.overflow-menu .toolbar-wrap{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font-size__input{flex:1 1 auto;width:auto;min-width:40px}.overflow-menu .toolbar-btn:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-btn:active:not(:disabled){opacity:.7}.overflow-menu .toolbar-btn--active{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.overflow-menu .toolbar-btn:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.overflow-menu .toolbar-split__main:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-split__arrow:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-font-size__input:hover{background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-font-size__input:focus{border-color:var(--sp-toolbar-border);background:#fff}.overflow-menu .toolbar-font-size__btn:hover,.overflow-menu .toolbar-more:hover{background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-more--active{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.tab-bar[data-v-ec10bade]{display:flex;align-items:stretch;height:30px;min-height:30px;background:var(--sp-tab-bar-bg);border-top:1px solid var(--sp-tab-bar-border);-webkit-user-select:none;user-select:none;margin-top:4px}.tab-list[data-v-ec10bade]{display:flex;align-items:flex-start;flex:1;overflow:hidden;gap:1px;padding:0 1px}.tab-item[data-v-ec10bade]{display:flex;align-items:center;height:28px;min-width:0;max-width:120px;padding:0 10px;cursor:pointer;border:1px solid var(--sp-tab-inactive-border);background:var(--sp-tab-inactive-bg);color:var(--sp-tab-inactive-color);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap;transition:background .1s}.tab-item[data-v-ec10bade]:hover{background:var(--sp-tab-hover-bg)}.tab-item--active[data-v-ec10bade]{height:28px;background:var(--sp-tab-active-bg);color:var(--sp-tab-active-color);border-color:var(--sp-tab-active-bg) var(--sp-tab-bar-border) var(--sp-tab-bar-border);border-top:2px solid var(--sp-tab-active-border);font-size:16px}.tab-item--active[data-v-ec10bade]:hover{background:var(--sp-tab-active-bg)}.tab-item__name[data-v-ec10bade]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-rename-input[data-v-ec10bade]{width:100%;height:18px;border:none;border-radius:0;outline:none;padding:0;font-size:16px;font-family:inherit;background:var(--sp-tab-active-bg);color:var(--sp-tab-active-color);box-sizing:border-box}.tab-bar__list-btn[data-v-ec10bade]{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;margin:0 2px 3px 3px;border:none;background:transparent;color:var(--sp-tab-add-btn-color);cursor:pointer;padding:0;align-self:flex-end}.tab-bar__list-btn[data-v-ec10bade]:hover,.tab-bar__list-btn--active[data-v-ec10bade]{background:var(--sp-tab-add-btn-hover-bg)}.tab-bar__list-btn svg[data-v-ec10bade]{width:14px;height:14px}.tab-bar__add-btn[data-v-ec10bade]{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;margin:0 4px 3px 3px;border:none;background:transparent;color:var(--sp-tab-add-btn-color);font-size:16px;line-height:22px;text-align:center;cursor:pointer;padding:0;align-self:flex-end}.tab-bar__add-btn[data-v-ec10bade]:hover{background:var(--sp-tab-add-btn-hover-bg)}.tab-list-menu{position:fixed;display:flex;flex-direction:column;background:var(--sp-toolbar-bg, #fff);border:1px solid var(--sp-toolbar-border, #d8d8d8);border-radius:4px;box-shadow:0 4px 12px #0000001f;padding:4px;z-index:1000;transform-origin:bottom left;min-width:140px;max-width:260px;box-sizing:border-box}.tab-list-menu__nav{display:flex;align-items:center;justify-content:center;height:15px;min-height:15px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #666);cursor:pointer;padding:0;border-radius:3px}.tab-list-menu__nav:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg, #eef3f9)}.tab-list-menu__nav:disabled{color:#ccc;cursor:default}.tab-list-menu__nav svg{width:10px;height:10px}.tab-list-menu__list{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.tab-list-menu__item{display:flex;align-items:center;gap:4px;width:100%;height:28px;padding:0 6px 0 10px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);font-size:13px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;cursor:pointer;white-space:nowrap;border-radius:3px;box-sizing:border-box}.tab-list-menu__item:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.tab-list-menu__item--active{color:var(--sp-tab-active-border, #0078d7);font-weight:500}.tab-list-menu__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-list-menu__del{display:flex;align-items:center;justify-content:center;width:18px;height:18px;flex:0 0 auto;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #999);cursor:pointer;padding:0;border-radius:3px;opacity:.55}.tab-list-menu__item:hover .tab-list-menu__del{opacity:1}.tab-list-menu__del:hover:not(:disabled){background:rgba(0,0,0,.08);color:#d9534f}.tab-list-menu__del:disabled{cursor:default;opacity:.25}.tab-list-menu__del svg{width:12px;height:12px}.find-bar[data-v-3120909b]{display:flex;align-items:center;gap:6px;padding:4px 8px;background:var(--sp-toolbar-bg);border-bottom:1px solid var(--sp-toolbar-border);-webkit-user-select:none;user-select:none;flex-wrap:nowrap;overflow-x:auto}.find-bar__input[data-v-3120909b]{height:24px;width:160px;flex:0 0 auto;border:1px solid var(--sp-toolbar-border);border-radius:3px;padding:0 6px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:var(--sp-formula-bar-input-color, #1a1a1a);background:#fff;outline:none;box-sizing:border-box}.find-bar__input[data-v-3120909b]:focus{border-color:var(--sp-toolbar-btn-active-color)}.find-bar__dropdown[data-v-3120909b]{flex:0 0 auto}.find-bar__dropdown[data-v-3120909b] .sp-dropdown__trigger{height:24px;border:1px solid var(--sp-toolbar-border);background:#fff;color:var(--sp-formula-bar-input-color, #1a1a1a);font-size:12px;padding:0 4px}.find-bar__dropdown[data-v-3120909b] .sp-dropdown__trigger:hover{background:#f5f5f5}.find-bar__dropdown[data-v-3120909b] .sp-dropdown__trigger--open{border-color:var(--sp-toolbar-btn-active-color)}.find-bar__chk[data-v-3120909b]{display:flex;align-items:center;gap:5px;flex:0 0 auto;font-size:12px;color:var(--sp-toolbar-btn-color);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none}.find-bar__chk-input[data-v-3120909b]{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;pointer-events:none}.find-bar__chk-box[data-v-3120909b]{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;flex:0 0 auto;box-sizing:border-box;border:1px solid var(--sp-toolbar-border);border-radius:3px;background:#fff;transition:background .12s ease,border-color .12s ease}.find-bar__chk-tick[data-v-3120909b]{width:12px;height:12px;color:#fff;opacity:0;transform:scale(.5);transition:opacity .12s ease,transform .12s ease}.find-bar__chk-input:checked+.find-bar__chk-box[data-v-3120909b]{background:#0078d7;border-color:#0078d7}.find-bar__chk-input:checked+.find-bar__chk-box .find-bar__chk-tick[data-v-3120909b]{opacity:1;transform:scale(1)}.find-bar__chk-input:focus-visible+.find-bar__chk-box[data-v-3120909b]{outline:2px solid rgba(0,120,215,.4);outline-offset:1px}.find-bar__count[data-v-3120909b]{flex:0 0 auto;font-size:12px;color:var(--sp-toolbar-btn-color);min-width:44px;text-align:center;white-space:nowrap}.find-bar__btn[data-v-3120909b]{height:24px;flex:0 0 auto;border:1px solid var(--sp-toolbar-border);border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;font-size:12px;padding:0 8px;display:inline-flex;align-items:center;justify-content:center}.find-bar__btn[data-v-3120909b]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.find-bar__btn[data-v-3120909b]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.find-bar__btn--icon[data-v-3120909b]{width:26px;padding:0}.find-bar__btn--icon svg[data-v-3120909b]{width:14px;height:14px}.find-bar__btn--close[data-v-3120909b]{width:26px;padding:0;margin-left:auto;border:none}.find-bar__btn--close svg[data-v-3120909b]{width:14px;height:14px}.nf-dialog__mask[data-v-39792a0b]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30000;background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center}.nf-dialog[data-v-39792a0b]{width:380px;max-width:calc(100vw - 32px);max-height:calc(100vh - 48px);overflow-y:auto;background:#fff;border:1px solid #d0d0d0;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:#1a1a1a;-webkit-user-select:none;user-select:none}.nf-dialog__header[data-v-39792a0b]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.nf-dialog__title[data-v-39792a0b]{font-size:13px;font-weight:600}.nf-dialog__close[data-v-39792a0b]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:#888;cursor:pointer;border-radius:3px;padding:0}.nf-dialog__close[data-v-39792a0b]:hover{background:#f0f0f0;color:#444}.nf-dialog__close svg[data-v-39792a0b]{width:14px;height:14px}.nf-dialog__body[data-v-39792a0b]{padding:12px 14px;display:flex;flex-direction:column;gap:10px}.nf-field[data-v-39792a0b]{display:flex;align-items:center;gap:8px}.nf-field--inline[data-v-39792a0b]{min-height:26px}.nf-field__label[data-v-39792a0b]{width:88px;min-width:88px;font-size:12px;color:#555}.nf-field__input[data-v-39792a0b]{flex:1;height:26px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;color:#1a1a1a;padding:0 6px;outline:none;box-sizing:border-box;font-family:inherit}.nf-field__input[data-v-39792a0b]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__dropdown[data-v-39792a0b]{flex:1}.nf-field__dropdown[data-v-39792a0b] .sp-dropdown__trigger{border:1px solid #c0c0c0;background:#fff;color:#1a1a1a;padding:0 6px}.nf-field__dropdown[data-v-39792a0b] .sp-dropdown__trigger:hover{background:#f5f5f5}.nf-field__dropdown[data-v-39792a0b] .sp-dropdown__trigger--open{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__textarea[data-v-39792a0b]{flex:1;min-height:44px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;color:#1a1a1a;padding:4px 6px;outline:none;box-sizing:border-box;resize:none;font-family:Consolas,Courier New,monospace}.nf-field__textarea[data-v-39792a0b]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-checkbox[data-v-39792a0b]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.nf-checkbox input[data-v-39792a0b]{margin:0;cursor:pointer}.nf-dialog__footer[data-v-39792a0b]{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.nf-preview[data-v-39792a0b]{display:flex;flex-direction:column;gap:2px;min-width:0}.nf-preview__label[data-v-39792a0b]{font-size:11px;color:#888}.nf-preview__value[data-v-39792a0b]{font-size:13px;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.nf-dialog__actions[data-v-39792a0b]{display:flex;gap:8px}.nf-btn[data-v-39792a0b]{height:28px;padding:0 16px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:12px;cursor:pointer;font-family:inherit}.nf-btn[data-v-39792a0b]:hover{background:#f0f0f0}.nf-btn--primary[data-v-39792a0b]{border-color:#0078d7;background:#0078d7;color:#fff}.nf-btn--primary[data-v-39792a0b]:hover{background:#0069c0}.nf-dialog-enter-active[data-v-39792a0b],.nf-dialog-leave-active[data-v-39792a0b]{transition:opacity .14s ease-out}.nf-dialog-enter-from[data-v-39792a0b],.nf-dialog-leave-to[data-v-39792a0b]{opacity:0}.nf-dialog-enter-active .nf-dialog[data-v-39792a0b],.nf-dialog-leave-active .nf-dialog[data-v-39792a0b]{transition:transform .14s ease-out}.nf-dialog-enter-from .nf-dialog[data-v-39792a0b],.nf-dialog-leave-to .nf-dialog[data-v-39792a0b]{transform:scale(.96)}.sort-confirm__mask[data-v-d26d5917]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30000;background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center}.sort-confirm[data-v-d26d5917]{width:360px;max-width:calc(100vw - 32px);background:#fff;border:1px solid #d0d0d0;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:#1a1a1a;-webkit-user-select:none;user-select:none}.sort-confirm__header[data-v-d26d5917]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.sort-confirm__title[data-v-d26d5917]{font-size:13px;font-weight:600}.sort-confirm__close[data-v-d26d5917]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:#888;cursor:pointer;border-radius:3px;padding:0}.sort-confirm__close[data-v-d26d5917]:hover{background:#f0f0f0;color:#444}.sort-confirm__close svg[data-v-d26d5917]{width:14px;height:14px}.sort-confirm__body[data-v-d26d5917]{padding:14px}.sort-confirm__message[data-v-d26d5917]{margin:0 0 12px;font-size:12px;line-height:1.5;color:#333}.sort-confirm__options[data-v-d26d5917]{display:flex;flex-direction:column;gap:8px}.sort-confirm__option[data-v-d26d5917]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.sort-confirm__option input[data-v-d26d5917]{margin:0;cursor:pointer}.sort-confirm__footer[data-v-d26d5917]{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.sort-confirm__btn[data-v-d26d5917]{height:28px;padding:0 16px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:12px;cursor:pointer;font-family:inherit}.sort-confirm__btn[data-v-d26d5917]:hover{background:#f0f0f0}.sort-confirm__btn--primary[data-v-d26d5917]{border-color:#0078d7;background:#0078d7;color:#fff}.sort-confirm__btn--primary[data-v-d26d5917]:hover{background:#0069c0}.sort-confirm-enter-active[data-v-d26d5917],.sort-confirm-leave-active[data-v-d26d5917]{transition:opacity .14s ease-out}.sort-confirm-enter-from[data-v-d26d5917],.sort-confirm-leave-to[data-v-d26d5917]{opacity:0}.sort-confirm-enter-active .sort-confirm[data-v-d26d5917],.sort-confirm-leave-active .sort-confirm[data-v-d26d5917]{transition:transform .14s ease-out}.sort-confirm-enter-from .sort-confirm[data-v-d26d5917],.sort-confirm-leave-to .sort-confirm[data-v-d26d5917]{transform:scale(.96)}.ifn-dialog__mask[data-v-f4e459b6]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30000;background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center}.ifn-dialog[data-v-f4e459b6]{width:440px;max-width:calc(100vw - 32px);background:#fff;border:1px solid #d0d0d0;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:#1a1a1a;-webkit-user-select:none;user-select:none}.ifn-dialog__header[data-v-f4e459b6]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.ifn-dialog__title[data-v-f4e459b6]{font-size:13px;font-weight:600}.ifn-dialog__close[data-v-f4e459b6]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:#888;cursor:pointer;border-radius:3px;padding:0}.ifn-dialog__close[data-v-f4e459b6]:hover{background:#f0f0f0;color:#444}.ifn-dialog__close svg[data-v-f4e459b6]{width:14px;height:14px}.ifn-dialog__body[data-v-f4e459b6]{padding:14px;display:flex;flex-direction:column;gap:12px}.ifn-dialog__field[data-v-f4e459b6]{display:flex;flex-direction:column;gap:6px}.ifn-dialog__label[data-v-f4e459b6]{font-size:12px;color:#333}.ifn-dialog__dropdown[data-v-f4e459b6]{width:100%}.ifn-dialog__dropdown[data-v-f4e459b6] .sp-dropdown__trigger{border:1px solid #c0c0c0;background:#fff;color:#1a1a1a;padding:0 6px}.ifn-dialog__dropdown[data-v-f4e459b6] .sp-dropdown__trigger:hover{background:#f5f5f5}.ifn-dialog__dropdown[data-v-f4e459b6] .sp-dropdown__trigger--open{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.ifn-dialog__desc[data-v-f4e459b6]{font-size:12px;line-height:1.5;color:#666;-webkit-user-select:text;user-select:text}.ifn-dialog__textarea[data-v-f4e459b6]{width:100%;height:84px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;line-height:1.5;color:#1a1a1a;padding:5px 6px;outline:none;box-sizing:border-box;font-family:Consolas,Menlo,monospace;resize:none;-webkit-user-select:text;user-select:text}.ifn-dialog__textarea[data-v-f4e459b6]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.ifn-dialog__footer[data-v-f4e459b6]{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.ifn-dialog__btn[data-v-f4e459b6]{height:28px;padding:0 16px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:12px;cursor:pointer;font-family:inherit}.ifn-dialog__btn[data-v-f4e459b6]:hover{background:#f0f0f0}.ifn-dialog__btn--primary[data-v-f4e459b6]{border-color:#0078d7;background:#0078d7;color:#fff}.ifn-dialog__btn--primary[data-v-f4e459b6]:hover{background:#0069c0}.ifn-dialog__btn--primary[data-v-f4e459b6]:disabled,.ifn-dialog__btn--primary[data-v-f4e459b6]:disabled:hover{border-color:#ccc;background:#f0f0f0;color:#a8a8a8;cursor:not-allowed}.ifn-dialog-enter-active[data-v-f4e459b6],.ifn-dialog-leave-active[data-v-f4e459b6]{transition:opacity .14s ease-out}.ifn-dialog-enter-from[data-v-f4e459b6],.ifn-dialog-leave-to[data-v-f4e459b6]{opacity:0}.ifn-dialog-enter-active .ifn-dialog[data-v-f4e459b6],.ifn-dialog-leave-active .ifn-dialog[data-v-f4e459b6]{transition:transform .14s ease-out}.ifn-dialog-enter-from .ifn-dialog[data-v-f4e459b6],.ifn-dialog-leave-to .ifn-dialog[data-v-f4e459b6]{transform:scale(.96)}.spreadsheet-outer[data-v-c870f7c9]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-c870f7c9]{display:flex;align-items:flex-start;min-height:36px;padding:0;gap:0}.formula-bar--expanded[data-v-c870f7c9]{min-height:72px}.formula-bar__cell-label[data-v-c870f7c9]{width:48px;min-width:48px;height:28px;line-height:28px;margin-top:4px;text-align:center;font-size:12px;font-weight:600;color:var(--sp-formula-bar-label-color);background:var(--sp-formula-bar-label-bg);border:1px solid var(--sp-formula-bar-label-border);border-radius:2px;-webkit-user-select:none;user-select:none}.formula-bar__buttons[data-v-c870f7c9]{display:inline-flex;align-items:stretch;margin-top:4px;margin-left:6px;height:28px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;overflow:hidden;background:var(--sp-formula-bar-input-bg)}.formula-bar__btn[data-v-c870f7c9]{width:22px;height:28px;border:none;border-radius:0;background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;-webkit-user-select:none;user-select:none;color:inherit}.formula-bar__btn+.formula-bar__btn[data-v-c870f7c9]{border-left:1px solid var(--sp-formula-bar-input-border)}.formula-bar__btn[data-v-c870f7c9]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__btn--cancel[data-v-c870f7c9]:hover{color:#e53935;background:#fdecea}.formula-bar__btn--accept[data-v-c870f7c9]:hover{color:#2e7d32;background:#e8f5e9}.formula-bar__fx-label[data-v-c870f7c9]{font-family:Georgia,Times New Roman,serif;font-style:italic;font-weight:600;font-size:13px;line-height:1;-webkit-user-select:none;user-select:none}.formula-bar__btn--fx[data-v-c870f7c9]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__input[data-v-c870f7c9]{flex:1;min-height:28px;height:28px;line-height:20px;margin-top:4px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;outline:none;padding:3px 6px;margin-left:4px;font-size:13px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:var(--sp-formula-bar-input-color);background:var(--sp-formula-bar-input-bg);resize:none;overflow:hidden;box-sizing:border-box}.formula-bar__input--expanded[data-v-c870f7c9]{height:68px;overflow:auto}.formula-bar__input[data-v-c870f7c9]:focus{border-color:var(--sp-formula-bar-input-focus-border);box-shadow:0 0 0 1px var(--sp-formula-bar-input-focus-shadow)}.formula-bar__toggle[data-v-c870f7c9]{width:22px;min-width:22px;height:28px;margin-top:4px;margin-left:2px;margin-right:2px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;background:var(--sp-formula-bar-input-bg);color:var(--sp-formula-bar-input-color);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;-webkit-user-select:none;user-select:none}.formula-bar__toggle[data-v-c870f7c9]:hover{background:var(--sp-scroll-btn-hover-bg, #e8e8e8)}.spreadsheet-wrapper[data-v-c870f7c9]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-c870f7c9]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas[data-v-c870f7c9]:focus{outline:none}.v-scrollbar[data-v-c870f7c9]{position:absolute;right:0;top:0;width:11px;height:calc(100% - 11px);display:flex;flex-direction:column;background:var(--sp-wrapper-bg)}.h-scrollbar[data-v-c870f7c9]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-c870f7c9]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-c870f7c9]{width:11px;height:11px;min-width:11px;min-height:11px;border:none;background:var(--sp-scroll-btn-bg, #e8e8e8);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;-webkit-user-select:none;user-select:none}.sb-btn[data-v-c870f7c9]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-c870f7c9]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-c870f7c9]{display:block;width:0;height:0}.sb-arrow--up[data-v-c870f7c9]{border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:4px solid var(--sp-scroll-btn-color, #666)}.sb-arrow--down[data-v-c870f7c9]{border-left:3px solid transparent;border-right:3px solid transparent;border-top:4px solid var(--sp-scroll-btn-color, #666)}.sb-arrow--left[data-v-c870f7c9]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-right:4px solid var(--sp-scroll-btn-color, #666)}.sb-arrow--right[data-v-c870f7c9]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-c870f7c9]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-c870f7c9]{width:11px}.sb-track--h[data-v-c870f7c9]{height:11px}.sb-thumb[data-v-c870f7c9]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-c870f7c9]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-c870f7c9]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-c870f7c9]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-c870f7c9]{position:absolute;border:2px solid var(--sp-cell-editor-border);outline:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;font-size:13px;color:var(--sp-cell-editor-color);background:var(--sp-cell-editor-bg);box-shadow:0 0 0 1px var(--sp-cell-editor-shadow);z-index:10;box-sizing:border-box;min-width:0;overflow:hidden;padding:0;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;resize:none;white-space:pre-wrap;word-break:break-all}.context-menu{position:fixed;z-index:10000;background:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 2px 8px #00000026;padding:4px 0;min-width:120px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;font-size:13px;transform-origin:top left}.context-menu__item{padding:6px 12px;cursor:pointer;color:#333;white-space:nowrap;position:relative;display:flex;align-items:center;justify-content:space-between}.context-menu__item:hover{background:#e8f0fe}.context-menu__item--disabled{color:#bbb;cursor:default}.context-menu__item--disabled:hover{background:transparent}.context-menu__arrow{margin-left:8px;margin-right:-2px;width:12px;height:12px;fill:#888;flex:none}.context-submenu{display:none;position:absolute;left:100%;top:-4px;background:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 2px 8px #00000026;padding:4px 0;min-width:100px;z-index:10001}.context-submenu--left{left:auto;right:100%}.context-menu__item:not(.context-menu__item--disabled):hover>.context-submenu{display:block}.context-submenu .context-menu__item{justify-content:flex-start}.menu-pop-enter-active,.menu-pop-leave-active{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from,.menu-pop-leave-to{opacity:0;transform:scale(.9)}.dim-panel{position:fixed;z-index:10002;width:220px;background:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 2px 8px #00000026;padding:10px 12px;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;-webkit-user-select:none;user-select:none;transform-origin:top left}.dim-panel__title{font-size:13px;font-weight:600;color:#333;margin-bottom:8px}.dim-panel__body{display:flex;align-items:center;gap:6px}.dim-panel__input{flex:1;height:26px;border:1px solid #c0c0c0;border-radius:3px;outline:none;padding:0 6px;font-size:13px;color:#1a1a1a;background:#fff;box-sizing:border-box}.dim-panel__input:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.dim-panel__input--error{border-color:#d93025;box-shadow:0 0 0 1px #d930254d}.dim-panel__error{margin-top:6px;font-size:12px;color:#d93025;line-height:1.4}.dim-panel__footer{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}.dim-panel__btn{height:26px;padding:0 14px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:13px;cursor:pointer}.dim-panel__btn:hover{background:#f0f0f0}.dim-panel__btn--primary{border-color:#0078d7;background:#0078d7;color:#fff}.dim-panel__btn--primary:hover{background:#0069c0}
|
|
1
|
+
.sp-dropdown[data-v-804e629f]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-804e629f]{display:flex;align-items:center;justify-content:space-between;gap:4px;width:100%;height:26px;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color, #444);font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;cursor:pointer;padding:0 5px;box-sizing:border-box}.sp-dropdown__trigger[data-v-804e629f]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-804e629f]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-804e629f]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-804e629f]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-804e629f]{position:fixed;z-index:40000;display:flex;flex-direction:column;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;padding:4px;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;transform-origin:top center}.sp-dropdown__menu--up[data-v-804e629f]{transform-origin:bottom center}.menu-pop-enter-active[data-v-804e629f],.menu-pop-leave-active[data-v-804e629f]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-804e629f],.menu-pop-leave-to[data-v-804e629f]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-804e629f]{display:flex;align-items:center;justify-content:center;height:15px;min-height:15px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #666);cursor:pointer;padding:0;border-radius:3px}.sp-dropdown__nav[data-v-804e629f]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-804e629f]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-804e629f]{width:10px;height:10px}.sp-dropdown__list[data-v-804e629f]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__search[data-v-804e629f]{flex:0 0 auto;height:26px;margin-bottom:4px;padding:0 8px;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:3px;font-size:12px;font-family:inherit;color:#1a1a1a;outline:none;box-sizing:border-box}.sp-dropdown__search[data-v-804e629f]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.sp-dropdown__empty[data-v-804e629f]{padding:6px 8px;font-size:12px;color:#999;text-align:center}.sp-dropdown__icon[data-v-804e629f]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-804e629f] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-804e629f]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-804e629f] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-804e629f]{white-space:nowrap}.sp-dropdown__item[data-v-804e629f]{display:flex;align-items:center;gap:6px;width:100%;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);font-size:12px;cursor:pointer;padding:4px 8px;box-sizing:border-box;border-radius:3px}.sp-dropdown__item[data-v-804e629f]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-804e629f]{background:#e5f1fb;color:#0078d7}.color-picker[data-v-70f3dfdc]{position:relative;display:inline-flex;height:26px}.color-picker__menu[data-v-70f3dfdc]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;padding:6px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;transform-origin:top right}.menu-pop-enter-active[data-v-70f3dfdc],.menu-pop-leave-active[data-v-70f3dfdc]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-70f3dfdc],.menu-pop-leave-to[data-v-70f3dfdc]{opacity:0;transform:scale(.9)}.color-picker__row[data-v-70f3dfdc]{display:flex;gap:4px;margin-bottom:4px}.color-picker__row[data-v-70f3dfdc]:last-child{margin-bottom:0}.color-picker__swatch[data-v-70f3dfdc]{width:20px;height:20px;padding:0;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .08s,box-shadow .08s;position:relative}.color-picker__swatch[data-v-70f3dfdc]:hover{transform:scale(1.18);box-shadow:0 0 0 1px #0003;z-index:1}.color-picker__swatch--selected[data-v-70f3dfdc]{box-shadow:0 0 0 2px #0078d7}.border-picker[data-v-551c0ffe]{position:relative;display:inline-flex;height:26px}.border-picker__menu[data-v-551c0ffe]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.border-picker__item[data-v-551c0ffe]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.border-picker__item[data-v-551c0ffe]:hover{background:#eef3f9}.border-picker__icon[data-v-551c0ffe]{width:18px;height:18px;flex-shrink:0}.border-picker__label[data-v-551c0ffe]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-551c0ffe],.menu-pop-leave-active[data-v-551c0ffe]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-551c0ffe],.menu-pop-leave-to[data-v-551c0ffe]{opacity:0;transform:scale(.9)}.sort-picker[data-v-45929b74]{position:relative;display:inline-flex;height:26px}.sort-picker__menu[data-v-45929b74]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.sort-picker__item[data-v-45929b74]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.sort-picker__item[data-v-45929b74]:hover{background:#eef3f9}.sort-picker__icon[data-v-45929b74]{width:18px;height:18px;flex-shrink:0}.sort-picker__label[data-v-45929b74]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-45929b74],.menu-pop-leave-active[data-v-45929b74]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-45929b74],.menu-pop-leave-to[data-v-45929b74]{opacity:0;transform:scale(.9)}.merge-picker[data-v-edd36208]{position:relative;display:inline-flex;height:26px}.merge-picker__menu[data-v-edd36208]{position:fixed;z-index:9999;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.merge-picker__item[data-v-edd36208]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.merge-picker__item[data-v-edd36208]:hover{background:#eef3f9}.merge-picker__icon[data-v-edd36208]{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.merge-picker__icon[data-v-edd36208] svg{width:18px;height:18px}.merge-picker__label[data-v-edd36208]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-edd36208],.menu-pop-leave-active[data-v-edd36208]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-edd36208],.menu-pop-leave-to[data-v-edd36208]{opacity:0;transform:scale(.9)}.calc-picker[data-v-01a18e00]{position:relative;display:inline-flex;height:26px}.calc-picker__menu[data-v-01a18e00]{position:fixed;z-index:9999;min-width:120px;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.calc-picker__item[data-v-01a18e00]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.calc-picker__item[data-v-01a18e00]:hover:not(.calc-picker__item--disabled){background:#eef3f9}.calc-picker__item--disabled[data-v-01a18e00]{color:var(--sp-toolbar-btn-disabled-color, #bbb);cursor:default}.calc-picker__label[data-v-01a18e00]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-01a18e00],.menu-pop-leave-active[data-v-01a18e00]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-01a18e00],.menu-pop-leave-to[data-v-01a18e00]{opacity:0;transform:scale(.9)}.toolbar[data-v-a97a071a]{position:relative;display:flex;align-items:center;height:32px;min-height:32px;gap:2px;padding:0 6px;background:var(--sp-toolbar-bg);border-bottom:1px solid var(--sp-toolbar-border);-webkit-user-select:none;user-select:none}.tb-item[data-v-a97a071a]{display:flex;align-items:center;flex:0 0 auto}.toolbar-sep[data-v-a97a071a]{width:1px;height:18px;margin:0 4px;background:var(--sp-toolbar-border)}.toolbar-font[data-v-a97a071a],.toolbar-number-format[data-v-a97a071a],.toolbar-align[data-v-a97a071a],.toolbar-freeze[data-v-a97a071a]{flex:0 0 auto}.toolbar-font-size[data-v-a97a071a],.toolbar-number-format-group[data-v-a97a071a]{display:inline-flex;align-items:center;gap:0;height:26px;position:relative}.toolbar-font-size__input[data-v-a97a071a]{width:36px;height:26px;border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px;background:transparent;color:var(--sp-toolbar-btn-color);font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;text-align:left;padding:0 5px;outline:none;box-sizing:border-box;-webkit-appearance:none;appearance:none;-moz-appearance:textfield}.toolbar-font-size__input[data-v-a97a071a]::-webkit-outer-spin-button,.toolbar-font-size__input[data-v-a97a071a]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.toolbar-font-size__input[data-v-a97a071a]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__input[data-v-a97a071a]:focus{border-color:var(--sp-toolbar-border);background:#fff}.toolbar-font-size__btn[data-v-a97a071a]{display:flex;align-items:center;justify-content:center;width:16px;height:26px;border:1px solid transparent;border-left:none;border-radius:0 3px 3px 0;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0}.toolbar-font-size__btn[data-v-a97a071a]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__btn svg[data-v-a97a071a]{width:10px;height:10px}.toolbar-font-size__dropdown[data-v-a97a071a]{position:absolute;width:56px;height:26px;pointer-events:none}.toolbar-btn[data-v-a97a071a]{display:flex;align-items:center;justify-content:center;width:30px;height:26px;border:none;border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0}.toolbar-btn[data-v-a97a071a]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-btn[data-v-a97a071a]:active:not(:disabled){opacity:.7}.toolbar-btn--active[data-v-a97a071a]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-btn--step[data-v-a97a071a]{width:26px;height:26px}.toolbar-btn--step svg[data-v-a97a071a]{width:16px;height:16px}.toolbar-btn[data-v-a97a071a]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.toolbar-btn__icon[data-v-a97a071a]{width:18px;height:18px}.toolbar-btn svg[data-v-a97a071a]:not(.toolbar-btn__icon){width:18px;height:18px}.toolbar-split[data-v-a97a071a]{display:inline-flex;align-items:center;position:relative;height:26px}.toolbar-split__main[data-v-a97a071a]{border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px}.toolbar-split__arrow[data-v-a97a071a]{display:flex;align-items:center;justify-content:center;width:16px;height:26px;border:1px solid transparent;border-radius:0 3px 3px 0;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0}.toolbar-split__arrow[data-v-a97a071a]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-split__arrow svg[data-v-a97a071a]{width:10px!important;height:10px!important}.toolbar-more[data-v-a97a071a]{display:flex;align-items:center;justify-content:center;width:30px;height:26px;border:none;border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;padding:0;flex:0 0 auto;margin-left:auto}.toolbar-more[data-v-a97a071a]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-more--active[data-v-a97a071a]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-more svg[data-v-a97a071a]{width:18px;height:18px}.overflow-menu[data-v-a97a071a]{min-width:180px;max-width:260px;max-height:calc(100vh - 40px);overflow-y:auto;background:var(--sp-toolbar-bg, #fff);border:1px solid var(--sp-toolbar-border);border-radius:4px;box-shadow:0 4px 12px #0000001f;padding:4px 6px;display:flex;flex-direction:column;gap:2px;z-index:1000;transform-origin:top right}.overflow-menu.no-anim[data-v-a97a071a]{transition:none!important}.overflow-menu .tb-item[data-v-a97a071a]{width:100%}.overflow-menu .toolbar-sep[data-v-a97a071a]{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split[data-v-a97a071a]{width:100%}.overflow-menu .toolbar-split__main[data-v-a97a071a]{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size[data-v-a97a071a],.overflow-menu .toolbar-number-format-group[data-v-a97a071a]{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font[data-v-a97a071a]{width:100%}.overflow-menu .toolbar-number-format[data-v-a97a071a]{flex:1 1 auto;width:auto!important;min-width:0}.overflow-menu .toolbar-align[data-v-a97a071a],.overflow-menu .toolbar-freeze[data-v-a97a071a]{width:100%}.overflow-menu .toolbar-btn[data-v-a97a071a]:not(.toolbar-btn--step):not(.toolbar-split__arrow):not(.toolbar-number-format__btn){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-number-format__btn[data-v-a97a071a]{flex:0 0 auto;width:30px}.overflow-menu .toolbar-color[data-v-a97a071a]{width:100%}.overflow-menu .toolbar-wrap[data-v-a97a071a]{width:100%;justify-content:flex-start}.menu-pop-enter-active[data-v-a97a071a],.menu-pop-leave-active[data-v-a97a071a]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-a97a071a],.menu-pop-leave-to[data-v-a97a071a]{opacity:0;transform:scale(.9)}.overflow-menu .tb-item{width:100%}.overflow-menu .toolbar-sep{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split{width:100%}.overflow-menu .toolbar-split__main{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size,.overflow-menu .toolbar-number-format-group{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font{width:100%}.overflow-menu .toolbar-number-format{flex:1 1 auto;width:auto!important;min-width:0}.overflow-menu .toolbar-align,.overflow-menu .toolbar-freeze{width:100%}.overflow-menu .toolbar-btn:not(.toolbar-btn--step):not(.toolbar-split__arrow):not(.toolbar-number-format__btn){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-number-format__btn{flex:0 0 auto;width:30px}.overflow-menu .toolbar-color{width:100%}.overflow-menu .toolbar-wrap{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font-size__input{flex:1 1 auto;width:auto;min-width:40px}.overflow-menu .toolbar-btn:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-btn:active:not(:disabled){opacity:.7}.overflow-menu .toolbar-btn--active{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.overflow-menu .toolbar-btn:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.overflow-menu .toolbar-split__main:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-split__arrow:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-font-size__input:hover{background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-font-size__input:focus{border-color:var(--sp-toolbar-border);background:#fff}.overflow-menu .toolbar-font-size__btn:hover,.overflow-menu .toolbar-more:hover{background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-more--active{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.tab-bar[data-v-ec10bade]{display:flex;align-items:stretch;height:30px;min-height:30px;background:var(--sp-tab-bar-bg);border-top:1px solid var(--sp-tab-bar-border);-webkit-user-select:none;user-select:none;margin-top:4px}.tab-list[data-v-ec10bade]{display:flex;align-items:flex-start;flex:1;overflow:hidden;gap:1px;padding:0 1px}.tab-item[data-v-ec10bade]{display:flex;align-items:center;height:28px;min-width:0;max-width:120px;padding:0 10px;cursor:pointer;border:1px solid var(--sp-tab-inactive-border);background:var(--sp-tab-inactive-bg);color:var(--sp-tab-inactive-color);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap;transition:background .1s}.tab-item[data-v-ec10bade]:hover{background:var(--sp-tab-hover-bg)}.tab-item--active[data-v-ec10bade]{height:28px;background:var(--sp-tab-active-bg);color:var(--sp-tab-active-color);border-color:var(--sp-tab-active-bg) var(--sp-tab-bar-border) var(--sp-tab-bar-border);border-top:2px solid var(--sp-tab-active-border);font-size:16px}.tab-item--active[data-v-ec10bade]:hover{background:var(--sp-tab-active-bg)}.tab-item__name[data-v-ec10bade]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-rename-input[data-v-ec10bade]{width:100%;height:18px;border:none;border-radius:0;outline:none;padding:0;font-size:16px;font-family:inherit;background:var(--sp-tab-active-bg);color:var(--sp-tab-active-color);box-sizing:border-box}.tab-bar__list-btn[data-v-ec10bade]{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;margin:0 2px 3px 3px;border:none;background:transparent;color:var(--sp-tab-add-btn-color);cursor:pointer;padding:0;align-self:flex-end}.tab-bar__list-btn[data-v-ec10bade]:hover,.tab-bar__list-btn--active[data-v-ec10bade]{background:var(--sp-tab-add-btn-hover-bg)}.tab-bar__list-btn svg[data-v-ec10bade]{width:14px;height:14px}.tab-bar__add-btn[data-v-ec10bade]{display:flex;align-items:center;justify-content:center;width:24px;min-width:24px;height:24px;margin:0 4px 3px 3px;border:none;background:transparent;color:var(--sp-tab-add-btn-color);font-size:16px;line-height:22px;text-align:center;cursor:pointer;padding:0;align-self:flex-end}.tab-bar__add-btn[data-v-ec10bade]:hover{background:var(--sp-tab-add-btn-hover-bg)}.tab-list-menu{position:fixed;display:flex;flex-direction:column;background:var(--sp-toolbar-bg, #fff);border:1px solid var(--sp-toolbar-border, #d8d8d8);border-radius:4px;box-shadow:0 4px 12px #0000001f;padding:4px;z-index:1000;transform-origin:bottom left;min-width:140px;max-width:260px;box-sizing:border-box}.tab-list-menu__nav{display:flex;align-items:center;justify-content:center;height:15px;min-height:15px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #666);cursor:pointer;padding:0;border-radius:3px}.tab-list-menu__nav:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg, #eef3f9)}.tab-list-menu__nav:disabled{color:#ccc;cursor:default}.tab-list-menu__nav svg{width:10px;height:10px}.tab-list-menu__list{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.tab-list-menu__item{display:flex;align-items:center;gap:4px;width:100%;height:28px;padding:0 6px 0 10px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);font-size:13px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;cursor:pointer;white-space:nowrap;border-radius:3px;box-sizing:border-box}.tab-list-menu__item:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.tab-list-menu__item--active{color:var(--sp-tab-active-border, #0078d7);font-weight:500}.tab-list-menu__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-list-menu__del{display:flex;align-items:center;justify-content:center;width:18px;height:18px;flex:0 0 auto;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #999);cursor:pointer;padding:0;border-radius:3px;opacity:.55}.tab-list-menu__item:hover .tab-list-menu__del{opacity:1}.tab-list-menu__del:hover:not(:disabled){background:rgba(0,0,0,.08);color:#d9534f}.tab-list-menu__del:disabled{cursor:default;opacity:.25}.tab-list-menu__del svg{width:12px;height:12px}.find-bar[data-v-3120909b]{display:flex;align-items:center;gap:6px;padding:4px 8px;background:var(--sp-toolbar-bg);border-bottom:1px solid var(--sp-toolbar-border);-webkit-user-select:none;user-select:none;flex-wrap:nowrap;overflow-x:auto}.find-bar__input[data-v-3120909b]{height:24px;width:160px;flex:0 0 auto;border:1px solid var(--sp-toolbar-border);border-radius:3px;padding:0 6px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:var(--sp-formula-bar-input-color, #1a1a1a);background:#fff;outline:none;box-sizing:border-box}.find-bar__input[data-v-3120909b]:focus{border-color:var(--sp-toolbar-btn-active-color)}.find-bar__dropdown[data-v-3120909b]{flex:0 0 auto}.find-bar__dropdown[data-v-3120909b] .sp-dropdown__trigger{height:24px;border:1px solid var(--sp-toolbar-border);background:#fff;color:var(--sp-formula-bar-input-color, #1a1a1a);font-size:12px;padding:0 4px}.find-bar__dropdown[data-v-3120909b] .sp-dropdown__trigger:hover{background:#f5f5f5}.find-bar__dropdown[data-v-3120909b] .sp-dropdown__trigger--open{border-color:var(--sp-toolbar-btn-active-color)}.find-bar__chk[data-v-3120909b]{display:flex;align-items:center;gap:5px;flex:0 0 auto;font-size:12px;color:var(--sp-toolbar-btn-color);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none}.find-bar__chk-input[data-v-3120909b]{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;pointer-events:none}.find-bar__chk-box[data-v-3120909b]{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;flex:0 0 auto;box-sizing:border-box;border:1px solid var(--sp-toolbar-border);border-radius:3px;background:#fff;transition:background .12s ease,border-color .12s ease}.find-bar__chk-tick[data-v-3120909b]{width:12px;height:12px;color:#fff;opacity:0;transform:scale(.5);transition:opacity .12s ease,transform .12s ease}.find-bar__chk-input:checked+.find-bar__chk-box[data-v-3120909b]{background:#0078d7;border-color:#0078d7}.find-bar__chk-input:checked+.find-bar__chk-box .find-bar__chk-tick[data-v-3120909b]{opacity:1;transform:scale(1)}.find-bar__chk-input:focus-visible+.find-bar__chk-box[data-v-3120909b]{outline:2px solid rgba(0,120,215,.4);outline-offset:1px}.find-bar__count[data-v-3120909b]{flex:0 0 auto;font-size:12px;color:var(--sp-toolbar-btn-color);min-width:44px;text-align:center;white-space:nowrap}.find-bar__btn[data-v-3120909b]{height:24px;flex:0 0 auto;border:1px solid var(--sp-toolbar-border);border-radius:3px;background:transparent;color:var(--sp-toolbar-btn-color);cursor:pointer;font-size:12px;padding:0 8px;display:inline-flex;align-items:center;justify-content:center}.find-bar__btn[data-v-3120909b]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.find-bar__btn[data-v-3120909b]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.find-bar__btn--icon[data-v-3120909b]{width:26px;padding:0}.find-bar__btn--icon svg[data-v-3120909b]{width:14px;height:14px}.find-bar__btn--close[data-v-3120909b]{width:26px;padding:0;margin-left:auto;border:none}.find-bar__btn--close svg[data-v-3120909b]{width:14px;height:14px}.nf-dialog__mask[data-v-39792a0b]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30000;background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center}.nf-dialog[data-v-39792a0b]{width:380px;max-width:calc(100vw - 32px);max-height:calc(100vh - 48px);overflow-y:auto;background:#fff;border:1px solid #d0d0d0;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:#1a1a1a;-webkit-user-select:none;user-select:none}.nf-dialog__header[data-v-39792a0b]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.nf-dialog__title[data-v-39792a0b]{font-size:13px;font-weight:600}.nf-dialog__close[data-v-39792a0b]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:#888;cursor:pointer;border-radius:3px;padding:0}.nf-dialog__close[data-v-39792a0b]:hover{background:#f0f0f0;color:#444}.nf-dialog__close svg[data-v-39792a0b]{width:14px;height:14px}.nf-dialog__body[data-v-39792a0b]{padding:12px 14px;display:flex;flex-direction:column;gap:10px}.nf-field[data-v-39792a0b]{display:flex;align-items:center;gap:8px}.nf-field--inline[data-v-39792a0b]{min-height:26px}.nf-field__label[data-v-39792a0b]{width:88px;min-width:88px;font-size:12px;color:#555}.nf-field__input[data-v-39792a0b]{flex:1;height:26px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;color:#1a1a1a;padding:0 6px;outline:none;box-sizing:border-box;font-family:inherit}.nf-field__input[data-v-39792a0b]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__dropdown[data-v-39792a0b]{flex:1}.nf-field__dropdown[data-v-39792a0b] .sp-dropdown__trigger{border:1px solid #c0c0c0;background:#fff;color:#1a1a1a;padding:0 6px}.nf-field__dropdown[data-v-39792a0b] .sp-dropdown__trigger:hover{background:#f5f5f5}.nf-field__dropdown[data-v-39792a0b] .sp-dropdown__trigger--open{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__textarea[data-v-39792a0b]{flex:1;min-height:44px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;color:#1a1a1a;padding:4px 6px;outline:none;box-sizing:border-box;resize:none;font-family:Consolas,Courier New,monospace}.nf-field__textarea[data-v-39792a0b]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-checkbox[data-v-39792a0b]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.nf-checkbox input[data-v-39792a0b]{margin:0;cursor:pointer}.nf-dialog__footer[data-v-39792a0b]{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.nf-preview[data-v-39792a0b]{display:flex;flex-direction:column;gap:2px;min-width:0}.nf-preview__label[data-v-39792a0b]{font-size:11px;color:#888}.nf-preview__value[data-v-39792a0b]{font-size:13px;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.nf-dialog__actions[data-v-39792a0b]{display:flex;gap:8px}.nf-btn[data-v-39792a0b]{height:28px;padding:0 16px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:12px;cursor:pointer;font-family:inherit}.nf-btn[data-v-39792a0b]:hover{background:#f0f0f0}.nf-btn--primary[data-v-39792a0b]{border-color:#0078d7;background:#0078d7;color:#fff}.nf-btn--primary[data-v-39792a0b]:hover{background:#0069c0}.nf-dialog-enter-active[data-v-39792a0b],.nf-dialog-leave-active[data-v-39792a0b]{transition:opacity .14s ease-out}.nf-dialog-enter-from[data-v-39792a0b],.nf-dialog-leave-to[data-v-39792a0b]{opacity:0}.nf-dialog-enter-active .nf-dialog[data-v-39792a0b],.nf-dialog-leave-active .nf-dialog[data-v-39792a0b]{transition:transform .14s ease-out}.nf-dialog-enter-from .nf-dialog[data-v-39792a0b],.nf-dialog-leave-to .nf-dialog[data-v-39792a0b]{transform:scale(.96)}.sort-confirm__mask[data-v-d26d5917]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30000;background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center}.sort-confirm[data-v-d26d5917]{width:360px;max-width:calc(100vw - 32px);background:#fff;border:1px solid #d0d0d0;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:#1a1a1a;-webkit-user-select:none;user-select:none}.sort-confirm__header[data-v-d26d5917]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.sort-confirm__title[data-v-d26d5917]{font-size:13px;font-weight:600}.sort-confirm__close[data-v-d26d5917]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:#888;cursor:pointer;border-radius:3px;padding:0}.sort-confirm__close[data-v-d26d5917]:hover{background:#f0f0f0;color:#444}.sort-confirm__close svg[data-v-d26d5917]{width:14px;height:14px}.sort-confirm__body[data-v-d26d5917]{padding:14px}.sort-confirm__message[data-v-d26d5917]{margin:0 0 12px;font-size:12px;line-height:1.5;color:#333}.sort-confirm__options[data-v-d26d5917]{display:flex;flex-direction:column;gap:8px}.sort-confirm__option[data-v-d26d5917]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.sort-confirm__option input[data-v-d26d5917]{margin:0;cursor:pointer}.sort-confirm__footer[data-v-d26d5917]{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.sort-confirm__btn[data-v-d26d5917]{height:28px;padding:0 16px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:12px;cursor:pointer;font-family:inherit}.sort-confirm__btn[data-v-d26d5917]:hover{background:#f0f0f0}.sort-confirm__btn--primary[data-v-d26d5917]{border-color:#0078d7;background:#0078d7;color:#fff}.sort-confirm__btn--primary[data-v-d26d5917]:hover{background:#0069c0}.sort-confirm-enter-active[data-v-d26d5917],.sort-confirm-leave-active[data-v-d26d5917]{transition:opacity .14s ease-out}.sort-confirm-enter-from[data-v-d26d5917],.sort-confirm-leave-to[data-v-d26d5917]{opacity:0}.sort-confirm-enter-active .sort-confirm[data-v-d26d5917],.sort-confirm-leave-active .sort-confirm[data-v-d26d5917]{transition:transform .14s ease-out}.sort-confirm-enter-from .sort-confirm[data-v-d26d5917],.sort-confirm-leave-to .sort-confirm[data-v-d26d5917]{transform:scale(.96)}.ifn-dialog__mask[data-v-f4e459b6]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30000;background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center}.ifn-dialog[data-v-f4e459b6]{width:440px;max-width:calc(100vw - 32px);background:#fff;border:1px solid #d0d0d0;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:#1a1a1a;-webkit-user-select:none;user-select:none}.ifn-dialog__header[data-v-f4e459b6]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.ifn-dialog__title[data-v-f4e459b6]{font-size:13px;font-weight:600}.ifn-dialog__close[data-v-f4e459b6]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:#888;cursor:pointer;border-radius:3px;padding:0}.ifn-dialog__close[data-v-f4e459b6]:hover{background:#f0f0f0;color:#444}.ifn-dialog__close svg[data-v-f4e459b6]{width:14px;height:14px}.ifn-dialog__body[data-v-f4e459b6]{padding:14px;display:flex;flex-direction:column;gap:12px}.ifn-dialog__field[data-v-f4e459b6]{display:flex;flex-direction:column;gap:6px}.ifn-dialog__label[data-v-f4e459b6]{font-size:12px;color:#333}.ifn-dialog__dropdown[data-v-f4e459b6]{width:100%}.ifn-dialog__dropdown[data-v-f4e459b6] .sp-dropdown__trigger{border:1px solid #c0c0c0;background:#fff;color:#1a1a1a;padding:0 6px}.ifn-dialog__dropdown[data-v-f4e459b6] .sp-dropdown__trigger:hover{background:#f5f5f5}.ifn-dialog__dropdown[data-v-f4e459b6] .sp-dropdown__trigger--open{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.ifn-dialog__desc[data-v-f4e459b6]{font-size:12px;line-height:1.5;color:#666;-webkit-user-select:text;user-select:text}.ifn-dialog__textarea[data-v-f4e459b6]{width:100%;height:84px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;line-height:1.5;color:#1a1a1a;padding:5px 6px;outline:none;box-sizing:border-box;font-family:Consolas,Menlo,monospace;resize:none;-webkit-user-select:text;user-select:text}.ifn-dialog__textarea[data-v-f4e459b6]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.ifn-dialog__footer[data-v-f4e459b6]{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.ifn-dialog__btn[data-v-f4e459b6]{height:28px;padding:0 16px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:12px;cursor:pointer;font-family:inherit}.ifn-dialog__btn[data-v-f4e459b6]:hover{background:#f0f0f0}.ifn-dialog__btn--primary[data-v-f4e459b6]{border-color:#0078d7;background:#0078d7;color:#fff}.ifn-dialog__btn--primary[data-v-f4e459b6]:hover{background:#0069c0}.ifn-dialog__btn--primary[data-v-f4e459b6]:disabled,.ifn-dialog__btn--primary[data-v-f4e459b6]:disabled:hover{border-color:#ccc;background:#f0f0f0;color:#a8a8a8;cursor:not-allowed}.ifn-dialog-enter-active[data-v-f4e459b6],.ifn-dialog-leave-active[data-v-f4e459b6]{transition:opacity .14s ease-out}.ifn-dialog-enter-from[data-v-f4e459b6],.ifn-dialog-leave-to[data-v-f4e459b6]{opacity:0}.ifn-dialog-enter-active .ifn-dialog[data-v-f4e459b6],.ifn-dialog-leave-active .ifn-dialog[data-v-f4e459b6]{transition:transform .14s ease-out}.ifn-dialog-enter-from .ifn-dialog[data-v-f4e459b6],.ifn-dialog-leave-to .ifn-dialog[data-v-f4e459b6]{transform:scale(.96)}.spreadsheet-outer[data-v-a7c5466d]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-a7c5466d]{display:flex;align-items:flex-start;min-height:36px;padding:0;gap:0}.formula-bar--expanded[data-v-a7c5466d]{min-height:72px}.formula-bar__cell-label[data-v-a7c5466d]{width:48px;min-width:48px;height:28px;line-height:28px;margin-top:4px;text-align:center;font-size:12px;font-weight:600;color:var(--sp-formula-bar-label-color);background:var(--sp-formula-bar-label-bg);border:1px solid var(--sp-formula-bar-label-border);border-radius:2px;-webkit-user-select:none;user-select:none}.formula-bar__buttons[data-v-a7c5466d]{display:inline-flex;align-items:stretch;margin-top:4px;margin-left:6px;height:28px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;overflow:hidden;background:var(--sp-formula-bar-input-bg)}.formula-bar__btn[data-v-a7c5466d]{width:22px;height:28px;border:none;border-radius:0;background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;-webkit-user-select:none;user-select:none;color:inherit}.formula-bar__btn+.formula-bar__btn[data-v-a7c5466d]{border-left:1px solid var(--sp-formula-bar-input-border)}.formula-bar__btn[data-v-a7c5466d]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__btn--cancel[data-v-a7c5466d]:hover{color:#e53935;background:#fdecea}.formula-bar__btn--accept[data-v-a7c5466d]:hover{color:#2e7d32;background:#e8f5e9}.formula-bar__fx-label[data-v-a7c5466d]{font-family:Georgia,Times New Roman,serif;font-style:italic;font-weight:600;font-size:13px;line-height:1;-webkit-user-select:none;user-select:none}.formula-bar__btn--fx[data-v-a7c5466d]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__input[data-v-a7c5466d]{flex:1;min-height:28px;height:28px;line-height:20px;margin-top:4px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;outline:none;padding:3px 6px;margin-left:4px;font-size:13px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:var(--sp-formula-bar-input-color);background:var(--sp-formula-bar-input-bg);resize:none;overflow:hidden;box-sizing:border-box}.formula-bar__input--expanded[data-v-a7c5466d]{height:68px;overflow:auto}.formula-bar__input[data-v-a7c5466d]:focus{border-color:var(--sp-formula-bar-input-focus-border);box-shadow:0 0 0 1px var(--sp-formula-bar-input-focus-shadow)}.formula-bar__toggle[data-v-a7c5466d]{width:22px;min-width:22px;height:28px;margin-top:4px;margin-left:2px;margin-right:2px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;background:var(--sp-formula-bar-input-bg);color:var(--sp-formula-bar-input-color);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;-webkit-user-select:none;user-select:none}.formula-bar__toggle[data-v-a7c5466d]:hover{background:var(--sp-scroll-btn-hover-bg, #e8e8e8)}.spreadsheet-wrapper[data-v-a7c5466d]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-a7c5466d]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas--freeze[data-v-a7c5466d]{pointer-events:none;z-index:1}.grid-canvas[data-v-a7c5466d]:not(.grid-canvas--freeze){z-index:0}.grid-canvas[data-v-a7c5466d]:focus{outline:none}.v-scrollbar[data-v-a7c5466d]{position:absolute;right:0;top:0;width:11px;height:calc(100% - 11px);display:flex;flex-direction:column;background:var(--sp-wrapper-bg)}.h-scrollbar[data-v-a7c5466d]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-a7c5466d]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-a7c5466d]{width:11px;height:11px;min-width:11px;min-height:11px;border:none;background:var(--sp-scroll-btn-bg, #e8e8e8);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;-webkit-user-select:none;user-select:none}.sb-btn[data-v-a7c5466d]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-a7c5466d]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-a7c5466d]{display:block;width:0;height:0}.sb-arrow--up[data-v-a7c5466d]{border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:4px solid var(--sp-scroll-btn-color, #666)}.sb-arrow--down[data-v-a7c5466d]{border-left:3px solid transparent;border-right:3px solid transparent;border-top:4px solid var(--sp-scroll-btn-color, #666)}.sb-arrow--left[data-v-a7c5466d]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-right:4px solid var(--sp-scroll-btn-color, #666)}.sb-arrow--right[data-v-a7c5466d]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-a7c5466d]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-a7c5466d]{width:11px}.sb-track--h[data-v-a7c5466d]{height:11px}.sb-thumb[data-v-a7c5466d]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-a7c5466d]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-a7c5466d]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-a7c5466d]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-a7c5466d]{position:absolute;border:2px solid var(--sp-cell-editor-border);outline:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;font-size:13px;color:var(--sp-cell-editor-color);background:var(--sp-cell-editor-bg);box-shadow:0 0 0 1px var(--sp-cell-editor-shadow);z-index:10;box-sizing:border-box;min-width:0;overflow:hidden;padding:0;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;resize:none;white-space:pre-wrap;word-break:break-all}.context-menu{position:fixed;z-index:10000;background:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 2px 8px #00000026;padding:4px 0;min-width:120px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;font-size:13px;transform-origin:top left}.context-menu__item{padding:6px 12px;cursor:pointer;color:#333;white-space:nowrap;position:relative;display:flex;align-items:center;justify-content:space-between}.context-menu__item:hover{background:#e8f0fe}.context-menu__item--disabled{color:#bbb;cursor:default}.context-menu__item--disabled:hover{background:transparent}.context-menu__arrow{margin-left:8px;margin-right:-2px;width:12px;height:12px;fill:#888;flex:none}.context-submenu{display:none;position:absolute;left:100%;top:-4px;background:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 2px 8px #00000026;padding:4px 0;min-width:100px;z-index:10001}.context-submenu--left{left:auto;right:100%}.context-menu__item:not(.context-menu__item--disabled):hover>.context-submenu{display:block}.context-submenu .context-menu__item{justify-content:flex-start}.menu-pop-enter-active,.menu-pop-leave-active{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from,.menu-pop-leave-to{opacity:0;transform:scale(.9)}.dim-panel{position:fixed;z-index:10002;width:220px;background:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 2px 8px #00000026;padding:10px 12px;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;-webkit-user-select:none;user-select:none;transform-origin:top left}.dim-panel__title{font-size:13px;font-weight:600;color:#333;margin-bottom:8px}.dim-panel__body{display:flex;align-items:center;gap:6px}.dim-panel__input{flex:1;height:26px;border:1px solid #c0c0c0;border-radius:3px;outline:none;padding:0 6px;font-size:13px;color:#1a1a1a;background:#fff;box-sizing:border-box}.dim-panel__input:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.dim-panel__input--error{border-color:#d93025;box-shadow:0 0 0 1px #d930254d}.dim-panel__error{margin-top:6px;font-size:12px;color:#d93025;line-height:1.4}.dim-panel__footer{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}.dim-panel__btn{height:26px;padding:0 14px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:13px;cursor:pointer}.dim-panel__btn:hover{background:#f0f0f0}.dim-panel__btn--primary{border-color:#0078d7;background:#0078d7;color:#fff}.dim-panel__btn--primary:hover{background:#0069c0}
|
|
@@ -16,6 +16,8 @@ type __VLS_Props = {
|
|
|
16
16
|
searchable?: boolean;
|
|
17
17
|
/** 搜索框占位文本 */
|
|
18
18
|
searchPlaceholder?: string;
|
|
19
|
+
/** 触发器固定图标(SVG 字符串):当 modelValue 未命中任何 option 时显示,优先级低于 current.icon */
|
|
20
|
+
triggerIcon?: string;
|
|
19
21
|
};
|
|
20
22
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
21
23
|
"update:modelValue": (v: string | number) => void;
|
|
@@ -37,6 +39,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
37
39
|
fallbackLabel: string;
|
|
38
40
|
searchable: boolean;
|
|
39
41
|
searchPlaceholder: string;
|
|
42
|
+
triggerIcon: string;
|
|
40
43
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
41
44
|
rootRef: HTMLDivElement;
|
|
42
45
|
menuRef: HTMLDivElement;
|
|
@@ -37,6 +37,8 @@ type __VLS_Props = {
|
|
|
37
37
|
mergeMenuOpen: boolean;
|
|
38
38
|
calcMenuOpen: boolean;
|
|
39
39
|
isSingleCell: boolean;
|
|
40
|
+
/** 当前 worksheet 是否已有冻结行或列 */
|
|
41
|
+
hasFreeze: boolean;
|
|
40
42
|
themeVars?: Record<string, string>;
|
|
41
43
|
selNumberFormat: string;
|
|
42
44
|
nfOptions: NFOption[];
|
|
@@ -76,6 +78,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
76
78
|
"text-color-change": (v: string) => void;
|
|
77
79
|
"fill-color-change": (v: string) => void;
|
|
78
80
|
"number-format-change": (v: string) => void;
|
|
81
|
+
"freeze-change": (v: string) => void;
|
|
79
82
|
"font-size-keydown": (ev: KeyboardEvent) => void;
|
|
80
83
|
"update:font-size-menu-open": (v: boolean) => void;
|
|
81
84
|
"update:text-color-menu-open": (v: boolean) => void;
|
|
@@ -120,6 +123,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
120
123
|
"onText-color-change"?: ((v: string) => any) | undefined;
|
|
121
124
|
"onFill-color-change"?: ((v: string) => any) | undefined;
|
|
122
125
|
"onNumber-format-change"?: ((v: string) => any) | undefined;
|
|
126
|
+
"onFreeze-change"?: ((v: string) => any) | undefined;
|
|
123
127
|
"onFont-size-keydown"?: ((ev: KeyboardEvent) => any) | undefined;
|
|
124
128
|
"onUpdate:font-size-menu-open"?: ((v: boolean) => any) | undefined;
|
|
125
129
|
"onUpdate:text-color-menu-open"?: ((v: boolean) => any) | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ComputedRef, type Ref } from 'vue';
|
|
2
2
|
import { FormulaDeps } from '../core/formula';
|
|
3
|
-
import type { CellCoord, CellData, CellStyle, SelectionRange, BorderStyle, BorderSide } from '../core/types';
|
|
3
|
+
import type { CellCoord, CellData, CellStyle, SelectionRange, BorderStyle, BorderSide, FreezePane, ViewportRegion } from '../core/types';
|
|
4
4
|
/** 选区触发方式,影响「合并单元格是否扩大选区」。
|
|
5
5
|
* - 'cell':单元格点击/拖动(默认)→ 保持现有 expandSelectionForMerges 行为
|
|
6
6
|
* - 'row' :行头点击/拖动 → Excel 风格「穿透」合并,选区矩形保持用户点击的行范围
|
|
@@ -45,6 +45,33 @@ export interface CoreState {
|
|
|
45
45
|
rowHeights: Ref<(number | undefined)[]>;
|
|
46
46
|
scrollX: Ref<number>;
|
|
47
47
|
scrollY: Ref<number>;
|
|
48
|
+
freeze: FreezePane;
|
|
49
|
+
setFreeze: (rows: number, cols: number) => void;
|
|
50
|
+
clearFreeze: () => void;
|
|
51
|
+
getFreeze: () => FreezePane;
|
|
52
|
+
/** 基于真实行高/列宽计算冻结区域尺寸 */
|
|
53
|
+
getFrozenMetrics: () => {
|
|
54
|
+
frozenRowsHeight: number;
|
|
55
|
+
frozenColumnsWidth: number;
|
|
56
|
+
};
|
|
57
|
+
/** 返回四个 viewport 区域(未冻结时 corner/rows/columns 尺寸为 0) */
|
|
58
|
+
getViewportRegions: () => ViewportRegion[];
|
|
59
|
+
/** 逻辑单元格 -> Canvas 屏幕矩形 */
|
|
60
|
+
cellToScreenRect: (row: number, col: number) => {
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
};
|
|
66
|
+
/** Canvas 屏幕坐标 -> 逻辑单元格 { col, row } | null */
|
|
67
|
+
screenToCell: (x: number, y: number) => {
|
|
68
|
+
col: number;
|
|
69
|
+
row: number;
|
|
70
|
+
} | null;
|
|
71
|
+
/** 判断单元格是否落在冻结区域 */
|
|
72
|
+
isCellFrozen: (row: number, col: number) => boolean;
|
|
73
|
+
/** 将单元格滚入 Body 可视区;冻结区域内不滚动 */
|
|
74
|
+
scrollCellIntoView: (row: number, col: number) => void;
|
|
48
75
|
BASE_CELL_VPAD: number;
|
|
49
76
|
fontMetricsCache: Map<string, {
|
|
50
77
|
ascent: number;
|
|
@@ -7,6 +7,7 @@ import type { ContextMenuItem } from '../core/types';
|
|
|
7
7
|
export interface InteractionsState {
|
|
8
8
|
scheduleRender: () => void;
|
|
9
9
|
render: () => void;
|
|
10
|
+
renderFrozenOverlay: () => void;
|
|
10
11
|
activeCellLabel: ComputedRef<string>;
|
|
11
12
|
formulaBarDisplay: ComputedRef<string>;
|
|
12
13
|
formulaBarDraft: Ref<string>;
|
|
@@ -55,6 +56,8 @@ export interface InteractionsState {
|
|
|
55
56
|
editInputStyle: ComputedRef<Record<string, string | number | undefined>>;
|
|
56
57
|
hScrollbarW: ComputedRef<number>;
|
|
57
58
|
vScrollbarH: ComputedRef<number>;
|
|
59
|
+
hScrollbarLeft: ComputedRef<number>;
|
|
60
|
+
vScrollbarTop: ComputedRef<number>;
|
|
58
61
|
hTrackW: ComputedRef<number>;
|
|
59
62
|
vTrackH: ComputedRef<number>;
|
|
60
63
|
hThumbW: ComputedRef<number>;
|
|
@@ -42,6 +42,7 @@ export interface SheetsOpsState {
|
|
|
42
42
|
toolbarThemeVars: ComputedRef<Record<string, string>>;
|
|
43
43
|
wrapperRef: Ref<HTMLDivElement | null>;
|
|
44
44
|
canvasRef: Ref<HTMLCanvasElement | null>;
|
|
45
|
+
freezeCanvasRef: Ref<HTMLCanvasElement | null>;
|
|
45
46
|
editInputRef: Ref<HTMLTextAreaElement | null>;
|
|
46
47
|
formulaBarRef: Ref<HTMLTextAreaElement | null>;
|
|
47
48
|
viewSize: {
|
|
@@ -85,6 +85,11 @@ export interface SpreadsheetData {
|
|
|
85
85
|
style?: CellStyle;
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
+
/** 冻结窗格状态:rows/cols 为冻结的行数/列数(0 表示该方向未冻结) */
|
|
89
|
+
export interface FreezePane {
|
|
90
|
+
rows: number;
|
|
91
|
+
cols: number;
|
|
92
|
+
}
|
|
88
93
|
export interface SheetModelData {
|
|
89
94
|
name: string;
|
|
90
95
|
/** 表格级样式池:styles[0] 始终为默认空样式 {} */
|
|
@@ -103,6 +108,8 @@ export interface SheetModelData {
|
|
|
103
108
|
colCount?: number;
|
|
104
109
|
/** 工作表逻辑有效行数(0-based exclusive)。缺失时回退到默认 200 */
|
|
105
110
|
rowCount?: number;
|
|
111
|
+
/** 冻结窗格状态;缺省视为未冻结 { rows: 0, cols: 0 } */
|
|
112
|
+
freeze?: FreezePane;
|
|
106
113
|
}
|
|
107
114
|
export interface SheetState {
|
|
108
115
|
id: string;
|
|
@@ -123,6 +130,18 @@ export interface SheetState {
|
|
|
123
130
|
colCount: number;
|
|
124
131
|
/** 工作表逻辑有效行数(0-based exclusive)。随操作动态增长 */
|
|
125
132
|
rowCount: number;
|
|
133
|
+
/** 冻结窗格状态(默认 { rows: 0, cols: 0 } 表示未冻结) */
|
|
134
|
+
freeze: FreezePane;
|
|
135
|
+
}
|
|
136
|
+
/** 视口区域:冻结窗格将画布划分为四个独立滚动区域 */
|
|
137
|
+
export interface ViewportRegion {
|
|
138
|
+
kind: 'corner' | 'rows' | 'columns' | 'body';
|
|
139
|
+
x: number;
|
|
140
|
+
y: number;
|
|
141
|
+
width: number;
|
|
142
|
+
height: number;
|
|
143
|
+
scrollLeft: number;
|
|
144
|
+
scrollTop: number;
|
|
126
145
|
}
|
|
127
146
|
export interface UndoSnapshot {
|
|
128
147
|
cells: Record<string, CellData>;
|