xiaodao-spreader 0.1.10 → 0.1.11
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.md +1 -1
- package/dist/style.css +1 -1
- package/dist/types/components/spreader/components/dropdown.vue.d.ts +3 -0
- package/dist/types/components/spreader/components/pickers/numberFormatDialog.vue.d.ts +23 -0
- package/dist/types/components/spreader/components/toolbar.vue.d.ts +9 -4
- package/dist/types/components/spreader/composables/core-state.d.ts +11 -1
- package/dist/types/components/spreader/composables/interactions.d.ts +4 -0
- package/dist/types/components/spreader/composables/sheets-ops.d.ts +1 -1
- package/dist/types/components/spreader/composables/undo-styles.d.ts +8 -0
- package/dist/types/components/spreader/core/number-format.d.ts +100 -0
- package/dist/xiaodao-spreader.es.js +4221 -2935
- package/dist/xiaodao-spreader.umd.js +9 -9
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.sp-dropdown[data-v-67defaed]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-67defaed]{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-67defaed]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-67defaed]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-67defaed]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-67defaed]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-67defaed]{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-67defaed]{transform-origin:bottom center}.menu-pop-enter-active[data-v-67defaed],.menu-pop-leave-active[data-v-67defaed]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-67defaed],.menu-pop-leave-to[data-v-67defaed]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-67defaed]{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-67defaed]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-67defaed]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-67defaed]{width:10px;height:10px}.sp-dropdown__list[data-v-67defaed]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__icon[data-v-67defaed]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-67defaed] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-67defaed]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-67defaed] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-67defaed]{white-space:nowrap}.sp-dropdown__item[data-v-67defaed]{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-67defaed]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-67defaed]{background:#e5f1fb;color:#0078d7}.color-picker[data-v-f8fac424]{position:relative;display:inline-flex;height:26px}.color-picker__menu[data-v-f8fac424]{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-f8fac424],.menu-pop-leave-active[data-v-f8fac424]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-f8fac424],.menu-pop-leave-to[data-v-f8fac424]{opacity:0;transform:scale(.9)}.color-picker__row[data-v-f8fac424]{display:flex;gap:4px;margin-bottom:4px}.color-picker__row[data-v-f8fac424]:last-child{margin-bottom:0}.color-picker__swatch[data-v-f8fac424]{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-f8fac424]:hover{transform:scale(1.18);box-shadow:0 0 0 1px #0003;z-index:1}.color-picker__swatch--selected[data-v-f8fac424]{box-shadow:0 0 0 2px #0078d7}.border-picker[data-v-f362abdb]{position:relative;display:inline-flex;height:26px}.border-picker__menu[data-v-f362abdb]{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-f362abdb]{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-f362abdb]:hover{background:#eef3f9}.border-picker__icon[data-v-f362abdb]{width:18px;height:18px;flex-shrink:0}.border-picker__label[data-v-f362abdb]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-f362abdb],.menu-pop-leave-active[data-v-f362abdb]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-f362abdb],.menu-pop-leave-to[data-v-f362abdb]{opacity:0;transform:scale(.9)}.merge-picker[data-v-67c0f9e3]{position:relative;display:inline-flex;height:26px}.merge-picker__menu[data-v-67c0f9e3]{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-67c0f9e3]{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-67c0f9e3]:hover{background:#eef3f9}.merge-picker__icon[data-v-67c0f9e3]{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.merge-picker__icon[data-v-67c0f9e3] svg{width:18px;height:18px}.merge-picker__label[data-v-67c0f9e3]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-67c0f9e3],.menu-pop-leave-active[data-v-67c0f9e3]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-67c0f9e3],.menu-pop-leave-to[data-v-67c0f9e3]{opacity:0;transform:scale(.9)}.calc-picker[data-v-08615aee]{position:relative;display:inline-flex;height:26px}.calc-picker__menu[data-v-08615aee]{position:fixed;z-index:9999;min-width:120px;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.calc-picker__item[data-v-08615aee]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.calc-picker__item[data-v-08615aee]:hover:not(.calc-picker__item--disabled){background:#eef3f9}.calc-picker__item--disabled[data-v-08615aee]{color:var(--sp-toolbar-btn-disabled-color, #bbb);cursor:default}.calc-picker__label[data-v-08615aee]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-08615aee],.menu-pop-leave-active[data-v-08615aee]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-08615aee],.menu-pop-leave-to[data-v-08615aee]{opacity:0;transform:scale(.9)}.toolbar[data-v-dc556a27]{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-dc556a27]{display:flex;align-items:center;flex:0 0 auto}.toolbar-sep[data-v-dc556a27]{width:1px;height:18px;margin:0 4px;background:var(--sp-toolbar-border)}.toolbar-font[data-v-dc556a27],.toolbar-align[data-v-dc556a27]{flex:0 0 auto}.toolbar-font-size[data-v-dc556a27]{display:inline-flex;align-items:center;gap:0;height:26px;position:relative}.toolbar-font-size__input[data-v-dc556a27]{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-dc556a27]::-webkit-outer-spin-button,.toolbar-font-size__input[data-v-dc556a27]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.toolbar-font-size__input[data-v-dc556a27]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__input[data-v-dc556a27]:focus{border-color:var(--sp-toolbar-border);background:#fff}.toolbar-font-size__btn[data-v-dc556a27]{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-dc556a27]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__btn svg[data-v-dc556a27]{width:10px;height:10px}.toolbar-font-size__dropdown[data-v-dc556a27]{position:absolute;width:56px;height:26px;pointer-events:none}.toolbar-btn[data-v-dc556a27]{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-dc556a27]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-btn[data-v-dc556a27]:active:not(:disabled){opacity:.7}.toolbar-btn--active[data-v-dc556a27]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-btn--step[data-v-dc556a27]{width:26px;height:26px}.toolbar-btn--step svg[data-v-dc556a27]{width:16px;height:16px}.toolbar-btn[data-v-dc556a27]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.toolbar-btn__icon[data-v-dc556a27]{width:18px;height:18px}.toolbar-btn svg[data-v-dc556a27]:not(.toolbar-btn__icon){width:18px;height:18px}.toolbar-split[data-v-dc556a27]{display:inline-flex;align-items:center;position:relative;height:26px}.toolbar-split__main[data-v-dc556a27]{border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px}.toolbar-split__arrow[data-v-dc556a27]{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-dc556a27]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-split__arrow svg[data-v-dc556a27]{width:10px!important;height:10px!important}.toolbar-more[data-v-dc556a27]{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-dc556a27]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-more--active[data-v-dc556a27]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-more svg[data-v-dc556a27]{width:18px;height:18px}.overflow-menu[data-v-dc556a27]{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-dc556a27]{transition:none!important}.overflow-menu .tb-item[data-v-dc556a27]{width:100%}.overflow-menu .toolbar-sep[data-v-dc556a27]{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split[data-v-dc556a27]{width:100%}.overflow-menu .toolbar-split__main[data-v-dc556a27]{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size[data-v-dc556a27]{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font[data-v-dc556a27],.overflow-menu .toolbar-align[data-v-dc556a27]{width:100%}.overflow-menu .toolbar-btn[data-v-dc556a27]:not(.toolbar-btn--step):not(.toolbar-split__arrow){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-color[data-v-dc556a27]{width:100%}.overflow-menu .toolbar-wrap[data-v-dc556a27]{width:100%;justify-content:flex-start}.menu-pop-enter-active[data-v-dc556a27],.menu-pop-leave-active[data-v-dc556a27]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-dc556a27],.menu-pop-leave-to[data-v-dc556a27]{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-562e145a]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-562e145a]{display:flex;align-items:start;height:36px;min-height:36px;padding:0;gap:0}.formula-bar__cell-label[data-v-562e145a]{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-562e145a]{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-562e145a]: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-562e145a]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-562e145a]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas[data-v-562e145a]:focus{outline:none}.v-scrollbar[data-v-562e145a]{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-562e145a]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-562e145a]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-562e145a]{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-562e145a]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-562e145a]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-562e145a]{display:block;width:0;height:0}.sb-arrow--up[data-v-562e145a]{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-562e145a]{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-562e145a]{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-562e145a]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-562e145a]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-562e145a]{width:11px}.sb-track--h[data-v-562e145a]{height:11px}.sb-thumb[data-v-562e145a]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-562e145a]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-562e145a]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-562e145a]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-562e145a]{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-77df3baf]{position:relative;display:inline-flex;min-width:0}.sp-dropdown__trigger[data-v-77df3baf]{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-77df3baf]:hover{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6)}.sp-dropdown__trigger--open[data-v-77df3baf]{background:var(--sp-toolbar-btn-hover-bg, #e6e6e6);border-color:var(--sp-toolbar-border, #d8d8d8)}.sp-dropdown__value[data-v-77df3baf]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.sp-dropdown__caret[data-v-77df3baf]{width:10px;height:10px;min-width:10px;opacity:.7}.sp-dropdown__menu[data-v-77df3baf]{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-77df3baf]{transform-origin:bottom center}.menu-pop-enter-active[data-v-77df3baf],.menu-pop-leave-active[data-v-77df3baf]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-77df3baf],.menu-pop-leave-to[data-v-77df3baf]{opacity:0;transform:scaleY(.85)}.sp-dropdown__nav[data-v-77df3baf]{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-77df3baf]:hover:not(:disabled){background:#eef3f9}.sp-dropdown__nav[data-v-77df3baf]:disabled{color:#ccc;cursor:default}.sp-dropdown__nav svg[data-v-77df3baf]{width:10px;height:10px}.sp-dropdown__list[data-v-77df3baf]{display:flex;flex-direction:column;overflow:hidden;touch-action:none}.sp-dropdown__icon[data-v-77df3baf]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__icon[data-v-77df3baf] svg{width:18px;height:18px;display:block}.sp-dropdown__item-icon[data-v-77df3baf]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}.sp-dropdown__item-icon[data-v-77df3baf] svg{width:16px;height:16px;display:block}.sp-dropdown__item-label[data-v-77df3baf]{white-space:nowrap}.sp-dropdown__item[data-v-77df3baf]{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-77df3baf]:hover{background:#eef3f9}.sp-dropdown__item--active[data-v-77df3baf]{background:#e5f1fb;color:#0078d7}.color-picker[data-v-f8fac424]{position:relative;display:inline-flex;height:26px}.color-picker__menu[data-v-f8fac424]{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-f8fac424],.menu-pop-leave-active[data-v-f8fac424]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-f8fac424],.menu-pop-leave-to[data-v-f8fac424]{opacity:0;transform:scale(.9)}.color-picker__row[data-v-f8fac424]{display:flex;gap:4px;margin-bottom:4px}.color-picker__row[data-v-f8fac424]:last-child{margin-bottom:0}.color-picker__swatch[data-v-f8fac424]{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-f8fac424]:hover{transform:scale(1.18);box-shadow:0 0 0 1px #0003;z-index:1}.color-picker__swatch--selected[data-v-f8fac424]{box-shadow:0 0 0 2px #0078d7}.border-picker[data-v-f362abdb]{position:relative;display:inline-flex;height:26px}.border-picker__menu[data-v-f362abdb]{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-f362abdb]{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-f362abdb]:hover{background:#eef3f9}.border-picker__icon[data-v-f362abdb]{width:18px;height:18px;flex-shrink:0}.border-picker__label[data-v-f362abdb]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-f362abdb],.menu-pop-leave-active[data-v-f362abdb]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-f362abdb],.menu-pop-leave-to[data-v-f362abdb]{opacity:0;transform:scale(.9)}.merge-picker[data-v-67c0f9e3]{position:relative;display:inline-flex;height:26px}.merge-picker__menu[data-v-67c0f9e3]{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-67c0f9e3]{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-67c0f9e3]:hover{background:#eef3f9}.merge-picker__icon[data-v-67c0f9e3]{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.merge-picker__icon[data-v-67c0f9e3] svg{width:18px;height:18px}.merge-picker__label[data-v-67c0f9e3]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-67c0f9e3],.menu-pop-leave-active[data-v-67c0f9e3]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-67c0f9e3],.menu-pop-leave-to[data-v-67c0f9e3]{opacity:0;transform:scale(.9)}.calc-picker[data-v-08615aee]{position:relative;display:inline-flex;height:26px}.calc-picker__menu[data-v-08615aee]{position:fixed;z-index:9999;min-width:120px;background:#fff;border:1px solid var(--sp-toolbar-border, #d0d0d0);border-radius:4px;box-shadow:0 4px 12px #0000001f;-webkit-user-select:none;user-select:none;padding:4px;transform-origin:top right}.calc-picker__item[data-v-08615aee]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px;border:none;background:transparent;color:var(--sp-toolbar-btn-color, #444);cursor:pointer;border-radius:3px;font-size:12px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;white-space:nowrap}.calc-picker__item[data-v-08615aee]:hover:not(.calc-picker__item--disabled){background:#eef3f9}.calc-picker__item--disabled[data-v-08615aee]{color:var(--sp-toolbar-btn-disabled-color, #bbb);cursor:default}.calc-picker__label[data-v-08615aee]{overflow:hidden;text-overflow:ellipsis}.menu-pop-enter-active[data-v-08615aee],.menu-pop-leave-active[data-v-08615aee]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-08615aee],.menu-pop-leave-to[data-v-08615aee]{opacity:0;transform:scale(.9)}.toolbar[data-v-a33ba577]{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-a33ba577]{display:flex;align-items:center;flex:0 0 auto}.toolbar-sep[data-v-a33ba577]{width:1px;height:18px;margin:0 4px;background:var(--sp-toolbar-border)}.toolbar-font[data-v-a33ba577],.toolbar-number-format[data-v-a33ba577],.toolbar-align[data-v-a33ba577]{flex:0 0 auto}.toolbar-font-size[data-v-a33ba577]{display:inline-flex;align-items:center;gap:0;height:26px;position:relative}.toolbar-font-size__input[data-v-a33ba577]{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-a33ba577]::-webkit-outer-spin-button,.toolbar-font-size__input[data-v-a33ba577]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.toolbar-font-size__input[data-v-a33ba577]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__input[data-v-a33ba577]:focus{border-color:var(--sp-toolbar-border);background:#fff}.toolbar-font-size__btn[data-v-a33ba577]{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-a33ba577]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-font-size__btn svg[data-v-a33ba577]{width:10px;height:10px}.toolbar-font-size__dropdown[data-v-a33ba577]{position:absolute;width:56px;height:26px;pointer-events:none}.toolbar-btn[data-v-a33ba577]{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-a33ba577]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-btn[data-v-a33ba577]:active:not(:disabled){opacity:.7}.toolbar-btn--active[data-v-a33ba577]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-btn--step[data-v-a33ba577]{width:26px;height:26px}.toolbar-btn--step svg[data-v-a33ba577]{width:16px;height:16px}.toolbar-btn[data-v-a33ba577]:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.toolbar-btn__icon[data-v-a33ba577]{width:18px;height:18px}.toolbar-btn svg[data-v-a33ba577]:not(.toolbar-btn__icon){width:18px;height:18px}.toolbar-split[data-v-a33ba577]{display:inline-flex;align-items:center;position:relative;height:26px}.toolbar-split__main[data-v-a33ba577]{border:1px solid transparent;border-right:none;border-radius:3px 0 0 3px}.toolbar-split__arrow[data-v-a33ba577]{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-a33ba577]:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.toolbar-split__arrow svg[data-v-a33ba577]{width:10px!important;height:10px!important}.toolbar-more[data-v-a33ba577]{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-a33ba577]:hover{background:var(--sp-toolbar-btn-hover-bg)}.toolbar-more--active[data-v-a33ba577]{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.toolbar-more svg[data-v-a33ba577]{width:18px;height:18px}.overflow-menu[data-v-a33ba577]{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-a33ba577]{transition:none!important}.overflow-menu .tb-item[data-v-a33ba577]{width:100%}.overflow-menu .toolbar-sep[data-v-a33ba577]{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split[data-v-a33ba577]{width:100%}.overflow-menu .toolbar-split__main[data-v-a33ba577]{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size[data-v-a33ba577]{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font[data-v-a33ba577],.overflow-menu .toolbar-number-format[data-v-a33ba577],.overflow-menu .toolbar-align[data-v-a33ba577]{width:100%}.overflow-menu .toolbar-btn[data-v-a33ba577]:not(.toolbar-btn--step):not(.toolbar-split__arrow){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-color[data-v-a33ba577]{width:100%}.overflow-menu .toolbar-wrap[data-v-a33ba577]{width:100%;justify-content:flex-start}.menu-pop-enter-active[data-v-a33ba577],.menu-pop-leave-active[data-v-a33ba577]{transition:opacity .12s ease-out,transform .12s ease-out}.menu-pop-enter-from[data-v-a33ba577],.menu-pop-leave-to[data-v-a33ba577]{opacity:0;transform:scale(.9)}.overflow-menu .tb-item{width:100%}.overflow-menu .toolbar-sep{width:100%;height:1px;margin:2px 0}.overflow-menu .toolbar-split{width:100%}.overflow-menu .toolbar-split__main{flex:1 1 auto;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-font-size{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font,.overflow-menu .toolbar-number-format,.overflow-menu .toolbar-align{width:100%}.overflow-menu .toolbar-btn:not(.toolbar-btn--step):not(.toolbar-split__arrow){width:100%;justify-content:flex-start;padding-left:6px}.overflow-menu .toolbar-color{width:100%}.overflow-menu .toolbar-wrap{width:100%;justify-content:flex-start}.overflow-menu .toolbar-font-size__input{flex:1 1 auto;width:auto;min-width:40px}.overflow-menu .toolbar-btn:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-btn:active:not(:disabled){opacity:.7}.overflow-menu .toolbar-btn--active{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.overflow-menu .toolbar-btn:disabled{color:var(--sp-toolbar-btn-disabled-color);cursor:default}.overflow-menu .toolbar-split__main:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-split__arrow:hover:not(:disabled){background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-font-size__input:hover{background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-font-size__input:focus{border-color:var(--sp-toolbar-border);background:#fff}.overflow-menu .toolbar-font-size__btn:hover,.overflow-menu .toolbar-more:hover{background:var(--sp-toolbar-btn-hover-bg)}.overflow-menu .toolbar-more--active{background:var(--sp-toolbar-btn-hover-bg);color:var(--sp-toolbar-btn-active-color)}.tab-bar[data-v-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)}.nf-dialog__mask[data-v-69cb36b7]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30000;background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center}.nf-dialog[data-v-69cb36b7]{width:380px;max-width:calc(100vw - 32px);max-height:calc(100vh - 48px);overflow-y:auto;background:#fff;border:1px solid #d0d0d0;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:#1a1a1a;-webkit-user-select:none;user-select:none}.nf-dialog__header[data-v-69cb36b7]{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #ececec}.nf-dialog__title[data-v-69cb36b7]{font-size:13px;font-weight:600}.nf-dialog__close[data-v-69cb36b7]{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:#888;cursor:pointer;border-radius:3px;padding:0}.nf-dialog__close[data-v-69cb36b7]:hover{background:#f0f0f0;color:#444}.nf-dialog__close svg[data-v-69cb36b7]{width:14px;height:14px}.nf-dialog__body[data-v-69cb36b7]{padding:12px 14px;display:flex;flex-direction:column;gap:10px}.nf-field[data-v-69cb36b7]{display:flex;align-items:center;gap:8px}.nf-field--inline[data-v-69cb36b7]{min-height:26px}.nf-field__label[data-v-69cb36b7]{width:88px;min-width:88px;font-size:12px;color:#555}.nf-field__select[data-v-69cb36b7],.nf-field__input[data-v-69cb36b7]{flex:1;height:26px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;color:#1a1a1a;padding:0 6px;outline:none;box-sizing:border-box;font-family:inherit}.nf-field__select[data-v-69cb36b7]:focus,.nf-field__input[data-v-69cb36b7]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-field__textarea[data-v-69cb36b7]{flex:1;min-height:44px;border:1px solid #c0c0c0;border-radius:3px;background:#fff;font-size:12px;color:#1a1a1a;padding:4px 6px;outline:none;box-sizing:border-box;resize:none;font-family:Consolas,Courier New,monospace}.nf-field__textarea[data-v-69cb36b7]:focus{border-color:#0078d7;box-shadow:0 0 0 1px #0078d74d}.nf-checkbox[data-v-69cb36b7]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#333;cursor:pointer}.nf-checkbox input[data-v-69cb36b7]{margin:0;cursor:pointer}.nf-dialog__footer[data-v-69cb36b7]{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;border-top:1px solid #ececec}.nf-preview[data-v-69cb36b7]{display:flex;flex-direction:column;gap:2px;min-width:0}.nf-preview__label[data-v-69cb36b7]{font-size:11px;color:#888}.nf-preview__value[data-v-69cb36b7]{font-size:13px;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.nf-dialog__actions[data-v-69cb36b7]{display:flex;gap:8px}.nf-btn[data-v-69cb36b7]{height:28px;padding:0 16px;border:1px solid #ccc;border-radius:3px;background:#fff;color:#333;font-size:12px;cursor:pointer;font-family:inherit}.nf-btn[data-v-69cb36b7]:hover{background:#f0f0f0}.nf-btn--primary[data-v-69cb36b7]{border-color:#0078d7;background:#0078d7;color:#fff}.nf-btn--primary[data-v-69cb36b7]:hover{background:#0069c0}.nf-dialog-enter-active[data-v-69cb36b7],.nf-dialog-leave-active[data-v-69cb36b7]{transition:opacity .14s ease-out}.nf-dialog-enter-from[data-v-69cb36b7],.nf-dialog-leave-to[data-v-69cb36b7]{opacity:0}.nf-dialog-enter-active .nf-dialog[data-v-69cb36b7],.nf-dialog-leave-active .nf-dialog[data-v-69cb36b7]{transition:transform .14s ease-out}.nf-dialog-enter-from .nf-dialog[data-v-69cb36b7],.nf-dialog-leave-to .nf-dialog[data-v-69cb36b7]{transform:scale(.96)}.spreadsheet-outer[data-v-6321c060]{flex:1;display:flex;flex-direction:column;overflow:hidden;height:100%;min-height:400px;width:100%}.formula-bar[data-v-6321c060]{display:flex;align-items:flex-start;min-height:36px;padding:0;gap:0}.formula-bar--expanded[data-v-6321c060]{min-height:72px}.formula-bar__cell-label[data-v-6321c060]{width:48px;min-width:48px;height:28px;line-height:28px;margin-top:4px;text-align:center;font-size:12px;font-weight:600;color:var(--sp-formula-bar-label-color);background:var(--sp-formula-bar-label-bg);border:1px solid var(--sp-formula-bar-label-border);border-radius:2px;-webkit-user-select:none;user-select:none}.formula-bar__buttons[data-v-6321c060]{display:inline-flex;align-items:stretch;margin-top:4px;margin-left:6px;height:28px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;overflow:hidden;background:var(--sp-formula-bar-input-bg)}.formula-bar__btn[data-v-6321c060]{width:22px;height:28px;border:none;border-radius:0;background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;-webkit-user-select:none;user-select:none;color:inherit}.formula-bar__btn+.formula-bar__btn[data-v-6321c060]{border-left:1px solid var(--sp-formula-bar-input-border)}.formula-bar__btn[data-v-6321c060]:hover{background:var(--sp-scroll-btn-hover-bg, #f0f0f0)}.formula-bar__btn--cancel[data-v-6321c060]:hover{color:#e53935;background:#fdecea}.formula-bar__btn--accept[data-v-6321c060]:hover{color:#2e7d32;background:#e8f5e9}.formula-bar__input[data-v-6321c060]{flex:1;min-height:28px;height:28px;line-height:20px;margin-top:4px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;outline:none;padding:3px 6px;margin-left:4px;font-size:13px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;color:var(--sp-formula-bar-input-color);background:var(--sp-formula-bar-input-bg);resize:none;overflow:hidden;box-sizing:border-box}.formula-bar__input--expanded[data-v-6321c060]{height:68px;overflow:auto}.formula-bar__input[data-v-6321c060]:focus{border-color:var(--sp-formula-bar-input-focus-border);box-shadow:0 0 0 1px var(--sp-formula-bar-input-focus-shadow)}.formula-bar__toggle[data-v-6321c060]{width:22px;min-width:22px;height:28px;margin-top:4px;margin-left:2px;margin-right:2px;border:1px solid var(--sp-formula-bar-input-border);border-radius:2px;background:var(--sp-formula-bar-input-bg);color:var(--sp-formula-bar-input-color);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;-webkit-user-select:none;user-select:none}.formula-bar__toggle[data-v-6321c060]:hover{background:var(--sp-scroll-btn-hover-bg, #e8e8e8)}.spreadsheet-wrapper[data-v-6321c060]{flex:1;position:relative;overflow:hidden;background:var(--sp-wrapper-bg)}.grid-canvas[data-v-6321c060]{position:absolute;top:0;left:0;display:block;outline:none;cursor:cell}.grid-canvas[data-v-6321c060]:focus{outline:none}.v-scrollbar[data-v-6321c060]{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-6321c060]{position:absolute;left:0;bottom:0;height:11px;width:calc(100% - 11px);display:flex;background:var(--sp-wrapper-bg)}.sb-corner[data-v-6321c060]{position:absolute;right:0;bottom:0;width:11px;height:11px;background:var(--sp-wrapper-bg)}.sb-btn[data-v-6321c060]{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-6321c060]:hover{background:var(--sp-scroll-btn-hover-bg, #d0d0d0)}.sb-btn[data-v-6321c060]:active{background:var(--sp-scroll-btn-active-bg, #c0c0c0)}.sb-arrow[data-v-6321c060]{display:block;width:0;height:0}.sb-arrow--up[data-v-6321c060]{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-6321c060]{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-6321c060]{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-6321c060]{border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:4px solid var(--sp-scroll-btn-color, #666)}.sb-track[data-v-6321c060]{flex:1;position:relative;background:var(--sp-scroll-track-bg, rgba(0,0,0,.06))}.sb-track--v[data-v-6321c060]{width:11px}.sb-track--h[data-v-6321c060]{height:11px}.sb-thumb[data-v-6321c060]{position:absolute;border-radius:3px;background:var(--sp-scroll-thumb);cursor:default}.sb-thumb[data-v-6321c060]:hover{background:var(--sp-scroll-thumb-hover)}.sb-thumb--v[data-v-6321c060]{left:1px;right:1px;min-height:16px}.sb-thumb--h[data-v-6321c060]{top:1px;bottom:1px;min-width:16px}.cell-editor[data-v-6321c060]{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}
|
|
@@ -10,6 +10,8 @@ type __VLS_Props = {
|
|
|
10
10
|
hideTrigger?: boolean;
|
|
11
11
|
align?: 'left' | 'right';
|
|
12
12
|
triggerEl?: HTMLElement | null;
|
|
13
|
+
/** 当前值未命中任何选项时触发器显示的占位文本(如选区格式不一致时的「混合」) */
|
|
14
|
+
fallbackLabel?: string;
|
|
13
15
|
};
|
|
14
16
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
15
17
|
"update:modelValue": (v: string | number) => void;
|
|
@@ -28,6 +30,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
28
30
|
hideTrigger: boolean;
|
|
29
31
|
align: "left" | "right";
|
|
30
32
|
triggerEl: HTMLElement | null;
|
|
33
|
+
fallbackLabel: string;
|
|
31
34
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
32
35
|
rootRef: HTMLDivElement;
|
|
33
36
|
menuRef: HTMLDivElement;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
modelOpen?: boolean;
|
|
3
|
+
locale?: string;
|
|
4
|
+
/** 当前选区格式(混合时由父组件传入空串,从常规开始) */
|
|
5
|
+
currentFormat?: string;
|
|
6
|
+
/** 预览样例值(默认 1234.5) */
|
|
7
|
+
sampleValue?: string;
|
|
8
|
+
};
|
|
9
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
10
|
+
"update:modelOpen": (v: boolean) => any;
|
|
11
|
+
apply: (formatCode: string) => any;
|
|
12
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
"onUpdate:modelOpen"?: ((v: boolean) => any) | undefined;
|
|
14
|
+
onApply?: ((formatCode: string) => any) | undefined;
|
|
15
|
+
}>, {
|
|
16
|
+
modelOpen: boolean;
|
|
17
|
+
locale: string;
|
|
18
|
+
currentFormat: string;
|
|
19
|
+
sampleValue: string;
|
|
20
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
21
|
+
customCodeRef: HTMLTextAreaElement;
|
|
22
|
+
}, any>;
|
|
23
|
+
export default _default;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FontOption, MergeType } from '../core/constants';
|
|
2
|
+
import { type NFOption } from '../core/number-format';
|
|
2
3
|
import { type BorderType } from './pickers/borderPicker.vue';
|
|
3
4
|
type __VLS_Props = {
|
|
4
5
|
locale: string;
|
|
@@ -33,6 +34,8 @@ type __VLS_Props = {
|
|
|
33
34
|
calcMenuOpen: boolean;
|
|
34
35
|
isSingleCell: boolean;
|
|
35
36
|
themeVars?: Record<string, string>;
|
|
37
|
+
selNumberFormat: string;
|
|
38
|
+
nfOptions: NFOption[];
|
|
36
39
|
};
|
|
37
40
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
38
41
|
undo: () => void;
|
|
@@ -52,6 +55,8 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
52
55
|
"apply-border": () => void;
|
|
53
56
|
"wrap-toggle": () => void;
|
|
54
57
|
"apply-merge": () => void;
|
|
58
|
+
"calc-sum": () => void;
|
|
59
|
+
"calc-avg": () => void;
|
|
55
60
|
"font-family-change": (v: string | number) => void;
|
|
56
61
|
"font-size-change": (v: string | number) => void;
|
|
57
62
|
"h-align-change": (v: string | number) => void;
|
|
@@ -59,6 +64,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
59
64
|
"font-size-input": (v: string) => void;
|
|
60
65
|
"text-color-change": (v: string) => void;
|
|
61
66
|
"fill-color-change": (v: string) => void;
|
|
67
|
+
"number-format-change": (v: string) => void;
|
|
62
68
|
"font-size-keydown": (ev: KeyboardEvent) => void;
|
|
63
69
|
"update:font-size-menu-open": (v: boolean) => void;
|
|
64
70
|
"update:text-color-menu-open": (v: boolean) => void;
|
|
@@ -68,8 +74,6 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
68
74
|
"update:calc-menu-open": (v: boolean) => void;
|
|
69
75
|
"border-change": (v: BorderType) => void;
|
|
70
76
|
"merge-change": (v: MergeType) => void;
|
|
71
|
-
"calc-sum": () => void;
|
|
72
|
-
"calc-avg": () => void;
|
|
73
77
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
74
78
|
onUndo?: (() => any) | undefined;
|
|
75
79
|
onRedo?: (() => any) | undefined;
|
|
@@ -88,6 +92,8 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
88
92
|
"onApply-border"?: (() => any) | undefined;
|
|
89
93
|
"onWrap-toggle"?: (() => any) | undefined;
|
|
90
94
|
"onApply-merge"?: (() => any) | undefined;
|
|
95
|
+
"onCalc-sum"?: (() => any) | undefined;
|
|
96
|
+
"onCalc-avg"?: (() => any) | undefined;
|
|
91
97
|
"onFont-family-change"?: ((v: string | number) => any) | undefined;
|
|
92
98
|
"onFont-size-change"?: ((v: string | number) => any) | undefined;
|
|
93
99
|
"onH-align-change"?: ((v: string | number) => any) | undefined;
|
|
@@ -95,6 +101,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
95
101
|
"onFont-size-input"?: ((v: string) => any) | undefined;
|
|
96
102
|
"onText-color-change"?: ((v: string) => any) | undefined;
|
|
97
103
|
"onFill-color-change"?: ((v: string) => any) | undefined;
|
|
104
|
+
"onNumber-format-change"?: ((v: string) => any) | undefined;
|
|
98
105
|
"onFont-size-keydown"?: ((ev: KeyboardEvent) => any) | undefined;
|
|
99
106
|
"onUpdate:font-size-menu-open"?: ((v: boolean) => any) | undefined;
|
|
100
107
|
"onUpdate:text-color-menu-open"?: ((v: boolean) => any) | undefined;
|
|
@@ -104,8 +111,6 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
104
111
|
"onUpdate:calc-menu-open"?: ((v: boolean) => any) | undefined;
|
|
105
112
|
"onBorder-change"?: ((v: BorderType) => any) | undefined;
|
|
106
113
|
"onMerge-change"?: ((v: MergeType) => any) | undefined;
|
|
107
|
-
"onCalc-sum"?: (() => any) | undefined;
|
|
108
|
-
"onCalc-avg"?: (() => any) | undefined;
|
|
109
114
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
|
|
110
115
|
rootEl: HTMLDivElement;
|
|
111
116
|
fontSizeArrowRef: HTMLButtonElement;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { type ComputedRef, type Ref } from 'vue';
|
|
2
2
|
import { FormulaDeps } from '../core/formula';
|
|
3
3
|
import type { CellCoord, CellData, SelectionRange } from '../core/types';
|
|
4
|
+
/** 选区触发方式,影响「合并单元格是否扩大选区」。
|
|
5
|
+
* - 'cell':单元格点击/拖动(默认)→ 保持现有 expandSelectionForMerges 行为
|
|
6
|
+
* - 'row' :行头点击/拖动 → Excel 风格「穿透」合并,选区矩形保持用户点击的行范围
|
|
7
|
+
* - 'col' :列头点击/拖动 → 同上,选区矩形保持用户点击的列范围
|
|
8
|
+
* - 'all' :左上角全选按钮 → expandSelectionForMerges 行为
|
|
9
|
+
*/
|
|
10
|
+
export type SelectionMode = 'cell' | 'row' | 'col' | 'all';
|
|
4
11
|
export interface CoreState {
|
|
5
12
|
props: {
|
|
6
13
|
rowCount: number;
|
|
@@ -47,9 +54,12 @@ export interface CoreState {
|
|
|
47
54
|
totalWidth: ComputedRef<number>;
|
|
48
55
|
totalHeight: ComputedRef<number>;
|
|
49
56
|
selectCell: (c: number, r: number) => void;
|
|
50
|
-
selectRange: (sC: number, sR: number, eC: number, eR: number) => void;
|
|
57
|
+
selectRange: (sC: number, sR: number, eC: number, eR: number, mode?: SelectionMode) => void;
|
|
51
58
|
selectAll: () => void;
|
|
52
59
|
isSelected: (c: number, r: number) => boolean;
|
|
60
|
+
/** 渲染高亮专用:整行/整列选择模式下「穿透」合并单元格,仅判断 (c,r) 自身是否在选区矩形内 */
|
|
61
|
+
isCellSelected: (c: number, r: number) => boolean;
|
|
62
|
+
selectionMode: Ref<SelectionMode>;
|
|
53
63
|
cellKey: (c: number, r: number) => string;
|
|
54
64
|
delCell: (k: string) => void;
|
|
55
65
|
findMerge: (c: number, r: number) => {
|
|
@@ -9,10 +9,14 @@ export interface InteractionsState {
|
|
|
9
9
|
render: () => void;
|
|
10
10
|
activeCellLabel: ComputedRef<string>;
|
|
11
11
|
formulaBarDisplay: ComputedRef<string>;
|
|
12
|
+
formulaBarDraft: Ref<string>;
|
|
13
|
+
formulaBarExpanded: Ref<boolean>;
|
|
12
14
|
onFormulaBarFocus: () => void;
|
|
13
15
|
onFormulaBarInput: (e: Event) => void;
|
|
14
16
|
onFormulaBarKeydown: (e: KeyboardEvent) => void;
|
|
15
17
|
onFormulaBarBlur: () => void;
|
|
18
|
+
acceptFormulaBarEdit: () => void;
|
|
19
|
+
cancelFormulaBarEdit: () => void;
|
|
16
20
|
renTab: Ref<number | null>;
|
|
17
21
|
renTabVal: Ref<string>;
|
|
18
22
|
onTabClick: (i: number) => void;
|
|
@@ -27,7 +27,7 @@ export interface SheetsOpsState {
|
|
|
27
27
|
wrapperRef: Ref<HTMLDivElement | null>;
|
|
28
28
|
canvasRef: Ref<HTMLCanvasElement | null>;
|
|
29
29
|
editInputRef: Ref<HTMLTextAreaElement | null>;
|
|
30
|
-
formulaBarRef: Ref<
|
|
30
|
+
formulaBarRef: Ref<HTMLTextAreaElement | null>;
|
|
31
31
|
viewSize: {
|
|
32
32
|
w: number;
|
|
33
33
|
h: number;
|
|
@@ -2,6 +2,7 @@ import { type ComputedRef, type Ref } from 'vue';
|
|
|
2
2
|
import type { FontOption } from '../core/constants';
|
|
3
3
|
import type { CoreState } from './core-state';
|
|
4
4
|
import type { CellData, SheetState } from '../core/types';
|
|
5
|
+
import { type NFOption } from '../core/number-format';
|
|
5
6
|
export interface UndoStylesState {
|
|
6
7
|
undoStack: Ref<UndoSnap[]>;
|
|
7
8
|
redoStack: Ref<UndoSnap[]>;
|
|
@@ -67,6 +68,13 @@ export interface UndoStylesState {
|
|
|
67
68
|
selFillColor: ComputedRef<string>;
|
|
68
69
|
borderMenuOpen?: Ref<boolean>;
|
|
69
70
|
mergeMenuOpen?: Ref<boolean>;
|
|
71
|
+
nfOptions: ComputedRef<NFOption[]>;
|
|
72
|
+
selNumberFormat: ComputedRef<string>;
|
|
73
|
+
NF_NUMBER_FORMAT_MIXED: string;
|
|
74
|
+
nfDialogOpen: Ref<boolean>;
|
|
75
|
+
onNumberFormatChange: (v: string) => void;
|
|
76
|
+
openNumberFormatDialog: () => void;
|
|
77
|
+
applyNumberFormatCode: (code: string) => void;
|
|
70
78
|
}
|
|
71
79
|
interface UndoSnap {
|
|
72
80
|
sheets: SheetState[];
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export declare const NF_CUSTOM = "__nf_custom__";
|
|
2
|
+
export declare const NF_MIXED = "\u0001";
|
|
3
|
+
export declare const NF_GENERAL = "";
|
|
4
|
+
export declare const NF_TEXT = "@";
|
|
5
|
+
/**
|
|
6
|
+
* formatNumber 的特殊返回值:表示"当前格式+数值组合在 Excel 语义下非法",
|
|
7
|
+
* 例如 date 格式 序列号<0/≥2958466、duration 格式 序列号<0。
|
|
8
|
+
* 渲染端必须把该字符串按列宽替换为连续 '#' 填充(不显示此标识符本身)。
|
|
9
|
+
*/
|
|
10
|
+
export declare const NF_INVALID_VALUE = "__NF_INVALID__";
|
|
11
|
+
/** Excel 1900 日期系统最大合法序列号(对应 9999-12-31)。超过或为负 → 整格 ###。 */
|
|
12
|
+
export declare const EXCEL_DATE_MAX_SERIAL = 2958465;
|
|
13
|
+
/** Excel 1900 日期系统最小合法序列号(0 = 1900-01-00,作为下界兜底,实际 UI 一般从 1 开始)。 */
|
|
14
|
+
export declare const EXCEL_DATE_MIN_SERIAL = 0;
|
|
15
|
+
/** 判断格式代码是否为 General(含空串、undefined、'General'、'GENERAL' 等) */
|
|
16
|
+
export declare function isGeneralFormat(format: string | undefined | null): boolean;
|
|
17
|
+
export type NFKind = 'general' | 'text' | 'number' | 'date' | 'duration';
|
|
18
|
+
export interface NFSection {
|
|
19
|
+
/** 是否含有数字占位符(0/#/?);无占位符的区段视为纯文本字面量 */
|
|
20
|
+
hasDigits: boolean;
|
|
21
|
+
/** 小数最大位数(0/#/? 的总数) */
|
|
22
|
+
decimals: number;
|
|
23
|
+
/** 强制小数位数(0 的个数,决定尾随 0 的数量) */
|
|
24
|
+
minDecimals: number;
|
|
25
|
+
/** 整数部分强制最少位数(0 的个数) */
|
|
26
|
+
minIntDigits: number;
|
|
27
|
+
/** 是否使用千位分隔符 */
|
|
28
|
+
thousands: boolean;
|
|
29
|
+
/** 缩放倍数(百分比为 100) */
|
|
30
|
+
scale: number;
|
|
31
|
+
/** 科学计数法 */
|
|
32
|
+
scientific: boolean;
|
|
33
|
+
/** 数字前的字面量(货币符号等) */
|
|
34
|
+
prefix: string;
|
|
35
|
+
/** 数字后的字面量(如 %) */
|
|
36
|
+
suffix: string;
|
|
37
|
+
/** 区段颜色([Red] 等,渲染层可忽略) */
|
|
38
|
+
color?: string;
|
|
39
|
+
}
|
|
40
|
+
export type NFDateTokenType = 'literal' | 'year' | 'month' | 'monthName' | 'day' | 'weekday' | 'hour' | 'minute' | 'second' | 'ampm';
|
|
41
|
+
export interface NFToken {
|
|
42
|
+
type: NFDateTokenType;
|
|
43
|
+
/** literal 类型的原始文本 */
|
|
44
|
+
text?: string;
|
|
45
|
+
/** 占位符长度(如 yyyy → 4) */
|
|
46
|
+
len: number;
|
|
47
|
+
}
|
|
48
|
+
export interface NFParsed {
|
|
49
|
+
kind: NFKind;
|
|
50
|
+
/** 数值区段(number 类型使用;可能含正/负/零/文本多个区段) */
|
|
51
|
+
sections: NFSection[];
|
|
52
|
+
/** 日期/时间/持续时间的 token 序列 */
|
|
53
|
+
tokens: NFToken[];
|
|
54
|
+
/** 是否为持续时间(含 [h]/[mm]/[ss]) */
|
|
55
|
+
isDuration: boolean;
|
|
56
|
+
raw: string;
|
|
57
|
+
}
|
|
58
|
+
export interface NFOption {
|
|
59
|
+
label: string;
|
|
60
|
+
value: string;
|
|
61
|
+
}
|
|
62
|
+
export declare function parseNumberFormat(format: string): NFParsed;
|
|
63
|
+
/** 清空解析缓存(主要用于测试/资源释放) */
|
|
64
|
+
export declare function clearNumberFormatCache(): void;
|
|
65
|
+
/**
|
|
66
|
+
* 将单元格原始字符串值按格式代码格式化为显示文本。
|
|
67
|
+
* 绝不修改传入的 value。
|
|
68
|
+
*/
|
|
69
|
+
export declare function formatNumber(value: string, format: string | undefined | null, locale: string): string;
|
|
70
|
+
export type NFDialogCategory = 'general' | 'number' | 'currency' | 'currencyRounded' | 'accounting' | 'financial' | 'percent' | 'scientific' | 'date' | 'time' | 'dateTime' | 'duration' | 'text' | 'custom';
|
|
71
|
+
export declare const NF_DIALOG_CATEGORIES: NFDialogCategory[];
|
|
72
|
+
/**
|
|
73
|
+
* 判断单元格在「未指定水平对齐」时,是否应该按「数值」默认右对齐显示。
|
|
74
|
+
* 规则(与 Excel 对齐语义保持一致,仅用于显示,不写入存储):
|
|
75
|
+
* 1. 格式代码为 '@'(文本)→ 否,保持左对齐
|
|
76
|
+
* 2. 常规格式(含空串 / undefined / 'General'):对原始 value 做 Number() 解析,
|
|
77
|
+
* 能解析为有限数字且非空字符串 → 视为数值 → 右对齐
|
|
78
|
+
* 3. 显式设置为数值类格式(number/currency/currencyRounded/accounting/financial/
|
|
79
|
+
* percent/scientific 以及 custom 中分类属于数值 kind 并含数字占位符)→ 右对齐
|
|
80
|
+
* 4. 日期、时间、日期时间、持续时间 → 不算数值(按 Excel 默认左对齐或居中,这里保持左对齐默认)
|
|
81
|
+
* 5. 其他 custom 中无法判断的 → 回退左对齐
|
|
82
|
+
*/
|
|
83
|
+
export declare function shouldAlignRightByDefault(value: string, format: string | undefined | null): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* 当前格式在列宽不足时,是否按 Excel 规则替换为连续 '#' 填充:
|
|
86
|
+
* - General / 文本 '@' / 未设置 → 不会(General 自动科学计数或允许裁切;文本就是原样裁切)
|
|
87
|
+
* - date / duration 类格式 → 是
|
|
88
|
+
* - number 类格式且含有数字占位符 → 是
|
|
89
|
+
* - 纯文本区段的自定义 number(如"前缀"无 0/#/?)→ 按纯文本,不需要 #
|
|
90
|
+
*/
|
|
91
|
+
export declare function isFormatOverflowsToHashes(format: string | undefined | null): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* 对给定 (value, format) 快速判断是否是 Excel 语义下的"非法值"(需要渲染为 # 填充)。
|
|
94
|
+
* 主要用于渲染端直接复用,避免再次 parseNumberFormat。
|
|
95
|
+
*/
|
|
96
|
+
export declare function isInvalidDisplayValue(value: string, format: string | undefined | null): boolean;
|
|
97
|
+
/** 根据分类 + 小数位数 + 千位分隔符生成格式代码 */
|
|
98
|
+
export declare function buildNumberFormatCode(locale: string, category: NFDialogCategory, decimals: number, thousands: boolean): string;
|
|
99
|
+
/** 构造工具栏下拉框的选项(含「格式…」自定义项) */
|
|
100
|
+
export declare function buildNumberFormatPresets(locale: string): NFOption[];
|