@visactor/vtable-sheet 1.22.9 → 1.22.10-alpha.1
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/cjs/formula/formula-editor.js +1 -1
- package/cjs/formula/formula-editor.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/dist/vtable-sheet.js +62 -18
- package/dist/vtable-sheet.min.js +1 -1
- package/es/formula/formula-editor.js +1 -1
- package/es/formula/formula-editor.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/package.json +7 -7
|
@@ -134,7 +134,7 @@ class FormulaInputEditor extends VTable_editors.InputEditor {
|
|
|
134
134
|
const highlightManager = this.sheet.formulaManager.cellHighlightManager;
|
|
135
135
|
highlightManager && highlightManager.clearHighlights();
|
|
136
136
|
}
|
|
137
|
-
this.eventHandlers.forEach((({type: type, handler: handler}) => {
|
|
137
|
+
this.element && this.eventHandlers.forEach((({type: type, handler: handler}) => {
|
|
138
138
|
this.element.removeEventListener(type, handler);
|
|
139
139
|
})), super.onEnd();
|
|
140
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/formula/formula-editor.ts"],"names":[],"mappings":"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","file":"formula-editor.js","sourcesContent":["import * as VTable_editors from '@visactor/vtable-editors';\nimport { FormulaAutocomplete } from './formula-autocomplete';\nimport type VTableSheet from '../components/vtable-sheet';\nimport type { EditContext } from '@visactor/vtable-editors';\nimport { detectFunctionParameterPosition } from './formula-helper';\n\nexport class FormulaInputEditor extends VTable_editors.InputEditor {\n private formulaAutocomplete: FormulaAutocomplete | null = null;\n private sheet: VTableSheet | null = null;\n // 定义存储事件处理函数的数组\n private eventHandlers: Array<{ type: string; handler: EventListener }> = [];\n /**\n * 设置 Sheet 实例\n */\n setSheet(sheet: VTableSheet): void {\n this.sheet = sheet;\n }\n getInputElement(): HTMLInputElement {\n return this.element;\n }\n targetIsOnEditor(target: HTMLElement): boolean {\n return target === this.element || target === this.sheet.formulaUIManager.formulaInput;\n }\n /**\n * 创建编辑器元素\n * 重写父类方法以添加自动补全功能\n */\n createElement(): void {\n super.createElement();\n\n if (this.element && this.sheet) {\n const events = ['click', 'mouseup', 'keyup', 'select', 'input', 'focus'];\n events.forEach(eventType => {\n const handler = (e: Event) => {\n const cursorPos = this.element.selectionStart;\n if (cursorPos !== null && cursorPos !== undefined) {\n this.sheet.formulaManager.lastKnownCursorPosInFormulaInput = cursorPos;\n this.sheet.formulaManager.inputingElement = this.element;\n }\n };\n\n this.element.addEventListener(eventType, handler);\n this.eventHandlers.push({ type: eventType, handler });\n });\n\n // 添加输入事件监听\n const inputHandler = (e: Event) => {\n this.handleFormulaInput(e);\n };\n this.element.addEventListener('input', inputHandler);\n this.eventHandlers.push({ type: 'input', handler: inputHandler });\n\n // 延迟初始化自动补全\n setTimeout(() => {\n this.initAutocomplete();\n }, 50);\n }\n }\n\n /**\n * 处理公式输入\n */\n private handleFormulaInput(event: Event): void {\n if (!this.sheet || !this.element) {\n return;\n }\n\n const value = this.element.value;\n // 同步内容到顶部输入栏\n this.sheet.formulaUIManager.formulaInput.value = value;\n // const inputEvent = new Event('input', { bubbles: true });\n // Object.defineProperty(inputEvent, 'isFormulaInsertion', { value: true });\n // this.sheet.formulaUIManager.formulaInput.dispatchEvent(inputEvent);\n // 获取高亮管理器\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n\n if (highlightManager) {\n if (value.startsWith('=')) {\n highlightManager.highlightFormulaCells(value);\n } else {\n highlightManager.clearHighlights();\n }\n }\n }\n\n /**\n * 初始化自动补全\n */\n private initAutocomplete(): void {\n if (!this.sheet || !this.element) {\n return;\n }\n\n // 清理之前的实例\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n this.formulaAutocomplete = null;\n }\n\n const tableContainer = this.sheet.getContentElement();\n\n this.formulaAutocomplete = new FormulaAutocomplete(tableContainer, this.sheet);\n\n // 自定义定位逻辑\n const customPositioning = () => {\n if (!this.formulaAutocomplete || !this.element) {\n return;\n }\n\n // 获取编辑器元素和容器的位置信息\n const inputRect = this.element.getBoundingClientRect();\n const containerRect = tableContainer.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n\n // 计算相对于表格容器的位置\n const relativeLeft = inputRect.left - containerRect.left;\n\n // 计算下拉框的最大高度和理想宽度\n const maxDropdownHeight = 250; // 最大高度限制\n const idealWidth = Math.max(300, inputRect.width); // 理想宽度\n\n // 计算下拉框在下方显示时的顶部位置\n let relativeTop = inputRect.bottom - containerRect.top + 2;\n\n // 检查是否有足够空间在下方显示下拉框\n const spaceBelow = windowHeight - inputRect.bottom;\n const spaceAbove = inputRect.top;\n\n // 判断应该将下拉框放在输入框的上方还是下方\n if (spaceBelow < maxDropdownHeight && spaceAbove > spaceBelow) {\n // 空间不足且上方空间更大,则放在上方\n relativeTop = inputRect.top - containerRect.top - maxDropdownHeight - 2;\n }\n\n // 确保下拉框不会超出容器底部\n const bottomOverflow = relativeTop + maxDropdownHeight - containerRect.height;\n if (bottomOverflow > 0) {\n relativeTop = Math.max(0, relativeTop - bottomOverflow);\n }\n\n // 确保下拉框不会超出容器顶部\n if (relativeTop < 0) {\n relativeTop = 0;\n }\n\n // 设置下拉框位置和样式\n const dropdown = (this.formulaAutocomplete as any).dropdown;\n if (dropdown) {\n dropdown.style.position = 'absolute';\n dropdown.style.left = `${Math.max(0, relativeLeft)}px`;\n dropdown.style.top = `${relativeTop}px`;\n dropdown.style.width = `${idealWidth}px`;\n dropdown.style.maxHeight = `${maxDropdownHeight}px`;\n dropdown.style.overflowY = 'auto';\n dropdown.style.zIndex = '10000';\n dropdown.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.15)';\n }\n };\n\n // 附加自动补全到输入框\n this.formulaAutocomplete.attachTo(\n this.element,\n item => {\n // 当选择项目时的回调函数\n this.handleAutocompleteSelect(item);\n },\n customPositioning\n );\n }\n\n /**\n * 处理自动补全选择\n */\n private handleAutocompleteSelect(item: any): void {\n if (!this.element || !this.sheet) {\n return;\n }\n this.element.value = '=' + item.value;\n // 同步内容到顶部输入栏\n this.sheet.formulaUIManager.formulaInput.value = this.element.value;\n\n // 触发高亮更新\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n if (highlightManager && this.element.value.startsWith('=')) {\n highlightManager.highlightFormulaCells(this.element.value);\n }\n }\n\n /**\n * 开始编辑\n * 重写父类方法\n */\n onStart(context: EditContext<string>): void {\n // 获取公式\n const formula = this.sheet.formulaManager.getCellFormula({\n sheet: this.sheet.getActiveSheet()?.getKey() || '',\n row: context.row,\n col: context.col\n });\n if (formula) {\n context.value = formula;\n }\n super.onStart(context);\n this.sheet.formulaManager.inputingElement = this.element;\n // 如果是公式,显示公式而不是计算结果\n if (this.sheet && typeof context.value === 'string') {\n const formula = this.sheet.formulaManager.getCellFormula({\n sheet: this.sheet.getActiveSheet()?.getKey() || '',\n row: context.row,\n col: context.col\n });\n\n if (formula) {\n this.setValue(formula);\n // 触发高亮\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n if (highlightManager) {\n highlightManager.highlightFormulaCells(formula);\n }\n }\n }\n }\n beforeEnd(): void {\n this.sheet.formulaManager.formulaWorkingOnCell = null;\n }\n /**\n * 结束编辑\n * 重写父类方法以清理自动补全\n */\n onEnd(): void {\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n this.formulaAutocomplete = null;\n }\n if (this.sheet) {\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n if (highlightManager) {\n highlightManager.clearHighlights();\n }\n }\n //解绑所有事件\n // 解绑事件(在需要解绑的地方)\n this.eventHandlers.forEach(({ type, handler }) => {\n this.element.removeEventListener(type, handler);\n });\n super.onEnd();\n }\n\n /**\n * 获取编辑器的值\n */\n getValue(): string {\n return this.element?.value || '';\n }\n\n validateValue(\n newValue?: any,\n oldValue?: any,\n position?: VTable_editors.CellAddress,\n table?: any,\n isClickOnTable?: boolean\n ): boolean | VTable_editors.ValidateEnum {\n // 判断点击到表格其他单元格,且输入了公式,则检查公式是否完整\n if (isClickOnTable && newValue && newValue.startsWith('=')) {\n // 如果有sheet实例,使用FormulaManager检查公式完整性\n if (this.sheet) {\n const formulaInput = this.element;\n this.sheet.formulaManager.inputIsParamMode = detectFunctionParameterPosition(\n formulaInput.value,\n this.sheet.formulaManager.lastKnownCursorPosInFormulaInput\n );\n if (this.sheet.formulaManager.inputIsParamMode.inParamMode) {\n // // 如果公式不完整,不退出编辑状态 TODO 这里不应该只判断完整性,如这种情况下按住ctrl连续点选 =SUM(H5) 这种情况应该允许继续编辑输入点选单元格范围\n // if (!formulaManager.isFormulaComplete(newValue)) {\n\n this.sheet.formulaManager.formulaWorkingOnCell = this.sheet.getActiveSheet()?.editingCell;\n\n return VTable_editors.ValidateEnum.validateNotExit;\n }\n return VTable_editors.ValidateEnum.validateExit;\n }\n // 如果没有sheet实例,使用简单的括号匹配检查\n const openParenCount = (newValue.match(/\\(/g) || []).length;\n const closeParenCount = (newValue.match(/\\)/g) || []).length;\n if (openParenCount !== closeParenCount) {\n return VTable_editors.ValidateEnum.validateNotExit;\n }\n }\n return true;\n }\n\n /**\n * 将选中的单元格范围转换为公式引用字符串\n * 例如:A1:B3\n */\n private getCellRangeString(range: {\n start: { col: number; row: number };\n end: { col: number; row: number };\n }): string {\n if (!range || !range.start || !range.end) {\n return '';\n }\n\n // 将列索引转换为字母表示(0->A, 1->B, 等)\n const colToLetter = (col: number): string => {\n let letter = '';\n while (col >= 0) {\n letter = String.fromCharCode(65 + (col % 26)) + letter;\n col = Math.floor(col / 26) - 1;\n }\n return letter;\n };\n\n const startCol = colToLetter(range.start.col);\n const startRow = range.start.row + 1; // 行索引从1开始\n const endCol = colToLetter(range.end.col);\n const endRow = range.end.row + 1;\n\n // 如果是单个单元格\n if (startCol === endCol && startRow === endRow) {\n return `${startCol}${startRow}`;\n }\n\n // 如果是范围\n return `${startCol}${startRow}:${endCol}${endRow}`;\n }\n}\n\nexport const formulaEditor = new FormulaInputEditor();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/formula/formula-editor.ts"],"names":[],"mappings":"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","file":"formula-editor.js","sourcesContent":["import * as VTable_editors from '@visactor/vtable-editors';\nimport { FormulaAutocomplete } from './formula-autocomplete';\nimport type VTableSheet from '../components/vtable-sheet';\nimport type { EditContext } from '@visactor/vtable-editors';\nimport { detectFunctionParameterPosition } from './formula-helper';\n\nexport class FormulaInputEditor extends VTable_editors.InputEditor {\n private formulaAutocomplete: FormulaAutocomplete | null = null;\n private sheet: VTableSheet | null = null;\n // 定义存储事件处理函数的数组\n private eventHandlers: Array<{ type: string; handler: EventListener }> = [];\n /**\n * 设置 Sheet 实例\n */\n setSheet(sheet: VTableSheet): void {\n this.sheet = sheet;\n }\n getInputElement(): HTMLInputElement {\n return this.element;\n }\n targetIsOnEditor(target: HTMLElement): boolean {\n return target === this.element || target === this.sheet.formulaUIManager.formulaInput;\n }\n /**\n * 创建编辑器元素\n * 重写父类方法以添加自动补全功能\n */\n createElement(): void {\n super.createElement();\n\n if (this.element && this.sheet) {\n const events = ['click', 'mouseup', 'keyup', 'select', 'input', 'focus'];\n events.forEach(eventType => {\n const handler = (e: Event) => {\n const cursorPos = this.element.selectionStart;\n if (cursorPos !== null && cursorPos !== undefined) {\n this.sheet.formulaManager.lastKnownCursorPosInFormulaInput = cursorPos;\n this.sheet.formulaManager.inputingElement = this.element;\n }\n };\n\n this.element.addEventListener(eventType, handler);\n this.eventHandlers.push({ type: eventType, handler });\n });\n\n // 添加输入事件监听\n const inputHandler = (e: Event) => {\n this.handleFormulaInput(e);\n };\n this.element.addEventListener('input', inputHandler);\n this.eventHandlers.push({ type: 'input', handler: inputHandler });\n\n // 延迟初始化自动补全\n setTimeout(() => {\n this.initAutocomplete();\n }, 50);\n }\n }\n\n /**\n * 处理公式输入\n */\n private handleFormulaInput(event: Event): void {\n if (!this.sheet || !this.element) {\n return;\n }\n\n const value = this.element.value;\n // 同步内容到顶部输入栏\n this.sheet.formulaUIManager.formulaInput.value = value;\n // const inputEvent = new Event('input', { bubbles: true });\n // Object.defineProperty(inputEvent, 'isFormulaInsertion', { value: true });\n // this.sheet.formulaUIManager.formulaInput.dispatchEvent(inputEvent);\n // 获取高亮管理器\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n\n if (highlightManager) {\n if (value.startsWith('=')) {\n highlightManager.highlightFormulaCells(value);\n } else {\n highlightManager.clearHighlights();\n }\n }\n }\n\n /**\n * 初始化自动补全\n */\n private initAutocomplete(): void {\n if (!this.sheet || !this.element) {\n return;\n }\n\n // 清理之前的实例\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n this.formulaAutocomplete = null;\n }\n\n const tableContainer = this.sheet.getContentElement();\n\n this.formulaAutocomplete = new FormulaAutocomplete(tableContainer, this.sheet);\n\n // 自定义定位逻辑\n const customPositioning = () => {\n if (!this.formulaAutocomplete || !this.element) {\n return;\n }\n\n // 获取编辑器元素和容器的位置信息\n const inputRect = this.element.getBoundingClientRect();\n const containerRect = tableContainer.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n\n // 计算相对于表格容器的位置\n const relativeLeft = inputRect.left - containerRect.left;\n\n // 计算下拉框的最大高度和理想宽度\n const maxDropdownHeight = 250; // 最大高度限制\n const idealWidth = Math.max(300, inputRect.width); // 理想宽度\n\n // 计算下拉框在下方显示时的顶部位置\n let relativeTop = inputRect.bottom - containerRect.top + 2;\n\n // 检查是否有足够空间在下方显示下拉框\n const spaceBelow = windowHeight - inputRect.bottom;\n const spaceAbove = inputRect.top;\n\n // 判断应该将下拉框放在输入框的上方还是下方\n if (spaceBelow < maxDropdownHeight && spaceAbove > spaceBelow) {\n // 空间不足且上方空间更大,则放在上方\n relativeTop = inputRect.top - containerRect.top - maxDropdownHeight - 2;\n }\n\n // 确保下拉框不会超出容器底部\n const bottomOverflow = relativeTop + maxDropdownHeight - containerRect.height;\n if (bottomOverflow > 0) {\n relativeTop = Math.max(0, relativeTop - bottomOverflow);\n }\n\n // 确保下拉框不会超出容器顶部\n if (relativeTop < 0) {\n relativeTop = 0;\n }\n\n // 设置下拉框位置和样式\n const dropdown = (this.formulaAutocomplete as any).dropdown;\n if (dropdown) {\n dropdown.style.position = 'absolute';\n dropdown.style.left = `${Math.max(0, relativeLeft)}px`;\n dropdown.style.top = `${relativeTop}px`;\n dropdown.style.width = `${idealWidth}px`;\n dropdown.style.maxHeight = `${maxDropdownHeight}px`;\n dropdown.style.overflowY = 'auto';\n dropdown.style.zIndex = '10000';\n dropdown.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.15)';\n }\n };\n\n // 附加自动补全到输入框\n this.formulaAutocomplete.attachTo(\n this.element,\n item => {\n // 当选择项目时的回调函数\n this.handleAutocompleteSelect(item);\n },\n customPositioning\n );\n }\n\n /**\n * 处理自动补全选择\n */\n private handleAutocompleteSelect(item: any): void {\n if (!this.element || !this.sheet) {\n return;\n }\n this.element.value = '=' + item.value;\n // 同步内容到顶部输入栏\n this.sheet.formulaUIManager.formulaInput.value = this.element.value;\n\n // 触发高亮更新\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n if (highlightManager && this.element.value.startsWith('=')) {\n highlightManager.highlightFormulaCells(this.element.value);\n }\n }\n\n /**\n * 开始编辑\n * 重写父类方法\n */\n onStart(context: EditContext<string>): void {\n // 获取公式\n const formula = this.sheet.formulaManager.getCellFormula({\n sheet: this.sheet.getActiveSheet()?.getKey() || '',\n row: context.row,\n col: context.col\n });\n if (formula) {\n context.value = formula;\n }\n super.onStart(context);\n this.sheet.formulaManager.inputingElement = this.element;\n // 如果是公式,显示公式而不是计算结果\n if (this.sheet && typeof context.value === 'string') {\n const formula = this.sheet.formulaManager.getCellFormula({\n sheet: this.sheet.getActiveSheet()?.getKey() || '',\n row: context.row,\n col: context.col\n });\n\n if (formula) {\n this.setValue(formula);\n // 触发高亮\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n if (highlightManager) {\n highlightManager.highlightFormulaCells(formula);\n }\n }\n }\n }\n beforeEnd(): void {\n this.sheet.formulaManager.formulaWorkingOnCell = null;\n }\n /**\n * 结束编辑\n * 重写父类方法以清理自动补全\n */\n onEnd(): void {\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n this.formulaAutocomplete = null;\n }\n if (this.sheet) {\n const highlightManager = this.sheet.formulaManager.cellHighlightManager;\n if (highlightManager) {\n highlightManager.clearHighlights();\n }\n }\n //解绑所有事件\n // 解绑事件(在需要解绑的地方)\n this.element &&\n this.eventHandlers.forEach(({ type, handler }) => {\n this.element.removeEventListener(type, handler);\n });\n super.onEnd();\n }\n\n /**\n * 获取编辑器的值\n */\n getValue(): string {\n return this.element?.value || '';\n }\n\n validateValue(\n newValue?: any,\n oldValue?: any,\n position?: VTable_editors.CellAddress,\n table?: any,\n isClickOnTable?: boolean\n ): boolean | VTable_editors.ValidateEnum {\n // 判断点击到表格其他单元格,且输入了公式,则检查公式是否完整\n if (isClickOnTable && newValue && newValue.startsWith('=')) {\n // 如果有sheet实例,使用FormulaManager检查公式完整性\n if (this.sheet) {\n const formulaInput = this.element;\n this.sheet.formulaManager.inputIsParamMode = detectFunctionParameterPosition(\n formulaInput.value,\n this.sheet.formulaManager.lastKnownCursorPosInFormulaInput\n );\n if (this.sheet.formulaManager.inputIsParamMode.inParamMode) {\n // // 如果公式不完整,不退出编辑状态 TODO 这里不应该只判断完整性,如这种情况下按住ctrl连续点选 =SUM(H5) 这种情况应该允许继续编辑输入点选单元格范围\n // if (!formulaManager.isFormulaComplete(newValue)) {\n\n this.sheet.formulaManager.formulaWorkingOnCell = this.sheet.getActiveSheet()?.editingCell;\n\n return VTable_editors.ValidateEnum.validateNotExit;\n }\n return VTable_editors.ValidateEnum.validateExit;\n }\n // 如果没有sheet实例,使用简单的括号匹配检查\n const openParenCount = (newValue.match(/\\(/g) || []).length;\n const closeParenCount = (newValue.match(/\\)/g) || []).length;\n if (openParenCount !== closeParenCount) {\n return VTable_editors.ValidateEnum.validateNotExit;\n }\n }\n return true;\n }\n\n /**\n * 将选中的单元格范围转换为公式引用字符串\n * 例如:A1:B3\n */\n private getCellRangeString(range: {\n start: { col: number; row: number };\n end: { col: number; row: number };\n }): string {\n if (!range || !range.start || !range.end) {\n return '';\n }\n\n // 将列索引转换为字母表示(0->A, 1->B, 等)\n const colToLetter = (col: number): string => {\n let letter = '';\n while (col >= 0) {\n letter = String.fromCharCode(65 + (col % 26)) + letter;\n col = Math.floor(col / 26) - 1;\n }\n return letter;\n };\n\n const startCol = colToLetter(range.start.col);\n const startRow = range.start.row + 1; // 行索引从1开始\n const endCol = colToLetter(range.end.col);\n const endRow = range.end.row + 1;\n\n // 如果是单个单元格\n if (startCol === endCol && startRow === endRow) {\n return `${startCol}${startRow}`;\n }\n\n // 如果是范围\n return `${startCol}${startRow}:${endCol}${endRow}`;\n }\n}\n\nexport const formulaEditor = new FormulaInputEditor();\n"]}
|
package/cjs/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ import VTableSheet from './components/vtable-sheet';
|
|
|
2
2
|
import type { ISheetDefine, IVTableSheetOptions } from './ts-types';
|
|
3
3
|
import * as TYPES from './ts-types';
|
|
4
4
|
import * as VTable from './vtable';
|
|
5
|
-
export declare const version = "1.22.
|
|
5
|
+
export declare const version = "1.22.10-alpha.1";
|
|
6
6
|
export { VTableSheet, TYPES, VTable, ISheetDefine, IVTableSheetOptions };
|
package/cjs/index.js
CHANGED
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6EAAoD;AAW3C,sBAXF,sBAAW,CAWE;AATpB,kDAAoC;AASd,sBAAK;AAR3B,iDAAmC;AAQN,wBAAM;AAPnC,0DAAsD;AACzC,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6EAAoD;AAW3C,sBAXF,sBAAW,CAWE;AATpB,kDAAoC;AASd,sBAAK;AAR3B,iDAAmC;AAQN,wBAAM;AAPnC,0DAAsD;AACzC,QAAA,OAAO,GAAG,iBAAiB,CAAC;AAEzC,IAAA,4BAAY,GAAE,CAAC","file":"index.js","sourcesContent":["import VTableSheet from './components/vtable-sheet';\nimport type { ISheetDefine, IVTableSheetOptions } from './ts-types';\nimport * as TYPES from './ts-types';\nimport * as VTable from './vtable';\nimport { importStyles } from './styles/style-manager';\nexport const version = \"1.22.10-alpha.1\";\n// 导入样式\nimportStyles();\n/**\n * @namespace VTableSheet\n */\nexport { VTableSheet, TYPES, VTable, ISheetDefine, IVTableSheetOptions };\n"]}
|
package/dist/vtable-sheet.js
CHANGED
|
@@ -2922,25 +2922,48 @@
|
|
|
2922
2922
|
|
|
2923
2923
|
class InputEditor {
|
|
2924
2924
|
constructor(editorConfig) {
|
|
2925
|
-
this.editorType = "Input", this.editorConfig = editorConfig;
|
|
2925
|
+
this.editorType = "Input", this.eventHandlers = [], this.editorConfig = editorConfig;
|
|
2926
2926
|
}
|
|
2927
2927
|
getInputElement() {
|
|
2928
2928
|
return this.element;
|
|
2929
2929
|
}
|
|
2930
2930
|
createElement() {
|
|
2931
2931
|
var _a;
|
|
2932
|
+
this.eventHandlers = [];
|
|
2932
2933
|
const input = document.createElement("input");
|
|
2933
|
-
input.setAttribute("type", "text"), (null === (_a = this.editorConfig) || void 0 === _a ? void 0 : _a.readonly) && input.setAttribute("readonly", `${this.editorConfig.readonly}`), input.style.position = "absolute", input.style.padding = "4px", input.style.width = "100%", input.style.boxSizing = "border-box", input.style.backgroundColor = "#FFFFFF", input.style.borderRadius = "0px", input.style.border = "2px solid #d9d9d9"
|
|
2934
|
+
input.setAttribute("type", "text"), (null === (_a = this.editorConfig) || void 0 === _a ? void 0 : _a.readonly) && input.setAttribute("readonly", `${this.editorConfig.readonly}`), input.style.position = "absolute", input.style.padding = "4px", input.style.width = "100%", input.style.boxSizing = "border-box", input.style.backgroundColor = "#FFFFFF", input.style.borderRadius = "0px", input.style.border = "2px solid #d9d9d9";
|
|
2935
|
+
const focusHandler = () => {
|
|
2934
2936
|
input.style.borderColor = "#4A90E2", input.style.outline = "none";
|
|
2935
|
-
}
|
|
2936
|
-
|
|
2937
|
+
};
|
|
2938
|
+
input.addEventListener("focus", focusHandler), this.eventHandlers.push({
|
|
2939
|
+
type: "focus",
|
|
2940
|
+
handler: focusHandler
|
|
2941
|
+
});
|
|
2942
|
+
const blurHandler = e => {
|
|
2943
|
+
if (input.style.borderColor = "#d9d9d9", this.table && this.element && "0" === this.element.style.opacity) {
|
|
2937
2944
|
const selectCell = this.table.stateManager.select.cellPos;
|
|
2938
2945
|
selectCell.col === this.col && selectCell.row === this.row || this.onEnd();
|
|
2939
2946
|
}
|
|
2940
|
-
}
|
|
2941
|
-
|
|
2942
|
-
|
|
2947
|
+
};
|
|
2948
|
+
input.addEventListener("blur", blurHandler), this.eventHandlers.push({
|
|
2949
|
+
type: "blur",
|
|
2950
|
+
handler: blurHandler
|
|
2951
|
+
}), this.element = input, this.container.appendChild(input);
|
|
2952
|
+
const keydownHandler = e => {
|
|
2953
|
+
var _a;
|
|
2954
|
+
const keyboardEvent = e;
|
|
2955
|
+
"a" === keyboardEvent.key && (keyboardEvent.ctrlKey || keyboardEvent.metaKey) && (null === (_a = this.table.editorManager) || void 0 === _a ? void 0 : _a.editingEditor) && keyboardEvent.stopPropagation();
|
|
2956
|
+
};
|
|
2957
|
+
input.addEventListener("keydown", keydownHandler), this.eventHandlers.push({
|
|
2958
|
+
type: "keydown",
|
|
2959
|
+
handler: keydownHandler
|
|
2960
|
+
});
|
|
2961
|
+
const wheelHandler = e => {
|
|
2943
2962
|
e.preventDefault();
|
|
2963
|
+
};
|
|
2964
|
+
input.addEventListener("wheel", wheelHandler), this.eventHandlers.push({
|
|
2965
|
+
type: "wheel",
|
|
2966
|
+
handler: wheelHandler
|
|
2944
2967
|
});
|
|
2945
2968
|
}
|
|
2946
2969
|
setValue(value) {
|
|
@@ -2958,7 +2981,7 @@
|
|
|
2958
2981
|
}) {
|
|
2959
2982
|
this.container = container, this.table = table, this.col = col, this.row = row;
|
|
2960
2983
|
const selectCell = this.table.stateManager.select.cellPos;
|
|
2961
|
-
selectCell.col === this.col && selectCell.row === this.row && (this.element || this.createElement(), this.element.style.opacity = "0", this.element.style.pointerEvents = "none", (null == referencePosition ? void 0 : referencePosition.rect) && this.adjustPosition(referencePosition.rect), this.element.focus());
|
|
2984
|
+
selectCell.col === this.col && selectCell.row === this.row && (this.element ? container.contains(this.element) || (this.element.parentElement.removeChild(this.element), this.container.appendChild(this.element)) : this.createElement(), this.element.style.opacity = "0", this.element.style.pointerEvents = "none", (null == referencePosition ? void 0 : referencePosition.rect) && this.adjustPosition(referencePosition.rect), this.element.focus());
|
|
2962
2985
|
}
|
|
2963
2986
|
onStart({
|
|
2964
2987
|
value: value,
|
|
@@ -2969,7 +2992,7 @@
|
|
|
2969
2992
|
col: col,
|
|
2970
2993
|
row: row
|
|
2971
2994
|
}) {
|
|
2972
|
-
this.container = container, this.successCallback = endEdit, this.table = table, this.col = col, this.row = row, this.element || (this.createElement(), (null == referencePosition ? void 0 : referencePosition.rect) && this.adjustPosition(referencePosition.rect)), null != value && this.setValue(value), this.element.style.opacity = "1", this.element.style.pointerEvents = "auto", this.element.focus();
|
|
2995
|
+
this.container = container, this.successCallback = endEdit, this.table = table, this.col = col, this.row = row, this.element ? container.contains(this.element) || (this.element.parentElement.removeChild(this.element), this.container.appendChild(this.element)) : (this.createElement(), (null == referencePosition ? void 0 : referencePosition.rect) && this.adjustPosition(referencePosition.rect)), null != value && this.setValue(value), this.element.style.opacity = "1", this.element.style.pointerEvents = "auto", this.element.focus();
|
|
2973
2996
|
}
|
|
2974
2997
|
adjustPosition(rect) {
|
|
2975
2998
|
const top = rect.top - 1,
|
|
@@ -2980,8 +3003,21 @@
|
|
|
2980
3003
|
}
|
|
2981
3004
|
endEditing() {}
|
|
2982
3005
|
onEnd() {
|
|
2983
|
-
|
|
2984
|
-
|
|
3006
|
+
if (!this.element) return;
|
|
3007
|
+
const element = this.element;
|
|
3008
|
+
this.eventHandlers.forEach(({
|
|
3009
|
+
type: type,
|
|
3010
|
+
handler: handler
|
|
3011
|
+
}) => {
|
|
3012
|
+
element.removeEventListener(type, handler);
|
|
3013
|
+
}), this.eventHandlers = [];
|
|
3014
|
+
const parentNode = element.parentNode;
|
|
3015
|
+
if (parentNode) try {
|
|
3016
|
+
parentNode.removeChild(element);
|
|
3017
|
+
} catch (error) {
|
|
3018
|
+
if (error instanceof Error && "NotFoundError" !== error.name) throw error;
|
|
3019
|
+
}
|
|
3020
|
+
this.element = void 0;
|
|
2985
3021
|
}
|
|
2986
3022
|
isEditorElement(target) {
|
|
2987
3023
|
return target === this.element;
|
|
@@ -59981,7 +60017,7 @@
|
|
|
59981
60017
|
}
|
|
59982
60018
|
constructor(container, options = {}) {
|
|
59983
60019
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
|
|
59984
|
-
if (super(), this.showFrozenIcon = !0, this.version = "1.22.
|
|
60020
|
+
if (super(), this.showFrozenIcon = !0, this.version = "1.22.10-alpha.1", this.id = `VTable${Date.now()}`, this.isReleased = !1, this._chartEventMap = {}, this.throttleInvalidate = throttle2(this.render.bind(this), 200), "node" === Env$1.mode ? (options = container, container = null) : container instanceof HTMLElement || (options = container, container = container.container ? container.container : null), !container && "node" !== options.mode && !options.canvas) throw new Error("vtable's container is undefined");
|
|
59985
60021
|
this.pluginManager = new PluginManager(this, options), this.fireListeners(TABLE_EVENT_TYPE.BEFORE_INIT, {
|
|
59986
60022
|
options: options,
|
|
59987
60023
|
container: container
|
|
@@ -65060,6 +65096,10 @@
|
|
|
65060
65096
|
var _a, _b;
|
|
65061
65097
|
const lastSelectedCellEditor = this.editorManager.cacheLastSelectedCellEditor[`${col}-${row}`];
|
|
65062
65098
|
if (lastSelectedCellEditor) return lastSelectedCellEditor;
|
|
65099
|
+
Object.values(this.editorManager.cacheLastSelectedCellEditor).forEach(editor => {
|
|
65100
|
+
var _a;
|
|
65101
|
+
return null === (_a = editor.onEnd) || void 0 === _a ? void 0 : _a.call(editor);
|
|
65102
|
+
}), this.editorManager.cacheLastSelectedCellEditor = {};
|
|
65063
65103
|
const define = this.getBodyColumnDefine(col, row);
|
|
65064
65104
|
let editor = this.isHeader(col, row) ? null !== (_a = null == define ? void 0 : define.headerEditor) && void 0 !== _a ? _a : this.options.headerEditor : null !== (_b = null == define ? void 0 : define.editor) && void 0 !== _b ? _b : this.options.editor;
|
|
65065
65105
|
if ("function" == typeof editor) {
|
|
@@ -65071,7 +65111,7 @@
|
|
|
65071
65111
|
table: this
|
|
65072
65112
|
});
|
|
65073
65113
|
}
|
|
65074
|
-
return "string" == typeof editor && (editor = get(editor)), this.editorManager.cacheLastSelectedCellEditor
|
|
65114
|
+
return "string" == typeof editor && (editor = get(editor)), this.editorManager.cacheLastSelectedCellEditor[`${col}-${row}`] = editor, editor;
|
|
65075
65115
|
}
|
|
65076
65116
|
isHasEditorDefine(col, row) {
|
|
65077
65117
|
var _a, _b;
|
|
@@ -69373,7 +69413,10 @@
|
|
|
69373
69413
|
if (!this.table.editorManager.editingEditor || eventKey !== ExcelEditCellKeyboardResponse.ENTER && eventKey !== ExcelEditCellKeyboardResponse.TAB) {
|
|
69374
69414
|
if (!this.table.editorManager.editingEditor && (eventKey === ExcelEditCellKeyboardResponse.DELETE || eventKey === ExcelEditCellKeyboardResponse.BACKSPACE)) {
|
|
69375
69415
|
const selectCells = this.table.getSelectedCellInfos();
|
|
69376
|
-
(null == selectCells ? void 0 : selectCells.length) > 0 && document.activeElement === this.table.getElement()
|
|
69416
|
+
(null == selectCells ? void 0 : selectCells.length) > 0 && (document.activeElement === this.table.getElement() || Object.values(this.table.editorManager.cacheLastSelectedCellEditor || {}).some(editor => {
|
|
69417
|
+
var _a;
|
|
69418
|
+
return (null === (_a = editor.getInputElement) || void 0 === _a ? void 0 : _a.call(editor)) === document.activeElement;
|
|
69419
|
+
})) && (deleteSelectRange(selectCells, this.table, null === (_c = null === (_b = this.pluginOptions) || void 0 === _b ? void 0 : _b.deleteWorkOnEditableCell) || void 0 === _c || _c), event.stopPropagation(), event.preventDefault());
|
|
69377
69420
|
}
|
|
69378
69421
|
} else this.table.editorManager.completeEdit(), this.table.getElement().focus(), eventKey === ExcelEditCellKeyboardResponse.ENTER ? this.table.selectCell(col, row + 1) : eventKey === ExcelEditCellKeyboardResponse.TAB && this.table.selectCell(col + 1, row), event.stopPropagation(), event.preventDefault();
|
|
69379
69422
|
}
|
|
@@ -84424,9 +84467,10 @@
|
|
|
84424
84467
|
highlightManager.clearHighlights();
|
|
84425
84468
|
}
|
|
84426
84469
|
}
|
|
84427
|
-
this.
|
|
84428
|
-
this.
|
|
84429
|
-
|
|
84470
|
+
this.element &&
|
|
84471
|
+
this.eventHandlers.forEach(({ type, handler }) => {
|
|
84472
|
+
this.element.removeEventListener(type, handler);
|
|
84473
|
+
});
|
|
84430
84474
|
super.onEnd();
|
|
84431
84475
|
}
|
|
84432
84476
|
getValue() {
|
|
@@ -90959,7 +91003,7 @@
|
|
|
90959
91003
|
importStyle();
|
|
90960
91004
|
}
|
|
90961
91005
|
|
|
90962
|
-
const version = "1.22.
|
|
91006
|
+
const version = "1.22.10-alpha.1";
|
|
90963
91007
|
importStyles();
|
|
90964
91008
|
|
|
90965
91009
|
exports.TYPES = index;
|