xiaodao-spreader 0.1.21 → 0.1.26
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 +3 -1
- package/README.md +3 -1
- package/dist/style.css +1 -1
- package/dist/types/components/spreader/components/dropdown.vue.d.ts +7 -0
- package/dist/types/components/spreader/components/pickers/insertFunctionDialog.vue.d.ts +20 -0
- package/dist/types/components/spreader/components/pickers/sortConfirmDialog.vue.d.ts +19 -0
- package/dist/types/components/spreader/components/pickers/sortPicker.vue.d.ts +29 -0
- package/dist/types/components/spreader/components/toolbar.vue.d.ts +11 -0
- package/dist/types/components/spreader/composables/interactions.d.ts +1 -0
- package/dist/types/components/spreader/composables/sheets-ops.d.ts +14 -1
- package/dist/types/components/spreader/core/formula.d.ts +15 -0
- package/dist/types/components/spreader/core/number-format.d.ts +20 -2
- package/dist/types/components/spreader/core/sort-core.d.ts +46 -0
- package/dist/xiaodao-spreader.es.js +5469 -4533
- package/dist/xiaodao-spreader.umd.js +9 -9
- package/package.json +1 -1
package/README.ZH.md
CHANGED
|
@@ -27,6 +27,8 @@
|
|
|
27
27
|
- **撤销 / 重做** — 单元格、列宽、行高的完整状态快照(50 步)
|
|
28
28
|
- **格式刷** — 复制并应用单元格格式到任意区域
|
|
29
29
|
- **数字格式** — Excel 风格数字格式(常规 / 文本 / 数值 / 货币 / 会计 / 百分比 / 科学计数 / 日期 / 时间 / 日期时间 / 持续时间),提供自定义格式对话框;仅影响显示,绝不修改底层单元格值
|
|
30
|
+
- **智能数据识别** — 输入 `100%`、`1,234`、`¥1,234.56` 等带符号数字文本时自动识别为数值并套用对应格式;常见日期时间文本自动识别为日期,与 Excel 输入语义一致
|
|
31
|
+
- **排序与排序提醒** — 工具栏与右键菜单按单元格**展示内容**对所有类型(数值 / 日期 / 文本)排序;排序只移动数据、不搬运样式;含合并单元格或公式的区域自动禁用排序;当选区外存在相邻数据时,弹出类 Excel 的「排序提醒」对话框,可选择「扩展选定区域」或「仅对选定区域排序」
|
|
30
32
|
- **查找与替换** — 工具栏查找按钮或 `Ctrl/Cmd+F`(含 `Ctrl/Cmd+H`)打开;支持「当前工作表 / 整个工作簿 / 当前选区」三种范围,区分大小写、匹配整个单元格;高亮全部匹配并定位当前项、循环查找;单次与全部替换均接入撤销/重做,仅修改单元格原始 `value`(始终保持字符串),不改动格式 / 边框 / 合并
|
|
31
33
|
|
|
32
34
|
### 交互体验
|
|
@@ -462,7 +464,7 @@ pnpm build:demo
|
|
|
462
464
|
- [ ] 冻结窗格(冻结行/列)
|
|
463
465
|
- [ ] 数据验证(下拉列表、输入约束)
|
|
464
466
|
- [ ] 行列分组与折叠
|
|
465
|
-
- [
|
|
467
|
+
- [x] 排序与筛选 —— 按展示内容排序,含类 Excel「排序提醒」对话框(扩展选定区域 / 仅对选定区域排序);见 [排序与排序提醒](#功能特性)
|
|
466
468
|
- [ ] 单元格批注
|
|
467
469
|
- [ ] 打印布局
|
|
468
470
|
|
package/README.md
CHANGED
|
@@ -26,6 +26,8 @@ A high-performance, canvas-based spreadsheet component for Vue 3 — bringing an
|
|
|
26
26
|
- **Undo / Redo** — Full state snapshots for cells, column widths, and row heights (50 steps)
|
|
27
27
|
- **Format Painter** — Copy & apply cell formatting across ranges
|
|
28
28
|
- **Number Format** — Excel-style number formatting (General / Text / Number / Currency / Accounting / Percent / Scientific / Date / Time / DateTime / Duration) with a custom format dialog; display-only, never mutates the stored cell value
|
|
29
|
+
- **Smart Data Recognition** — Typing `100%`, `1,234`, `¥1,234.56` auto-converts the text to a number and applies the matching format; common date/time text auto-converts to dates — matching Excel input behavior
|
|
30
|
+
- **Sorting & Sort Warning** — Sort any column by its **displayed content** (numbers / dates / text); sorting moves data only, never cell styles; ranges containing merged cells or formulas are auto-disabled; when adjacent data sits outside the selection, an Excel-style **Sort Warning** dialog lets you choose "Expand the selection" or "Sort the current selection only"
|
|
29
31
|
- **Find & Replace** — Open via the toolbar find button or `Ctrl/Cmd+F` (also `Ctrl/Cmd+H`); three scopes — current sheet / entire workbook / current selection; match case and match entire cell; highlights all matches and locates the active one with wrap-around navigation; single and replace-all both integrate with undo/redo, mutating only the raw `value` (always kept a string), never format / border / merge
|
|
30
32
|
|
|
31
33
|
### Interaction
|
|
@@ -459,7 +461,7 @@ The project includes a GitHub Actions workflow (`.github/workflows/publish.yml`)
|
|
|
459
461
|
- [ ] Frozen panes (freeze rows/columns)
|
|
460
462
|
- [ ] Data validation (dropdown lists, input constraints)
|
|
461
463
|
- [ ] Column / row grouping and collapsing
|
|
462
|
-
- [
|
|
464
|
+
- [x] Sort & filter — sort by displayed content with Excel-style Sort Warning dialog (expand selection / current selection only); see [Sorting & Sort Warning](#features)
|
|
463
465
|
- [ ] Cell comments / notes
|
|
464
466
|
- [ ] Print layout
|
|
465
467
|
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.sp-dropdown[data-v-0152ad1e]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-0152ad1e]{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-0152ad1e]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-0152ad1e]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-0152ad1e]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-0152ad1e]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-0152ad1e]{position:fixed;z-index:20000;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-0152ad1e]{transform-origin:bottom center}.menu-pop-enter-active[data-v-0152ad1e],.menu-pop-leave-active[data-v-0152ad1e]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-0152ad1e],.menu-pop-leave-to[data-v-0152ad1e]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-0152ad1e]{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-0152ad1e]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-0152ad1e]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-0152ad1e]{width:10px;height:10px}.sp-dropdown__list[data-v-0152ad1e]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__icon[data-v-0152ad1e]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-0152ad1e] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-0152ad1e]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-0152ad1e] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-0152ad1e]{white-space:nowrap}.sp-dropdown__item[data-v-0152ad1e]{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-0152ad1e]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-0152ad1e]{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)}.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-94d2ccc1]{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-94d2ccc1]{display:flex;align-items:center;flex:0 0 auto}.toolbar-sep[data-v-94d2ccc1]{width:1px;height:18px;margin:0 4px;background:var(--sp-toolbar-border)}.toolbar-font[data-v-94d2ccc1],.toolbar-number-format[data-v-94d2ccc1],.toolbar-align[data-v-94d2ccc1]{flex:0 0 auto}.toolbar-font-size[data-v-94d2ccc1]{display:inline-flex;align-items:center;gap:0;height:26px;position:relative}.toolbar-font-size__input[data-v-94d2ccc1]{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-94d2ccc1]::-webkit-outer-spin-button,.toolbar-font-size__input[data-v-94d2ccc1]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.toolbar-font-size__input[data-v-94d2ccc1]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__input[data-v-94d2ccc1]:focus{border-color:var(--sp-toolbar-border);background:#fff}.toolbar-font-size__btn[data-v-94d2ccc1]{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-94d2ccc1]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__btn svg[data-v-94d2ccc1]{width:10px;height:10px}.toolbar-font-size__dropdown[data-v-94d2ccc1]{position:absolute;width:56px;height:26px;pointer-events:none}.toolbar-btn[data-v-94d2ccc1]{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-94d2ccc1]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-btn[data-v-94d2ccc1]:active:not(:disabled){opacity:.7}.toolbar-btn--active[data-v-94d2ccc1]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-btn--step[data-v-94d2ccc1]{width:26px;height:26px}.toolbar-btn--step svg[data-v-94d2ccc1]{width:16px;height:16px}.toolbar-btn[data-v-94d2ccc1]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.toolbar-btn__icon[data-v-94d2ccc1]{width:18px;height:18px}.toolbar-btn svg[data-v-94d2ccc1]:not(.toolbar-btn__icon){width:18px;height:18px}.toolbar-split[data-v-94d2ccc1]{display:inline-flex;align-items:center;position:relative;height:26px}.toolbar-split__main[data-v-94d2ccc1]{border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px}.toolbar-split__arrow[data-v-94d2ccc1]{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-94d2ccc1]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-split__arrow svg[data-v-94d2ccc1]{width:10px!important;height:10px!important}.toolbar-more[data-v-94d2ccc1]{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-94d2ccc1]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-more--active[data-v-94d2ccc1]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-more svg[data-v-94d2ccc1]{width:18px;height:18px}.overflow-menu[data-v-94d2ccc1]{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-94d2ccc1]{transition:none!important}.overflow-menu .tb-item[data-v-94d2ccc1]{width:100%}.overflow-menu .toolbar-sep[data-v-94d2ccc1]{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split[data-v-94d2ccc1]{width:100%}.overflow-menu .toolbar-split__main[data-v-94d2ccc1]{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size[data-v-94d2ccc1]{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font[data-v-94d2ccc1],.overflow-menu .toolbar-number-format[data-v-94d2ccc1],.overflow-menu .toolbar-align[data-v-94d2ccc1]{width:100%}.overflow-menu .toolbar-btn[data-v-94d2ccc1]:not(.toolbar-btn--step):not(.toolbar-split__arrow){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-color[data-v-94d2ccc1]{width:100%}.overflow-menu .toolbar-wrap[data-v-94d2ccc1]{width:100%;justify-content:flex-start}.menu-pop-enter-active[data-v-94d2ccc1],.menu-pop-leave-active[data-v-94d2ccc1]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-94d2ccc1],.menu-pop-leave-to[data-v-94d2ccc1]{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{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font,.overflow-menu .toolbar-number-format,.overflow-menu .toolbar-align{width:100%}.overflow-menu .toolbar-btn:not(.toolbar-btn--step):not(.toolbar-split__arrow){width:100%;justify-content:flex-start;padding-left:6px}.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-8d54f890]{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-8d54f890]{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-8d54f890]:focus{border-color:var(--sp-toolbar-btn-active-color)}.find-bar__select[data-v-8d54f890]{height:24px;flex:0 0 auto;border:1px solid var(--sp-toolbar-border);border-radius:3px;background:#fff;font-size:12px;color:var(--sp-formula-bar-input-color, #1a1a1a);outline:none;padding:0 2px}.find-bar__chk[data-v-8d54f890]{display:flex;align-items:center;gap:3px;flex:0 0 auto;font-size:12px;color:var(--sp-toolbar-btn-color);white-space:nowrap;cursor:pointer}.find-bar__chk input[data-v-8d54f890]{margin:0}.find-bar__count[data-v-8d54f890]{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-8d54f890]{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-8d54f890]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.find-bar__btn[data-v-8d54f890]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.find-bar__btn--icon[data-v-8d54f890]{width:26px;padding:0}.find-bar__btn--icon svg[data-v-8d54f890]{width:14px;height:14px}.find-bar__btn--close[data-v-8d54f890]{width:26px;padding:0;margin-left:auto}.find-bar__btn--close svg[data-v-8d54f890]{width:14px;height:14px}.nf-dialog__mask[data-v-75101bf8]{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-75101bf8]{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-75101bf8]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.nf-dialog__title[data-v-75101bf8]{font-size:13px;font-weight:600}.nf-dialog__close[data-v-75101bf8]{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-75101bf8]:hover{background:#f0f0f0;color:#444}.nf-dialog__close svg[data-v-75101bf8]{width:14px;height:14px}.nf-dialog__body[data-v-75101bf8]{padding:12px 14px;display:flex;flex-direction:column;gap:10px}.nf-field[data-v-75101bf8]{display:flex;align-items:center;gap:8px}.nf-field--inline[data-v-75101bf8]{min-height:26px}.nf-field__label[data-v-75101bf8]{width:88px;min-width:88px;font-size:12px;color:#555}.nf-field__select[data-v-75101bf8],.nf-field__input[data-v-75101bf8]{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__select[data-v-75101bf8]:focus,.nf-field__input[data-v-75101bf8]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__textarea[data-v-75101bf8]{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-75101bf8]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-checkbox[data-v-75101bf8]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.nf-checkbox input[data-v-75101bf8]{margin:0;cursor:pointer}.nf-dialog__footer[data-v-75101bf8]{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.nf-preview[data-v-75101bf8]{display:flex;flex-direction:column;gap:2px;min-width:0}.nf-preview__label[data-v-75101bf8]{font-size:11px;color:#888}.nf-preview__value[data-v-75101bf8]{font-size:13px;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.nf-dialog__actions[data-v-75101bf8]{display:flex;gap:8px}.nf-btn[data-v-75101bf8]{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-75101bf8]:hover{background:#f0f0f0}.nf-btn--primary[data-v-75101bf8]{border-color:#0078d7;background:#0078d7;color:#fff}.nf-btn--primary[data-v-75101bf8]:hover{background:#0069c0}.nf-dialog-enter-active[data-v-75101bf8],.nf-dialog-leave-active[data-v-75101bf8]{transition:opacity .14s ease-out}.nf-dialog-enter-from[data-v-75101bf8],.nf-dialog-leave-to[data-v-75101bf8]{opacity:0}.nf-dialog-enter-active .nf-dialog[data-v-75101bf8],.nf-dialog-leave-active .nf-dialog[data-v-75101bf8]{transition:transform .14s ease-out}.nf-dialog-enter-from .nf-dialog[data-v-75101bf8],.nf-dialog-leave-to .nf-dialog[data-v-75101bf8]{transform:scale(.96)}.spreadsheet-outer[data-v-e9e7c7f1]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-e9e7c7f1]{display:flex;align-items:flex-start;min-height:36px;padding:0;gap:0}.formula-bar--expanded[data-v-e9e7c7f1]{min-height:72px}.formula-bar__cell-label[data-v-e9e7c7f1]{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-e9e7c7f1]{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-e9e7c7f1]{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-e9e7c7f1]{border-left:1px solid var(--sp-formula-bar-input-border)}.formula-bar__btn[data-v-e9e7c7f1]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__btn--cancel[data-v-e9e7c7f1]:hover{color:#e53935;background:#fdecea}.formula-bar__btn--accept[data-v-e9e7c7f1]:hover{color:#2e7d32;background:#e8f5e9}.formula-bar__input[data-v-e9e7c7f1]{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-e9e7c7f1]{height:68px;overflow:auto}.formula-bar__input[data-v-e9e7c7f1]: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-e9e7c7f1]{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-e9e7c7f1]:hover{background:var(--sp-scroll-btn-hover-bg, #e8e8e8)}.spreadsheet-wrapper[data-v-e9e7c7f1]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-e9e7c7f1]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas[data-v-e9e7c7f1]:focus{outline:none}.v-scrollbar[data-v-e9e7c7f1]{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-e9e7c7f1]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-e9e7c7f1]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-e9e7c7f1]{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-e9e7c7f1]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-e9e7c7f1]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-e9e7c7f1]{display:block;width:0;height:0}.sb-arrow--up[data-v-e9e7c7f1]{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-e9e7c7f1]{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-e9e7c7f1]{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-e9e7c7f1]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-e9e7c7f1]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-e9e7c7f1]{width:11px}.sb-track--h[data-v-e9e7c7f1]{height:11px}.sb-thumb[data-v-e9e7c7f1]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-e9e7c7f1]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-e9e7c7f1]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-e9e7c7f1]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-e9e7c7f1]{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 20px;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:16px;margin-right:-5px;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid #888}.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: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__unit{font-size:12px;color:#888}.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-ee298762]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-ee298762]{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-ee298762]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-ee298762]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-ee298762]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-ee298762]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-ee298762]{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-ee298762]{transform-origin:bottom center}.menu-pop-enter-active[data-v-ee298762],.menu-pop-leave-active[data-v-ee298762]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-ee298762],.menu-pop-leave-to[data-v-ee298762]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-ee298762]{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-ee298762]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-ee298762]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-ee298762]{width:10px;height:10px}.sp-dropdown__list[data-v-ee298762]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__search[data-v-ee298762]{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-ee298762]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.sp-dropdown__empty[data-v-ee298762]{padding:6px 8px;font-size:12px;color:#999;text-align:center}.sp-dropdown__icon[data-v-ee298762]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-ee298762] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-ee298762]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-ee298762] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-ee298762]{white-space:nowrap}.sp-dropdown__item[data-v-ee298762]{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-ee298762]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-ee298762]{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-c9c08f15]{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-c9c08f15]{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-c9c08f15]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.nf-dialog__title[data-v-c9c08f15]{font-size:13px;font-weight:600}.nf-dialog__close[data-v-c9c08f15]{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-c9c08f15]:hover{background:#f0f0f0;color:#444}.nf-dialog__close svg[data-v-c9c08f15]{width:14px;height:14px}.nf-dialog__body[data-v-c9c08f15]{padding:12px 14px;display:flex;flex-direction:column;gap:10px}.nf-field[data-v-c9c08f15]{display:flex;align-items:center;gap:8px}.nf-field--inline[data-v-c9c08f15]{min-height:26px}.nf-field__label[data-v-c9c08f15]{width:88px;min-width:88px;font-size:12px;color:#555}.nf-field__input[data-v-c9c08f15]{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-c9c08f15]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__dropdown[data-v-c9c08f15]{flex:1}.nf-field__dropdown[data-v-c9c08f15] .sp-dropdown__trigger{border:1px solid #c0c0c0;background:#fff;color:#1a1a1a;padding:0 6px}.nf-field__dropdown[data-v-c9c08f15] .sp-dropdown__trigger:hover{background:#f5f5f5}.nf-field__dropdown[data-v-c9c08f15] .sp-dropdown__trigger--open{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__textarea[data-v-c9c08f15]{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-c9c08f15]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-checkbox[data-v-c9c08f15]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.nf-checkbox input[data-v-c9c08f15]{margin:0;cursor:pointer}.nf-dialog__footer[data-v-c9c08f15]{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.nf-preview[data-v-c9c08f15]{display:flex;flex-direction:column;gap:2px;min-width:0}.nf-preview__label[data-v-c9c08f15]{font-size:11px;color:#888}.nf-preview__value[data-v-c9c08f15]{font-size:13px;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.nf-dialog__actions[data-v-c9c08f15]{display:flex;gap:8px}.nf-btn[data-v-c9c08f15]{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-c9c08f15]:hover{background:#f0f0f0}.nf-btn--primary[data-v-c9c08f15]{border-color:#0078d7;background:#0078d7;color:#fff}.nf-btn--primary[data-v-c9c08f15]:hover{background:#0069c0}.nf-dialog-enter-active[data-v-c9c08f15],.nf-dialog-leave-active[data-v-c9c08f15]{transition:opacity .14s ease-out}.nf-dialog-enter-from[data-v-c9c08f15],.nf-dialog-leave-to[data-v-c9c08f15]{opacity:0}.nf-dialog-enter-active .nf-dialog[data-v-c9c08f15],.nf-dialog-leave-active .nf-dialog[data-v-c9c08f15]{transition:transform .14s ease-out}.nf-dialog-enter-from .nf-dialog[data-v-c9c08f15],.nf-dialog-leave-to .nf-dialog[data-v-c9c08f15]{transform:scale(.96)}.sort-confirm__mask[data-v-09f7a339]{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-09f7a339]{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-09f7a339]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.sort-confirm__title[data-v-09f7a339]{font-size:13px;font-weight:600}.sort-confirm__close[data-v-09f7a339]{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-09f7a339]:hover{background:#f0f0f0;color:#444}.sort-confirm__close svg[data-v-09f7a339]{width:14px;height:14px}.sort-confirm__body[data-v-09f7a339]{padding:14px}.sort-confirm__message[data-v-09f7a339]{margin:0 0 12px;font-size:12px;line-height:1.5;color:#333}.sort-confirm__options[data-v-09f7a339]{display:flex;flex-direction:column;gap:8px}.sort-confirm__option[data-v-09f7a339]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.sort-confirm__option input[data-v-09f7a339]{margin:0;cursor:pointer}.sort-confirm__footer[data-v-09f7a339]{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.sort-confirm__btn[data-v-09f7a339]{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-09f7a339]:hover{background:#f0f0f0}.sort-confirm__btn--primary[data-v-09f7a339]{border-color:#0078d7;background:#0078d7;color:#fff}.sort-confirm__btn--primary[data-v-09f7a339]:hover{background:#0069c0}.sort-confirm-enter-active[data-v-09f7a339],.sort-confirm-leave-active[data-v-09f7a339]{transition:opacity .14s ease-out}.sort-confirm-enter-from[data-v-09f7a339],.sort-confirm-leave-to[data-v-09f7a339]{opacity:0}.sort-confirm-enter-active .sort-confirm[data-v-09f7a339],.sort-confirm-leave-active .sort-confirm[data-v-09f7a339]{transition:transform .14s ease-out}.sort-confirm-enter-from .sort-confirm[data-v-09f7a339],.sort-confirm-leave-to .sort-confirm[data-v-09f7a339]{transform:scale(.96)}.ifn-dialog__mask[data-v-2eec9073]{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-2eec9073]{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-2eec9073]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.ifn-dialog__title[data-v-2eec9073]{font-size:13px;font-weight:600}.ifn-dialog__close[data-v-2eec9073]{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-2eec9073]:hover{background:#f0f0f0;color:#444}.ifn-dialog__close svg[data-v-2eec9073]{width:14px;height:14px}.ifn-dialog__body[data-v-2eec9073]{padding:14px;display:flex;flex-direction:column;gap:12px}.ifn-dialog__field[data-v-2eec9073]{display:flex;flex-direction:column;gap:6px}.ifn-dialog__label[data-v-2eec9073]{font-size:12px;color:#333}.ifn-dialog__dropdown[data-v-2eec9073]{width:100%}.ifn-dialog__dropdown[data-v-2eec9073] .sp-dropdown__trigger{border:1px solid #c0c0c0;background:#fff;color:#1a1a1a;padding:0 6px}.ifn-dialog__dropdown[data-v-2eec9073] .sp-dropdown__trigger:hover{background:#f5f5f5}.ifn-dialog__dropdown[data-v-2eec9073] .sp-dropdown__trigger--open{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.ifn-dialog__desc[data-v-2eec9073]{font-size:12px;line-height:1.5;color:#666;-webkit-user-select:text;user-select:text}.ifn-dialog__textarea[data-v-2eec9073]{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-2eec9073]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.ifn-dialog__footer[data-v-2eec9073]{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.ifn-dialog__btn[data-v-2eec9073]{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-2eec9073]:hover{background:#f0f0f0}.ifn-dialog__btn--primary[data-v-2eec9073]{border-color:#0078d7;background:#0078d7;color:#fff}.ifn-dialog__btn--primary[data-v-2eec9073]:hover{background:#0069c0}.ifn-dialog__btn--primary[data-v-2eec9073]:disabled,.ifn-dialog__btn--primary[data-v-2eec9073]:disabled:hover{border-color:#ccc;background:#f0f0f0;color:#a8a8a8;cursor:not-allowed}.ifn-dialog-enter-active[data-v-2eec9073],.ifn-dialog-leave-active[data-v-2eec9073]{transition:opacity .14s ease-out}.ifn-dialog-enter-from[data-v-2eec9073],.ifn-dialog-leave-to[data-v-2eec9073]{opacity:0}.ifn-dialog-enter-active .ifn-dialog[data-v-2eec9073],.ifn-dialog-leave-active .ifn-dialog[data-v-2eec9073]{transition:transform .14s ease-out}.ifn-dialog-enter-from .ifn-dialog[data-v-2eec9073],.ifn-dialog-leave-to .ifn-dialog[data-v-2eec9073]{transform:scale(.96)}.spreadsheet-outer[data-v-86e52c54]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-86e52c54]{display:flex;align-items:flex-start;min-height:36px;padding:0;gap:0}.formula-bar--expanded[data-v-86e52c54]{min-height:72px}.formula-bar__cell-label[data-v-86e52c54]{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-86e52c54]{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-86e52c54]{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-86e52c54]{border-left:1px solid var(--sp-formula-bar-input-border)}.formula-bar__btn[data-v-86e52c54]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__btn--cancel[data-v-86e52c54]:hover{color:#e53935;background:#fdecea}.formula-bar__btn--accept[data-v-86e52c54]:hover{color:#2e7d32;background:#e8f5e9}.formula-bar__fx-label[data-v-86e52c54]{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-86e52c54]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__input[data-v-86e52c54]{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-86e52c54]{height:68px;overflow:auto}.formula-bar__input[data-v-86e52c54]: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-86e52c54]{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-86e52c54]:hover{background:var(--sp-scroll-btn-hover-bg, #e8e8e8)}.spreadsheet-wrapper[data-v-86e52c54]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-86e52c54]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas[data-v-86e52c54]:focus{outline:none}.v-scrollbar[data-v-86e52c54]{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-86e52c54]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-86e52c54]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-86e52c54]{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-86e52c54]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-86e52c54]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-86e52c54]{display:block;width:0;height:0}.sb-arrow--up[data-v-86e52c54]{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-86e52c54]{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-86e52c54]{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-86e52c54]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-86e52c54]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-86e52c54]{width:11px}.sb-track--h[data-v-86e52c54]{height:11px}.sb-thumb[data-v-86e52c54]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-86e52c54]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-86e52c54]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-86e52c54]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-86e52c54]{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}
|
|
@@ -12,6 +12,10 @@ type __VLS_Props = {
|
|
|
12
12
|
triggerEl?: HTMLElement | null;
|
|
13
13
|
/** 当前值未命中任何选项时触发器显示的占位文本(如选区格式不一致时的「混合」) */
|
|
14
14
|
fallbackLabel?: string;
|
|
15
|
+
/** 是否启用菜单内搜索框(仅按 label 实时过滤,不改变选中,须点击菜单项才算数) */
|
|
16
|
+
searchable?: boolean;
|
|
17
|
+
/** 搜索框占位文本 */
|
|
18
|
+
searchPlaceholder?: string;
|
|
15
19
|
};
|
|
16
20
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
17
21
|
"update:modelValue": (v: string | number) => void;
|
|
@@ -31,9 +35,12 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
31
35
|
align: "left" | "right";
|
|
32
36
|
triggerEl: HTMLElement | null;
|
|
33
37
|
fallbackLabel: string;
|
|
38
|
+
searchable: boolean;
|
|
39
|
+
searchPlaceholder: string;
|
|
34
40
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
35
41
|
rootRef: HTMLDivElement;
|
|
36
42
|
menuRef: HTMLDivElement;
|
|
43
|
+
searchInputRef: HTMLInputElement;
|
|
37
44
|
listRef: HTMLDivElement;
|
|
38
45
|
}, HTMLDivElement>;
|
|
39
46
|
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
modelOpen?: boolean;
|
|
3
|
+
locale?: string;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
6
|
+
insert: (text: string) => any;
|
|
7
|
+
cancel: () => any;
|
|
8
|
+
"update:modelOpen": (v: boolean) => any;
|
|
9
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
10
|
+
onInsert?: ((text: string) => any) | undefined;
|
|
11
|
+
onCancel?: (() => any) | undefined;
|
|
12
|
+
"onUpdate:modelOpen"?: ((v: boolean) => any) | undefined;
|
|
13
|
+
}>, {
|
|
14
|
+
modelOpen: boolean;
|
|
15
|
+
locale: string;
|
|
16
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
17
|
+
dialogRef: HTMLDivElement;
|
|
18
|
+
textareaRef: HTMLTextAreaElement;
|
|
19
|
+
}, any>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
modelOpen?: boolean;
|
|
3
|
+
locale?: string;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
6
|
+
cancel: () => any;
|
|
7
|
+
"update:modelOpen": (v: boolean) => any;
|
|
8
|
+
confirm: (expand: boolean) => any;
|
|
9
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
10
|
+
onCancel?: (() => any) | undefined;
|
|
11
|
+
"onUpdate:modelOpen"?: ((v: boolean) => any) | undefined;
|
|
12
|
+
onConfirm?: ((expand: boolean) => any) | undefined;
|
|
13
|
+
}>, {
|
|
14
|
+
modelOpen: boolean;
|
|
15
|
+
locale: string;
|
|
16
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
17
|
+
dialogRef: HTMLDivElement;
|
|
18
|
+
}, any>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { SortOrder } from '../../core/sort-core';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
modelOpen?: boolean;
|
|
4
|
+
locale?: string;
|
|
5
|
+
currentSort?: SortOrder;
|
|
6
|
+
triggerEl?: HTMLElement | null;
|
|
7
|
+
};
|
|
8
|
+
declare function openMenu(): void;
|
|
9
|
+
declare function close(): void;
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
11
|
+
open: import("vue").Ref<boolean, boolean>;
|
|
12
|
+
openMenu: typeof openMenu;
|
|
13
|
+
close: typeof close;
|
|
14
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
15
|
+
change: (v: SortOrder) => any;
|
|
16
|
+
"update:modelOpen": (v: boolean) => any;
|
|
17
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
18
|
+
onChange?: ((v: SortOrder) => any) | undefined;
|
|
19
|
+
"onUpdate:modelOpen"?: ((v: boolean) => any) | undefined;
|
|
20
|
+
}>, {
|
|
21
|
+
modelOpen: boolean;
|
|
22
|
+
triggerEl: HTMLElement | null;
|
|
23
|
+
locale: string;
|
|
24
|
+
currentSort: SortOrder;
|
|
25
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
26
|
+
rootRef: HTMLDivElement;
|
|
27
|
+
menuRef: HTMLDivElement;
|
|
28
|
+
}, HTMLDivElement>;
|
|
29
|
+
export default _default;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { FontOption, MergeType } from '../core/constants';
|
|
2
2
|
import { type NFOption } from '../core/number-format';
|
|
3
3
|
import { type BorderType } from './pickers/borderPicker.vue';
|
|
4
|
+
import type { SortOrder } from '../core/sort-core';
|
|
4
5
|
type __VLS_Props = {
|
|
5
6
|
locale: string;
|
|
6
7
|
canUndo: boolean;
|
|
@@ -25,6 +26,9 @@ type __VLS_Props = {
|
|
|
25
26
|
cachedFillColor: string;
|
|
26
27
|
borderMenuOpen: boolean;
|
|
27
28
|
cachedBorder: BorderType;
|
|
29
|
+
sortMenuOpen: boolean;
|
|
30
|
+
cachedSortOrder: SortOrder;
|
|
31
|
+
canSort: boolean;
|
|
28
32
|
selHAlign: string;
|
|
29
33
|
selVAlign: string;
|
|
30
34
|
selWrap: boolean;
|
|
@@ -56,6 +60,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
56
60
|
"apply-text-color": () => void;
|
|
57
61
|
"apply-fill-color": () => void;
|
|
58
62
|
"apply-border": () => void;
|
|
63
|
+
"apply-sort": () => void;
|
|
59
64
|
"wrap-toggle": () => void;
|
|
60
65
|
"apply-merge": () => void;
|
|
61
66
|
"calc-sum": () => void;
|
|
@@ -76,9 +81,11 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
76
81
|
"update:text-color-menu-open": (v: boolean) => void;
|
|
77
82
|
"update:fill-color-menu-open": (v: boolean) => void;
|
|
78
83
|
"update:border-menu-open": (v: boolean) => void;
|
|
84
|
+
"update:sort-menu-open": (v: boolean) => void;
|
|
79
85
|
"update:merge-menu-open": (v: boolean) => void;
|
|
80
86
|
"update:calc-menu-open": (v: boolean) => void;
|
|
81
87
|
"border-change": (v: BorderType) => void;
|
|
88
|
+
"sort-change": (v: SortOrder) => void;
|
|
82
89
|
"merge-change": (v: MergeType) => void;
|
|
83
90
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
84
91
|
onUndo?: (() => any) | undefined;
|
|
@@ -97,6 +104,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
97
104
|
"onApply-text-color"?: (() => any) | undefined;
|
|
98
105
|
"onApply-fill-color"?: (() => any) | undefined;
|
|
99
106
|
"onApply-border"?: (() => any) | undefined;
|
|
107
|
+
"onApply-sort"?: (() => any) | undefined;
|
|
100
108
|
"onWrap-toggle"?: (() => any) | undefined;
|
|
101
109
|
"onApply-merge"?: (() => any) | undefined;
|
|
102
110
|
"onCalc-sum"?: (() => any) | undefined;
|
|
@@ -117,9 +125,11 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
117
125
|
"onUpdate:text-color-menu-open"?: ((v: boolean) => any) | undefined;
|
|
118
126
|
"onUpdate:fill-color-menu-open"?: ((v: boolean) => any) | undefined;
|
|
119
127
|
"onUpdate:border-menu-open"?: ((v: boolean) => any) | undefined;
|
|
128
|
+
"onUpdate:sort-menu-open"?: ((v: boolean) => any) | undefined;
|
|
120
129
|
"onUpdate:merge-menu-open"?: ((v: boolean) => any) | undefined;
|
|
121
130
|
"onUpdate:calc-menu-open"?: ((v: boolean) => any) | undefined;
|
|
122
131
|
"onBorder-change"?: ((v: BorderType) => any) | undefined;
|
|
132
|
+
"onSort-change"?: ((v: SortOrder) => any) | undefined;
|
|
123
133
|
"onMerge-change"?: ((v: MergeType) => any) | undefined;
|
|
124
134
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
125
135
|
rootEl: HTMLDivElement;
|
|
@@ -129,6 +139,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
129
139
|
borderArrowRef: HTMLButtonElement;
|
|
130
140
|
mergeArrowRef: HTMLButtonElement;
|
|
131
141
|
calcArrowRef: HTMLButtonElement;
|
|
142
|
+
sortArrowRef: HTMLButtonElement;
|
|
132
143
|
moreBtnEl: HTMLButtonElement;
|
|
133
144
|
overflowMenuEl: HTMLDivElement;
|
|
134
145
|
}, any>;
|
|
@@ -17,6 +17,7 @@ export interface InteractionsState {
|
|
|
17
17
|
onFormulaBarBlur: () => void;
|
|
18
18
|
acceptFormulaBarEdit: () => void;
|
|
19
19
|
cancelFormulaBarEdit: () => void;
|
|
20
|
+
insertFunctionIntoCell: (text: string) => void;
|
|
20
21
|
renTab: Ref<number | null>;
|
|
21
22
|
renTabVal: Ref<string>;
|
|
22
23
|
onTabClick: (i: number) => void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Ref, type ComputedRef } from 'vue';
|
|
2
|
-
import type { ThemeColors, SheetState, SheetModelData } from '../core/types';
|
|
2
|
+
import type { ThemeColors, SheetState, SheetModelData, SelectionRange } from '../core/types';
|
|
3
|
+
import { type SortOrder } from '../core/sort-core';
|
|
3
4
|
import type { CoreState } from './core-state';
|
|
4
5
|
import type { UndoStylesState } from './undo-styles';
|
|
5
6
|
export interface SheetsOpsState {
|
|
@@ -7,6 +8,18 @@ export interface SheetsOpsState {
|
|
|
7
8
|
insertRows: (rS: number, rE: number) => void;
|
|
8
9
|
insertCols: (cS: number, cE: number) => void;
|
|
9
10
|
deleteCols: (cS: number, cE: number) => void;
|
|
11
|
+
sortSelectedColumns: (order: SortOrder, range?: SelectionRange) => void;
|
|
12
|
+
canSortColumns: (sC: number, eC: number) => boolean;
|
|
13
|
+
sortMenuOpen: Ref<boolean>;
|
|
14
|
+
/** 上一次使用的排序方向:功能按钮默认升序,从下拉选择后记忆该项 */
|
|
15
|
+
cachedSortOrder: Ref<SortOrder>;
|
|
16
|
+
onSortMenuToggle: (v: boolean) => void;
|
|
17
|
+
onSortChange: (order: SortOrder) => void;
|
|
18
|
+
applyCachedSort: () => void;
|
|
19
|
+
sortConfirmOpen: Ref<boolean>;
|
|
20
|
+
prepareSortConfirmation: (order: SortOrder) => boolean;
|
|
21
|
+
confirmSort: (expand: boolean) => void;
|
|
22
|
+
cancelSortConfirmation: () => void;
|
|
10
23
|
sheets: Ref<SheetState[]>;
|
|
11
24
|
activeSheetIndex: Ref<number>;
|
|
12
25
|
saveSheet: () => void;
|
|
@@ -6,6 +6,21 @@ import type { CellData } from './types';
|
|
|
6
6
|
* - null:求值时出现错误(循环引用、参数非法、未找到等),渲染为 #ERROR
|
|
7
7
|
*/
|
|
8
8
|
export type FormulaValue = string | number | null;
|
|
9
|
+
/** 插入函数对话框可选的公式预设(与 dispatch 支持的函数保持一致) */
|
|
10
|
+
export declare const FORMULA_PRESETS: {
|
|
11
|
+
name: string;
|
|
12
|
+
snippet: string;
|
|
13
|
+
}[];
|
|
14
|
+
/** 公式结构校验结果:ok=结构合法可求值;name=顶层函数名(大写),无法识别结构时为 null */
|
|
15
|
+
export interface FormulaCheck {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
name: string | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 校验公式文本结构:以 = 开头、=FUNC(args) 顶层结构、FUNC 受支持、
|
|
21
|
+
* 括号配平、顶层参数数量合规且非空。用于插入函数对话框「插入」按钮的可用性判断。
|
|
22
|
+
*/
|
|
23
|
+
export declare function checkFormulaStructure(text: string): FormulaCheck;
|
|
9
24
|
/** 解析区域引用(如 "A1:B5" → {sc, sr, ec, er}) */
|
|
10
25
|
export declare function parseRangeRef(rangeRef: string, colCount: number, rowCount: number): {
|
|
11
26
|
sc: number;
|
|
@@ -109,7 +109,9 @@ export declare function isNumericValue(value: string): boolean;
|
|
|
109
109
|
export declare function isDecimalsAdjustable(format: string | undefined | null, value: string): boolean;
|
|
110
110
|
/**
|
|
111
111
|
* 获取单元格当前有效小数位数:
|
|
112
|
-
* - 常规(含值为数值的常规)→
|
|
112
|
+
* - 常规(含值为数值的常规)→ 实际显示值的小数位数(如 =PMT(...) 结果有 11 位小数即 11;
|
|
113
|
+
* 整数 100 即为 0),用于让增减小数位按钮按"当前显示"而非恒为 0 处理;
|
|
114
|
+
* 文本/日期类 → -1(不支持)
|
|
113
115
|
* - 数值类 → 第一个含数字占位符区段的 decimals(最大允许小数位)
|
|
114
116
|
*/
|
|
115
117
|
export declare function getEffectiveDecimals(format: string | undefined | null, value: string): number;
|
|
@@ -141,7 +143,23 @@ export interface DateTimeParseResult {
|
|
|
141
143
|
* 纯数字与公式不会命中;月/日/时/分/秒越界、日期不存在(如 2023-2-29)均不识别。
|
|
142
144
|
*/
|
|
143
145
|
export declare function parseDateTimeInput(input: string, locale: string, now?: Date): DateTimeParseResult | null;
|
|
146
|
+
/** 数字文本(带千分位/百分比/货币符号)解析结果:数值 + 建议套用的格式代码 */
|
|
147
|
+
export interface NumericTextParseResult {
|
|
148
|
+
/** 解析后的数值(百分比已 ÷100,使其作为序列值正确显示百分比) */
|
|
149
|
+
num: number;
|
|
150
|
+
/** 建议套用的格式代码,如 '0.00%' / '#,##0' / '¥#,##0.00' */
|
|
151
|
+
format: string;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 对常规单元格输入做常见"数字文本"自动识别(对齐 Excel 输入语义):
|
|
155
|
+
* - 带半角千分位逗号的数字:1,234 / 1,234.56 → 数值并套用 #,##0[.00] 格式
|
|
156
|
+
* - 百分比:100% / 3.14% / 1,234.5% → 数值(÷100)并套用 0[.00]% 格式
|
|
157
|
+
* - 货币符号前缀:$1,234.56 / ¥1,234 → 数值并套用「符号#,##0[.00]」格式
|
|
158
|
+
* 仅当字符串含有逗号 / 百分号 / 货币符号时才识别;纯数字(如 "3.14")不命中,保持常规,
|
|
159
|
+
* 避免覆盖用户无需格式的普通数值。公式、日期/时间文本、无法解析的内容均不命中。
|
|
160
|
+
*/
|
|
161
|
+
export declare function parseNumericText(input: string, locale: string): NumericTextParseResult | null;
|
|
144
162
|
/** 根据分类 + 小数位数 + 千位分隔符生成格式代码 */
|
|
145
163
|
export declare function buildNumberFormatCode(locale: string, category: NFDialogCategory, decimals: number, thousands: boolean): string;
|
|
146
|
-
/**
|
|
164
|
+
/** 构造工具栏下拉框的选项(含「其他数字格式…」自定义项) */
|
|
147
165
|
export declare function buildNumberFormatPresets(locale: string): NFOption[];
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type SortOrder = 'asc' | 'desc';
|
|
2
|
+
export type SortKeyKind = 'blank' | 'number' | 'text';
|
|
3
|
+
/** 排序比较键:临时解析结果,不回写到单元格 */
|
|
4
|
+
export interface SortKey {
|
|
5
|
+
kind: SortKeyKind;
|
|
6
|
+
/** kind === 'number' 时的数值(日期/时间为序列值) */
|
|
7
|
+
num?: number;
|
|
8
|
+
/** kind === 'text' 时的原始文本 */
|
|
9
|
+
text?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 将原始值解析为排序比较键。
|
|
13
|
+
* - 空串/纯空白 → blank
|
|
14
|
+
* - 可解析为有限数字(含日期序列值)→ number
|
|
15
|
+
* - 可被 parseDateTimeInput 识别的日期/时间字符串 → number(序列值)
|
|
16
|
+
* - 其余 → text(保留原文用于本地化比较)
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseSortKey(value: string | null | undefined, locale: string): SortKey;
|
|
19
|
+
/**
|
|
20
|
+
* 按「展示内容」解析排序比较键(扩展版,支持所有类型单元格):
|
|
21
|
+
* - 显式文本格式('@')→ 文本键 = 原始内容(展示即原文)
|
|
22
|
+
* - 常规(General):数值 → 数值键;日期/时间文本 → 数值键(序列值);其余 → 文本键 = 展示串
|
|
23
|
+
* - 日期/持续时间格式 → 数值键 = 序列值(展示即该序列值)
|
|
24
|
+
* - 数值类格式(数字/百分比/货币等)→ 数值键 = 数值 × 格式缩放(百分比 ÷100 已体现在展示数值中,
|
|
25
|
+
* 这里乘回 scale 使「100%」按其展示数值 100 参与排序,而非存储值 1)
|
|
26
|
+
* - 上述任何类型若格式与值不匹配(如数值格式下是非数字)→ 文本键 = 展示串
|
|
27
|
+
* 与 parseSortKey 的区别:parseSortKey 只看存储原始值(常规下纯数字才算数字),本函数结合单元格
|
|
28
|
+
* 数字格式还原「所见即所排」的语义,满足按展示内容排序的需求。
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseSortKeyByDisplay(value: string | null | undefined, format: string | undefined | null, locale: string): SortKey;
|
|
31
|
+
/**
|
|
32
|
+
* 比较两个排序键(均非 blank):
|
|
33
|
+
* - 升序:数字/日期 在前,文本在后;同类内按数值/本地化文本比较
|
|
34
|
+
* - 降序:类型次序反转,同类内逆序
|
|
35
|
+
*/
|
|
36
|
+
export declare function compareSortKeys(a: SortKey, b: SortKey, order: SortOrder, locale: string): number;
|
|
37
|
+
/**
|
|
38
|
+
* 对各行比较键做稳定排序,返回置换数组:
|
|
39
|
+
* 结果中 order[i] = 排序后第 i 行应取的原始行下标(以原始下标做 tie-breaker)。
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildSortedRowOrder(keys: SortKey[], order: SortOrder, locale: string): number[];
|
|
42
|
+
/**
|
|
43
|
+
* 表头启发式识别(项目无表头数据模型,对齐 Excel 按列排序时的推断):
|
|
44
|
+
* 首行非空且为纯文本,其余行中至少有一个可解析为数字/日期 → 视首行为表头。
|
|
45
|
+
*/
|
|
46
|
+
export declare function looksLikeHeader(keys: SortKey[]): boolean;
|