xiaodao-spreader 0.1.7 → 0.1.9

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 CHANGED
@@ -203,35 +203,38 @@ import type {
203
203
 
204
204
  ```
205
205
  src/
206
- ├── components/
207
- │ └── spreader.ts # 统一出口(Barrel Export)
208
- │ └── spreader/
209
- │ ├── components/
210
- │ │ ├── spreadsheet.vue # 主组件 — 模板 + 样式 + 组合
211
- │ │ ├── toolbar.vue # 工具栏(含溢出下拉)
212
- │ │ ├── tabbar.vue # Sheet 标签栏
213
- │ │ ├── dropdown.vue # 通用下拉组件
214
- │ │ └── pickers/
215
- │ │ ├── colorPicker.vue
216
- │ │ ├── borderPicker.vue
217
- │ │ └── mergePicker.vue
218
- │ ├── composables/
219
- │ │ ├── core-state.ts # Props、cells/merges/selection、字体度量、导航
220
- │ │ ├── undo-styles.ts # 撤销重做、格式刷、字体/对齐/颜色
221
- │ │ ├── borders-merge.ts # 边框同步、合并操作、剪贴板、求和
222
- │ │ ├── sheets-ops.ts # 行列增删、多 Sheet、v-model 发射、主题、refs
223
- │ │ └── interactions.ts # 渲染器、编辑栏、标签栏、右键菜单、滚动条、事件
224
- │ └── core/
225
- │ ├── constants.ts # 布局常量、国际化、主题调色板
226
- │ ├── types.ts # 全部类型定义
227
- │ ├── formula.ts # 公式引擎(解析、计算、依赖、缓存)
228
- │ ├── theme.ts # 主题 CSS 变量构建
229
- │ └── utils.ts # 纯工具函数(列标签、命中测试、尺寸解析)
206
+ ├── index.ts # 库入口 — 从 spreader/ 统一 re-export
207
+ ├── App.vue # 演示应用
208
+ └── components/
209
+ └── spreader/
210
+ ├── index.ts # 统一导出口 — 组件 + 类型(barrel)
211
+ ├── components/
212
+ │ ├── spreader.vue # 入口组件 — 模板 + 样式 + 组合
213
+ │ ├── toolbar.vue # 工具栏(含溢出下拉)
214
+ │ ├── tabbar.vue # Sheet 标签栏
215
+ │ ├── dropdown.vue # 通用下拉组件
216
+ │ └── pickers/
217
+ │ ├── colorPicker.vue
218
+ │ ├── borderPicker.vue
219
+ │ └── mergePicker.vue
220
+ ├── composables/
221
+ │ ├── core-state.ts # Props、cells/merges/selection、字体度量、导航
222
+ │ ├── undo-styles.ts # 撤销重做、格式刷、字体/对齐/颜色
223
+ │ ├── borders-merge.ts # 边框同步、合并操作、剪贴板、求和
224
+ │ ├── sheets-ops.ts # 行列增删、多 Sheet、v-model 发射、主题、refs
225
+ │ └── interactions.ts # 渲染器、编辑栏、标签栏、右键菜单、滚动条、事件
226
+ └── core/
227
+ ├── constants.ts # 布局常量、国际化、主题调色板
228
+ ├── types.ts # 全部类型定义
229
+ ├── formula.ts # 公式引擎(解析、计算、依赖、缓存)
230
+ ├── theme.ts # 主题 CSS 变量构建
231
+ └── utils.ts # 纯工具函数(列标签、命中测试、尺寸解析)
230
232
  ```
231
233
 
232
234
  ### 设计原则
233
235
 
234
236
  - **组合式 API**:所有业务逻辑抽取到 `composables/`,保持单一职责
237
+ - **Barrel 导出**:`spreader/index.ts` 集中导出组件和全部类型,`src/index.ts` 再统一 re-export,外部统一从 `xiaodao-spreader` 引入
235
238
  - **Canvas 2D 渲染**:仅绘制可视区域(虚拟渲染),大表流畅
236
239
  - **无脏标记**:在交互结束点手动调用 `scheduleRender()`;`requestAnimationFrame` 自动合并同一帧的多次调用
237
240
  - **共享状态**:将 `CoreState` 注入每个 composable,实现跨模块通信而不产生紧耦合
@@ -383,7 +386,7 @@ pnpm build:demo
383
386
  |------|------|
384
387
  | `dist/xiaodao-spreader.es.js` | ES 模块(供打包器使用) |
385
388
  | `dist/xiaodao-spreader.umd.js` | UMD 包(供 `<script>` 直接引用) |
386
- | `dist/xiaodao-spreader.css` | 提取的样式表 |
389
+ | `dist/style.css` | 提取的样式表 |
387
390
  | `dist/types/` | TypeScript 声明文件 |
388
391
 
389
392
  ### CI/CD
package/README.md CHANGED
@@ -200,35 +200,38 @@ import type {
200
200
 
201
201
  ```
202
202
  src/
203
- ├── components/
204
- │ └── spreader.ts # Barrel export (unified entry point)
205
- │ └── spreader/
206
- │ ├── components/
207
- │ │ ├── spreadsheet.vue # Main component — template + style + composition
208
- │ │ ├── toolbar.vue # Toolbar with overflow dropdown
209
- │ │ ├── tabbar.vue # Sheet tab bar
210
- │ │ ├── dropdown.vue # Generic dropdown component
211
- │ │ └── pickers/
212
- │ │ ├── colorPicker.vue
213
- │ │ ├── borderPicker.vue
214
- │ │ └── mergePicker.vue
215
- │ ├── composables/
216
- │ │ ├── core-state.ts # Props, cells/merges/selection, font metrics, navigation
217
- │ │ ├── undo-styles.ts # Undo/redo, format painter, font/alignment/color
218
- │ │ ├── borders-merge.ts # Border sync, merge ops, clipboard, sum
219
- │ │ ├── sheets-ops.ts # Row/col ops, multi-sheet, v-model emit, theme, refs
220
- │ │ └── interactions.ts # Renderer, formula bar, tab bar, context menu, scrollbar, events
221
- │ └── core/
222
- │ ├── constants.ts # Layout constants, i18n, theme palettes
223
- │ ├── types.ts # All type definitions
224
- │ ├── formula.ts # Formula engine (parse, evaluate, deps, cache)
225
- │ ├── theme.ts # Theme CSS variable construction
226
- │ └── utils.ts # Pure utilities (col label, hit test, resolve size)
203
+ ├── index.ts # Library entry — re-exports from spreader/
204
+ ├── App.vue # Demo application
205
+ └── components/
206
+ └── spreader/
207
+ ├── index.ts # Unified export — component + types (barrel)
208
+ ├── components/
209
+ │ ├── spreader.vue # Entry component — template + style + composition
210
+ │ ├── toolbar.vue # Toolbar with overflow dropdown
211
+ │ ├── tabbar.vue # Sheet tab bar
212
+ │ ├── dropdown.vue # Generic dropdown component
213
+ │ └── pickers/
214
+ │ ├── colorPicker.vue
215
+ │ ├── borderPicker.vue
216
+ │ └── mergePicker.vue
217
+ ├── composables/
218
+ │ ├── core-state.ts # Props, cells/merges/selection, font metrics, navigation
219
+ │ ├── undo-styles.ts # Undo/redo, format painter, font/alignment/color
220
+ │ ├── borders-merge.ts # Border sync, merge ops, clipboard, sum
221
+ │ ├── sheets-ops.ts # Row/col ops, multi-sheet, v-model emit, theme, refs
222
+ │ └── interactions.ts # Renderer, formula bar, tab bar, context menu, scrollbar, events
223
+ └── core/
224
+ ├── constants.ts # Layout constants, i18n, theme palettes
225
+ ├── types.ts # All type definitions
226
+ ├── formula.ts # Formula engine (parse, evaluate, deps, cache)
227
+ ├── theme.ts # Theme CSS variable construction
228
+ └── utils.ts # Pure utilities (col label, hit test, resolve size)
227
229
  ```
228
230
 
229
231
  ### Design Principles
230
232
 
231
233
  - **Composition API**: All business logic extracted into `composables/`, maintaining single-responsibility modules
234
+ - **Barrel Export**: `spreader/index.ts` centralizes all component and type exports; `src/index.ts` re-exports everything, so consumers import uniformly from `xiaodao-spreader`
232
235
  - **Canvas 2D Rendering**: Only visible cells are drawn (virtual rendering), ensuring smooth performance on large sheets
233
236
  - **No Dirty Flags**: Manual `scheduleRender()` calls at interaction end-points; `requestAnimationFrame` automatically merges multiple calls within the same frame
234
237
  - **Shared State**: A central `CoreState` object is injected into each composable, enabling cross-module communication without tight coupling
@@ -380,7 +383,7 @@ pnpm build:demo
380
383
  |------|-------------|
381
384
  | `dist/xiaodao-spreader.es.js` | ES module (for bundlers) |
382
385
  | `dist/xiaodao-spreader.umd.js` | UMD bundle (for direct `<script>` usage) |
383
- | `dist/xiaodao-spreader.css` | Extracted stylesheet |
386
+ | `dist/style.css` | Extracted stylesheet |
384
387
  | `dist/types/` | TypeScript declaration files |
385
388
 
386
389
  ### CI/CD
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .sp-dropdown[data-v-8dc09f5d]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-8dc09f5d]{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-8dc09f5d]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-8dc09f5d]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-8dc09f5d]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-8dc09f5d]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-8dc09f5d]{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-8dc09f5d]{transform-origin:bottom center}.menu-pop-enter-active[data-v-8dc09f5d],.menu-pop-leave-active[data-v-8dc09f5d]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-8dc09f5d],.menu-pop-leave-to[data-v-8dc09f5d]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-8dc09f5d]{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-8dc09f5d]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-8dc09f5d]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-8dc09f5d]{width:10px;height:10px}.sp-dropdown__list[data-v-8dc09f5d]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__icon[data-v-8dc09f5d]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-8dc09f5d] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-8dc09f5d]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-8dc09f5d] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-8dc09f5d]{white-space:nowrap}.sp-dropdown__item[data-v-8dc09f5d]{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-8dc09f5d]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-8dc09f5d]{background:#e5f1fb;color:#0078d7}.color-picker[data-v-f00d0dae]{position:relative;display:inline-flex;height:26px}.color-picker__menu[data-v-f00d0dae]{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-f00d0dae],.menu-pop-leave-active[data-v-f00d0dae]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-f00d0dae],.menu-pop-leave-to[data-v-f00d0dae]{opacity:0;transform:scale(.9)}.color-picker__row[data-v-f00d0dae]{display:flex;gap:4px;margin-bottom:4px}.color-picker__row[data-v-f00d0dae]:last-child{margin-bottom:0}.color-picker__swatch[data-v-f00d0dae]{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-f00d0dae]:hover{transform:scale(1.18);box-shadow:0 0 0 1px #0003;z-index:1}.color-picker__swatch--selected[data-v-f00d0dae]{box-shadow:0 0 0 2px #0078d7}.border-picker[data-v-3721e5e4]{position:relative;display:inline-flex;height:26px}.border-picker__menu[data-v-3721e5e4]{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-3721e5e4]{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-3721e5e4]:hover{background:#eef3f9}.border-picker__icon[data-v-3721e5e4]{width:18px;height:18px;flex-shrink:0}.border-picker__label[data-v-3721e5e4]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-3721e5e4],.menu-pop-leave-active[data-v-3721e5e4]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-3721e5e4],.menu-pop-leave-to[data-v-3721e5e4]{opacity:0;transform:scale(.9)}.merge-picker[data-v-24e4dbe5]{position:relative;display:inline-flex;height:26px}.merge-picker__menu[data-v-24e4dbe5]{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-24e4dbe5]{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-24e4dbe5]:hover{background:#eef3f9}.merge-picker__icon[data-v-24e4dbe5]{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.merge-picker__icon[data-v-24e4dbe5] svg{width:18px;height:18px}.merge-picker__label[data-v-24e4dbe5]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-24e4dbe5],.menu-pop-leave-active[data-v-24e4dbe5]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-24e4dbe5],.menu-pop-leave-to[data-v-24e4dbe5]{opacity:0;transform:scale(.9)}.toolbar[data-v-b7edb6bc]{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-b7edb6bc]{display:flex;align-items:center;flex:0 0 auto}.toolbar-sep[data-v-b7edb6bc]{width:1px;height:18px;margin:0 4px;background:var(--sp-toolbar-border)}.toolbar-font[data-v-b7edb6bc],.toolbar-align[data-v-b7edb6bc]{flex:0 0 auto}.toolbar-font-size[data-v-b7edb6bc]{display:inline-flex;align-items:center;gap:0;height:26px;position:relative}.toolbar-font-size__input[data-v-b7edb6bc]{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-b7edb6bc]::-webkit-outer-spin-button,.toolbar-font-size__input[data-v-b7edb6bc]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.toolbar-font-size__input[data-v-b7edb6bc]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__input[data-v-b7edb6bc]:focus{border-color:var(--sp-toolbar-border);background:#fff}.toolbar-font-size__btn[data-v-b7edb6bc]{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-b7edb6bc]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__btn svg[data-v-b7edb6bc]{width:10px;height:10px}.toolbar-font-size__dropdown[data-v-b7edb6bc]{position:absolute;width:56px;height:26px;pointer-events:none}.toolbar-btn[data-v-b7edb6bc]{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-b7edb6bc]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-btn[data-v-b7edb6bc]:active:not(:disabled){opacity:.7}.toolbar-btn--active[data-v-b7edb6bc]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-btn--step[data-v-b7edb6bc]{width:26px;height:26px}.toolbar-btn--step svg[data-v-b7edb6bc]{width:16px;height:16px}.toolbar-btn[data-v-b7edb6bc]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.toolbar-btn__icon[data-v-b7edb6bc]{width:18px;height:18px}.toolbar-btn svg[data-v-b7edb6bc]:not(.toolbar-btn__icon){width:18px;height:18px}.toolbar-split[data-v-b7edb6bc]{display:inline-flex;align-items:center;position:relative;height:26px}.toolbar-split__main[data-v-b7edb6bc]{border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px}.toolbar-split__arrow[data-v-b7edb6bc]{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-b7edb6bc]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-split__arrow svg[data-v-b7edb6bc]{width:10px!important;height:10px!important}.toolbar-more[data-v-b7edb6bc]{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-b7edb6bc]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-more--active[data-v-b7edb6bc]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-more svg[data-v-b7edb6bc]{width:18px;height:18px}.overflow-menu[data-v-b7edb6bc]{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-b7edb6bc]{transition:none!important}.overflow-menu .tb-item[data-v-b7edb6bc]{width:100%}.overflow-menu .toolbar-sep[data-v-b7edb6bc]{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split[data-v-b7edb6bc]{width:100%}.overflow-menu .toolbar-split__main[data-v-b7edb6bc]{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size[data-v-b7edb6bc]{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font[data-v-b7edb6bc],.overflow-menu .toolbar-align[data-v-b7edb6bc]{width:100%}.overflow-menu .toolbar-btn[data-v-b7edb6bc]:not(.toolbar-btn--step):not(.toolbar-split__arrow){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-color[data-v-b7edb6bc]{width:100%}.overflow-menu .toolbar-wrap[data-v-b7edb6bc]{width:100%;justify-content:flex-start}.menu-pop-enter-active[data-v-b7edb6bc],.menu-pop-leave-active[data-v-b7edb6bc]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-b7edb6bc],.menu-pop-leave-to[data-v-b7edb6bc]{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-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-454e1a12]{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-454e1a12]{display:flex;align-items:flex-start;flex:1;overflow:hidden;gap:1px;padding:0 1px}.tab-item[data-v-454e1a12]{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-454e1a12]:hover{background:var(--sp-tab-hover-bg)}.tab-item--active[data-v-454e1a12]{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-454e1a12]:hover{background:var(--sp-tab-active-bg)}.tab-item__name[data-v-454e1a12]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-rename-input[data-v-454e1a12]{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__add-btn[data-v-454e1a12]{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}.tab-bar__add-btn[data-v-454e1a12]:hover{background:var(--sp-tab-add-btn-hover-bg)}.spreadsheet-outer[data-v-0c81e050]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-0c81e050]{display:flex;align-items:start;height:36px;min-height:36px;padding:0;gap:0}.formula-bar__cell-label[data-v-0c81e050]{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__input[data-v-0c81e050]{flex:1;height:28px;margin-top:4px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;outline:none;padding:0 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)}.formula-bar__input[data-v-0c81e050]:focus{border-color:var(--sp-formula-bar-input-focus-border);box-shadow:0 0 0 1px var(--sp-formula-bar-input-focus-shadow)}.spreadsheet-wrapper[data-v-0c81e050]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-0c81e050]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas[data-v-0c81e050]:focus{outline:none}.v-scrollbar[data-v-0c81e050]{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-0c81e050]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-0c81e050]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-0c81e050]{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-0c81e050]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-0c81e050]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-0c81e050]{display:block;width:0;height:0}.sb-arrow--up[data-v-0c81e050]{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-0c81e050]{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-0c81e050]{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-0c81e050]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-0c81e050]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-0c81e050]{width:11px}.sb-track--h[data-v-0c81e050]{height:11px}.sb-thumb[data-v-0c81e050]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-0c81e050]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-0c81e050]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-0c81e050]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-0c81e050]{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-8dc09f5d]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-8dc09f5d]{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-8dc09f5d]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-8dc09f5d]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-8dc09f5d]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-8dc09f5d]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-8dc09f5d]{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-8dc09f5d]{transform-origin:bottom center}.menu-pop-enter-active[data-v-8dc09f5d],.menu-pop-leave-active[data-v-8dc09f5d]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-8dc09f5d],.menu-pop-leave-to[data-v-8dc09f5d]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-8dc09f5d]{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-8dc09f5d]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-8dc09f5d]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-8dc09f5d]{width:10px;height:10px}.sp-dropdown__list[data-v-8dc09f5d]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__icon[data-v-8dc09f5d]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-8dc09f5d] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-8dc09f5d]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-8dc09f5d] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-8dc09f5d]{white-space:nowrap}.sp-dropdown__item[data-v-8dc09f5d]{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-8dc09f5d]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-8dc09f5d]{background:#e5f1fb;color:#0078d7}.color-picker[data-v-f00d0dae]{position:relative;display:inline-flex;height:26px}.color-picker__menu[data-v-f00d0dae]{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-f00d0dae],.menu-pop-leave-active[data-v-f00d0dae]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-f00d0dae],.menu-pop-leave-to[data-v-f00d0dae]{opacity:0;transform:scale(.9)}.color-picker__row[data-v-f00d0dae]{display:flex;gap:4px;margin-bottom:4px}.color-picker__row[data-v-f00d0dae]:last-child{margin-bottom:0}.color-picker__swatch[data-v-f00d0dae]{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-f00d0dae]:hover{transform:scale(1.18);box-shadow:0 0 0 1px #0003;z-index:1}.color-picker__swatch--selected[data-v-f00d0dae]{box-shadow:0 0 0 2px #0078d7}.border-picker[data-v-3721e5e4]{position:relative;display:inline-flex;height:26px}.border-picker__menu[data-v-3721e5e4]{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-3721e5e4]{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-3721e5e4]:hover{background:#eef3f9}.border-picker__icon[data-v-3721e5e4]{width:18px;height:18px;flex-shrink:0}.border-picker__label[data-v-3721e5e4]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-3721e5e4],.menu-pop-leave-active[data-v-3721e5e4]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-3721e5e4],.menu-pop-leave-to[data-v-3721e5e4]{opacity:0;transform:scale(.9)}.merge-picker[data-v-24e4dbe5]{position:relative;display:inline-flex;height:26px}.merge-picker__menu[data-v-24e4dbe5]{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-24e4dbe5]{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-24e4dbe5]:hover{background:#eef3f9}.merge-picker__icon[data-v-24e4dbe5]{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.merge-picker__icon[data-v-24e4dbe5] svg{width:18px;height:18px}.merge-picker__label[data-v-24e4dbe5]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-24e4dbe5],.menu-pop-leave-active[data-v-24e4dbe5]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-24e4dbe5],.menu-pop-leave-to[data-v-24e4dbe5]{opacity:0;transform:scale(.9)}.toolbar[data-v-7da07fb8]{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-7da07fb8]{display:flex;align-items:center;flex:0 0 auto}.toolbar-sep[data-v-7da07fb8]{width:1px;height:18px;margin:0 4px;background:var(--sp-toolbar-border)}.toolbar-font[data-v-7da07fb8],.toolbar-align[data-v-7da07fb8]{flex:0 0 auto}.toolbar-font-size[data-v-7da07fb8]{display:inline-flex;align-items:center;gap:0;height:26px;position:relative}.toolbar-font-size__input[data-v-7da07fb8]{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-7da07fb8]::-webkit-outer-spin-button,.toolbar-font-size__input[data-v-7da07fb8]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.toolbar-font-size__input[data-v-7da07fb8]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__input[data-v-7da07fb8]:focus{border-color:var(--sp-toolbar-border);background:#fff}.toolbar-font-size__btn[data-v-7da07fb8]{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-7da07fb8]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__btn svg[data-v-7da07fb8]{width:10px;height:10px}.toolbar-font-size__dropdown[data-v-7da07fb8]{position:absolute;width:56px;height:26px;pointer-events:none}.toolbar-btn[data-v-7da07fb8]{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-7da07fb8]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-btn[data-v-7da07fb8]:active:not(:disabled){opacity:.7}.toolbar-btn--active[data-v-7da07fb8]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-btn--step[data-v-7da07fb8]{width:26px;height:26px}.toolbar-btn--step svg[data-v-7da07fb8]{width:16px;height:16px}.toolbar-btn[data-v-7da07fb8]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.toolbar-btn__icon[data-v-7da07fb8]{width:18px;height:18px}.toolbar-btn svg[data-v-7da07fb8]:not(.toolbar-btn__icon){width:18px;height:18px}.toolbar-split[data-v-7da07fb8]{display:inline-flex;align-items:center;position:relative;height:26px}.toolbar-split__main[data-v-7da07fb8]{border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px}.toolbar-split__arrow[data-v-7da07fb8]{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-7da07fb8]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-split__arrow svg[data-v-7da07fb8]{width:10px!important;height:10px!important}.toolbar-more[data-v-7da07fb8]{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-7da07fb8]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-more--active[data-v-7da07fb8]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-more svg[data-v-7da07fb8]{width:18px;height:18px}.overflow-menu[data-v-7da07fb8]{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-7da07fb8]{transition:none!important}.overflow-menu .tb-item[data-v-7da07fb8]{width:100%}.overflow-menu .toolbar-sep[data-v-7da07fb8]{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split[data-v-7da07fb8]{width:100%}.overflow-menu .toolbar-split__main[data-v-7da07fb8]{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size[data-v-7da07fb8]{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font[data-v-7da07fb8],.overflow-menu .toolbar-align[data-v-7da07fb8]{width:100%}.overflow-menu .toolbar-btn[data-v-7da07fb8]:not(.toolbar-btn--step):not(.toolbar-split__arrow){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-color[data-v-7da07fb8]{width:100%}.overflow-menu .toolbar-wrap[data-v-7da07fb8]{width:100%;justify-content:flex-start}.menu-pop-enter-active[data-v-7da07fb8],.menu-pop-leave-active[data-v-7da07fb8]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-7da07fb8],.menu-pop-leave-to[data-v-7da07fb8]{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-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-454e1a12]{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-454e1a12]{display:flex;align-items:flex-start;flex:1;overflow:hidden;gap:1px;padding:0 1px}.tab-item[data-v-454e1a12]{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-454e1a12]:hover{background:var(--sp-tab-hover-bg)}.tab-item--active[data-v-454e1a12]{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-454e1a12]:hover{background:var(--sp-tab-active-bg)}.tab-item__name[data-v-454e1a12]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-rename-input[data-v-454e1a12]{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__add-btn[data-v-454e1a12]{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}.tab-bar__add-btn[data-v-454e1a12]:hover{background:var(--sp-tab-add-btn-hover-bg)}.spreadsheet-outer[data-v-ef18f895]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-ef18f895]{display:flex;align-items:start;height:36px;min-height:36px;padding:0;gap:0}.formula-bar__cell-label[data-v-ef18f895]{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__input[data-v-ef18f895]{flex:1;height:28px;margin-top:4px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;outline:none;padding:0 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)}.formula-bar__input[data-v-ef18f895]:focus{border-color:var(--sp-formula-bar-input-focus-border);box-shadow:0 0 0 1px var(--sp-formula-bar-input-focus-shadow)}.spreadsheet-wrapper[data-v-ef18f895]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-ef18f895]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas[data-v-ef18f895]:focus{outline:none}.v-scrollbar[data-v-ef18f895]{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-ef18f895]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-ef18f895]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-ef18f895]{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-ef18f895]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-ef18f895]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-ef18f895]{display:block;width:0;height:0}.sb-arrow--up[data-v-ef18f895]{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-ef18f895]{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-ef18f895]{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-ef18f895]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-ef18f895]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-ef18f895]{width:11px}.sb-track--h[data-v-ef18f895]{height:11px}.sb-thumb[data-v-ef18f895]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-ef18f895]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-ef18f895]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-ef18f895]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-ef18f895]{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,4 +1,4 @@
1
- import type { SheetModelData } from './core/types';
1
+ import type { SheetModelData } from '../core/types';
2
2
  type __VLS_Props = {
3
3
  rowCount?: number;
4
4
  colCount?: number;
@@ -0,0 +1,4 @@
1
+ import Spreader from './components/spreader.vue';
2
+ export default Spreader;
3
+ export { Spreader };
4
+ export type { CellCoord, SelectionRange, CellData, Range, SpreadsheetOptions, SpreadsheetData, SheetModelData, SheetState, UndoSnapshot, ContextMenuItem, ThemeColors, Point, } from './core/types';
@@ -1,4 +1,2 @@
1
- import Spreader from './components/spreader/spreader.vue';
2
- export default Spreader;
3
- export { Spreader };
4
- export type { CellCoord, SelectionRange, CellData, Range, SpreadsheetOptions, SpreadsheetData, SheetModelData, SheetState, UndoSnapshot, ContextMenuItem, ThemeColors, Point, } from './components/spreader/core/types';
1
+ export { default, Spreader } from './components/spreader';
2
+ export type { CellCoord, SelectionRange, CellData, Range, SpreadsheetOptions, SpreadsheetData, SheetModelData, SheetState, UndoSnapshot, ContextMenuItem, ThemeColors, Point, } from './components/spreader';