xiaodao-spreader 0.1.7 → 0.1.8

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-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-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';
@@ -4667,7 +4667,7 @@ const Rr = { class: "formula-bar" }, Sr = { class: "formula-bar__cell-label" },
4667
4667
  ]))
4668
4668
  ], 4));
4669
4669
  }
4670
- }), Kr = /* @__PURE__ */ Kt(Ir, [["__scopeId", "data-v-0c81e050"]]);
4670
+ }), Kr = /* @__PURE__ */ Kt(Ir, [["__scopeId", "data-v-ef18f895"]]);
4671
4671
  export {
4672
4672
  Kr as Spreader,
4673
4673
  Kr as default
@@ -6,4 +6,4 @@
6
6
  `))}else if(r.startRow===0&&r.endRow===e.rowCount-1){T={...r},be(r.startCol,r.endCol,0,e.rowCount-1);const f=[];for(let w=0;w<e.rowCount;w++){const o=[];for(let a=r.startCol;a<=r.endCol;a++)o.push(e.getCellRaw(a,w));f.push(o.join(" "))}el(f.join(`
7
7
  `))}}}async function C(){var O;let r;try{r=await navigator.clipboard.readText()}catch{return}if(!r&&r!=="")return;const f=r.split(/\r?\n/),w=e.activeCell.value,o=T,a=o&&P.length>0;for(let H=0;H<f.length;H++){const V=f[H].split(" ");for(let ae=0;ae<V.length;ae++){const ve=w.col+ae,xe=w.row+H;if(ve<e.colCount&&xe<e.rowCount){let Ae=V[ae];if(Ae.startsWith("=")&&o&&(Ae=un(Ae,ve-(o.startCol+ae),xe-(o.startRow+H),e.colCount,e.rowCount,Je)),a&&H<P.length&&ae<(((O=P[H])==null?void 0:O.length)??0)){const Le=P[H][ae]??null;ye(ve,xe,Ae,Le),I(ve,xe)}else e.setCellValue(ve,xe,Ae)}}}}function He(){var r;if(te(),e.selection.value){const f=e.selection.value;e.clearCellsInRange(f.startCol,f.endCol,f.startRow,f.endRow),(r=e.scheduleRender)==null||r.call(e)}}function Se(){var r;if(e.selection.value){const f=e.selection.value;e.clearCellsInRange(f.startCol,f.endCol,f.startRow,f.endRow),(r=e.scheduleRender)==null||r.call(e)}}function ce(){var O,H;const r=e.selection.value;if(!r)return;v.saveUndo();const f=r.startCol,w=r.startRow,o=r.endCol,a=r.endRow;if(w===a)if(o+1<e.colCount){const V=`${Je(f)}${w+1}:${Je(o)}${w+1}`;e.setCellValue(o+1,w,`=SUM(${V})`)}else{const V=`${Je(f)}${w+1}:${Je(o-1)}${w+1}`;e.setCellValue(o,w,`=SUM(${V})`)}else for(let V=f;V<=o;V++)if(a+1<e.rowCount){const ae=`${Je(V)}${w+1}:${Je(V)}${a+1}`;e.setCellValue(V,a+1,`=SUM(${ae})`)}else{const ae=`${Je(V)}${w+1}:${Je(V)}${a}`;e.setCellValue(V,a,`=SUM(${ae})`)}(O=e.scheduleRender)==null||O.call(e),(H=e.emitModelData)==null||H.call(e)}return{cachedBorder:p,borderMenuOpen:n,BORDER_COLOR:u,borderTypeToWidths:k,onBorderChange:ee,setCellBorderSide:i,syncCellBorders:I,applyBorderToCell:g,applyCachedBorder:Y,cellBorderWidth:y,mergeMenuOpen:ne,onMergeMenuToggle:A,removeOverlappingMerges:m,mergeAndCenter:ge,mergeAcross:me,mergeCells:we,unmergeCells:G,onApplyMerge:U,onMergeChange:pe,copySourceRange:null,copySourceStyles:[],captureStyles:be,setCellWithStyle:ye,copyToClipboard:te,copyRowCol:s,pasteFromClipboard:C,cutSelected:He,clearSelected:Se,sumSelected:ce}}function vn(e,v,p,n){const u={},k=n(v),i=n(p);return k!=null&&(u.width=`${k}px`),i!=null&&(u.height=`${i}px`),u["--sp-formula-bar-bg"]=e.formulaBarBg,u["--sp-formula-bar-border"]=e.formulaBarBorder,u["--sp-formula-bar-label-color"]=e.formulaBarLabelText,u["--sp-formula-bar-label-bg"]=e.formulaBarLabelBg,u["--sp-formula-bar-label-border"]=e.formulaBarLabelBorder,u["--sp-formula-bar-input-bg"]=e.formulaBarInputBg,u["--sp-formula-bar-input-border"]=e.formulaBarInputBorder,u["--sp-formula-bar-input-color"]=e.formulaBarInputText,u["--sp-formula-bar-input-focus-border"]=e.formulaBarInputFocusBorder,u["--sp-formula-bar-input-focus-shadow"]=e.formulaBarInputFocusShadow,u["--sp-wrapper-bg"]=e.wrapperBg,u["--sp-cell-editor-border"]=e.cellEditorBorder,u["--sp-cell-editor-color"]=e.cellEditorText,u["--sp-cell-editor-bg"]=e.cellEditorBg,u["--sp-cell-editor-shadow"]=e.cellEditorShadow,u["--sp-tab-bar-bg"]=e.tabBarBg,u["--sp-tab-bar-border"]=e.tabBarBorder,u["--sp-tab-active-bg"]=e.tabActiveBg,u["--sp-tab-active-color"]=e.tabActiveText,u["--sp-tab-active-border"]=e.tabActiveBorder,u["--sp-tab-inactive-bg"]=e.tabInactiveBg,u["--sp-tab-inactive-color"]=e.tabInactiveText,u["--sp-tab-inactive-border"]=e.tabInactiveBorder,u["--sp-tab-hover-bg"]=e.tabHoverBg,u["--sp-tab-add-btn-color"]=e.tabAddBtnColor,u["--sp-tab-add-btn-hover-bg"]=e.tabAddBtnHoverBg,u["--sp-tab-scroll-btn-color"]=e.tabScrollBtnColor,u["--sp-tab-scroll-btn-hover-bg"]=e.tabScrollBtnHoverBg,u["--sp-scroll-thumb"]=e.scrollbarThumb,u["--sp-scroll-thumb-hover"]=e.scrollbarThumbHover,u["--sp-scroll-btn-bg"]=e.scrollBtnBg,u["--sp-scroll-btn-color"]=e.scrollBtnColor,u["--sp-scroll-btn-hover-bg"]=e.scrollBtnHoverBg,u["--sp-scroll-btn-active-bg"]=e.scrollBtnActiveBg,u["--sp-scroll-track-bg"]=e.scrollTrackBg,u["--sp-toolbar-bg"]=e.toolbarBg,u["--sp-toolbar-border"]=e.toolbarBorder,u["--sp-toolbar-btn-color"]=e.toolbarBtnColor,u["--sp-toolbar-btn-hover-bg"]=e.toolbarBtnHoverBg,u["--sp-toolbar-btn-disabled-color"]=e.toolbarBtnDisabledColor,u["--sp-toolbar-btn-active-color"]=e.toolbarBtnActiveColor,u}function Cn(e,v,p,n){function u(S,F){var le,fe;const _=F-S+1;for(let z=S;z<=F;z++)for(let se=0;se<e.colCount;se++)e.delCell(e.cellKey(se,z));for(let z=S;z<e.rowCount-_;z++){for(let se=0;se<e.colCount;se++){const ke=e.cellKey(se,z+_),De=e.cellKey(se,z);e.cells[ke]?(e.cells[De]=e.cells[ke],e.delCell(ke)):e.delCell(De)}e.rowHeights.value[z]=e.rowHeights.value[z+_]}for(let z=e.rowCount-_;z<e.rowCount;z++){for(let se=0;se<e.colCount;se++)e.delCell(e.cellKey(se,z));e.rowHeights.value[z]=void 0}if(S>0)for(let z=0;z<e.colCount;z++)(le=e.syncCellBorders)==null||le.call(e,z,S-1),(fe=e.syncCellBorders)==null||fe.call(e,z,S)}function k(S,F){const _=F-S+1;if(!(F>=e.rowCount-1)){for(let le=e.rowCount-1;le>F;le--){for(let fe=0;fe<e.colCount;fe++){const z=e.cellKey(fe,le-_),se=e.cellKey(fe,le);e.cells[z]?e.cells[se]=e.cells[z]:e.delCell(se)}e.rowHeights.value[le]=e.rowHeights.value[le-_]}for(let le=F+1;le<=F+_;le++){for(let fe=0;fe<e.colCount;fe++)e.delCell(e.cellKey(fe,le));e.rowHeights.value[le]=void 0}}}function i(S,F){const _=F-S+1;if(!(F>=e.colCount-1)){for(let le=e.colCount-1;le>F;le--){for(let fe=0;fe<e.rowCount;fe++){const z=e.cellKey(le-_,fe),se=e.cellKey(le,fe);e.cells[z]?e.cells[se]=e.cells[z]:e.delCell(se)}e.colWidths.value[le]=e.colWidths.value[le-_]}for(let le=F+1;le<=F+_;le++){for(let fe=0;fe<e.rowCount;fe++)e.delCell(e.cellKey(le,fe));e.colWidths.value[le]=100}}}function I(S,F){var le,fe;const _=F-S+1;for(let z=S;z<=F;z++)for(let se=0;se<e.rowCount;se++)e.delCell(e.cellKey(z,se));for(let z=S;z<e.colCount-_;z++){for(let se=0;se<e.rowCount;se++){const ke=e.cellKey(z+_,se),De=e.cellKey(z,se);e.cells[ke]?(e.cells[De]=e.cells[ke],e.delCell(ke)):e.delCell(De)}e.colWidths.value[z]=e.colWidths.value[z+_]}for(let z=e.colCount-_;z<e.colCount;z++){for(let se=0;se<e.rowCount;se++)e.delCell(e.cellKey(z,se));e.colWidths.value[z]=100}if(S>0)for(let z=0;z<e.rowCount;z++)(le=e.syncCellBorders)==null||le.call(e,S-1,z),(fe=e.syncCellBorders)==null||fe.call(e,S,z)}let g=0;function ee(){return g++,`s_${g}`}function Y(S){return{id:ee(),name:S,cells:{},merges:{},selection:{startCol:0,startRow:0,endCol:0,endRow:0},activeCell:{col:0,row:0},scrollX:0,scrollY:0,colWidths:new Array(e.colCount).fill(100),rowHeights:new Array(e.rowCount).fill(void 0)}}const y=t.ref([Y("Sheet1")]),ne=t.ref(0);function A(){const S=y.value[ne.value];S&&(S.cells={...e.cells},S.merges={...e.merges},S.selection=e.selection.value?{...e.selection.value}:null,S.activeCell={...e.activeCell.value},S.scrollX=e.scrollX.value,S.scrollY=e.scrollY.value,S.colWidths=[...e.colWidths.value],S.rowHeights=[...e.rowHeights.value])}function m(S){const F=y.value[S];F&&(Object.keys(e.cells).forEach(_=>e.delCell(_)),Object.assign(e.cells,F.cells),Object.keys(e.merges).forEach(_=>Reflect.deleteProperty(e.merges,_)),F.merges&&Object.assign(e.merges,F.merges),e.selection.value=F.selection?{...F.selection}:null,e.activeCell.value={...F.activeCell},e.scrollX.value=F.scrollX,e.scrollY.value=F.scrollY,e.colWidths.value=[...F.colWidths],e.rowHeights.value=[...F.rowHeights],ne.value=S)}function ge(S){S===ne.value||S<0||S>=y.value.length||(e.cancelEdit(),A(),m(S))}function me(S){return v.saveUndo(),e.cancelEdit(),A(),y.value.push(Y(S??`Sheet${y.value.length+1}`)),m(y.value.length-1),y.value.length-1}function we(S){return y.value.length<=1||(v.saveUndo(),e.cancelEdit(),y.value.splice(S,1),m(Math.min(S,y.value.length-1))),ne.value}function G(S,F){y.value[S]&&F.trim()&&(v.saveUndo(),y.value[S].name=F.trim())}function U(S){v.saveUndo(),e.cancelEdit(),A();const F=y.value[S];if(!F)return S;let _=F.name;const le=_.match(/^(.*?)\s*\((\d+)\)$/);let fe=le?parseInt(le[2],10)+1:2;le&&(_=le[1]);let z=`${_} (${fe})`;const se=new Set(y.value.map(De=>De.name));for(;se.has(z);)fe++,z=`${_} (${fe})`;const ke={id:ee(),name:z,cells:{...F.cells},merges:F.merges?{...F.merges}:{},selection:F.selection?{...F.selection}:null,activeCell:F.activeCell?{...F.activeCell}:{col:0,row:0},scrollX:F.scrollX,scrollY:F.scrollY,colWidths:[...F.colWidths],rowHeights:[...F.rowHeights]};return y.value.splice(S+1,0,ke),m(S+1),S+1}function pe(S,F){var z;const _=S+F;if(_<0||_>=y.value.length)return;v.saveUndo();const le=ne.value,fe=y.value.splice(S,1)[0];y.value.splice(_,0,fe),le===S?ne.value=_:S<le&&_>=le?ne.value=le-1:S>le&&_<=le&&(ne.value=le+1),(z=e.scheduleRender)==null||z.call(e)}const T=t.computed(()=>y.value.length);let P="";const be=p;function ye(){A();const S=y.value.map(_=>{const le={};for(const[ke,De]of Object.entries(_.cells))le[ke]={value:De.value},De.style&&(le[ke].style=De.style);const fe={name:_.name,cells:le};_.merges&&Object.keys(_.merges).length&&(fe.merges={..._.merges});const z={};for(let ke=0;ke<_.colWidths.length;ke++)_.colWidths[ke]!==100&&(z[ke]=_.colWidths[ke]);Object.keys(z).length&&(fe.colWidths=z);const se={};for(let ke=0;ke<_.rowHeights.length;ke++){const De=_.rowHeights[ke];De!=null&&(se[ke]=De)}return Object.keys(se).length&&(fe.rowHeights=se),fe}),F=JSON.stringify(S);F!==P&&(P=F,be.value=S)}e.emitModelData=ye;let te=!1;function s(){te||(te=!0,Promise.resolve().then(()=>{te=!1,ye()}))}const C=t.computed(()=>e.props.theme==="dark"?Il:Nl),He=t.computed(()=>vn(C.value,e.props.width,e.props.height,mt)),Se=t.computed(()=>{const S={};for(const[F,_]of Object.entries(He.value))F.startsWith("--")&&(S[F]=_);return S}),ce=t.ref(null),r=t.ref(null),f=t.ref(null),w=t.ref(null),o=t.reactive({w:800,h:600});e.viewSize&&t.watch(o,S=>{e.viewSize&&(e.viewSize.w=S.w,e.viewSize.h=S.h)},{deep:!0});const a=48,O=28,H=11,V=t.computed(()=>Math.max(0,e.totalWidth.value-Math.max(0,o.w-a-H))),ae=t.computed(()=>Math.max(0,e.totalHeight.value-Math.max(0,o.h-O-H)));function ve(S,F){const _=Math.max(0,o.w-a-H),le=Math.max(0,o.h-O-H);e.scrollX.value=Math.max(0,Math.min(S??e.scrollX.value,Math.max(0,e.totalWidth.value-_))),e.scrollY.value=Math.max(0,Math.min(F??e.scrollY.value,Math.max(0,e.totalHeight.value-le)))}e.clampScroll=ve;function xe(){var S;return typeof window>"u"?!1:!((S=window.matchMedia)!=null&&S.call(window,"(hover: none) and (pointer: coarse)").matches)}function Ae(S=!1){t.nextTick(()=>{const F=f.value;if(F){if(!e.editingCell.value&&!xe()){document.activeElement===F&&F.blur();return}F.focus({preventScroll:!0}),S&&F.select()}})}function Le(){Ae()}function he(){var F;const S=e.selection.value;if(S){v.saveUndo();for(let _=S.startRow;_<=S.endRow;_++)e.rowHeights.value[_]=void 0;(F=e.scheduleRender)==null||F.call(e),ye()}}function We(){var F;const S=e.selection.value;if(S){v.saveUndo();for(let _=S.startCol;_<=S.endCol;_++)e.colWidths.value[_]=100;(F=e.scheduleRender)==null||F.call(e),ye()}}return{deleteRows:u,insertRows:k,insertCols:i,deleteCols:I,sheets:y,activeSheetIndex:ne,saveSheet:A,loadSheet:m,switchSheet:ge,addSheet:me,removeSheet:we,renameSheet:G,dupSheet:U,moveSheet:pe,sheetCount:T,mkSheet:Y,emitModelData:ye,scheduleOptEmit:s,themeColors:C,outerStyle:He,toolbarThemeVars:Se,wrapperRef:ce,canvasRef:r,editInputRef:f,formulaBarRef:w,viewSize:o,maxScrollX:V,maxScrollY:ae,clampScroll:ve,canFocusHiddenEditor:xe,focusEditInput:Ae,onCanvasFocus:Le,resetRowHeight:he,resetColWidth:We,modelData:be}}function bn(e,v,p,n,u){let k=!1,i=null,I=1;function g(){k||(k=!0,requestAnimationFrame(()=>{k=!1,Y()}))}e.scheduleRender=g;const ee="#444";function Y(){var il,vt,Ot,it,ut,Vt,hl,vl,Cl,bl,yl;const l=n.canvasRef.value;if(!l)return;const d=n.wrapperRef.value;if(!d||(i=l.getContext("2d"),!i))return;I=window.devicePixelRatio||1;const x=d.getBoundingClientRect(),M=x.width,h=x.height;n.viewSize.w=M,n.viewSize.h=h,l.width=M*I,l.height=h*I,l.style.width=M+"px",l.style.height=h+"px",i.setTransform(I,0,0,I,0,0);const D=e.scrollX.value,q=e.scrollY.value,oe=52,ie=24,Be=n.themeColors.value,Ye=e.colPositions.value,_e=e.rowPositions.value,kt=e.colWidths.value,gt=[];for(let N=0;N<e.rowCount;N++)gt[N]=_e[N+1]-_e[N];const ot=Math.max(0,e.hitCol(D));let ht=ot;for(let N=ot;N<e.colCount&&!(oe+Ye[N]-D>=M);N++)ht=N;const Et=ht,Ze=Math.max(0,e.hitRow(q));let Xt=Ze;for(let N=Ze;N<e.rowCount&&!(ie+_e[N]-q>=h);N++)Xt=N;const Bt=Xt;i.fillStyle=Be.bg,i.fillRect(0,0,M,h),i.fillStyle=Be.gridBg,i.fillRect(oe,ie,M-oe,h-ie),i.save(),i.beginPath(),i.rect(oe,ie,M-oe,h-ie),i.clip();const Pe=e.selection.value,Lt=e.editingCell.value;for(let N=Ze;N<=Bt;N++)for(let J=ot;J<=Et;J++){const Re=e.findMerge(J,N);if(Re&&!(J===Re.range.startCol&&N===Re.range.startRow))continue;const Me=oe+Ye[J]-D,Te=ie+_e[N]-q;let Ne=kt[J],Ie=gt[N];if(Re&&(Ne=Ye[Re.range.endCol+1]-Ye[J],Ie=_e[Re.range.endRow+1]-_e[N]),Me+Ne<oe||Te+Ie<ie||Me>M||Te>h)continue;const Oe=(il=e.cells[e.cellKey(J,N)])==null?void 0:il.style,Rt=typeof(Oe==null?void 0:Oe.backgroundColor)=="string"?Oe.backgroundColor:"";if(Rt&&(i.fillStyle=Rt,i.fillRect(Me,Te,Ne,Ie)),e.isSelected(J,N)&&(i.fillStyle=Be.selectionBg,i.fillRect(Me,Te,Ne,Ie)),e.activeCell.value.col===J&&e.activeCell.value.row===N&&(i.strokeStyle=Be.activeCellBorder,i.lineWidth=2,i.strokeRect(Me+1,Te+1,Ne-2,Ie-2)),i.strokeStyle=Be.gridLine,i.lineWidth=.5,i.strokeRect(Me+.25,Te+.25,Ne-.5,Ie-.5),!(Lt&&Lt.col===J&&Lt.row===N)){const xt=e.getCellValue(J,N);if(xt){const Ce=(vt=e.cells[e.cellKey(J,N)])==null?void 0:vt.style,Ge=e.cellFontSize(J,N),qe=typeof(Ce==null?void 0:Ce.fontFamily)=="string"&&Ce.fontFamily?Ce.fontFamily:$t,nt=(Ce==null?void 0:Ce.fontWeight)==="bold"?"bold":"normal",tt=(Ce==null?void 0:Ce.fontStyle)==="italic"?"italic":"normal",St=(Ce==null?void 0:Ce.underline)==="underline",Kn=(Ce==null?void 0:Ce.strikethrough)==="line-through",cl=typeof(Ce==null?void 0:Ce.color)=="string"?Ce.color:"",wl=typeof(Ce==null?void 0:Ce.textAlign)=="string"?Ce.textAlign:"left",kl=typeof(Ce==null?void 0:Ce.verticalAlign)=="string"?Ce.verticalAlign:"top";i.fillStyle=cl||Be.cellText,i.font=`${tt} ${nt} ${Ge}px ${qe}`,i.textBaseline="alphabetic",i.save(),i.beginPath(),i.rect(Me+5,Te+1,Ne-10,Ie-2),i.clip();const Un=(Ce==null?void 0:Ce.wrap)==="wrap",Wt=e.getWrappedLines(i,xt,Ne-10,Un);let Mt=0,Ct=0;for(const Tt of Wt){const zt=i.measureText(Tt),Dt=zt.actualBoundingBoxAscent,Ht=zt.actualBoundingBoxDescent,rt=Dt||Ge*.8,qt=Ht||Ge*.2;Mt=Math.max(Mt,rt),Ct=Math.max(Ct,qt)}Mt=Math.max(Mt,Ge*.5),Ct=Math.max(Ct,Ge*.15);const jt=Ge,Pn=Wt.length*jt;let Zt;kl==="middle"?Zt=Te+(Ie-Pn)/2+Mt:kl==="bottom"?Zt=Te+Ie-e.BASE_CELL_VPAD-Ct-(Wt.length-1)*jt:Zt=Te+e.BASE_CELL_VPAD+Mt;for(let Tt=0;Tt<Wt.length;Tt++){const zt=Wt[Tt],Dt=Zt+Tt*jt,Ht=i.measureText(zt);let rt;if(wl==="center"?rt=Me+Ne/2-Ht.width/2:wl==="right"?rt=Me+Ne-5-Ht.width:rt=Me+5,i.fillText(zt,rt,Dt),St&&(i.strokeStyle=cl||Be.cellText,i.lineWidth=1,i.beginPath(),i.moveTo(rt,Dt+Ct+1),i.lineTo(rt+Ht.width,Dt+Ct+1),i.stroke()),Kn){i.strokeStyle=cl||Be.cellText,i.lineWidth=1;const qt=Dt-jt*.25;i.beginPath(),i.moveTo(rt,qt),i.lineTo(rt+Ht.width,qt),i.stroke()}}i.restore()}}}for(let N=Ze;N<=Bt;N++)for(let J=ot;J<=Et;J++){const Re=e.findMerge(J,N);if(Re&&!(J===Re.range.startCol&&N===Re.range.startRow))continue;const Me=oe+Ye[J]-D,Te=ie+_e[N]-q;let Ne=kt[J],Ie=gt[N];if(Re&&(Ne=Ye[Re.range.endCol+1]-Ye[J],Ie=_e[Re.range.endRow+1]-_e[N]),Me+Ne<oe||Te+Ie<ie||Me>M||Te>h)continue;const Oe=(Ot=e.cells[e.cellKey(J,N)])==null?void 0:Ot.style,Rt=(Oe==null?void 0:Oe.borderTopWidth)||0,xt=(Oe==null?void 0:Oe.borderLeftWidth)||0,Ce=(Oe==null?void 0:Oe.borderBottomWidth)||0,Ge=(Oe==null?void 0:Oe.borderRightWidth)||0,qe=Math.max(Rt,p.cellBorderWidth(J,N-1,"Bottom")),nt=Math.max(xt,p.cellBorderWidth(J-1,N,"Right")),tt=Math.max(Ce,p.cellBorderWidth(J,N+1,"Top")),St=Math.max(Ge,p.cellBorderWidth(J+1,N,"Left"));(qe>0||nt>0||tt>0||St>0)&&(i.fillStyle=ee,qe>0&&i.fillRect(Me,Te,Ne,qe),tt>0&&i.fillRect(Me,Te+Ie-tt,Ne,tt),nt>0&&i.fillRect(Me,Te,nt,Ie),St>0&&i.fillRect(Me+Ne-St,Te,St,Ie))}for(let N=Ze;N<=Bt;N++)for(let J=ot;J<=Et;J++){const Re=e.findMerge(J,N);if(Re&&!(J===Re.range.startCol&&N===Re.range.startRow))continue;const Me=oe+Ye[J]-D,Te=ie+_e[N]-q;let Ne=kt[J],Ie=gt[N];if(Re&&(Ne=Ye[Re.range.endCol+1]-Ye[J],Ie=_e[Re.range.endRow+1]-_e[N]),Me+Ne<oe||Te+Ie<ie||Me>M||Te>h)continue;const Oe=((ut=(it=e.cells[e.cellKey(J,N)])==null?void 0:it.style)==null?void 0:ut.borderTopWidth)||0,Rt=((hl=(Vt=e.cells[e.cellKey(J,N)])==null?void 0:Vt.style)==null?void 0:hl.borderLeftWidth)||0,xt=((Cl=(vl=e.cells[e.cellKey(J,N)])==null?void 0:vl.style)==null?void 0:Cl.borderBottomWidth)||0,Ce=((yl=(bl=e.cells[e.cellKey(J,N)])==null?void 0:bl.style)==null?void 0:yl.borderRightWidth)||0,Ge=Math.max(Oe,p.cellBorderWidth(J,N-1,"Bottom")),qe=Math.max(Rt,p.cellBorderWidth(J-1,N,"Right")),nt=Math.max(xt,p.cellBorderWidth(J,N+1,"Top")),tt=Math.max(Ce,p.cellBorderWidth(J+1,N,"Left"));i.fillStyle=ee,Ge>0&&qe>0&&i.fillRect(Me-qe,Te-Ge,qe,Ge),Ge>0&&tt>0&&i.fillRect(Me+Ne,Te-Ge,tt,Ge),nt>0&&qe>0&&i.fillRect(Me-qe,Te+Ie,qe,nt),nt>0&&tt>0&&i.fillRect(Me+Ne,Te+Ie,tt,nt)}i.restore(),i.fillStyle=Be.headerBg,i.fillRect(oe,0,M-oe,ie);for(let N=ot;N<=Et;N++){const J=oe+Ye[N]-D,Re=kt[N];J+Re<oe||J>M||(Pe&&N>=Pe.startCol&&N<=Pe.endCol&&(i.fillStyle=Be.selectionBg,i.fillRect(J,0,Re,ie)),i.strokeStyle=Be.headerBorder,i.lineWidth=.5,i.strokeRect(J+.25,.25,Re-.5,ie-.5),Pe&&N>=Pe.startCol&&N<=Pe.endCol&&(i.strokeStyle=Be.activeCellBorder,i.lineWidth=2,i.beginPath(),i.moveTo(J,ie-1),i.lineTo(J+Re,ie-1),i.stroke()),i.fillStyle=Be.headerText,i.font='11px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',i.textAlign="center",i.textBaseline="middle",i.fillText(Je(N),J+Re/2,ie/2))}i.strokeStyle=Be.headerSep,i.lineWidth=1,i.beginPath(),i.moveTo(oe,ie+.5),i.lineTo(M,ie+.5),i.stroke(),i.fillStyle=Be.headerBg,i.fillRect(0,ie,oe,h-ie);for(let N=Ze;N<=Bt;N++){const J=ie+_e[N]-q,Re=gt[N];J+Re<ie||J>h||(Pe&&N>=Pe.startRow&&N<=Pe.endRow&&(i.fillStyle=Be.selectionBg,i.fillRect(0,J,oe,Re)),i.strokeStyle=Be.headerBorder,i.lineWidth=.5,i.strokeRect(.25,J+.25,oe-.5,Re-.5),Pe&&N>=Pe.startRow&&N<=Pe.endRow&&(i.strokeStyle=Be.activeCellBorder,i.lineWidth=2,i.beginPath(),i.moveTo(oe-1,J),i.lineTo(oe-1,J+Re),i.stroke()),i.fillStyle=Be.headerText,i.font='11px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',i.textAlign="center",i.textBaseline="middle",i.fillText(String(N+1),oe/2,J+Re/2+.5))}i.strokeStyle=Be.headerSep,i.lineWidth=1,i.beginPath(),i.moveTo(oe+.5,ie),i.lineTo(oe+.5,h),i.stroke(),i.fillStyle=Be.headerBg,i.fillRect(0,0,oe,ie),i.strokeStyle=Be.headerSep,i.lineWidth=1,i.strokeRect(.5,.5,oe-.5,ie-.5)}const y=t.computed(()=>Je(e.activeCell.value.col)+String(e.activeCell.value.row+1)),ne=t.computed(()=>e.editingCell.value?e.editValue.value:e.getCellRaw(e.activeCell.value.col,e.activeCell.value.row));function A(){e.editingCell.value||(e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),e.editValue.value=e.getCellRaw(e.activeCell.value.col,e.activeCell.value.row),e.startEdit(),g())}function m(l){e.editValue.value=l.target.value}function ge(l){var d,x;l.key==="Enter"?(l.preventDefault(),e.commitEdit(),e.moveActive(0,1),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),(d=n.formulaBarRef.value)==null||d.blur(),g(),n.focusEditInput()):l.key==="Escape"&&(l.preventDefault(),e.cancelEdit(),(x=n.formulaBarRef.value)==null||x.blur(),g(),n.focusEditInput())}function me(){setTimeout(()=>{e.editingCell.value&&(e.commitEdit(),g())},0)}const we=t.ref(null),G=t.ref("");function U(l){we.value===null&&(n.switchSheet(l),g())}function pe(l){l!==n.activeSheetIndex.value&&(n.saveSheet(),n.loadSheet(l),g()),we.value=l,G.value=n.sheets.value[l].name,t.nextTick(()=>{const d=document.querySelector(".tab-rename-input");d==null||d.focus(),d==null||d.select()})}function T(){we.value!==null&&(n.renameSheet(we.value,G.value),t.nextTick(()=>n.emitModelData())),we.value=null,G.value=""}function P(){we.value=null,G.value=""}function be(l){l.key==="Enter"?(l.preventDefault(),T()):l.key==="Escape"&&(l.preventDefault(),P())}const ye=t.ref(null);let te=null;function s(){te&&(document.removeEventListener("click",te),te=null)}function C(l,d,x){s();const M=140,h=x.length*28+8,D=window.innerWidth,q=window.innerHeight;l+M>D&&(l-=M),d+h>q&&(d-=h),ye.value={x:l,y:d,items:x},te=()=>{ye.value=null,s()},setTimeout(()=>document.addEventListener("click",te,{once:!0}),0)}const He=t.ref(!1);function Se(l,d){if(!d.children){He.value=!1;return}const M=l.currentTarget.querySelector(".context-submenu");if(!M){He.value=!1;return}const h=M.getBoundingClientRect();He.value=h.right>window.innerWidth}function ce(l,d){l.preventDefault(),l.stopPropagation(),C(l.clientX,l.clientY,[{label:$(e.locale.value,"insert"),action:()=>{n.addSheet(),g()}},{label:$(e.locale.value,"copy"),action:()=>{n.dupSheet(d)}},{label:$(e.locale.value,"rename"),action:()=>{pe(d)}},{label:$(e.locale.value,"delete"),action:()=>{n.removeSheet(d),g()},disabled:n.sheetCount.value<=1},{label:$(e.locale.value,"moveSheetLeft"),action:()=>{n.moveSheet(d,-1)},disabled:d===0},{label:$(e.locale.value,"moveSheetRight"),action:()=>{n.moveSheet(d,1)},disabled:d===n.sheets.value.length-1}])}function r(l){l.preventDefault(),!(l.target.closest(".tab-item")||l.target.closest(".tab-bar__add-btn"))&&C(l.clientX,l.clientY,[{label:$(e.locale.value,"insert"),action:()=>{n.addSheet(),g()}}])}function f(l){l.preventDefault(),e.selectAll(),g(),C(l.clientX,l.clientY,[{label:$(e.locale.value,"cut"),action:()=>{p.cutSelected(),n.emitModelData()}},{label:$(e.locale.value,"copy"),action:()=>p.copyToClipboard()},{label:$(e.locale.value,"paste"),action:()=>{v.saveUndo(),p.pasteFromClipboard().then(()=>{g(),t.nextTick(()=>n.emitModelData())})}},{label:$(e.locale.value,"delete"),action:()=>{v.saveUndo(),p.clearSelected();for(let d=0;d<e.colCount;d++)e.colWidths.value[d]=100;for(let d=0;d<e.rowCount;d++)e.rowHeights.value[d]=void 0;g(),n.emitModelData()}}])}function w(l,d){l.preventDefault();const x=l.clientX,M=l.clientY,h=e.selection.value;h&&h.startCol===0&&h.endCol===e.colCount-1&&d>=h.startRow&&d<=h.endRow||(e.selectRange(0,d,e.colCount-1,d),g());const D=e.selection.value;C(l.clientX,l.clientY,[{label:$(e.locale.value,"insert"),action:()=>{v.saveUndo(),n.insertRows(D.startRow,D.endRow),g(),n.emitModelData()},disabled:D.endRow>=e.rowCount-1},{label:$(e.locale.value,"cut"),action:()=>{v.saveUndo(),p.copyRowCol();for(let q=D.startRow;q<=D.endRow;q++)for(let oe=0;oe<e.colCount;oe++)e.delCell(e.cellKey(oe,q));g(),n.emitModelData()}},{label:$(e.locale.value,"copy"),action:()=>p.copyRowCol()},{label:$(e.locale.value,"paste"),action:()=>{v.saveUndo(),p.pasteFromClipboard().then(()=>{g(),t.nextTick(()=>n.emitModelData())})}},{label:$(e.locale.value,"delete"),action:()=>{v.saveUndo(),n.deleteRows(D.startRow,D.endRow),g(),n.emitModelData()}},{label:`${$(e.locale.value,"rowHeight")}...`,action:()=>ve("row",x,M)},{label:$(e.locale.value,"autoRowHeight"),action:()=>n.resetRowHeight()}])}function o(l,d){l.preventDefault();const x=l.clientX,M=l.clientY,h=e.selection.value;h&&h.startRow===0&&h.endRow===e.rowCount-1&&d>=h.startCol&&d<=h.endCol||(e.selectRange(d,0,d,e.rowCount-1),g());const D=e.selection.value;C(l.clientX,l.clientY,[{label:$(e.locale.value,"insert"),action:()=>{v.saveUndo(),n.insertCols(D.startCol,D.endCol),g(),n.emitModelData()},disabled:D.endCol>=e.colCount-1},{label:$(e.locale.value,"cut"),action:()=>{v.saveUndo(),p.copyRowCol();for(let q=D.startCol;q<=D.endCol;q++)for(let oe=0;oe<e.rowCount;oe++)e.delCell(e.cellKey(q,oe));g(),n.emitModelData()}},{label:$(e.locale.value,"copy"),action:()=>p.copyRowCol()},{label:$(e.locale.value,"paste"),action:()=>{v.saveUndo(),p.pasteFromClipboard().then(()=>{g(),t.nextTick(()=>n.emitModelData())})}},{label:$(e.locale.value,"delete"),action:()=>{v.saveUndo(),n.deleteCols(D.startCol,D.endCol),g(),n.emitModelData()}},{label:`${$(e.locale.value,"colWidth")}...`,action:()=>ve("col",x,M)},{label:$(e.locale.value,"defaultColWidth"),action:()=>n.resetColWidth()}])}function a(l,d,x){l.preventDefault(),e.isSelected(d,x)||(e.selectCell(d,x),g());const M=e.selection.value,h=!!(M&&M.startCol===M.endCol&&M.startRow===M.endRow);C(l.clientX,l.clientY,[{label:$(e.locale.value,"cut"),action:()=>{p.cutSelected(),n.emitModelData()}},{label:$(e.locale.value,"copy"),action:()=>p.copyToClipboard()},{label:$(e.locale.value,"paste"),action:()=>{v.saveUndo(),p.pasteFromClipboard().then(()=>{g(),t.nextTick(()=>n.emitModelData())})}},{label:$(e.locale.value,"delete"),action:()=>{v.saveUndo(),p.clearSelected(),g(),n.emitModelData()}},{label:$(e.locale.value,"calculate"),children:[{label:$(e.locale.value,"sum"),action:p.sumSelected,disabled:h}]}])}const O=t.ref(null),H=t.ref(null);let V=null;function ae(){V&&(document.removeEventListener("mousedown",V),V=null)}function ve(l,d,x){ae();const M=e.selection.value;let h="";if(M){const Be=l==="row"?e.getRowHeight(M.startRow):e.colWidths.value[M.startCol];h=Be!=null&&Be>0?String(Math.round(Be)):""}const D=220,q=118;let oe=d,ie=x;oe+D>window.innerWidth&&(oe=window.innerWidth-D-8),ie+q>window.innerHeight&&(ie=window.innerHeight-q-8),oe<8&&(oe=8),ie<8&&(ie=8),H.value={type:l,x:oe,y:ie,value:h,error:""},V=()=>{H.value=null},setTimeout(()=>document.addEventListener("mousedown",V,{once:!0}),0),t.nextTick(()=>{const Be=O.value;Be&&(Be.focus(),Be.select())})}function xe(l){const d=H.value;if(!d)return;const x=l.target,M=x.value,h=M.replace(/[^\d]/g,"");d.value=h,M!==h&&(x.value=h),d.error=""}function Ae(l){l.key==="Enter"?(l.preventDefault(),he()):l.key==="Escape"&&(l.preventDefault(),We())}function Le(){const l=H.value;if(!l)return;const d=l.value.trim(),x=Number(d),M=l.type==="row",h=M?24:30,D=M?500:1e3;if(d===""||!Number.isFinite(x)){We();return}const q=Math.max(h,Math.min(D,Math.round(x)));l.value=String(q),l.error=""}function he(){const l=H.value,d=e.selection.value;if(!l||!d)return;const x=l.value.trim(),M=Number(x),h=l.type==="row",D=h?24:30,q=h?500:1e3;if(x===""||!Number.isFinite(M)){l.error=$(e.locale.value,"dimNumberError");return}if(M<D||M>q){l.error=$(e.locale.value,"dimRangeError").replace("{min}",String(D)).replace("{max}",String(q));return}const oe=M;if(v.saveUndo(),h)for(let ie=d.startRow;ie<=d.endRow;ie++)e.rowHeights.value[ie]=oe;else for(let ie=d.startCol;ie<=d.endCol;ie++)e.colWidths.value[ie]=oe;g(),n.emitModelData(),We()}function We(){ae(),H.value=null}const S=t.computed(()=>{var Vt;const l=!e.editingCell.value,d=e.editingCell.value??e.activeCell.value,x=d.col,M=d.row,h=(Vt=e.cells[e.cellKey(x,M)])==null?void 0:Vt.style,D=e.cellFontSize(x,M),q=typeof(h==null?void 0:h.fontFamily)=="string"&&h.fontFamily?h.fontFamily:$t,oe=(h==null?void 0:h.fontWeight)==="bold"?"bold":"normal",ie=(h==null?void 0:h.fontStyle)==="italic"?"italic":"normal",Be=(h==null?void 0:h.underline)==="underline"?"underline":(h==null?void 0:h.strikethrough)==="line-through"?"line-through":"none",Ye=(h==null?void 0:h.underline)==="underline"&&(h==null?void 0:h.strikethrough)==="line-through"?"underline line-through":Be,_e=typeof(h==null?void 0:h.color)=="string"?h.color:void 0,kt=typeof(h==null?void 0:h.backgroundColor)=="string"?h.backgroundColor:void 0,gt=typeof(h==null?void 0:h.textAlign)=="string"?h.textAlign:"left",ot=typeof(h==null?void 0:h.verticalAlign)=="string"?h.verticalAlign:"top",ht=e.findMerge(x,M),Et=ht?e.colPositions.value[ht.range.endCol+1]-e.colPositions.value[x]:e.colWidths.value[x],Ze=ht?e.rowPositions.value[ht.range.endRow+1]-e.rowPositions.value[M]:e.getRowHeight(M),Xt=2,{ascent:Bt,descent:Pe}=e.measureFontMetrics(q,D,oe,ie),Lt=Bt+Pe,vt=(e.editValue.value?e.editValue.value.split(`
8
8
  `).length:1)*Lt,Ot=e.BASE_CELL_VPAD-Xt;let it=0,ut=0;return ot==="middle"?(it=Math.floor((Ze-vt)/2),ut=Math.max(0,Ze-vt-it)):ot==="top"?(it=Ot,ut=Math.max(0,Ze-vt-it)):ot==="bottom"&&(ut=Ot,it=Math.max(0,Ze-vt-ut)),{left:`${52+e.colPositions.value[x]-e.scrollX.value}px`,top:`${24+e.rowPositions.value[M]-e.scrollY.value}px`,width:`${Et}px`,height:`${Ze}px`,fontFamily:q,fontSize:`${D}px`,lineHeight:1,fontWeight:oe,fontStyle:ie,textDecoration:Ye,textAlign:gt,paddingTop:`${it}px`,paddingRight:"3px",paddingBottom:`${ut}px`,paddingLeft:"3px",opacity:l?0:1,pointerEvents:l?"none":"auto",color:l?"transparent":_e,caretColor:l?"transparent":void 0,borderColor:l?"transparent":void 0,background:l?"transparent":kt,boxShadow:l?"none":void 0}});function F(){return Math.max(0,n.viewSize.w-52-11)}function _(){return Math.max(0,n.viewSize.h-24-11)}const le=t.computed(()=>F()),fe=t.computed(()=>_()),z=t.computed(()=>Math.max(0,le.value-11*2)),se=t.computed(()=>Math.max(0,fe.value-11*2)),ke=t.computed(()=>n.maxScrollX.value<=0?z.value:Math.max(24,F()/e.totalWidth.value*z.value)),De=t.computed(()=>n.maxScrollX.value<=0?0:e.scrollX.value/n.maxScrollX.value*(z.value-ke.value)),Qe=t.computed(()=>n.maxScrollY.value<=0?se.value:Math.max(24,_()/e.totalHeight.value*se.value)),lt=t.computed(()=>n.maxScrollY.value<=0?0:e.scrollY.value/n.maxScrollY.value*(se.value-Qe.value));let $e=null,Xe=0,st=0;function At(l){l.preventDefault(),$e="v",Xe=l.clientY,st=e.scrollY.value,document.addEventListener("mousemove",E),document.addEventListener("mouseup",B)}function Ke(l){l.preventDefault(),$e="h",Xe=l.clientX,st=e.scrollX.value,document.addEventListener("mousemove",E),document.addEventListener("mouseup",B)}function E(l){if($e==="v"){const x=(l.clientY-Xe)/(se.value-Qe.value);n.clampScroll(null,st+x*n.maxScrollY.value),g()}else if($e==="h"){const x=(l.clientX-Xe)/(z.value-ke.value);n.clampScroll(st+x*n.maxScrollX.value,null),g()}}function B(){$e=null,document.removeEventListener("mousemove",E),document.removeEventListener("mouseup",B)}function R(l){if($e)return;const d=l.currentTarget.getBoundingClientRect(),x=l.clientY-d.top;x<lt.value?n.clampScroll(null,e.scrollY.value-_()):x>lt.value+Qe.value&&n.clampScroll(null,e.scrollY.value+_()),g()}function K(l){if($e)return;const d=l.currentTarget.getBoundingClientRect(),x=l.clientX-d.left;x<De.value?n.clampScroll(e.scrollX.value-F(),null):x>De.value+ke.value&&n.clampScroll(e.scrollX.value+F(),null),g()}let X=!1,re=0,de=0,c=!1,b=!1,L=0,W=0,j=0,Q=0,Z=0,ue=0,Ee=0,Ve=0,Fe=!1,ze=!1,Ue=0,et=0,Ft=0,Kt=-1,Ut=-1;function Pt(l){if(l.button!==0)return;l.preventDefault(),ye.value=null;const d=pt(l,n.canvasRef.value);if(d.y<24&&d.x>=52){const h=d.x-52+e.scrollX.value,D=e.hitCol(h);if(D>=0&&Math.abs(d.x-(52+e.colPositions.value[D+1]-e.scrollX.value))<=4){v.saveUndo(),c=!0,L=D,j=e.colWidths.value[D],Q=h,g();return}}if(d.x<52&&d.y>=24){const h=d.y-24+e.scrollY.value,D=e.hitRow(h);if(D>=0&&Math.abs(d.y-(24+e.rowPositions.value[D+1]-e.scrollY.value))<=4){v.saveUndo(),b=!0,W=D,j=e.getRowHeight(D),Q=h,g();return}}if(d.x<52||d.y<24){if(e.commitEdit(),d.y<24&&d.x>=52){const h=e.hitCol(d.x-52+e.scrollX.value);h>=0&&(e.selectRange(h,0,h,e.rowCount-1),X=!0,re=h,de=0)}else if(d.x<52&&d.y>=24){const h=e.hitRow(d.y-24+e.scrollY.value);h>=0&&(e.selectRange(0,h,e.colCount-1,h),X=!0,re=0,de=h)}else d.x<52&&d.y<24&&e.selectAll();g();return}const x=e.hitCol(d.x-52+e.scrollX.value),M=e.hitRow(d.y-24+e.scrollY.value);if(!(x<0||M<0)){if(e.commitEdit(),l.shiftKey&&e.selection.value){const h=e.selection.value;e.selectRange(h.startCol,h.startRow,x,M)}else e.selectCell(x,M);X=!0,re=x,de=M,n.focusEditInput(),g()}}function Yt(l){if(c){const D=pt(l,n.canvasRef.value).x-52+e.scrollX.value-Q,q=j+D;q>=30&&q<=1e3?e.colWidths.value[L]=q:q<30?e.colWidths.value[L]=30:e.colWidths.value[L]=1e3,g();return}if(b){const D=pt(l,n.canvasRef.value).y-24+e.scrollY.value-Q,q=j+D;q>=24&&q<=500?e.rowHeights.value[W]=q:q<24?e.rowHeights.value[W]=24:e.rowHeights.value[W]=500,g();return}if(!X){const h=n.canvasRef.value;if(!h)return;if(v.paintFmt.value){h.style.cursor="copy";return}const D=pt(l,h);if(D.y<24&&D.x>=52){const q=e.hitCol(D.x-52+e.scrollX.value);if(q>=0&&Math.abs(D.x-(52+e.colPositions.value[q+1]-e.scrollX.value))<=4){h.style.cursor="col-resize";return}}if(D.x<52&&D.y>=24){const q=e.hitRow(D.y-24+e.scrollY.value);if(q>=0&&Math.abs(D.y-(24+e.rowPositions.value[q+1]-e.scrollY.value))<=4){h.style.cursor="row-resize";return}}h.style.cursor="cell";return}const d=pt(l,n.canvasRef.value);if(re<0||de<0)return;if(d.x<52||d.y<24){if(d.y<24&&d.x>=52){const h=e.hitCol(d.x-52+e.scrollX.value);h>=0&&e.selectRange(Math.min(re,h),0,Math.max(re,h),e.rowCount-1)}else if(d.x<52&&d.y>=24){const h=e.hitRow(d.y-24+e.scrollY.value);h>=0&&e.selectRange(0,Math.min(de,h),e.colCount-1,Math.max(de,h))}g();return}const x=e.hitCol(d.x-52+e.scrollX.value),M=e.hitRow(d.y-24+e.scrollY.value);x<0||M<0||(de===0&&re>=0&&e.selection.value&&e.selection.value.startRow===0&&e.selection.value.endRow===e.rowCount-1?e.selectRange(Math.min(re,x),0,Math.max(re,x),e.rowCount-1):re===0&&de>=0&&e.selection.value&&e.selection.value.startCol===0&&e.selection.value.endCol===e.colCount-1?e.selectRange(0,Math.min(de,M),e.colCount-1,Math.max(de,M)):e.selectRange(re,de,x,M),g())}function ol(l){const d=c||b;X=!1,c=!1,b=!1,d&&n.scheduleOptEmit(),v.paintFmt.value&&v.applyPaintFormat()}function dt(){const l=c||b;X=!1,c=!1,b=!1,l&&n.scheduleOptEmit()}function wt(l){l.preventDefault();const d=pt(l,n.canvasRef.value);if(d.x<52&&d.y<24){f(l);return}if(d.y<24&&d.x>=52){const x=e.hitCol(d.x-52+e.scrollX.value);x>=0&&o(l,x);return}if(d.x<52&&d.y>=24){const x=e.hitRow(d.y-24+e.scrollY.value);x>=0&&w(l,x);return}if(d.x>=52&&d.y>=24){const x=e.hitCol(d.x-52+e.scrollX.value),M=e.hitRow(d.y-24+e.scrollY.value);x>=0&&M>=0&&a(l,x,M)}}function Nt(l){const d=pt(l,n.canvasRef.value);if(d.x<52||d.y<24)return;const x=e.hitCol(d.x-52+e.scrollX.value),M=e.hitRow(d.y-24+e.scrollY.value);x<0||M<0||(e.selectCell(x,M),e.ensureVisible(x,M),e.startEdit(),g(),n.focusEditInput())}function ml(l){n.clampScroll(e.scrollX.value+l.deltaX,e.scrollY.value+l.deltaY),g()}function Nn(l){if(l.touches.length!==1){Fe=!1;return}const d=l.touches[0],x=n.canvasRef.value;if(!x)return;const M=x.getBoundingClientRect(),h=d.clientX-M.left,D=d.clientY-M.top;h>=52&&D>=24&&(l.preventDefault(),Fe=!0,ze=!1,Z=h,ue=D,Ee=e.scrollX.value,Ve=e.scrollY.value,Ue=e.hitCol(h-52+e.scrollX.value),et=e.hitRow(D-24+e.scrollY.value))}function In(l){if(!Fe||l.touches.length!==1)return;const d=l.touches[0],x=n.canvasRef.value;if(!x)return;const M=x.getBoundingClientRect(),h=d.clientX-M.left,D=d.clientY-M.top;(Math.abs(h-Z)>8||Math.abs(D-ue)>8)&&(ze=!0,l.preventDefault(),n.clampScroll(Ee+(Z-h),Ve+(ue-D)),g())}function Ln(){if(Fe&&(Fe=!1,!ze&&Ue>=0&&et>=0)){const l=Date.now();Ue===Kt&&et===Ut&&l-Ft<300?(e.selectCell(Ue,et),e.startEdit(),g(),n.focusEditInput(),Ft=0):(e.commitEdit(),e.selectCell(Ue,et),g(),Ft=l),Kt=Ue,Ut=et,n.focusEditInput()}}function nl(l){return l.isComposing||l.key==="Process"||l.keyCode===229}function pl(l){return l.key.length===1&&!l.ctrlKey&&!l.metaKey&&!l.altKey}function gl(l){if(e.editingCell.value)return;const d=l.ctrlKey||l.metaKey,x=l.shiftKey;switch(!0){case(d&&(l.key==="c"||l.key==="C")):l.preventDefault(),p.copyToClipboard();return;case(d&&(l.key==="x"||l.key==="X")):l.preventDefault(),p.cutSelected();return;case(d&&(l.key==="z"||l.key==="Z")):l.preventDefault(),v.undo();return;case(d&&(l.key==="y"||l.key==="Y")):l.preventDefault(),v.redo();return;case(d&&(l.key==="v"||l.key==="V")):l.preventDefault(),v.saveUndo(),p.pasteFromClipboard().then(()=>{g(),t.nextTick(()=>n.emitModelData())});return;case(d&&(l.key==="a"||l.key==="A")):l.preventDefault(),e.selectAll(),g();return;case(d&&l.key==="Home"):l.preventDefault(),e.selectCell(0,0),e.ensureVisible(0,0),g();return;case(d&&l.key==="End"):l.preventDefault(),e.selectCell(e.colCount-1,e.rowCount-1),e.ensureVisible(e.colCount-1,e.rowCount-1),g();return;case l.key==="Home":l.preventDefault(),e.selectCell(0,e.activeCell.value.row),e.ensureVisible(0,e.activeCell.value.row),g();return;case l.key==="End":l.preventDefault(),e.selectCell(e.colCount-1,e.activeCell.value.row),e.ensureVisible(e.colCount-1,e.activeCell.value.row),g();return;case l.key==="ArrowUp":l.preventDefault(),e.moveActive(0,-1),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g();return;case l.key==="ArrowDown":l.preventDefault(),e.moveActive(0,1),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g();return;case l.key==="ArrowLeft":l.preventDefault(),e.moveActive(-1,0),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g();return;case l.key==="ArrowRight":l.preventDefault(),e.moveActive(1,0),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g();return;case l.key==="Tab":l.preventDefault(),e.moveActive(x?-1:1,0),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g();return;case l.key==="Enter":l.preventDefault(),e.moveActive(0,x?-1:1),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g();return;case l.key==="F2":l.preventDefault(),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),e.startEdit(),g(),n.focusEditInput();return;case l.key==="Delete":case l.key==="Backspace":l.preventDefault(),v.saveUndo(),p.clearSelected(),g();return;case l.key==="Escape":l.preventDefault(),e.cancelEdit(),v.paintFmt.value=null,g();return;case pl(l):if(nl(l)){e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),e.startEdit(""),g(),n.focusEditInput();return}l.preventDefault(),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),e.startEdit(l.key),g(),t.nextTick(()=>{const M=n.editInputRef.value;M&&(M.focus(),M.setSelectionRange(1,1))});return}}let rl=!1,al=!1;function On(l){const d=l.target.value;if(!e.editingCell.value){e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),e.startEdit(d),g();return}e.editValue.value=d}function Vn(){rl=!0,e.editingCell.value||(e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),e.startEdit(""),g())}function Wn(l){rl=!1,al=!0,setTimeout(()=>{al=!1},0),e.editValue.value=l.target.value}function zn(l){if(!e.editingCell.value){if(pl(l)||nl(l))return;gl(l);return}if(!(rl||nl(l))&&!(al&&(l.key==="Enter"||l.key==="Escape")))if(l.key==="Enter"&&(l.altKey||l.metaKey)){l.preventDefault();const d=n.editInputRef.value;if(!d)return;const x=d.selectionStart??d.value.length,M=d.selectionEnd??d.value.length,h=d.value,D=h.slice(0,x)+`
9
- `+h.slice(M);e.editValue.value=D,d.value=D,d.selectionStart=d.selectionEnd=x+1,g()}else l.key==="Enter"?(l.preventDefault(),e.commitEdit(),e.moveActive(0,1),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g(),n.focusEditInput()):l.key==="Tab"?(l.preventDefault(),e.commitEdit(),e.moveActive(l.shiftKey?-1:1,0),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g(),n.focusEditInput()):l.key==="Escape"&&(l.preventDefault(),e.cancelEdit(),g(),n.focusEditInput())}function $n(l){e.editingCell.value}function _n(){setTimeout(()=>{e.editingCell.value&&(e.commitEdit(),g())},0)}let je=null;function It(){var d;const l=(d=n.wrapperRef.value)==null?void 0:d.getBoundingClientRect();if(l){const x=mt(e.props.width),M=mt(e.props.height);x!=null?n.viewSize.w=x:n.viewSize.w=l.width,M!=null?n.viewSize.h=M:n.viewSize.h=l.height}n.clampScroll(null,null),g()}function Gn(){t.onMounted(()=>{const l=mt(e.props.width),d=mt(e.props.height);(l==null||d==null)&&(je=new ResizeObserver(()=>It()),n.wrapperRef.value&&je.observe(n.wrapperRef.value)),t.nextTick(()=>{It(),n.focusEditInput()}),e.selectCell(0,0),n.modelData.value&&n.modelData.value.length>0&&(u.value=JSON.stringify(n.modelData.value),n.sheets.value=n.modelData.value.map(x=>{const M=n.mkSheet(x.name);for(const[h,D]of Object.entries(x.cells))M.cells[h]={value:D.value,style:D.style??null};if(x.colWidths)for(const[h,D]of Object.entries(x.colWidths)){const q=Number(h);q>=0&&q<e.colCount&&D>=30&&(M.colWidths[q]=D)}if(x.rowHeights)for(const[h,D]of Object.entries(x.rowHeights)){const q=Number(h);q>=0&&q<e.rowCount&&D>=24&&(M.rowHeights[q]=D)}if(x.merges)for(const[h,D]of Object.entries(x.merges))M.merges[h]={...D};return M}),n.sheets.value.length>0&&n.loadSheet(0))}),t.watch(()=>[e.props.width,e.props.height],()=>{const l=mt(e.props.width),d=mt(e.props.height);l!=null&&d!=null?(je==null||je.disconnect(),je=null):!je&&n.wrapperRef.value&&(je=new ResizeObserver(()=>It()),je.observe(n.wrapperRef.value)),t.nextTick(()=>It())}),t.watch(()=>e.props.theme,()=>g()),t.watch(()=>({...e.cells}),()=>t.nextTick(()=>n.emitModelData()),{deep:!1}),t.watch(()=>({...e.merges}),()=>{t.nextTick(()=>n.emitModelData()),g()},{deep:!1}),t.watch(n.activeSheetIndex,()=>t.nextTick(()=>n.emitModelData())),t.watch(()=>n.modelData.value,l=>{if(!l||l.length===0)return;const d=JSON.stringify(l);if(d===u.value)return;u.value=d;const x=e.selection.value?{...e.selection.value}:null,M={...e.activeCell.value};n.sheets.value=l.map(h=>{const D=n.mkSheet(h.name);for(const[q,oe]of Object.entries(h.cells))D.cells[q]={value:oe.value,style:oe.style??null};if(h.colWidths)for(const[q,oe]of Object.entries(h.colWidths)){const ie=Number(q);ie>=0&&ie<e.colCount&&oe>=30&&(D.colWidths[ie]=oe)}if(h.rowHeights)for(const[q,oe]of Object.entries(h.rowHeights)){const ie=Number(q);ie>=0&&ie<e.rowCount&&oe>=24&&(D.rowHeights[ie]=oe)}if(h.merges)for(const[q,oe]of Object.entries(h.merges))D.merges[q]={...oe};return D}),n.sheets.value.length>0&&n.loadSheet(0),x&&(e.selection.value=x),e.activeCell.value=M,g()},{deep:!0}),t.onBeforeUnmount(()=>{je==null||je.disconnect()})}return{scheduleRender:g,render:Y,activeCellLabel:y,formulaBarDisplay:ne,onFormulaBarFocus:A,onFormulaBarInput:m,onFormulaBarKeydown:ge,onFormulaBarBlur:me,renTab:we,renTabVal:G,onTabClick:U,onTabDblClick:pe,commitTabRename:T,cclTabRename:P,onTabRenameKd:be,ctxMenu:ye,ctxSubmenuLeft:He,onCtxItemEnter:Se,onTabCtxMenu:ce,onTabBarCtx:r,onCornerCtx:f,onRowHdrCtx:w,onColHdrCtx:o,onCellCtx:a,dimInputRef:O,dimPanel:H,openDimPanel:ve,onDimInput:xe,onDimKeydown:Ae,onDimBlur:Le,applyDimPanel:he,closeDimPanel:We,editInputStyle:S,hScrollbarW:le,vScrollbarH:fe,hTrackW:z,vTrackH:se,hThumbW:ke,hThumbL:De,vThumbH:Qe,vThumbT:lt,onVStart:At,onHStart:Ke,onSbMove:E,onSbUp:B,onVTrk:R,onHTrk:K,onMouseDown:Pt,onMouseMove:Yt,onMouseUp:ol,onMouseLeave:dt,onCanvasCtx:wt,onDblClick:Nt,onWheel:ml,onTouchStart:Nn,onTouchMove:In,onTouchEnd:Ln,onKeydown:gl,onEditInput:On,onEditCompositionStart:Vn,onEditCompositionEnd:Wn,onEditKd:zn,onEditPaste:$n,onEditBlur:_n,applySize:It,setupLifecycle:Gn}}const yn={class:"formula-bar"},wn={class:"formula-bar__cell-label"},kn=["value"],En=["value"],Bn={key:2,class:"sb-corner"},Rn=["onClick","onMouseenter"],xn={class:"context-menu__label"},Sn={key:0,class:"context-menu__arrow"},Mn=["onClick"],Tn={class:"dim-panel__title"},Dn={class:"dim-panel__body"},Hn=["value"],An={key:0,class:"dim-panel__error"},Fn={class:"dim-panel__footer"},fl=ft(t.defineComponent({__name:"spreader",props:t.mergeModels({rowCount:{default:200},colCount:{default:26},width:{},height:{},theme:{default:"light"},locale:{default:"zh-CN"}},{data:{default:()=>[]},dataModifiers:{}}),emits:["update:data"],setup(e){const v=e,p=t.useModel(e,"data"),n={value:""},u=mn(v,{rowCount:v.rowCount,colCount:v.colCount,theme:v.theme,locale:v.locale}),k={sheets:t.ref([]),activeSheetIndex:t.ref(0),saveSheet:()=>{},loadSheet:te=>{},mkSheet:te=>({id:"",name:te,cells:{},merges:{},selection:null,activeCell:{col:0,row:0},scrollX:0,scrollY:0,colWidths:[],rowHeights:[]})},i=pn(u,k),I=hn(u,i);gn(i,{borderMenuOpen:I.borderMenuOpen,mergeMenuOpen:I.mergeMenuOpen});const g=Cn(u,i,p);k.sheets=g.sheets,k.activeSheetIndex=g.activeSheetIndex,k.saveSheet=g.saveSheet,k.loadSheet=g.loadSheet,k.mkSheet=g.mkSheet;const ee=bn(u,i,I,g,n);ee.setupLifecycle();const Y=t.reactive(u),y=t.reactive(i),ne=t.reactive(I),A=t.reactive(g),m=t.reactive(ee);function ge(te){i.fontSizeMenuOpen.value=te}function me(te){i.textColorMenuOpen.value=te}function we(te){i.fillColorMenuOpen.value=te}function G(te){ee.renTabVal.value=te}function U(){ee.ctxMenu.value=null}const pe=te=>{g.formulaBarRef.value=te},T=te=>{g.wrapperRef.value=te},P=te=>{g.canvasRef.value=te},be=te=>{g.editInputRef.value=te},ye=te=>{ee.dimInputRef.value=te};return(te,s)=>(t.openBlock(),t.createElementBlock("div",{class:"spreadsheet-outer",style:t.normalizeStyle(A.outerStyle)},[t.createVNode(Qo,{locale:Y.locale,"can-undo":y.canUndo,"can-redo":y.canRedo,"paint-fmt-active":y.paintFmt!==null,"has-selection":y.hasSelection,"font-family-options":y.fontFamilyOptions,"font-size-options":y.fontSizeOptions,"sel-font-family":y.selFontFamily,"sel-font-size":y.selFontSize,"font-size-input":y.fontSizeInput,"font-size-menu-open":y.fontSizeMenuOpen,"sel-font-weight":y.selFontWeight,"sel-font-style":y.selFontStyle,"sel-underline":y.selUnderline,"sel-strikethrough":y.selStrikethrough,"sel-text-color":y.selTextColor,"text-color-menu-open":y.textColorMenuOpen,"sel-fill-color":y.selFillColor,"fill-color-menu-open":y.fillColorMenuOpen,"cached-text-color":y.cachedTextColor,"cached-fill-color":y.cachedFillColor,"border-menu-open":ne.borderMenuOpen,"cached-border":ne.cachedBorder,"h-align-options":y.hAlignOptions,"v-align-options":y.vAlignOptions,"sel-h-align":y.selHAlign,"sel-v-align":y.selVAlign,"sel-wrap":y.selWrap,"merge-menu-open":ne.mergeMenuOpen,"theme-vars":A.toolbarThemeVars,onUndo:s[0]||(s[0]=C=>y.undo()),onRedo:s[1]||(s[1]=C=>y.redo()),onPaintFormat:y.onPaintFormat,onClearFormat:s[2]||(s[2]=C=>y.clearFormat()),onFontFamilyChange:s[3]||(s[3]=C=>y.onFontFamilyChange(C)),onFontSizeInput:s[4]||(s[4]=C=>y.onFontSizeInput(C)),onFontSizeBlur:y.onFontSizeBlur,onFontSizeKeydown:s[5]||(s[5]=C=>y.onFontSizeKeydown(C)),onFontSizeChange:s[6]||(s[6]=C=>y.onFontSizeChange(C)),"onUpdate:fontSizeMenuOpen":s[7]||(s[7]=C=>ge(C)),onFontSizeToggle:s[8]||(s[8]=C=>y.toggleFontSizeMenu()),onFontSizeStepUp:y.onFontSizeStepUp,onFontSizeStepDown:y.onFontSizeStepDown,onBoldToggle:y.toggleFontWeight,onItalicToggle:y.toggleFontStyle,onUnderlineToggle:y.toggleUnderline,onStrikethroughToggle:y.toggleStrikethrough,onTextColorChange:s[9]||(s[9]=C=>y.onTextColorChange(C)),"onUpdate:textColorMenuOpen":s[10]||(s[10]=C=>me(C)),onFillColorChange:s[11]||(s[11]=C=>y.onFillColorChange(C)),"onUpdate:fillColorMenuOpen":s[12]||(s[12]=C=>we(C)),onApplyTextColor:y.applyCachedTextColor,onApplyFillColor:y.applyCachedFillColor,"onUpdate:borderMenuOpen":s[13]||(s[13]=C=>y.onBorderMenuToggle(C)),onBorderChange:s[14]||(s[14]=C=>ne.onBorderChange(C)),onApplyBorder:ne.applyCachedBorder,onHAlignChange:s[15]||(s[15]=C=>y.onHAlignChange(C)),onVAlignChange:s[16]||(s[16]=C=>y.onVAlignChange(C)),onWrapToggle:y.onWrapToggle,"onUpdate:mergeMenuOpen":s[17]||(s[17]=C=>ne.onMergeMenuToggle(C)),onMergeChange:s[18]||(s[18]=C=>ne.onMergeChange(C)),onApplyMerge:ne.onApplyMerge},null,8,["locale","can-undo","can-redo","paint-fmt-active","has-selection","font-family-options","font-size-options","sel-font-family","sel-font-size","font-size-input","font-size-menu-open","sel-font-weight","sel-font-style","sel-underline","sel-strikethrough","sel-text-color","text-color-menu-open","sel-fill-color","fill-color-menu-open","cached-text-color","cached-fill-color","border-menu-open","cached-border","h-align-options","v-align-options","sel-h-align","sel-v-align","sel-wrap","merge-menu-open","theme-vars","onPaintFormat","onFontSizeBlur","onFontSizeStepUp","onFontSizeStepDown","onBoldToggle","onItalicToggle","onUnderlineToggle","onStrikethroughToggle","onApplyTextColor","onApplyFillColor","onApplyBorder","onWrapToggle","onApplyMerge"]),t.createElementVNode("div",yn,[t.createElementVNode("div",wn,t.toDisplayString(m.activeCellLabel),1),t.createElementVNode("input",{ref:pe,class:"formula-bar__input",value:m.formulaBarDisplay,onFocus:s[19]||(s[19]=(...C)=>m.onFormulaBarFocus&&m.onFormulaBarFocus(...C)),onInput:s[20]||(s[20]=(...C)=>m.onFormulaBarInput&&m.onFormulaBarInput(...C)),onKeydown:s[21]||(s[21]=(...C)=>m.onFormulaBarKeydown&&m.onFormulaBarKeydown(...C)),onBlur:s[22]||(s[22]=(...C)=>m.onFormulaBarBlur&&m.onFormulaBarBlur(...C))},null,40,kn)]),t.createElementVNode("div",{ref:T,class:"spreadsheet-wrapper"},[t.createElementVNode("canvas",{ref:P,class:"grid-canvas",tabindex:"0",onMousedown:s[23]||(s[23]=(...C)=>m.onMouseDown&&m.onMouseDown(...C)),onMousemove:s[24]||(s[24]=(...C)=>m.onMouseMove&&m.onMouseMove(...C)),onMouseup:s[25]||(s[25]=(...C)=>m.onMouseUp&&m.onMouseUp(...C)),onMouseleave:s[26]||(s[26]=(...C)=>m.onMouseLeave&&m.onMouseLeave(...C)),onDblclick:s[27]||(s[27]=(...C)=>m.onDblClick&&m.onDblClick(...C)),onWheel:s[28]||(s[28]=t.withModifiers((...C)=>m.onWheel&&m.onWheel(...C),["prevent"])),onFocus:s[29]||(s[29]=(...C)=>A.onCanvasFocus&&A.onCanvasFocus(...C)),onKeydown:s[30]||(s[30]=(...C)=>m.onKeydown&&m.onKeydown(...C)),onContextmenu:s[31]||(s[31]=(...C)=>m.onCanvasCtx&&m.onCanvasCtx(...C)),onTouchstart:s[32]||(s[32]=t.withModifiers((...C)=>m.onTouchStart&&m.onTouchStart(...C),["prevent"])),onTouchmove:s[33]||(s[33]=t.withModifiers((...C)=>m.onTouchMove&&m.onTouchMove(...C),["prevent"])),onTouchend:s[34]||(s[34]=(...C)=>m.onTouchEnd&&m.onTouchEnd(...C))},null,32),t.createElementVNode("textarea",{ref:be,class:"cell-editor",value:Y.editValue,style:t.normalizeStyle(m.editInputStyle),onInput:s[35]||(s[35]=(...C)=>m.onEditInput&&m.onEditInput(...C)),onKeydown:s[36]||(s[36]=(...C)=>m.onEditKd&&m.onEditKd(...C)),onCompositionstart:s[37]||(s[37]=(...C)=>m.onEditCompositionStart&&m.onEditCompositionStart(...C)),onCompositionend:s[38]||(s[38]=(...C)=>m.onEditCompositionEnd&&m.onEditCompositionEnd(...C)),onBlur:s[39]||(s[39]=(...C)=>m.onEditBlur&&m.onEditBlur(...C)),onPaste:s[40]||(s[40]=(...C)=>m.onEditPaste&&m.onEditPaste(...C))},null,44,En),A.maxScrollY>0?(t.openBlock(),t.createElementBlock("div",{key:0,class:"v-scrollbar",style:t.normalizeStyle({top:t.unref(24)+"px",height:`calc(100% - ${t.unref(24)+t.unref(11)}px)`})},[t.createElementVNode("button",{class:"sb-btn sb-btn--up",title:"",onMousedown:s[41]||(s[41]=t.withModifiers(C=>{A.clampScroll(null,Y.scrollY-50),m.scheduleRender()},["prevent"]))},[...s[64]||(s[64]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--up"},null,-1)])],32),t.createElementVNode("div",{class:"sb-track sb-track--v",onMousedown:s[43]||(s[43]=(...C)=>m.onVTrk&&m.onVTrk(...C))},[t.createElementVNode("div",{class:"sb-thumb sb-thumb--v",style:t.normalizeStyle({top:m.vThumbT+"px",height:m.vThumbH+"px"}),onMousedown:s[42]||(s[42]=(...C)=>m.onVStart&&m.onVStart(...C))},null,36)],32),t.createElementVNode("button",{class:"sb-btn sb-btn--down",onMousedown:s[44]||(s[44]=t.withModifiers(C=>{A.clampScroll(null,Y.scrollY+50),m.scheduleRender()},["prevent"]))},[...s[65]||(s[65]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--down"},null,-1)])],32)],4)):t.createCommentVNode("",!0),A.maxScrollX>0?(t.openBlock(),t.createElementBlock("div",{key:1,class:"h-scrollbar",style:t.normalizeStyle({left:t.unref(52)+"px",width:`calc(100% - ${t.unref(52)+t.unref(11)}px)`})},[t.createElementVNode("button",{class:"sb-btn sb-btn--left",onMousedown:s[45]||(s[45]=t.withModifiers(C=>{A.clampScroll(Y.scrollX-50,null),m.scheduleRender()},["prevent"]))},[...s[66]||(s[66]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--left"},null,-1)])],32),t.createElementVNode("div",{class:"sb-track sb-track--h",onMousedown:s[47]||(s[47]=(...C)=>m.onHTrk&&m.onHTrk(...C))},[t.createElementVNode("div",{class:"sb-thumb sb-thumb--h",style:t.normalizeStyle({left:m.hThumbL+"px",width:m.hThumbW+"px"}),onMousedown:s[46]||(s[46]=(...C)=>m.onHStart&&m.onHStart(...C))},null,36)],32),t.createElementVNode("button",{class:"sb-btn sb-btn--right",onMousedown:s[48]||(s[48]=t.withModifiers(C=>{A.clampScroll(Y.scrollX+50,null),m.scheduleRender()},["prevent"]))},[...s[67]||(s[67]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--right"},null,-1)])],32)],4)):t.createCommentVNode("",!0),A.maxScrollX>0&&A.maxScrollY>0?(t.openBlock(),t.createElementBlock("div",Bn)):t.createCommentVNode("",!0)]),t.createVNode(rn,{locale:Y.locale,sheets:A.sheets,"active-sheet-index":A.activeSheetIndex,"ren-tab":m.renTab,"ren-tab-val":m.renTabVal,onTabClick:s[49]||(s[49]=C=>m.onTabClick(C)),onTabDblclick:s[50]||(s[50]=C=>m.onTabDblClick(C)),onTabContextmenu:s[51]||(s[51]=C=>m.onTabCtxMenu(C.ev,C.i)),onTabRenameInput:s[52]||(s[52]=C=>G(C)),onTabRenameKeydown:s[53]||(s[53]=C=>m.onTabRenameKd(C)),onTabRenameCommit:m.commitTabRename,onTabbarContextmenu:s[54]||(s[54]=C=>m.onTabBarCtx(C)),onAddSheet:s[55]||(s[55]=C=>{A.addSheet(),m.scheduleRender()})},null,8,["locale","sheets","active-sheet-index","ren-tab","ren-tab-val","onTabRenameCommit"]),(t.openBlock(),t.createBlock(t.Teleport,{to:"body"},[t.createVNode(t.Transition,{name:"menu-pop"},{default:t.withCtx(()=>[m.ctxMenu?(t.openBlock(),t.createElementBlock("div",{key:0,class:"context-menu",style:t.normalizeStyle({left:m.ctxMenu.x+"px",top:m.ctxMenu.y+"px"}),onClick:s[56]||(s[56]=t.withModifiers(()=>{},["stop"]))},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(m.ctxMenu.items,(C,He)=>(t.openBlock(),t.createElementBlock("div",{key:He,class:t.normalizeClass(["context-menu__item",{"context-menu__item--disabled":C.disabled}]),onClick:Se=>!C.disabled&&C.action&&(C.action(),U()),onMouseenter:Se=>m.onCtxItemEnter(Se,C)},[t.createElementVNode("span",xn,t.toDisplayString(C.label),1),C.children?(t.openBlock(),t.createElementBlock("span",Sn)):t.createCommentVNode("",!0),C.children?(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(["context-submenu",{"context-submenu--left":m.ctxSubmenuLeft}])},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(C.children,(Se,ce)=>(t.openBlock(),t.createElementBlock("div",{key:ce,class:t.normalizeClass(["context-menu__item",{"context-menu__item--disabled":Se.disabled}]),onClick:t.withModifiers(r=>!Se.disabled&&Se.action&&(Se.action(),U()),["stop"])},t.toDisplayString(Se.label),11,Mn))),128))],2)):t.createCommentVNode("",!0)],42,Rn))),128))],4)):t.createCommentVNode("",!0)]),_:1})])),(t.openBlock(),t.createBlock(t.Teleport,{to:"body"},[t.createVNode(t.Transition,{name:"menu-pop"},{default:t.withCtx(()=>[m.dimPanel?(t.openBlock(),t.createElementBlock("div",{key:0,class:"dim-panel",style:t.normalizeStyle({left:m.dimPanel.x+"px",top:m.dimPanel.y+"px"}),onMousedown:s[62]||(s[62]=t.withModifiers(()=>{},["stop"])),onClick:s[63]||(s[63]=t.withModifiers(()=>{},["stop"]))},[t.createElementVNode("div",Tn,t.toDisplayString(m.dimPanel.type==="row"?"行高":"列宽"),1),t.createElementVNode("div",Dn,[t.createElementVNode("input",{ref:ye,class:t.normalizeClass(["dim-panel__input",{"dim-panel__input--error":m.dimPanel.error}]),type:"number",step:"1",min:"1",inputmode:"numeric",value:m.dimPanel.value,onInput:s[57]||(s[57]=(...C)=>m.onDimInput&&m.onDimInput(...C)),onKeydown:s[58]||(s[58]=(...C)=>m.onDimKeydown&&m.onDimKeydown(...C)),onBlur:s[59]||(s[59]=(...C)=>m.onDimBlur&&m.onDimBlur(...C))},null,42,Hn),s[68]||(s[68]=t.createElementVNode("span",{class:"dim-panel__unit"},"px",-1))]),m.dimPanel.error?(t.openBlock(),t.createElementBlock("div",An,t.toDisplayString(m.dimPanel.error),1)):t.createCommentVNode("",!0),t.createElementVNode("div",Fn,[t.createElementVNode("button",{class:"dim-panel__btn dim-panel__btn--primary",onClick:s[60]||(s[60]=(...C)=>m.applyDimPanel&&m.applyDimPanel(...C))}," 确定 "),t.createElementVNode("button",{class:"dim-panel__btn",onClick:s[61]||(s[61]=(...C)=>m.closeDimPanel&&m.closeDimPanel(...C))}," 取消 ")])],36)):t.createCommentVNode("",!0)]),_:1})]))],4))}}),[["__scopeId","data-v-0c81e050"]]);ct.Spreader=fl,ct.default=fl,Object.defineProperties(ct,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
9
+ `+h.slice(M);e.editValue.value=D,d.value=D,d.selectionStart=d.selectionEnd=x+1,g()}else l.key==="Enter"?(l.preventDefault(),e.commitEdit(),e.moveActive(0,1),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g(),n.focusEditInput()):l.key==="Tab"?(l.preventDefault(),e.commitEdit(),e.moveActive(l.shiftKey?-1:1,0),e.ensureVisible(e.activeCell.value.col,e.activeCell.value.row),g(),n.focusEditInput()):l.key==="Escape"&&(l.preventDefault(),e.cancelEdit(),g(),n.focusEditInput())}function $n(l){e.editingCell.value}function _n(){setTimeout(()=>{e.editingCell.value&&(e.commitEdit(),g())},0)}let je=null;function It(){var d;const l=(d=n.wrapperRef.value)==null?void 0:d.getBoundingClientRect();if(l){const x=mt(e.props.width),M=mt(e.props.height);x!=null?n.viewSize.w=x:n.viewSize.w=l.width,M!=null?n.viewSize.h=M:n.viewSize.h=l.height}n.clampScroll(null,null),g()}function Gn(){t.onMounted(()=>{const l=mt(e.props.width),d=mt(e.props.height);(l==null||d==null)&&(je=new ResizeObserver(()=>It()),n.wrapperRef.value&&je.observe(n.wrapperRef.value)),t.nextTick(()=>{It(),n.focusEditInput()}),e.selectCell(0,0),n.modelData.value&&n.modelData.value.length>0&&(u.value=JSON.stringify(n.modelData.value),n.sheets.value=n.modelData.value.map(x=>{const M=n.mkSheet(x.name);for(const[h,D]of Object.entries(x.cells))M.cells[h]={value:D.value,style:D.style??null};if(x.colWidths)for(const[h,D]of Object.entries(x.colWidths)){const q=Number(h);q>=0&&q<e.colCount&&D>=30&&(M.colWidths[q]=D)}if(x.rowHeights)for(const[h,D]of Object.entries(x.rowHeights)){const q=Number(h);q>=0&&q<e.rowCount&&D>=24&&(M.rowHeights[q]=D)}if(x.merges)for(const[h,D]of Object.entries(x.merges))M.merges[h]={...D};return M}),n.sheets.value.length>0&&n.loadSheet(0))}),t.watch(()=>[e.props.width,e.props.height],()=>{const l=mt(e.props.width),d=mt(e.props.height);l!=null&&d!=null?(je==null||je.disconnect(),je=null):!je&&n.wrapperRef.value&&(je=new ResizeObserver(()=>It()),je.observe(n.wrapperRef.value)),t.nextTick(()=>It())}),t.watch(()=>e.props.theme,()=>g()),t.watch(()=>({...e.cells}),()=>t.nextTick(()=>n.emitModelData()),{deep:!1}),t.watch(()=>({...e.merges}),()=>{t.nextTick(()=>n.emitModelData()),g()},{deep:!1}),t.watch(n.activeSheetIndex,()=>t.nextTick(()=>n.emitModelData())),t.watch(()=>n.modelData.value,l=>{if(!l||l.length===0)return;const d=JSON.stringify(l);if(d===u.value)return;u.value=d;const x=e.selection.value?{...e.selection.value}:null,M={...e.activeCell.value};n.sheets.value=l.map(h=>{const D=n.mkSheet(h.name);for(const[q,oe]of Object.entries(h.cells))D.cells[q]={value:oe.value,style:oe.style??null};if(h.colWidths)for(const[q,oe]of Object.entries(h.colWidths)){const ie=Number(q);ie>=0&&ie<e.colCount&&oe>=30&&(D.colWidths[ie]=oe)}if(h.rowHeights)for(const[q,oe]of Object.entries(h.rowHeights)){const ie=Number(q);ie>=0&&ie<e.rowCount&&oe>=24&&(D.rowHeights[ie]=oe)}if(h.merges)for(const[q,oe]of Object.entries(h.merges))D.merges[q]={...oe};return D}),n.sheets.value.length>0&&n.loadSheet(0),x&&(e.selection.value=x),e.activeCell.value=M,g()},{deep:!0}),t.onBeforeUnmount(()=>{je==null||je.disconnect()})}return{scheduleRender:g,render:Y,activeCellLabel:y,formulaBarDisplay:ne,onFormulaBarFocus:A,onFormulaBarInput:m,onFormulaBarKeydown:ge,onFormulaBarBlur:me,renTab:we,renTabVal:G,onTabClick:U,onTabDblClick:pe,commitTabRename:T,cclTabRename:P,onTabRenameKd:be,ctxMenu:ye,ctxSubmenuLeft:He,onCtxItemEnter:Se,onTabCtxMenu:ce,onTabBarCtx:r,onCornerCtx:f,onRowHdrCtx:w,onColHdrCtx:o,onCellCtx:a,dimInputRef:O,dimPanel:H,openDimPanel:ve,onDimInput:xe,onDimKeydown:Ae,onDimBlur:Le,applyDimPanel:he,closeDimPanel:We,editInputStyle:S,hScrollbarW:le,vScrollbarH:fe,hTrackW:z,vTrackH:se,hThumbW:ke,hThumbL:De,vThumbH:Qe,vThumbT:lt,onVStart:At,onHStart:Ke,onSbMove:E,onSbUp:B,onVTrk:R,onHTrk:K,onMouseDown:Pt,onMouseMove:Yt,onMouseUp:ol,onMouseLeave:dt,onCanvasCtx:wt,onDblClick:Nt,onWheel:ml,onTouchStart:Nn,onTouchMove:In,onTouchEnd:Ln,onKeydown:gl,onEditInput:On,onEditCompositionStart:Vn,onEditCompositionEnd:Wn,onEditKd:zn,onEditPaste:$n,onEditBlur:_n,applySize:It,setupLifecycle:Gn}}const yn={class:"formula-bar"},wn={class:"formula-bar__cell-label"},kn=["value"],En=["value"],Bn={key:2,class:"sb-corner"},Rn=["onClick","onMouseenter"],xn={class:"context-menu__label"},Sn={key:0,class:"context-menu__arrow"},Mn=["onClick"],Tn={class:"dim-panel__title"},Dn={class:"dim-panel__body"},Hn=["value"],An={key:0,class:"dim-panel__error"},Fn={class:"dim-panel__footer"},fl=ft(t.defineComponent({__name:"spreader",props:t.mergeModels({rowCount:{default:200},colCount:{default:26},width:{},height:{},theme:{default:"light"},locale:{default:"zh-CN"}},{data:{default:()=>[]},dataModifiers:{}}),emits:["update:data"],setup(e){const v=e,p=t.useModel(e,"data"),n={value:""},u=mn(v,{rowCount:v.rowCount,colCount:v.colCount,theme:v.theme,locale:v.locale}),k={sheets:t.ref([]),activeSheetIndex:t.ref(0),saveSheet:()=>{},loadSheet:te=>{},mkSheet:te=>({id:"",name:te,cells:{},merges:{},selection:null,activeCell:{col:0,row:0},scrollX:0,scrollY:0,colWidths:[],rowHeights:[]})},i=pn(u,k),I=hn(u,i);gn(i,{borderMenuOpen:I.borderMenuOpen,mergeMenuOpen:I.mergeMenuOpen});const g=Cn(u,i,p);k.sheets=g.sheets,k.activeSheetIndex=g.activeSheetIndex,k.saveSheet=g.saveSheet,k.loadSheet=g.loadSheet,k.mkSheet=g.mkSheet;const ee=bn(u,i,I,g,n);ee.setupLifecycle();const Y=t.reactive(u),y=t.reactive(i),ne=t.reactive(I),A=t.reactive(g),m=t.reactive(ee);function ge(te){i.fontSizeMenuOpen.value=te}function me(te){i.textColorMenuOpen.value=te}function we(te){i.fillColorMenuOpen.value=te}function G(te){ee.renTabVal.value=te}function U(){ee.ctxMenu.value=null}const pe=te=>{g.formulaBarRef.value=te},T=te=>{g.wrapperRef.value=te},P=te=>{g.canvasRef.value=te},be=te=>{g.editInputRef.value=te},ye=te=>{ee.dimInputRef.value=te};return(te,s)=>(t.openBlock(),t.createElementBlock("div",{class:"spreadsheet-outer",style:t.normalizeStyle(A.outerStyle)},[t.createVNode(Qo,{locale:Y.locale,"can-undo":y.canUndo,"can-redo":y.canRedo,"paint-fmt-active":y.paintFmt!==null,"has-selection":y.hasSelection,"font-family-options":y.fontFamilyOptions,"font-size-options":y.fontSizeOptions,"sel-font-family":y.selFontFamily,"sel-font-size":y.selFontSize,"font-size-input":y.fontSizeInput,"font-size-menu-open":y.fontSizeMenuOpen,"sel-font-weight":y.selFontWeight,"sel-font-style":y.selFontStyle,"sel-underline":y.selUnderline,"sel-strikethrough":y.selStrikethrough,"sel-text-color":y.selTextColor,"text-color-menu-open":y.textColorMenuOpen,"sel-fill-color":y.selFillColor,"fill-color-menu-open":y.fillColorMenuOpen,"cached-text-color":y.cachedTextColor,"cached-fill-color":y.cachedFillColor,"border-menu-open":ne.borderMenuOpen,"cached-border":ne.cachedBorder,"h-align-options":y.hAlignOptions,"v-align-options":y.vAlignOptions,"sel-h-align":y.selHAlign,"sel-v-align":y.selVAlign,"sel-wrap":y.selWrap,"merge-menu-open":ne.mergeMenuOpen,"theme-vars":A.toolbarThemeVars,onUndo:s[0]||(s[0]=C=>y.undo()),onRedo:s[1]||(s[1]=C=>y.redo()),onPaintFormat:y.onPaintFormat,onClearFormat:s[2]||(s[2]=C=>y.clearFormat()),onFontFamilyChange:s[3]||(s[3]=C=>y.onFontFamilyChange(C)),onFontSizeInput:s[4]||(s[4]=C=>y.onFontSizeInput(C)),onFontSizeBlur:y.onFontSizeBlur,onFontSizeKeydown:s[5]||(s[5]=C=>y.onFontSizeKeydown(C)),onFontSizeChange:s[6]||(s[6]=C=>y.onFontSizeChange(C)),"onUpdate:fontSizeMenuOpen":s[7]||(s[7]=C=>ge(C)),onFontSizeToggle:s[8]||(s[8]=C=>y.toggleFontSizeMenu()),onFontSizeStepUp:y.onFontSizeStepUp,onFontSizeStepDown:y.onFontSizeStepDown,onBoldToggle:y.toggleFontWeight,onItalicToggle:y.toggleFontStyle,onUnderlineToggle:y.toggleUnderline,onStrikethroughToggle:y.toggleStrikethrough,onTextColorChange:s[9]||(s[9]=C=>y.onTextColorChange(C)),"onUpdate:textColorMenuOpen":s[10]||(s[10]=C=>me(C)),onFillColorChange:s[11]||(s[11]=C=>y.onFillColorChange(C)),"onUpdate:fillColorMenuOpen":s[12]||(s[12]=C=>we(C)),onApplyTextColor:y.applyCachedTextColor,onApplyFillColor:y.applyCachedFillColor,"onUpdate:borderMenuOpen":s[13]||(s[13]=C=>y.onBorderMenuToggle(C)),onBorderChange:s[14]||(s[14]=C=>ne.onBorderChange(C)),onApplyBorder:ne.applyCachedBorder,onHAlignChange:s[15]||(s[15]=C=>y.onHAlignChange(C)),onVAlignChange:s[16]||(s[16]=C=>y.onVAlignChange(C)),onWrapToggle:y.onWrapToggle,"onUpdate:mergeMenuOpen":s[17]||(s[17]=C=>ne.onMergeMenuToggle(C)),onMergeChange:s[18]||(s[18]=C=>ne.onMergeChange(C)),onApplyMerge:ne.onApplyMerge},null,8,["locale","can-undo","can-redo","paint-fmt-active","has-selection","font-family-options","font-size-options","sel-font-family","sel-font-size","font-size-input","font-size-menu-open","sel-font-weight","sel-font-style","sel-underline","sel-strikethrough","sel-text-color","text-color-menu-open","sel-fill-color","fill-color-menu-open","cached-text-color","cached-fill-color","border-menu-open","cached-border","h-align-options","v-align-options","sel-h-align","sel-v-align","sel-wrap","merge-menu-open","theme-vars","onPaintFormat","onFontSizeBlur","onFontSizeStepUp","onFontSizeStepDown","onBoldToggle","onItalicToggle","onUnderlineToggle","onStrikethroughToggle","onApplyTextColor","onApplyFillColor","onApplyBorder","onWrapToggle","onApplyMerge"]),t.createElementVNode("div",yn,[t.createElementVNode("div",wn,t.toDisplayString(m.activeCellLabel),1),t.createElementVNode("input",{ref:pe,class:"formula-bar__input",value:m.formulaBarDisplay,onFocus:s[19]||(s[19]=(...C)=>m.onFormulaBarFocus&&m.onFormulaBarFocus(...C)),onInput:s[20]||(s[20]=(...C)=>m.onFormulaBarInput&&m.onFormulaBarInput(...C)),onKeydown:s[21]||(s[21]=(...C)=>m.onFormulaBarKeydown&&m.onFormulaBarKeydown(...C)),onBlur:s[22]||(s[22]=(...C)=>m.onFormulaBarBlur&&m.onFormulaBarBlur(...C))},null,40,kn)]),t.createElementVNode("div",{ref:T,class:"spreadsheet-wrapper"},[t.createElementVNode("canvas",{ref:P,class:"grid-canvas",tabindex:"0",onMousedown:s[23]||(s[23]=(...C)=>m.onMouseDown&&m.onMouseDown(...C)),onMousemove:s[24]||(s[24]=(...C)=>m.onMouseMove&&m.onMouseMove(...C)),onMouseup:s[25]||(s[25]=(...C)=>m.onMouseUp&&m.onMouseUp(...C)),onMouseleave:s[26]||(s[26]=(...C)=>m.onMouseLeave&&m.onMouseLeave(...C)),onDblclick:s[27]||(s[27]=(...C)=>m.onDblClick&&m.onDblClick(...C)),onWheel:s[28]||(s[28]=t.withModifiers((...C)=>m.onWheel&&m.onWheel(...C),["prevent"])),onFocus:s[29]||(s[29]=(...C)=>A.onCanvasFocus&&A.onCanvasFocus(...C)),onKeydown:s[30]||(s[30]=(...C)=>m.onKeydown&&m.onKeydown(...C)),onContextmenu:s[31]||(s[31]=(...C)=>m.onCanvasCtx&&m.onCanvasCtx(...C)),onTouchstart:s[32]||(s[32]=t.withModifiers((...C)=>m.onTouchStart&&m.onTouchStart(...C),["prevent"])),onTouchmove:s[33]||(s[33]=t.withModifiers((...C)=>m.onTouchMove&&m.onTouchMove(...C),["prevent"])),onTouchend:s[34]||(s[34]=(...C)=>m.onTouchEnd&&m.onTouchEnd(...C))},null,32),t.createElementVNode("textarea",{ref:be,class:"cell-editor",value:Y.editValue,style:t.normalizeStyle(m.editInputStyle),onInput:s[35]||(s[35]=(...C)=>m.onEditInput&&m.onEditInput(...C)),onKeydown:s[36]||(s[36]=(...C)=>m.onEditKd&&m.onEditKd(...C)),onCompositionstart:s[37]||(s[37]=(...C)=>m.onEditCompositionStart&&m.onEditCompositionStart(...C)),onCompositionend:s[38]||(s[38]=(...C)=>m.onEditCompositionEnd&&m.onEditCompositionEnd(...C)),onBlur:s[39]||(s[39]=(...C)=>m.onEditBlur&&m.onEditBlur(...C)),onPaste:s[40]||(s[40]=(...C)=>m.onEditPaste&&m.onEditPaste(...C))},null,44,En),A.maxScrollY>0?(t.openBlock(),t.createElementBlock("div",{key:0,class:"v-scrollbar",style:t.normalizeStyle({top:t.unref(24)+"px",height:`calc(100% - ${t.unref(24)+t.unref(11)}px)`})},[t.createElementVNode("button",{class:"sb-btn sb-btn--up",title:"",onMousedown:s[41]||(s[41]=t.withModifiers(C=>{A.clampScroll(null,Y.scrollY-50),m.scheduleRender()},["prevent"]))},[...s[64]||(s[64]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--up"},null,-1)])],32),t.createElementVNode("div",{class:"sb-track sb-track--v",onMousedown:s[43]||(s[43]=(...C)=>m.onVTrk&&m.onVTrk(...C))},[t.createElementVNode("div",{class:"sb-thumb sb-thumb--v",style:t.normalizeStyle({top:m.vThumbT+"px",height:m.vThumbH+"px"}),onMousedown:s[42]||(s[42]=(...C)=>m.onVStart&&m.onVStart(...C))},null,36)],32),t.createElementVNode("button",{class:"sb-btn sb-btn--down",onMousedown:s[44]||(s[44]=t.withModifiers(C=>{A.clampScroll(null,Y.scrollY+50),m.scheduleRender()},["prevent"]))},[...s[65]||(s[65]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--down"},null,-1)])],32)],4)):t.createCommentVNode("",!0),A.maxScrollX>0?(t.openBlock(),t.createElementBlock("div",{key:1,class:"h-scrollbar",style:t.normalizeStyle({left:t.unref(52)+"px",width:`calc(100% - ${t.unref(52)+t.unref(11)}px)`})},[t.createElementVNode("button",{class:"sb-btn sb-btn--left",onMousedown:s[45]||(s[45]=t.withModifiers(C=>{A.clampScroll(Y.scrollX-50,null),m.scheduleRender()},["prevent"]))},[...s[66]||(s[66]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--left"},null,-1)])],32),t.createElementVNode("div",{class:"sb-track sb-track--h",onMousedown:s[47]||(s[47]=(...C)=>m.onHTrk&&m.onHTrk(...C))},[t.createElementVNode("div",{class:"sb-thumb sb-thumb--h",style:t.normalizeStyle({left:m.hThumbL+"px",width:m.hThumbW+"px"}),onMousedown:s[46]||(s[46]=(...C)=>m.onHStart&&m.onHStart(...C))},null,36)],32),t.createElementVNode("button",{class:"sb-btn sb-btn--right",onMousedown:s[48]||(s[48]=t.withModifiers(C=>{A.clampScroll(Y.scrollX+50,null),m.scheduleRender()},["prevent"]))},[...s[67]||(s[67]=[t.createElementVNode("span",{class:"sb-arrow sb-arrow--right"},null,-1)])],32)],4)):t.createCommentVNode("",!0),A.maxScrollX>0&&A.maxScrollY>0?(t.openBlock(),t.createElementBlock("div",Bn)):t.createCommentVNode("",!0)]),t.createVNode(rn,{locale:Y.locale,sheets:A.sheets,"active-sheet-index":A.activeSheetIndex,"ren-tab":m.renTab,"ren-tab-val":m.renTabVal,onTabClick:s[49]||(s[49]=C=>m.onTabClick(C)),onTabDblclick:s[50]||(s[50]=C=>m.onTabDblClick(C)),onTabContextmenu:s[51]||(s[51]=C=>m.onTabCtxMenu(C.ev,C.i)),onTabRenameInput:s[52]||(s[52]=C=>G(C)),onTabRenameKeydown:s[53]||(s[53]=C=>m.onTabRenameKd(C)),onTabRenameCommit:m.commitTabRename,onTabbarContextmenu:s[54]||(s[54]=C=>m.onTabBarCtx(C)),onAddSheet:s[55]||(s[55]=C=>{A.addSheet(),m.scheduleRender()})},null,8,["locale","sheets","active-sheet-index","ren-tab","ren-tab-val","onTabRenameCommit"]),(t.openBlock(),t.createBlock(t.Teleport,{to:"body"},[t.createVNode(t.Transition,{name:"menu-pop"},{default:t.withCtx(()=>[m.ctxMenu?(t.openBlock(),t.createElementBlock("div",{key:0,class:"context-menu",style:t.normalizeStyle({left:m.ctxMenu.x+"px",top:m.ctxMenu.y+"px"}),onClick:s[56]||(s[56]=t.withModifiers(()=>{},["stop"]))},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(m.ctxMenu.items,(C,He)=>(t.openBlock(),t.createElementBlock("div",{key:He,class:t.normalizeClass(["context-menu__item",{"context-menu__item--disabled":C.disabled}]),onClick:Se=>!C.disabled&&C.action&&(C.action(),U()),onMouseenter:Se=>m.onCtxItemEnter(Se,C)},[t.createElementVNode("span",xn,t.toDisplayString(C.label),1),C.children?(t.openBlock(),t.createElementBlock("span",Sn)):t.createCommentVNode("",!0),C.children?(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(["context-submenu",{"context-submenu--left":m.ctxSubmenuLeft}])},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(C.children,(Se,ce)=>(t.openBlock(),t.createElementBlock("div",{key:ce,class:t.normalizeClass(["context-menu__item",{"context-menu__item--disabled":Se.disabled}]),onClick:t.withModifiers(r=>!Se.disabled&&Se.action&&(Se.action(),U()),["stop"])},t.toDisplayString(Se.label),11,Mn))),128))],2)):t.createCommentVNode("",!0)],42,Rn))),128))],4)):t.createCommentVNode("",!0)]),_:1})])),(t.openBlock(),t.createBlock(t.Teleport,{to:"body"},[t.createVNode(t.Transition,{name:"menu-pop"},{default:t.withCtx(()=>[m.dimPanel?(t.openBlock(),t.createElementBlock("div",{key:0,class:"dim-panel",style:t.normalizeStyle({left:m.dimPanel.x+"px",top:m.dimPanel.y+"px"}),onMousedown:s[62]||(s[62]=t.withModifiers(()=>{},["stop"])),onClick:s[63]||(s[63]=t.withModifiers(()=>{},["stop"]))},[t.createElementVNode("div",Tn,t.toDisplayString(m.dimPanel.type==="row"?"行高":"列宽"),1),t.createElementVNode("div",Dn,[t.createElementVNode("input",{ref:ye,class:t.normalizeClass(["dim-panel__input",{"dim-panel__input--error":m.dimPanel.error}]),type:"number",step:"1",min:"1",inputmode:"numeric",value:m.dimPanel.value,onInput:s[57]||(s[57]=(...C)=>m.onDimInput&&m.onDimInput(...C)),onKeydown:s[58]||(s[58]=(...C)=>m.onDimKeydown&&m.onDimKeydown(...C)),onBlur:s[59]||(s[59]=(...C)=>m.onDimBlur&&m.onDimBlur(...C))},null,42,Hn),s[68]||(s[68]=t.createElementVNode("span",{class:"dim-panel__unit"},"px",-1))]),m.dimPanel.error?(t.openBlock(),t.createElementBlock("div",An,t.toDisplayString(m.dimPanel.error),1)):t.createCommentVNode("",!0),t.createElementVNode("div",Fn,[t.createElementVNode("button",{class:"dim-panel__btn dim-panel__btn--primary",onClick:s[60]||(s[60]=(...C)=>m.applyDimPanel&&m.applyDimPanel(...C))}," 确定 "),t.createElementVNode("button",{class:"dim-panel__btn",onClick:s[61]||(s[61]=(...C)=>m.closeDimPanel&&m.closeDimPanel(...C))}," 取消 ")])],36)):t.createCommentVNode("",!0)]),_:1})]))],4))}}),[["__scopeId","data-v-ef18f895"]]);ct.Spreader=fl,ct.default=fl,Object.defineProperties(ct,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xiaodao-spreader",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "A Vue 3 component for spreading sheets",
5
5
  "type": "module",
6
6
  "license": "MIT",