xiaodao-spreader 0.1.38 → 0.1.41
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 +67 -49
- package/README.md +77 -58
- package/dist/style.css +1 -1
- package/dist/types/components/spreader/components/dropdown.vue.d.ts +3 -1
- package/dist/types/components/spreader/components/pickers/border-picker.vue.d.ts +16 -2
- package/dist/types/components/spreader/components/pickers/calc-picker.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/color-palette.vue.d.ts +17 -0
- package/dist/types/components/spreader/components/pickers/color-picker.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/data-validation-dropdown.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/insert-function-dialog.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/merge-picker.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/number-format-dialog.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/outline-picker.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/sort-confirm-dialog.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/pickers/sort-picker.vue.d.ts +1 -1
- package/dist/types/components/spreader/components/spreader.vue.d.ts +15 -5
- package/dist/types/components/spreader/components/toolbar.vue.d.ts +10 -2
- package/dist/types/components/spreader/composables/borders-merge.d.ts +19 -3
- package/dist/types/components/spreader/composables/core-state.d.ts +9 -1
- package/dist/types/components/spreader/composables/find-replace.d.ts +5 -0
- package/dist/types/components/spreader/composables/interactions.d.ts +5 -0
- package/dist/types/components/spreader/composables/sheets-ops.d.ts +5 -0
- package/dist/types/components/spreader/composables/undo-styles.d.ts +5 -0
- package/dist/types/components/spreader/core/border-color.d.ts +138 -0
- package/dist/types/components/spreader/core/border-icon.d.ts +43 -0
- package/dist/types/components/spreader/core/border-pool.d.ts +1 -1
- package/dist/types/components/spreader/core/border-resolve.d.ts +12 -3
- package/dist/types/components/spreader/core/border-style.d.ts +24 -0
- package/dist/types/components/spreader/core/constants.d.ts +1 -2
- package/dist/types/components/spreader/core/model-dims.d.ts +19 -0
- package/dist/types/components/spreader/core/notes.d.ts +4 -0
- package/dist/types/components/spreader/core/sort-icon.d.ts +25 -0
- package/dist/types/components/spreader/core/style-pool.d.ts +1 -1
- package/dist/types/components/spreader/core/theme.d.ts +5 -0
- package/dist/types/components/spreader/core/types.d.ts +14 -4
- package/dist/xiaodao-spreader.es.js +8347 -7759
- package/dist/xiaodao-spreader.umd.js +9 -9
- package/package.json +1 -1
- /package/dist/types/components/spreader/components/{data-validation-input-message.vue.d.ts → pickers/data-validation-input-message.vue.d.ts} +0 -0
- /package/dist/types/components/spreader/composables/{useFloatMenuPosition.d.ts → float-menu-position.d.ts} +0 -0
|
@@ -45,7 +45,9 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
45
45
|
cachedTextColor: string;
|
|
46
46
|
cachedFillColor: string;
|
|
47
47
|
borderMenuOpen: boolean;
|
|
48
|
-
cachedBorder: import("@/components/spreader/
|
|
48
|
+
cachedBorder: import("@/components/spreader/core/border-icon.ts").BorderType;
|
|
49
|
+
cachedBorderColor: string;
|
|
50
|
+
cachedBorderLineStyle: string;
|
|
49
51
|
sortMenuOpen: boolean;
|
|
50
52
|
cachedSortOrder: import("@/components/spreader/core/sort-core.ts").SortOrder;
|
|
51
53
|
canSort: boolean;
|
|
@@ -111,6 +113,8 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
111
113
|
"onFont-size-input"?: ((v: string) => any) | undefined;
|
|
112
114
|
"onText-color-change"?: ((v: string) => any) | undefined;
|
|
113
115
|
"onFill-color-change"?: ((v: string) => any) | undefined;
|
|
116
|
+
"onBorder-color-change"?: ((v: string) => any) | undefined;
|
|
117
|
+
"onBorder-line-style-change"?: ((v: string) => any) | undefined;
|
|
114
118
|
"onNumber-format-change"?: ((v: string) => any) | undefined;
|
|
115
119
|
"onFreeze-change"?: ((v: string) => any) | undefined;
|
|
116
120
|
"onCf-preset"?: ((v: string) => any) | undefined;
|
|
@@ -130,7 +134,7 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
130
134
|
"onUpdate:h-align-menu-open"?: ((v: boolean) => any) | undefined;
|
|
131
135
|
"onUpdate:v-align-menu-open"?: ((v: boolean) => any) | undefined;
|
|
132
136
|
"onUpdate:num-fmt-menu-open"?: ((v: boolean) => any) | undefined;
|
|
133
|
-
"onBorder-change"?: ((v: import("@/components/spreader/
|
|
137
|
+
"onBorder-change"?: ((v: import("@/components/spreader/core/border-icon.ts").BorderType) => any) | undefined;
|
|
134
138
|
"onSort-change"?: ((v: import("@/components/spreader/core/sort-core.ts").SortOrder) => any) | undefined;
|
|
135
139
|
"onMerge-change"?: ((v: import("../core/constants").MergeType) => any) | undefined;
|
|
136
140
|
"onCf-clear"?: ((scope: "sheet" | "selection") => any) | undefined;
|
|
@@ -172,6 +176,8 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
172
176
|
"font-size-input": (v: string) => void;
|
|
173
177
|
"text-color-change": (v: string) => void;
|
|
174
178
|
"fill-color-change": (v: string) => void;
|
|
179
|
+
"border-color-change": (v: string) => void;
|
|
180
|
+
"border-line-style-change": (v: string) => void;
|
|
175
181
|
"number-format-change": (v: string) => void;
|
|
176
182
|
"freeze-change": (v: string) => void;
|
|
177
183
|
"cf-preset": (v: string) => void;
|
|
@@ -191,7 +197,7 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
191
197
|
"update:h-align-menu-open": (v: boolean) => void;
|
|
192
198
|
"update:v-align-menu-open": (v: boolean) => void;
|
|
193
199
|
"update:num-fmt-menu-open": (v: boolean) => void;
|
|
194
|
-
"border-change": (v: import("@/components/spreader/
|
|
200
|
+
"border-change": (v: import("@/components/spreader/core/border-icon.ts").BorderType) => void;
|
|
195
201
|
"sort-change": (v: import("@/components/spreader/core/sort-core.ts").SortOrder) => void;
|
|
196
202
|
"merge-change": (v: import("../core/constants").MergeType) => void;
|
|
197
203
|
"cf-clear": (scope: "sheet" | "selection") => void;
|
|
@@ -237,7 +243,9 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
237
243
|
cachedTextColor: string;
|
|
238
244
|
cachedFillColor: string;
|
|
239
245
|
borderMenuOpen: boolean;
|
|
240
|
-
cachedBorder: import("@/components/spreader/
|
|
246
|
+
cachedBorder: import("@/components/spreader/core/border-icon.ts").BorderType;
|
|
247
|
+
cachedBorderColor: string;
|
|
248
|
+
cachedBorderLineStyle: string;
|
|
241
249
|
sortMenuOpen: boolean;
|
|
242
250
|
cachedSortOrder: import("@/components/spreader/core/sort-core.ts").SortOrder;
|
|
243
251
|
canSort: boolean;
|
|
@@ -303,6 +311,8 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
303
311
|
"onFont-size-input"?: ((v: string) => any) | undefined;
|
|
304
312
|
"onText-color-change"?: ((v: string) => any) | undefined;
|
|
305
313
|
"onFill-color-change"?: ((v: string) => any) | undefined;
|
|
314
|
+
"onBorder-color-change"?: ((v: string) => any) | undefined;
|
|
315
|
+
"onBorder-line-style-change"?: ((v: string) => any) | undefined;
|
|
306
316
|
"onNumber-format-change"?: ((v: string) => any) | undefined;
|
|
307
317
|
"onFreeze-change"?: ((v: string) => any) | undefined;
|
|
308
318
|
"onCf-preset"?: ((v: string) => any) | undefined;
|
|
@@ -322,7 +332,7 @@ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
322
332
|
"onUpdate:h-align-menu-open"?: ((v: boolean) => any) | undefined;
|
|
323
333
|
"onUpdate:v-align-menu-open"?: ((v: boolean) => any) | undefined;
|
|
324
334
|
"onUpdate:num-fmt-menu-open"?: ((v: boolean) => any) | undefined;
|
|
325
|
-
"onBorder-change"?: ((v: import("@/components/spreader/
|
|
335
|
+
"onBorder-change"?: ((v: import("@/components/spreader/core/border-icon.ts").BorderType) => any) | undefined;
|
|
326
336
|
"onSort-change"?: ((v: import("@/components/spreader/core/sort-core.ts").SortOrder) => any) | undefined;
|
|
327
337
|
"onMerge-change"?: ((v: import("../core/constants").MergeType) => any) | undefined;
|
|
328
338
|
"onCf-clear"?: ((scope: "sheet" | "selection") => any) | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FontOption, MergeType } from '../core/constants';
|
|
2
2
|
import { type NFOption } from '../core/number-format';
|
|
3
|
-
import { type BorderType } from './pickers/border-picker.vue';
|
|
4
3
|
import type { SortOrder } from '../core/sort-core';
|
|
4
|
+
import { type BorderType } from '../core/border-icon';
|
|
5
5
|
declare function closeOverflow(): void;
|
|
6
6
|
type __VLS_Props = {
|
|
7
7
|
locale: string;
|
|
@@ -27,6 +27,10 @@ type __VLS_Props = {
|
|
|
27
27
|
cachedFillColor: string;
|
|
28
28
|
borderMenuOpen: boolean;
|
|
29
29
|
cachedBorder: BorderType;
|
|
30
|
+
/** 当前色板选中的边框颜色;'' = 自动(缺省回退默认边框色)。仅用于边框颜色菜单项的色块与色板高亮,不反映选区边框色 */
|
|
31
|
+
cachedBorderColor: string;
|
|
32
|
+
/** 当前笔刷线型(solid/dashed/dotted);仅用于边框线型子菜单高亮,不反映选区边框线型 */
|
|
33
|
+
cachedBorderLineStyle: string;
|
|
30
34
|
sortMenuOpen: boolean;
|
|
31
35
|
cachedSortOrder: SortOrder;
|
|
32
36
|
canSort: boolean;
|
|
@@ -61,7 +65,7 @@ type __VLS_Props = {
|
|
|
61
65
|
canIncreaseDecimals: boolean;
|
|
62
66
|
canDecreaseDecimals: boolean;
|
|
63
67
|
/** 边界基准元素(通常是表格容器 wrapper):弹出菜单不得越出其可视区。
|
|
64
|
-
* 组件嵌入宿主 Vue
|
|
68
|
+
* 组件嵌入宿主 Vue 页面时必需,否则菜单会越界盖住宿主内容。缺省时退化为纯视口判定。 */
|
|
65
69
|
boundaryEl?: HTMLElement | null;
|
|
66
70
|
};
|
|
67
71
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
@@ -102,6 +106,8 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
|
102
106
|
"font-size-input": (v: string) => void;
|
|
103
107
|
"text-color-change": (v: string) => void;
|
|
104
108
|
"fill-color-change": (v: string) => void;
|
|
109
|
+
"border-color-change": (v: string) => void;
|
|
110
|
+
"border-line-style-change": (v: string) => void;
|
|
105
111
|
"number-format-change": (v: string) => void;
|
|
106
112
|
"freeze-change": (v: string) => void;
|
|
107
113
|
"cf-preset": (v: string) => void;
|
|
@@ -161,6 +167,8 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
|
161
167
|
"onFont-size-input"?: ((v: string) => any) | undefined;
|
|
162
168
|
"onText-color-change"?: ((v: string) => any) | undefined;
|
|
163
169
|
"onFill-color-change"?: ((v: string) => any) | undefined;
|
|
170
|
+
"onBorder-color-change"?: ((v: string) => any) | undefined;
|
|
171
|
+
"onBorder-line-style-change"?: ((v: string) => any) | undefined;
|
|
164
172
|
"onNumber-format-change"?: ((v: string) => any) | undefined;
|
|
165
173
|
"onFreeze-change"?: ((v: string) => any) | undefined;
|
|
166
174
|
"onCf-preset"?: ((v: string) => any) | undefined;
|
|
@@ -1,14 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 边框 / 合并 / 剪贴板 / 计算 组合层(依赖 Vue,不做渲染)。
|
|
3
|
+
* 承载工具栏与右键菜单发起的操作:按边设置边框(颜色、线型、owner 标记)、
|
|
4
|
+
* 合并拆分单元格、复制 / 剪切 / 粘贴、选区求和 / 平均 / 计数。
|
|
5
|
+
*/
|
|
6
|
+
import { type Ref, type ComputedRef } from 'vue';
|
|
2
7
|
import type { CoreState } from './core-state';
|
|
3
8
|
import type { UndoStylesState } from './undo-styles';
|
|
4
|
-
import type { BorderType } from '../
|
|
9
|
+
import type { BorderType } from '../core/border-icon';
|
|
5
10
|
import type { MergeType } from '../core/constants';
|
|
6
11
|
import type { SelectionRange, BorderStyle, BorderSide } from '../core/types';
|
|
12
|
+
import type { BorderLineStyle } from '../core/border-style';
|
|
7
13
|
export interface BordersMergeState {
|
|
8
14
|
cachedBorder: Ref<BorderType>;
|
|
15
|
+
/** 当前色板选中的边框颜色;'' 表示「自动」(渲染回退到主题默认边框色) */
|
|
16
|
+
cachedBorderColor: Ref<string>;
|
|
17
|
+
/** 当前笔刷线型(solid/dashed/dotted);作为「边框绘制/应用操作」的默认线型 */
|
|
18
|
+
cachedBorderLineStyle: Ref<BorderLineStyle>;
|
|
19
|
+
/** 当前选区在「当前边框类型作用域」内的统一边框颜色;混合或无线条时返回 '' */
|
|
20
|
+
selBorderColor: ComputedRef<string>;
|
|
21
|
+
/** 当前选区在「当前边框类型作用域」内的统一边框线型;混合或无线条时返回 '' */
|
|
22
|
+
selBorderLineStyle: ComputedRef<string>;
|
|
9
23
|
borderMenuOpen: Ref<boolean>;
|
|
10
|
-
BORDER_COLOR: string;
|
|
11
24
|
onBorderChange: (bt: BorderType) => void;
|
|
25
|
+
onBorderColorChange: (color: string) => void;
|
|
26
|
+
/** 选择线型:更新默认线型 + 立即改选区已存在边框(不创建新边框) */
|
|
27
|
+
onBorderLineStyleChange: (style: BorderLineStyle) => void;
|
|
12
28
|
setCellBorderSide: (col: number, row: number, side: 'top' | 'right' | 'bottom' | 'left', borderSide: BorderSide | undefined) => void;
|
|
13
29
|
applyBorderToCell: (col: number, row: number, border: BorderStyle) => void;
|
|
14
30
|
applyCachedBorder: () => void;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CoreState - 表格运行时状态核心(依赖 Vue,渲染无关逻辑独立)。
|
|
3
|
+
* 持有当前 Sheet 的 cells / styles / borders / merges / 选区 / 冻结 / 筛选 /
|
|
4
|
+
* 数据验证 / 条件格式 / 批注 / 行列分组等状态,并提供读写、导航、行列增删、
|
|
5
|
+
* 公式与数据校验等原子操作入口。
|
|
6
|
+
*/
|
|
1
7
|
import { type ComputedRef, type Ref } from 'vue';
|
|
2
8
|
import { FormulaDeps } from '../core/formula';
|
|
3
9
|
import type { CellCoord, CellData, CellStyle, CellNote, SelectionRange, BorderStyle, BorderSide, FreezePane, ViewportRegion, SheetFilter, FilterColumn, ConditionalFormattingRule, ConditionalFormattingFormat, DataValidationRule, DataValidationResult, DataValidationSeverity, DimensionOutline } from '../core/types';
|
|
@@ -166,6 +172,8 @@ export interface CoreState {
|
|
|
166
172
|
/** 将单元格滚入 Body 可视区;冻结区域内不滚动 */
|
|
167
173
|
scrollCellIntoView: (row: number, col: number) => void;
|
|
168
174
|
BASE_CELL_VPAD: number;
|
|
175
|
+
/** 空行高度 = 自动行高下限 = round(BASE_CELL_VPAD*2 + 默认字号行高),随 DEFAULT_FONT_SIZE 变化 */
|
|
176
|
+
AUTO_ROW_BASE: number;
|
|
169
177
|
fontMetricsCache: Map<string, {
|
|
170
178
|
ascent: number;
|
|
171
179
|
descent: number;
|
|
@@ -212,7 +220,7 @@ export interface CoreState {
|
|
|
212
220
|
clearCellsInRange: (cS: number, cE: number, rS: number, rE: number) => void;
|
|
213
221
|
startEdit: (initialValue?: string) => void;
|
|
214
222
|
/** 提交编辑:数据验证发生在写入之前。
|
|
215
|
-
* @returns Promise<boolean
|
|
223
|
+
* @returns Promise<boolean>:true 表示已写入;false 表示被数据验证拦截(仍保持编辑态) */
|
|
216
224
|
commitEdit: () => Promise<boolean>;
|
|
217
225
|
cancelEdit: () => void;
|
|
218
226
|
moveActive: (dC: number, dR: number) => void;
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 查找 / 替换 交互层(依赖 Vue)。
|
|
3
|
+
* 驱动查找栏 UI 的状态与操作:范围 / 大小写 / 整格匹配选项、命中遍历与跳转、
|
|
4
|
+
* 替换与全部替换,纯算法部分委托 core/find-replace-core。
|
|
5
|
+
*/
|
|
1
6
|
import { type Ref, type ComputedRef } from 'vue';
|
|
2
7
|
import type { CoreState } from './core-state';
|
|
3
8
|
import type { UndoStylesState } from './undo-styles';
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 交互层(渲染 + 事件,体量最大的组合式模块)。
|
|
3
|
+
* 负责 Canvas 绘制(单元格、边框、合并、筛选箭头、分组控件等)、鼠标 / 键盘 / 触摸事件、
|
|
4
|
+
* 公式栏、行高列宽面板、右键菜单、滚动条,以及查找 / 筛选等浮层入口的开关与锚定。
|
|
5
|
+
*/
|
|
1
6
|
import { type Ref, type ComputedRef } from 'vue';
|
|
2
7
|
import type { CoreState } from './core-state';
|
|
3
8
|
import type { UndoStylesState } from './undo-styles';
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sheet 运维层:多工作表、主题与应用外壳 refs。
|
|
3
|
+
* 提供工作表新建 / 复制 / 删除 / 切换、插入删除行列时的合并与引用平移、
|
|
4
|
+
* 行高列宽调整、v-model 数据 emit 与模型重导入回灌等能力。
|
|
5
|
+
*/
|
|
1
6
|
import { type Ref, type ComputedRef } from 'vue';
|
|
2
7
|
import type { ThemeColors, SheetState, SheetModelData, SelectionRange } from '../core/types';
|
|
3
8
|
import { type SortOrder } from '../core/sort-core';
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 撤销 / 重做与格式相关状态层(依赖 Vue)。
|
|
3
|
+
* 维护 undo / redo 快照与格式刷,以及字体 / 字号 / 对齐 / 文字与填充色 / 数字格式
|
|
4
|
+
* 等工具栏 UI 状态,并执行对应样式的读取与写入。
|
|
5
|
+
*/
|
|
1
6
|
import { type ComputedRef, type Ref } from 'vue';
|
|
2
7
|
import type { FontOption } from '../core/constants';
|
|
3
8
|
import type { CoreState } from './core-state';
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border Color - 边框颜色的纯逻辑层(与 Vue / Canvas 完全解耦,可直接单测)。
|
|
3
|
+
*
|
|
4
|
+
* 设计要点:
|
|
5
|
+
* - 颜色是「每条独立边」的属性(BorderSide.color),与线型(width / style)彼此解耦:
|
|
6
|
+
* · 改颜色 → 只改 color,保留 width / style,且不创建原本不存在的边框;
|
|
7
|
+
* · 改线型 → 只改 width,保留已有 color;边原本不存在时才用当前色板的颜色。
|
|
8
|
+
* - 颜色统一以标准 HEX 字符串存储('#RRGGBB');'' / undefined 表示「自动」,
|
|
9
|
+
* 渲染时回退到主题默认边框色(defaultBorderColor),从而不破坏既有无颜色数据的历史边框。
|
|
10
|
+
* - 本模块只做「计划(plan)」,不触碰真实数据;读写由调用方(borders-merge)注入,
|
|
11
|
+
* 因此合并单元格的「锚点存储」等既有机制可以原样复用。
|
|
12
|
+
*/
|
|
13
|
+
import type { BorderSide, BorderStyle, SelectionRange } from './types';
|
|
14
|
+
import type { BorderType } from './border-icon';
|
|
15
|
+
import { type BorderLineStyle } from './border-style';
|
|
16
|
+
/** 默认边框颜色:BorderSide.color 缺失(自动)时的回退色(light 主题) */
|
|
17
|
+
export declare const DEFAULT_BORDER_COLOR = "#444";
|
|
18
|
+
/** 暗色主题下的默认边框颜色:在深色背景上需要更亮才能看清 */
|
|
19
|
+
export declare const DARK_BORDER_COLOR = "#aaaaaa";
|
|
20
|
+
/**
|
|
21
|
+
* 按主题返回默认边框颜色:light 用 DEFAULT_BORDER_COLOR,dark 用 DARK_BORDER_COLOR。
|
|
22
|
+
* 让「自动」边框在暗色模式下依然清晰可见。
|
|
23
|
+
*/
|
|
24
|
+
export declare function defaultBorderColor(theme: 'light' | 'dark' | string | undefined): string;
|
|
25
|
+
/** 四条边的键名 */
|
|
26
|
+
export type BorderSideKey = 'top' | 'right' | 'bottom' | 'left';
|
|
27
|
+
export declare const BORDER_SIDE_KEYS: BorderSideKey[];
|
|
28
|
+
/** 一条「实际边」:某个 grid 坐标上的某条边(调用方负责把它映射到 merge 锚点) */
|
|
29
|
+
export interface BorderTarget {
|
|
30
|
+
col: number;
|
|
31
|
+
row: number;
|
|
32
|
+
side: BorderSideKey;
|
|
33
|
+
}
|
|
34
|
+
/** 一次改色 / 改线型的写入指令 */
|
|
35
|
+
export interface BorderWrite extends BorderTarget {
|
|
36
|
+
next: BorderSide;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 归一化颜色:'' / 非字符串 / 纯空白 → undefined(自动色)。
|
|
40
|
+
* 不做大小写改写,保留用户/调用方写入的原始形态。
|
|
41
|
+
*/
|
|
42
|
+
export declare function normalizeBorderColor(color: string | undefined | null): string | undefined;
|
|
43
|
+
/** 颜色比较:大小写不敏感;'' 与 undefined 视为同一个「自动」值 */
|
|
44
|
+
export declare function sameBorderColor(a: string | undefined, b: string | undefined): boolean;
|
|
45
|
+
/** 解析实际绘制颜色(自动 → 主题默认色;theme 缺省按 light 处理) */
|
|
46
|
+
export declare function resolveBorderColor(color: string | undefined, theme?: 'light' | 'dark' | string): string;
|
|
47
|
+
/** 该边是否有实际线宽(用于判断「边框是否存在」) */
|
|
48
|
+
export declare function hasBorderLine(side: BorderSide | undefined): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* 仅替换颜色,保留 width / style。
|
|
51
|
+
* color 为 ''(自动)时删除 color 字段,回到默认色渲染,不残留空串。
|
|
52
|
+
*/
|
|
53
|
+
export declare function withBorderColor(side: BorderSide, color: string): BorderSide;
|
|
54
|
+
/**
|
|
55
|
+
* 仅替换线宽,保留已有 color / style。
|
|
56
|
+
* 边原本不存在、或原本没有颜色时,才使用 fallbackColor(当前色板颜色 / 默认色)。
|
|
57
|
+
* 用于「边框颜色选择器」:只改色不动线型,且只为原本没有颜色的边补上笔刷色。
|
|
58
|
+
*/
|
|
59
|
+
export declare function withBorderWidth(side: BorderSide | undefined, width: number, fallbackColor?: string): BorderSide;
|
|
60
|
+
/**
|
|
61
|
+
* 仅替换线型(solid/dashed/dotted),保留已有 width / color。
|
|
62
|
+
* style 为 'solid'(默认线型)时删除 style 字段,使数据与旧版完全一致、不残留冗余属性,
|
|
63
|
+
* 也避免 solid 边框在 BorderPool 中产生与「无 style」不同的去重 key。
|
|
64
|
+
*/
|
|
65
|
+
export declare function withBorderStyle(side: BorderSide, style: BorderLineStyle): BorderSide;
|
|
66
|
+
/**
|
|
67
|
+
* 强制设置线宽与颜色(用于「点击边框类型按钮」场景):
|
|
68
|
+
* 无论该边是否已存在,都把 width 与 color 设为给定值,color 为自动时删除 color 字段。
|
|
69
|
+
* 与 withBorderWidth 的区别:withBorderWidth 在边已存在且有颜色时保留旧颜色;
|
|
70
|
+
* 这里按 Excel 行为,用当前笔刷色覆盖该边(点「上边框」即把上边设为当前色)。
|
|
71
|
+
* 仅线型样式(style 虚线等)保留,不强制改;当传入 lineStyle 时则统一应用该线型
|
|
72
|
+
* (solid 会清掉 style 字段,使「用实线笔刷重画旧虚线边」回到 solid)。
|
|
73
|
+
*/
|
|
74
|
+
export declare function forceBorderSide(side: BorderSide | undefined, width: number, color?: string, lineStyle?: BorderLineStyle): BorderSide;
|
|
75
|
+
/**
|
|
76
|
+
* 枚举某个边框类型在某个选区上要作用的「实际边」。
|
|
77
|
+
*
|
|
78
|
+
* - 'none' → 无(清除是整格操作,由调用方单独处理)
|
|
79
|
+
* - 'all' → 选区内每个单元格的四条边(跳过合并区非锚点格)
|
|
80
|
+
* - 'outer' / 'thickOuter' → 选区真正的外轮廓四边
|
|
81
|
+
* - 单边类型 → 该方向上位于选区边界的每一条边
|
|
82
|
+
*
|
|
83
|
+
* 合并单元格不在此处展开:返回的仍是 grid 坐标,由调用方的 getSide / setSide
|
|
84
|
+
* 统一重定向到 merge 锚点,与既有「合并区域锚点存储」机制保持一致。
|
|
85
|
+
*/
|
|
86
|
+
export declare function forEachBorderTarget(bt: BorderType, range: SelectionRange, cb: (t: BorderTarget) => void): void;
|
|
87
|
+
/**
|
|
88
|
+
* 计算「改颜色」的写入计划。
|
|
89
|
+
*
|
|
90
|
+
* 约束(对应需求):
|
|
91
|
+
* - 只命中已经存在的边框(width > 0),绝不因此创建出新的边框;
|
|
92
|
+
* - 颜色无变化(含大小写差异)的边不产生写入;
|
|
93
|
+
* - 每条实际边独立成条,相邻单元格的共享边各自记录自己那一份,
|
|
94
|
+
* 不做任何跨单元格同步 - 谁被选到才改谁,避免一侧改色把另一侧覆盖掉。
|
|
95
|
+
*/
|
|
96
|
+
export declare function planBorderColorChanges(bt: BorderType, range: SelectionRange, color: string, getSide: (col: number, row: number, side: BorderSideKey) => BorderSide | undefined): BorderWrite[];
|
|
97
|
+
/**
|
|
98
|
+
* 计算「改线型」的逐边写入计划('all' / 'none' 之外的类型)。
|
|
99
|
+
* 已存在的边保留自己的颜色,只更新 width;新建的边使用 fallbackColor。
|
|
100
|
+
*/
|
|
101
|
+
export declare function planBorderTypeWrites(bt: BorderType, range: SelectionRange, width: number, fallbackColor: string | undefined, getSide: (col: number, row: number, side: BorderSideKey) => BorderSide | undefined): BorderWrite[];
|
|
102
|
+
/**
|
|
103
|
+
* 为 'all' 生成整格边框(四边一次性替换),逐边保留已有颜色。
|
|
104
|
+
* 供 applyBorderToCell 这类「整格覆盖」入口使用。
|
|
105
|
+
*/
|
|
106
|
+
export declare function buildAllSidesBorder(col: number, row: number, width: number, fallbackColor: string | undefined, getSide: (col: number, row: number, side: BorderSideKey) => BorderSide | undefined): BorderStyle;
|
|
107
|
+
/**
|
|
108
|
+
* 为 'all' 生成整格边框(四边一次性替换),逐边强制设为给定线宽与颜色(覆盖原有颜色)。
|
|
109
|
+
* 用于「点击『所有框线』按钮」:统一用当前笔刷色覆盖四条边框。
|
|
110
|
+
* lineStyle 透传:统一应用当前笔刷线型(solid 清 style 字段)。
|
|
111
|
+
*/
|
|
112
|
+
export declare function forceAllSidesBorder(col: number, row: number, width: number, color: string | undefined, getSide: (col: number, row: number, side: BorderSideKey) => BorderSide | undefined, lineStyle?: BorderLineStyle): BorderStyle;
|
|
113
|
+
/**
|
|
114
|
+
* 读取选区在「当前边框类型作用域」内的统一边框颜色:
|
|
115
|
+
* - 所有被命中的边颜色一致 → 返回该色;
|
|
116
|
+
* - 存在不同颜色,或命中的边为空 → 返回 undefined(自动 / 混合,UI 按未选中处理)。
|
|
117
|
+
*
|
|
118
|
+
* 只统计真实存在的边框,未被画线的边不参与,避免「部分单元格没边框」把结果拉成混合。
|
|
119
|
+
*/
|
|
120
|
+
export declare function resolveSelectionBorderColor(bt: BorderType, range: SelectionRange, getSide: (col: number, row: number, side: BorderSideKey) => BorderSide | undefined): string | undefined;
|
|
121
|
+
/**
|
|
122
|
+
* 计算「改线型」的逐边写入计划。
|
|
123
|
+
*
|
|
124
|
+
* 约束(对应需求):
|
|
125
|
+
* - 只命中已经存在的边框(width > 0),绝不因此创建出新的边框;
|
|
126
|
+
* - 线型无变化(含缺省 solid)的边不产生写入;
|
|
127
|
+
* - 每条实际边独立成条,相邻单元格的共享边各自记录自己那一份,不做任何跨单元格同步;
|
|
128
|
+
* - 仅改 style,width / color 原样保留,线型与颜色互不干扰。
|
|
129
|
+
*/
|
|
130
|
+
export declare function planBorderStyleChanges(bt: BorderType, range: SelectionRange, style: BorderLineStyle, getSide: (col: number, row: number, side: BorderSideKey) => BorderSide | undefined): BorderWrite[];
|
|
131
|
+
/**
|
|
132
|
+
* 读取选区在「当前边框类型作用域」内的统一边框线型:
|
|
133
|
+
* - 所有被命中的边线型一致 → 返回该线型;
|
|
134
|
+
* - 存在不同线型,或命中的边为空 → 返回 undefined(混合 / 无线条,UI 按未选中处理)。
|
|
135
|
+
*
|
|
136
|
+
* 只统计真实存在的边框。旧数据(无 style 字段)统一按 'solid' 计,不会把结果拉成混合。
|
|
137
|
+
*/
|
|
138
|
+
export declare function resolveSelectionBorderLineStyle(bt: BorderType, range: SelectionRange, getSide: (col: number, row: number, side: BorderSideKey) => BorderSide | undefined): BorderLineStyle | undefined;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border Icon - 边框图标的单一数据源。
|
|
3
|
+
*
|
|
4
|
+
* toolbar 主按钮与 border-picker 下拉项渲染的是同一套「田字型」边框图标,
|
|
5
|
+
* 此前两处各维护一份 BORDER_SEGS / SOLID_SEGS / THICK_SEGS / segRole,
|
|
6
|
+
* 靠注释「与 border-picker.vue 保持一致」约束,实际极易改一处漏一处。
|
|
7
|
+
* 现统一收敛到此模块,两处都从这里取,杜绝不同步。
|
|
8
|
+
*/
|
|
9
|
+
export type BorderType = 'none' | 'bottom' | 'top' | 'left' | 'right' | 'all' | 'outer' | 'thickOuter';
|
|
10
|
+
/** 田字型边框图标:4 个外边 + 1 条竖中线 + 1 条横中线(viewBox 0 0 30 30) */
|
|
11
|
+
export interface BorderSeg {
|
|
12
|
+
name: string;
|
|
13
|
+
x1: number;
|
|
14
|
+
y1: number;
|
|
15
|
+
x2: number;
|
|
16
|
+
y2: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const BORDER_SEGS: BorderSeg[];
|
|
19
|
+
/** 各边框类型对应的实线段;粗外框线对应粗实线段;未列出者为虚线 */
|
|
20
|
+
export declare const SOLID_SEGS: Record<BorderType, string[]>;
|
|
21
|
+
export declare const THICK_SEGS: Record<BorderType, string[]>;
|
|
22
|
+
export declare function segRole(bt: BorderType, name: string): 'solid' | 'dashed' | 'thick';
|
|
23
|
+
/**
|
|
24
|
+
* 右下角是否需要补点。
|
|
25
|
+
*
|
|
26
|
+
* 外边线段长 22(4 → 26),虚线用 dasharray "0 4" + round cap 画圆点,
|
|
27
|
+
* 22 / 4 = 5.5 不整除,于是最后一点落在 (24,26) / (26,24),
|
|
28
|
+
* 角点 (26,26) 恰好是两条虚线的空白位,露出缺口。
|
|
29
|
+
* 仅当 right 与 bottom 同时为虚线时才可见(top / left / none 三种)。
|
|
30
|
+
*/
|
|
31
|
+
export declare function needsCornerDot(bt: BorderType): boolean;
|
|
32
|
+
/** 补充圆点半径:与 stroke-width 1.5 的 round cap 圆点直径一致 */
|
|
33
|
+
export declare const CORNER_DOT_R = 0.75;
|
|
34
|
+
/** 补充圆点位置:右下角交点 */
|
|
35
|
+
export declare const CORNER_DOT_CX = 26;
|
|
36
|
+
export declare const CORNER_DOT_CY = 26;
|
|
37
|
+
/** 下拉菜单选项顺序 */
|
|
38
|
+
export declare const BORDER_OPTIONS: {
|
|
39
|
+
key: BorderType;
|
|
40
|
+
i18nKey: string;
|
|
41
|
+
}[];
|
|
42
|
+
/** 各边框类型对应的 i18n 文案 key(toolbar 主按钮标签用) */
|
|
43
|
+
export declare const BORDER_LABEL_KEY: Record<BorderType, string>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Border Resolve
|
|
2
|
+
* Border Resolve - 公共边统一解析。
|
|
3
3
|
*
|
|
4
4
|
* 核心函数 resolveSharedBorder 负责处理相邻两个 BorderSide 的冲突,
|
|
5
5
|
* 产生唯一的最终视觉边框结果。
|
|
@@ -8,9 +8,18 @@
|
|
|
8
8
|
* 1. 两侧都 undefined/空 → 不绘制
|
|
9
9
|
* 2. 一侧存在、另一侧不存在 → 使用存在的一侧
|
|
10
10
|
* 3. 两侧都存在:
|
|
11
|
-
* a.
|
|
12
|
-
*
|
|
11
|
+
* a. 仅一侧带 owner(由边框操作显式写入的「选区边界边」)→ 该侧优先
|
|
12
|
+
* (修复:选区外框/上边框/左边框被相邻单元格旧 border 覆盖的问题;
|
|
13
|
+
* 该标记持久化在数据里,取消选区/重绘/重新加载后结果仍一致,无需同步相邻单元格)
|
|
14
|
+
* b. 两侧都带 owner 或都不带 → width 更大者优先
|
|
15
|
+
* c. width 相同时:first 侧优先(稳定 tie-break)
|
|
13
16
|
* 4. merge 不无条件覆盖 cell(firstSource/secondSource 预留但当前不影响优先级)
|
|
17
|
+
*
|
|
18
|
+
* 说明:req 要求「选区内部公共边」与「选区外普通公共边」继续沿用既有冲突规则。
|
|
19
|
+
* owner 仅由边框操作写入选区边界边时设置,因此:
|
|
20
|
+
* - 选区内部公共边(两侧都带 owner,或都无 owner)→ 走 3b/3c 既有规则;
|
|
21
|
+
* - 选区外普通公共边(两侧都无 owner)→ 走 3b/3c 既有规则,行为不变;
|
|
22
|
+
* - 仅当「本次操作写入的边界边」对面是「未带 owner 的相邻边」时,才优先本次操作边。
|
|
14
23
|
*/
|
|
15
24
|
import type { BorderSide, BorderSource } from './types';
|
|
16
25
|
/**
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border Line Style - 边框线型的纯逻辑层(与 Vue / Canvas 完全解耦,可直接单测)。
|
|
3
|
+
*
|
|
4
|
+
* 线型是「每条独立边」的属性(BorderSide.style),与颜色(color)、线宽(width)彼此解耦:
|
|
5
|
+
* - 改颜色 → 只动 color,保留 width / style;
|
|
6
|
+
* - 改线型 → 只动 style,保留 width / color;
|
|
7
|
+
* - 改线宽 → 只动 width,保留 color / style。
|
|
8
|
+
*
|
|
9
|
+
* 取值:'solid' | 'dashed' | 'dotted'。
|
|
10
|
+
* 旧数据(BorderSide 无 style 字段)一律按 'solid' 处理,从而保持历史数据兼容。
|
|
11
|
+
*/
|
|
12
|
+
/** 边框线型 */
|
|
13
|
+
export type BorderLineStyle = 'solid' | 'dashed' | 'dotted';
|
|
14
|
+
/**
|
|
15
|
+
* 归一化线型:非 'dashed' / 'dotted' 一律回退为 'solid'。
|
|
16
|
+
* 用于读取 BorderSide.style 时兜底(旧数据缺省 → solid),并防御非法字符串。
|
|
17
|
+
*/
|
|
18
|
+
export declare function normalizeBorderLineStyle(s?: string | null): BorderLineStyle;
|
|
19
|
+
/**
|
|
20
|
+
* 返回 canvas 的 dash 数组(基于线宽保证视觉一致),solid 返回 null(走 fillRect,不画虚线)。
|
|
21
|
+
* - dashed:dash 长 + gap,dash/gap 随线宽缩放;
|
|
22
|
+
* - dotted:0 长度 dash + round cap → 画出直径 = 线宽的圆点,gap 随线宽缩放。
|
|
23
|
+
*/
|
|
24
|
+
export declare function borderLineDash(style: BorderLineStyle, width: number): number[] | null;
|
|
@@ -2,7 +2,6 @@ import type { ThemeColors } from './types';
|
|
|
2
2
|
export declare const HEADER_WIDTH = 52;
|
|
3
3
|
export declare const HEADER_HEIGHT = 24;
|
|
4
4
|
export declare const DEFAULT_COL_WIDTH = 100;
|
|
5
|
-
export declare const DEFAULT_ROW_HEIGHT = 24;
|
|
6
5
|
export declare const MIN_COL_WIDTH = 30;
|
|
7
6
|
export declare const MIN_ROW_HEIGHT = 24;
|
|
8
7
|
export declare const MAX_COL_WIDTH = 1000;
|
|
@@ -20,7 +19,7 @@ export declare const DEFAULT_NOTE_AUTHOR = "";
|
|
|
20
19
|
export declare const i18n: Record<string, Record<string, string>>;
|
|
21
20
|
export declare function t(locale: string, key: string): string;
|
|
22
21
|
export declare const DEFAULT_FONT_FAMILY = "-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Microsoft YaHei\", sans-serif";
|
|
23
|
-
export declare const DEFAULT_FONT_SIZE =
|
|
22
|
+
export declare const DEFAULT_FONT_SIZE = 16;
|
|
24
23
|
export interface FontOption {
|
|
25
24
|
label: string;
|
|
26
25
|
value: string | number;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SheetModelData } from './types';
|
|
2
|
+
export interface LogicalDims {
|
|
3
|
+
colCount: number;
|
|
4
|
+
rowCount: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 从序列化数据推导工作表逻辑尺寸(0-based exclusive)。
|
|
8
|
+
*
|
|
9
|
+
* SheetModelData 不再持久化 colCount/rowCount,导入(含 v-model 外部数据重新加载)时
|
|
10
|
+
* 必须按内容推导网格大小,否则超出默认 26×200 的数据加载后会被裁剪为不可访问。
|
|
11
|
+
* 参与推导的信息:
|
|
12
|
+
* - cells 键("col,row")与 merges 范围:数据实际占据的最大行列;
|
|
13
|
+
* - colWidths / rowHeights 键:用户自定义过尺寸的行列(仅当达到最小宽/高阈值);
|
|
14
|
+
* - 筛选、条件格式、数据验证范围以及行列分组:跨越数据区外缘的结构性区域。
|
|
15
|
+
*
|
|
16
|
+
* @param smd 序列化的工作表数据
|
|
17
|
+
* @param base 保底尺寸(通常传 props 配置的默认 dims),结果不小于 base
|
|
18
|
+
*/
|
|
19
|
+
export declare function deriveModelDims(smd: SheetModelData, base: LogicalDims): LogicalDims;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sort Icon - 排序图标的单一数据源。
|
|
3
|
+
*
|
|
4
|
+
* toolbar 触发按钮与 sort-picker 下拉项渲染的是同一套排序图标
|
|
5
|
+
* (左侧三条渐宽横线 + 右侧方向箭头,viewBox 0 0 1024 1024),
|
|
6
|
+
* 此前两处各维护一份 SORT_BARS / SORT_ARROW_PATHS,靠注释「保持一致」约束。
|
|
7
|
+
* 现统一收敛到此模块,两处都从这里取,杜绝不同步。
|
|
8
|
+
*/
|
|
9
|
+
import type { SortOrder } from './sort-core';
|
|
10
|
+
/** 左侧三条渐宽横线 */
|
|
11
|
+
export interface SortBar {
|
|
12
|
+
name: string;
|
|
13
|
+
x1: number;
|
|
14
|
+
y1: number;
|
|
15
|
+
x2: number;
|
|
16
|
+
y2: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const SORT_BARS: SortBar[];
|
|
19
|
+
/** 右侧方向箭头路径 */
|
|
20
|
+
export declare const SORT_ARROW_PATHS: Record<SortOrder, string>;
|
|
21
|
+
/** 下拉菜单选项顺序 */
|
|
22
|
+
export declare const SORT_OPTIONS: {
|
|
23
|
+
key: SortOrder;
|
|
24
|
+
i18nKey: string;
|
|
25
|
+
}[];
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 主题 CSS 变量组装:把 light / dark 的 ThemeColors 平铺成 --sp-* 自定义属性,
|
|
3
|
+
* 由外层容器注入;Teleport 到 body 的浮层通过 documentElement 级变量继承主题
|
|
4
|
+
* (见 spreader.vue 的 applyGlobalThemeVars)。
|
|
5
|
+
*/
|
|
1
6
|
import { type ComputedRef } from 'vue';
|
|
2
7
|
import type { ThemeColors } from './types';
|
|
3
8
|
export declare function useTheme(theme: ComputedRef<'light' | 'dark'>): ComputedRef<ThemeColors>;
|
|
@@ -13,6 +13,14 @@ export interface BorderSide {
|
|
|
13
13
|
width?: number;
|
|
14
14
|
color?: string;
|
|
15
15
|
style?: string;
|
|
16
|
+
/**
|
|
17
|
+
* 渲染优先级标记(可选):该边由一次边框操作「显式写入」时置为 true。
|
|
18
|
+
* 作用:相邻公共边解析(resolveSharedBorder)中,若仅一侧带 owner,则该侧优先,
|
|
19
|
+
* 用于修复「选区外框/上边框/左边框被相邻单元格旧 border 覆盖」的问题。
|
|
20
|
+
* 属于持久化数据(随 BorderPool 一起序列化);旧数据缺省视为 undefined(非 owner)。
|
|
21
|
+
* 不表示跨单元格同步;A.right 与 B.left 仍各自独立存储。
|
|
22
|
+
*/
|
|
23
|
+
owner?: boolean;
|
|
16
24
|
}
|
|
17
25
|
/** 四边边框组合 */
|
|
18
26
|
export interface BorderStyle {
|
|
@@ -300,10 +308,6 @@ export interface SheetModelData {
|
|
|
300
308
|
merges?: Record<string, SelectionRange>;
|
|
301
309
|
colWidths?: Record<number, number>;
|
|
302
310
|
rowHeights?: Record<number, number>;
|
|
303
|
-
/** 工作表逻辑有效列数(0-based exclusive)。缺失时回退到默认 26 */
|
|
304
|
-
colCount?: number;
|
|
305
|
-
/** 工作表逻辑有效行数(0-based exclusive)。缺失时回退到默认 200 */
|
|
306
|
-
rowCount?: number;
|
|
307
311
|
/** 冻结窗格状态;缺省视为未冻结 { rows: 0, cols: 0 } */
|
|
308
312
|
freeze?: FreezePane;
|
|
309
313
|
/** 数据筛选状态;缺省视为未启用筛选 */
|
|
@@ -433,6 +437,12 @@ export interface ThemeColors {
|
|
|
433
437
|
toolbarBtnHoverBg: string;
|
|
434
438
|
toolbarBtnDisabledColor: string;
|
|
435
439
|
toolbarBtnActiveColor: string;
|
|
440
|
+
/** 次级文本(如对话框 label),light #666 / dark #aaa */
|
|
441
|
+
toolbarTextSecondary: string;
|
|
442
|
+
/** 弱化文本(如空状态提示),light #999 / dark #888 */
|
|
443
|
+
toolbarTextMuted: string;
|
|
444
|
+
/** 下拉/右键菜单选中项底色,light #e5f1fb / dark 半透明蓝(配 toolbarBtnActiveColor 文字色) */
|
|
445
|
+
toolbarItemActiveBg: string;
|
|
436
446
|
findMatchBg: string;
|
|
437
447
|
findActiveBg: string;
|
|
438
448
|
}
|