@visactor/vtable-plugins 1.19.9-alpha.3 → 1.20.0-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/README.md +7 -4
- package/cjs/add-row-column.d.ts +2 -2
- package/cjs/add-row-column.js +3 -3
- package/cjs/add-row-column.js.map +1 -1
- package/cjs/auto-fill/auto-fill-helper.d.ts +23 -0
- package/cjs/auto-fill/auto-fill-helper.js +83 -0
- package/cjs/auto-fill/auto-fill-helper.js.map +1 -0
- package/cjs/auto-fill/auto-fill-manager.d.ts +26 -0
- package/cjs/auto-fill/auto-fill-manager.js +244 -0
- package/cjs/auto-fill/auto-fill-manager.js.map +1 -0
- package/cjs/auto-fill/auto-fill-services.d.ts +12 -0
- package/cjs/auto-fill/auto-fill-services.js +27 -0
- package/cjs/auto-fill/auto-fill-services.js.map +1 -0
- package/cjs/auto-fill/date-tools.d.ts +5 -0
- package/cjs/auto-fill/date-tools.js +37 -0
- package/cjs/auto-fill/date-tools.js.map +1 -0
- package/cjs/auto-fill/index.d.ts +21 -0
- package/cjs/auto-fill/index.js +52 -0
- package/cjs/auto-fill/index.js.map +1 -0
- package/cjs/auto-fill/rules.d.ts +10 -0
- package/cjs/auto-fill/rules.js +196 -0
- package/cjs/auto-fill/rules.js.map +1 -0
- package/cjs/auto-fill/series-converters.d.ts +27 -0
- package/cjs/auto-fill/series-converters.js +90 -0
- package/cjs/auto-fill/series-converters.js.map +1 -0
- package/cjs/auto-fill/types.d.ts +67 -0
- package/cjs/auto-fill/types.js +20 -0
- package/cjs/auto-fill/types.js.map +1 -0
- package/cjs/auto-fill/utils/date.d.ts +5 -0
- package/cjs/auto-fill/utils/date.js +76 -0
- package/cjs/auto-fill/utils/date.js.map +1 -0
- package/cjs/auto-fill/utils/fill.d.ts +82 -0
- package/cjs/auto-fill/utils/fill.js +361 -0
- package/cjs/auto-fill/utils/fill.js.map +1 -0
- package/cjs/carousel-animation.d.ts +1 -1
- package/cjs/carousel-animation.js.map +1 -1
- package/cjs/column-series.js +1 -1
- package/cjs/column-series.js.map +1 -1
- package/cjs/context-menu.d.ts +34 -0
- package/cjs/context-menu.js +157 -0
- package/cjs/context-menu.js.map +1 -0
- package/cjs/contextmenu/handle-menu-helper.d.ts +23 -0
- package/cjs/contextmenu/handle-menu-helper.js +107 -0
- package/cjs/contextmenu/handle-menu-helper.js.map +1 -0
- package/cjs/contextmenu/index.d.ts +3 -0
- package/cjs/contextmenu/index.js +22 -0
- package/cjs/contextmenu/index.js.map +1 -0
- package/cjs/contextmenu/menu-manager.d.ts +27 -0
- package/cjs/contextmenu/menu-manager.js +139 -0
- package/cjs/contextmenu/menu-manager.js.map +1 -0
- package/cjs/contextmenu/styles.d.ts +106 -0
- package/cjs/contextmenu/styles.js +195 -0
- package/cjs/contextmenu/styles.js.map +1 -0
- package/cjs/contextmenu/types.d.ts +69 -0
- package/cjs/contextmenu/types.js +123 -0
- package/cjs/contextmenu/types.js.map +1 -0
- package/cjs/excel-edit-cell-keyboard.js +2 -2
- package/cjs/excel-edit-cell-keyboard.js.map +1 -1
- package/cjs/excel-import.js +8 -8
- package/cjs/excel-import.js.map +1 -1
- package/cjs/fillHandleUtils/autoFillHandle.js.map +1 -1
- package/cjs/fillHandleUtils/translateRowObj.js.map +1 -1
- package/cjs/filter/condition-filter.d.ts +30 -0
- package/cjs/filter/condition-filter.js +271 -0
- package/cjs/filter/condition-filter.js.map +1 -0
- package/cjs/filter/filter-engine.d.ts +13 -0
- package/cjs/filter/filter-engine.js +102 -0
- package/cjs/filter/filter-engine.js.map +1 -0
- package/cjs/filter/filter-state-manager.d.ts +21 -0
- package/cjs/filter/filter-state-manager.js +101 -0
- package/cjs/filter/filter-state-manager.js.map +1 -0
- package/cjs/filter/filter-toolbar.d.ts +31 -0
- package/cjs/filter/filter-toolbar.js +98 -0
- package/cjs/filter/filter-toolbar.js.map +1 -0
- package/cjs/filter/filter.d.ts +26 -0
- package/cjs/filter/filter.js +150 -0
- package/cjs/filter/filter.js.map +1 -0
- package/cjs/filter/index.d.ts +7 -0
- package/cjs/filter/index.js +66 -0
- package/cjs/filter/index.js.map +1 -0
- package/cjs/filter/styles.d.ts +126 -0
- package/cjs/filter/styles.js +145 -0
- package/cjs/filter/styles.js.map +1 -0
- package/cjs/filter/types.d.ts +55 -0
- package/cjs/filter/types.js +18 -0
- package/cjs/filter/types.js.map +1 -0
- package/cjs/filter/value-filter.d.ts +31 -0
- package/cjs/filter/value-filter.js +280 -0
- package/cjs/filter/value-filter.js.map +1 -0
- package/cjs/focus-highlight.js +1 -1
- package/cjs/focus-highlight.js.map +1 -1
- package/cjs/gantt-export-image.js.map +1 -1
- package/cjs/header-highlight.js.map +1 -1
- package/cjs/highlight-header-when-select-cell.d.ts +1 -2
- package/cjs/highlight-header-when-select-cell.js +1 -1
- package/cjs/highlight-header-when-select-cell.js.map +1 -1
- package/cjs/index.d.ts +4 -0
- package/cjs/index.js +3 -1
- package/cjs/index.js.map +1 -1
- package/cjs/invert-highlight.js.map +1 -1
- package/cjs/paste-add-row-column.d.ts +1 -0
- package/cjs/paste-add-row-column.js +3 -2
- package/cjs/paste-add-row-column.js.map +1 -1
- package/cjs/rotate-table.js +1 -1
- package/cjs/rotate-table.js.map +1 -1
- package/cjs/row-series.js +1 -1
- package/cjs/row-series.js.map +1 -1
- package/cjs/table-carousel-animation.js +2 -3
- package/cjs/table-carousel-animation.js.map +1 -1
- package/cjs/table-export/csv/index.js +1 -1
- package/cjs/table-export/csv/index.js.map +1 -1
- package/cjs/table-export/excel/index.js.map +1 -1
- package/cjs/table-export/excel/style.js +0 -1
- package/cjs/table-export/excel/style.js.map +1 -1
- package/cjs/table-export/index.js.map +1 -1
- package/cjs/table-export/util/color.js.map +1 -1
- package/cjs/table-export/util/download.js.map +1 -1
- package/cjs/table-export/util/encode.js.map +1 -1
- package/cjs/table-export/util/indent.js.map +1 -1
- package/cjs/table-export/util/pagination.js.map +1 -1
- package/cjs/table-export/util/promise.js.map +1 -1
- package/cjs/table-export/util/type.js +1 -1
- package/cjs/table-export/util/type.js.map +1 -1
- package/cjs/table-export.js +1 -2
- package/cjs/table-export.js.map +1 -1
- package/cjs/table-series-number.d.ts +41 -0
- package/cjs/table-series-number.js +261 -0
- package/cjs/table-series-number.js.map +1 -0
- package/cjs/types.d.ts +1 -0
- package/cjs/types.js +17 -1
- package/cjs/types.js.map +1 -1
- package/cjs/wps-fill-handle.js +1 -1
- package/cjs/wps-fill-handle.js.map +1 -1
- package/dist/vtable-plugins.js +7594 -1492
- package/dist/vtable-plugins.min.js +14 -14
- package/es/add-row-column.d.ts +2 -2
- package/es/add-row-column.js +3 -3
- package/es/add-row-column.js.map +1 -1
- package/es/auto-fill/auto-fill-helper.d.ts +23 -0
- package/es/auto-fill/auto-fill-helper.js +75 -0
- package/es/auto-fill/auto-fill-helper.js.map +1 -0
- package/es/auto-fill/auto-fill-manager.d.ts +26 -0
- package/es/auto-fill/auto-fill-manager.js +218 -0
- package/es/auto-fill/auto-fill-manager.js.map +1 -0
- package/es/auto-fill/auto-fill-services.d.ts +12 -0
- package/es/auto-fill/auto-fill-services.js +19 -0
- package/es/auto-fill/auto-fill-services.js.map +1 -0
- package/es/auto-fill/date-tools.d.ts +5 -0
- package/es/auto-fill/date-tools.js +29 -0
- package/es/auto-fill/date-tools.js.map +1 -0
- package/es/auto-fill/index.d.ts +21 -0
- package/es/auto-fill/index.js +21 -0
- package/es/auto-fill/index.js.map +1 -0
- package/es/auto-fill/rules.d.ts +10 -0
- package/es/auto-fill/rules.js +203 -0
- package/es/auto-fill/rules.js.map +1 -0
- package/es/auto-fill/series-converters.d.ts +27 -0
- package/es/auto-fill/series-converters.js +83 -0
- package/es/auto-fill/series-converters.js.map +1 -0
- package/es/auto-fill/types.d.ts +67 -0
- package/es/auto-fill/types.js +27 -0
- package/es/auto-fill/types.js.map +1 -0
- package/es/auto-fill/utils/date.d.ts +5 -0
- package/es/auto-fill/utils/date.js +68 -0
- package/es/auto-fill/utils/date.js.map +1 -0
- package/es/auto-fill/utils/fill.d.ts +82 -0
- package/es/auto-fill/utils/fill.js +347 -0
- package/es/auto-fill/utils/fill.js.map +1 -0
- package/es/carousel-animation.d.ts +1 -1
- package/es/carousel-animation.js.map +1 -1
- package/es/column-series.js +1 -1
- package/es/column-series.js.map +1 -1
- package/es/context-menu.d.ts +34 -0
- package/es/context-menu.js +129 -0
- package/es/context-menu.js.map +1 -0
- package/es/contextmenu/handle-menu-helper.d.ts +23 -0
- package/es/contextmenu/handle-menu-helper.js +99 -0
- package/es/contextmenu/handle-menu-helper.js.map +1 -0
- package/es/contextmenu/index.d.ts +3 -0
- package/es/contextmenu/index.js +6 -0
- package/es/contextmenu/index.js.map +1 -0
- package/es/contextmenu/menu-manager.d.ts +27 -0
- package/es/contextmenu/menu-manager.js +130 -0
- package/es/contextmenu/menu-manager.js.map +1 -0
- package/es/contextmenu/styles.d.ts +106 -0
- package/es/contextmenu/styles.js +197 -0
- package/es/contextmenu/styles.js.map +1 -0
- package/es/contextmenu/types.d.ts +69 -0
- package/es/contextmenu/types.js +122 -0
- package/es/contextmenu/types.js.map +1 -0
- package/es/excel-edit-cell-keyboard.js +2 -2
- package/es/excel-edit-cell-keyboard.js.map +1 -1
- package/es/excel-import.js +8 -8
- package/es/excel-import.js.map +1 -1
- package/es/fillHandleUtils/autoFillHandle.js.map +1 -1
- package/es/fillHandleUtils/translateRowObj.js.map +1 -1
- package/es/filter/condition-filter.d.ts +30 -0
- package/es/filter/condition-filter.js +262 -0
- package/es/filter/condition-filter.js.map +1 -0
- package/es/filter/filter-engine.d.ts +13 -0
- package/es/filter/filter-engine.js +94 -0
- package/es/filter/filter-engine.js.map +1 -0
- package/es/filter/filter-state-manager.d.ts +21 -0
- package/es/filter/filter-state-manager.js +93 -0
- package/es/filter/filter-state-manager.js.map +1 -0
- package/es/filter/filter-toolbar.d.ts +31 -0
- package/es/filter/filter-toolbar.js +90 -0
- package/es/filter/filter-toolbar.js.map +1 -0
- package/es/filter/filter.d.ts +26 -0
- package/es/filter/filter.js +125 -0
- package/es/filter/filter.js.map +1 -0
- package/es/filter/index.d.ts +7 -0
- package/es/filter/index.js +14 -0
- package/es/filter/index.js.map +1 -0
- package/es/filter/styles.d.ts +126 -0
- package/es/filter/styles.js +140 -0
- package/es/filter/styles.js.map +1 -0
- package/es/filter/types.d.ts +55 -0
- package/es/filter/types.js +17 -0
- package/es/filter/types.js.map +1 -0
- package/es/filter/value-filter.d.ts +31 -0
- package/es/filter/value-filter.js +275 -0
- package/es/filter/value-filter.js.map +1 -0
- package/es/focus-highlight.js +1 -1
- package/es/focus-highlight.js.map +1 -1
- package/es/gantt-export-image.js.map +1 -1
- package/es/header-highlight.js.map +1 -1
- package/es/highlight-header-when-select-cell.d.ts +1 -2
- package/es/highlight-header-when-select-cell.js +1 -1
- package/es/highlight-header-when-select-cell.js.map +1 -1
- package/es/index.d.ts +4 -0
- package/es/index.js +8 -0
- package/es/index.js.map +1 -1
- package/es/invert-highlight.js.map +1 -1
- package/es/paste-add-row-column.d.ts +1 -0
- package/es/paste-add-row-column.js +3 -2
- package/es/paste-add-row-column.js.map +1 -1
- package/es/rotate-table.js +1 -1
- package/es/rotate-table.js.map +1 -1
- package/es/row-series.js +1 -1
- package/es/row-series.js.map +1 -1
- package/es/table-carousel-animation.js +3 -3
- package/es/table-carousel-animation.js.map +1 -1
- package/es/table-export/csv/index.js +1 -1
- package/es/table-export/csv/index.js.map +1 -1
- package/es/table-export/excel/index.js.map +1 -1
- package/es/table-export/excel/style.js +1 -2
- package/es/table-export/excel/style.js.map +1 -1
- package/es/table-export/index.js.map +1 -1
- package/es/table-export/util/color.js.map +1 -1
- package/es/table-export/util/download.js.map +1 -1
- package/es/table-export/util/encode.js.map +1 -1
- package/es/table-export/util/indent.js.map +1 -1
- package/es/table-export/util/pagination.js.map +1 -1
- package/es/table-export/util/promise.js.map +1 -1
- package/es/table-export/util/type.js +1 -1
- package/es/table-export/util/type.js.map +1 -1
- package/es/table-export.js +1 -2
- package/es/table-export.js.map +1 -1
- package/es/table-series-number.d.ts +41 -0
- package/es/table-series-number.js +253 -0
- package/es/table-series-number.js.map +1 -0
- package/es/types.d.ts +1 -0
- package/es/types.js +2 -1
- package/es/types.js.map +1 -1
- package/es/wps-fill-handle.js +1 -1
- package/es/wps-fill-handle.js.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contextmenu/menu-manager.ts"],"names":[],"mappings":"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","file":"menu-manager.js","sourcesContent":["import type { ListTable } from '@visactor/vtable';\nimport { vglobal } from '@visactor/vtable/es/vrender';\nimport {\n MENU_CONTAINER_CLASS,\n MENU_ITEM_CLASS,\n MENU_ITEM_SEPARATOR_CLASS,\n MENU_ITEM_SUBMENU_CLASS,\n MENU_STYLES,\n createElement,\n applyStyles,\n createIcon,\n createNumberInputItem,\n MENU_ITEM_DISABLED_CLASS\n} from './styles';\nimport type { MenuItemOrSeparator } from './types';\nimport type { MenuItem } from './types';\nimport type { MenuClickEventArgs } from './types';\n\ninterface MenuContext {\n rowIndex?: number;\n colIndex?: number;\n}\n\n/**\n * 菜单管理器\n */\nexport class MenuManager {\n private menuContainer: HTMLElement | null = null;\n private activeSubmenus: HTMLElement[] = [];\n private clickCallback: Function | null = null;\n private table: ListTable | null = null;\n private context: MenuContext = {};\n private hideTimeout: any = null;\n private showTimeout: any = null;\n private submenuShowDelay = 100;\n private submenuHideDelay = 500;\n\n /**\n * 显示菜单\n */\n showMenu(menuItems: MenuItemOrSeparator[], x: number, y: number, context: MenuContext, table: ListTable): void {\n // 保存上下文\n this.context = context;\n this.table = table;\n\n // 清除之前的菜单\n this.release();\n\n // 创建菜单容器\n this.menuContainer = createElement('div', MENU_CONTAINER_CLASS);\n applyStyles(this.menuContainer, MENU_STYLES.menuContainer);\n document.body.appendChild(this.menuContainer);\n\n // 创建菜单项\n this.createMenuItems(menuItems, this.menuContainer);\n\n // 调整菜单位置\n this.positionMenu(this.menuContainer, x, y);\n\n // 添加全局点击事件,用于关闭菜单\n setTimeout(() => {\n vglobal.addEventListener('click', this.handleDocumentClick);\n }, 0);\n }\n\n /**\n * 设置菜单点击回调\n */\n setClickCallback(callback: Function): void {\n this.clickCallback = callback;\n }\n\n /**\n * 创建菜单项\n */\n private createMenuItems(items: MenuItemOrSeparator[], container: HTMLElement, parentItem?: MenuItem): void {\n items.forEach(item => {\n if (typeof item === 'string' && item === '---') {\n // 创建分隔线\n const separator = createElement('div', MENU_ITEM_SEPARATOR_CLASS);\n applyStyles(separator, MENU_STYLES.menuItemSeparator);\n container.appendChild(separator);\n // } else if (typeof item === 'object' && 'type' in item && item.type === 'input') {\n // // 创建输入框菜单项\n // const inputItem = item as MenuItemInput;\n // const wrapper = createNumberInputItem(\n // inputItem.label,\n // inputItem.defaultValue || 1,\n // inputItem.iconName,\n // (value: number) => {\n // this.handleMenuItemClick({\n // menuKey: inputItem.menuKey,\n // menuText: inputItem.label,\n // inputValue: value,\n // ...this.context\n // });\n // }\n // );\n // container.appendChild(wrapper);\n } else if (typeof item === 'object') {\n // 创建普通菜单项\n const menuItem = item as MenuItem;\n const menuItemElement = createElement('div', MENU_ITEM_CLASS);\n applyStyles(menuItemElement, MENU_STYLES.menuItem);\n\n // 创建左侧图标容器\n const leftContainer = createElement('div');\n leftContainer.style.display = 'flex';\n leftContainer.style.alignItems = 'center';\n\n // 添加图标\n if (menuItem.iconName) {\n const icon = createIcon(menuItem.iconName);\n leftContainer.appendChild(icon);\n } else if (menuItem.iconPlaceholder) {\n // 占位图标,保持对齐\n const placeholder = createElement('span');\n applyStyles(placeholder, MENU_STYLES.menuItemIcon);\n leftContainer.appendChild(placeholder);\n }\n\n // 添加文本\n const text = createElement('span');\n text.textContent = menuItem.text;\n applyStyles(text, MENU_STYLES.menuItemText);\n leftContainer.appendChild(text);\n if (item.inputDefaultValue) {\n // 创建输入框\n const input = createElement('input') as HTMLInputElement;\n input.type = 'number';\n input.min = '1';\n input.value = item.inputDefaultValue.toString();\n applyStyles(input, MENU_STYLES.inputField);\n leftContainer.appendChild(input);\n //监听enter 回车确认\n input.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.handleMenuItemClick({\n menuKey: menuItem.menuKey,\n menuText: menuItem.text,\n inputValue: parseInt(input.value, 10),\n ...this.context\n });\n }\n });\n }\n\n menuItemElement.appendChild(leftContainer);\n\n // 创建右侧容器\n const rightContainer = createElement('div');\n rightContainer.style.display = 'flex';\n rightContainer.style.alignItems = 'center';\n\n // 添加快捷键\n if (menuItem.shortcut) {\n const shortcut = createElement('span');\n shortcut.textContent = menuItem.shortcut;\n applyStyles(shortcut, MENU_STYLES.menuItemShortcut);\n rightContainer.appendChild(shortcut);\n }\n\n // 添加子菜单箭头\n if (menuItem.children && menuItem.children.length > 0) {\n menuItemElement.classList.add(MENU_ITEM_SUBMENU_CLASS);\n const arrow = createElement('span');\n arrow.textContent = '▶';\n applyStyles(arrow, MENU_STYLES.submenuArrow);\n rightContainer.appendChild(arrow);\n }\n\n menuItemElement.appendChild(rightContainer);\n\n // 禁用状态\n if (menuItem.disabled) {\n menuItemElement.classList.add(MENU_ITEM_DISABLED_CLASS);\n applyStyles(menuItemElement, MENU_STYLES.menuItemDisabled);\n }\n\n // 添加事件监听\n if (!menuItem.disabled) {\n // 点击事件\n if (!menuItem.children || menuItem.children.length === 0) {\n menuItemElement.addEventListener('click', (e: MouseEvent) => {\n //判断如果点击到input 则不触发点击事件\n if (e.target instanceof HTMLInputElement) {\n return;\n }\n this.handleMenuItemClick({\n menuKey: menuItem.menuKey,\n menuText: menuItem.text,\n ...this.context\n });\n });\n }\n\n // 鼠标悬停事件\n menuItemElement.addEventListener('mouseenter', () => {\n console.log('mouseenter', menuItem.text);\n // 添加悬停样式\n applyStyles(menuItemElement, MENU_STYLES.menuItemHover);\n\n // 清除隐藏定时器\n if (this.hideTimeout !== null) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n if (this.showTimeout !== null) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n\n // 如果有子菜单,显示子菜单\n if (menuItem.children && menuItem.children.length > 0) {\n // 关闭其他子菜单\n this.closeAllSubmenus();\n\n // 显示当前子菜单\n this.showTimeout = setTimeout(() => {\n if (document.body.contains(menuItemElement)) {\n this.showSubmenu(menuItem.children, menuItemElement, menuItem);\n }\n }, this.submenuShowDelay);\n } else if (!parentItem) {\n // 没有子菜单,关闭所有子菜单\n this.closeAllSubmenus();\n }\n });\n\n // 鼠标离开事件\n menuItemElement.addEventListener('mouseleave', () => {\n console.log('mouseleave', menuItem.text);\n // 移除悬停样式,使用与添加时相同的方式\n // 通过设置空对象来重置之前应用的menuItemHover样式的属性\n Object.keys(MENU_STYLES.menuItemHover).forEach(key => {\n (menuItemElement.style as any)[key] = '';\n });\n\n // 如果有子菜单,设置延迟关闭\n if (menuItem.children && menuItem.children.length > 0) {\n this.hideTimeout = setTimeout(() => {\n this.closeAllSubmenus();\n }, this.submenuHideDelay);\n }\n });\n }\n\n container.appendChild(menuItemElement);\n }\n });\n }\n\n /**\n * 显示子菜单\n */\n private showSubmenu(items: MenuItemOrSeparator[], parentElement: HTMLElement, parentItem?: MenuItem): void {\n const parentRect = parentElement.getBoundingClientRect();\n\n // 创建子菜单容器\n const submenu = createElement('div', MENU_CONTAINER_CLASS);\n applyStyles(submenu, MENU_STYLES.submenuContainer);\n\n // 创建子菜单项\n this.createMenuItems(items, submenu, parentItem);\n\n // 添加到文档\n document.body.appendChild(submenu);\n\n // 调整子菜单位置\n const submenuRect = submenu.getBoundingClientRect();\n let left = parentRect.right;\n let top = parentRect.top;\n\n // 检查是否超出视窗右侧\n if (left + submenuRect.width > window.innerWidth) {\n left = parentRect.left - submenuRect.width;\n }\n\n // 检查是否超出视窗底部\n if (top + submenuRect.height > window.innerHeight) {\n top = window.innerHeight - submenuRect.height;\n }\n\n submenu.style.left = `${left}px`;\n submenu.style.top = `${top}px`;\n\n // 添加鼠标进入事件,清除隐藏定时器\n submenu.addEventListener('mouseenter', () => {\n if (this.hideTimeout !== null) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n });\n\n // 添加鼠标离开事件,设置延迟关闭\n submenu.addEventListener('mouseleave', () => {\n this.hideTimeout = setTimeout(() => {\n this.closeAllSubmenus();\n }, this.submenuHideDelay);\n });\n\n // 保存子菜单引用\n this.activeSubmenus.push(submenu);\n }\n\n /**\n * 关闭所有子菜单\n */\n private closeAllSubmenus(): void {\n this.activeSubmenus.forEach(submenu => {\n if (submenu && submenu.parentNode) {\n submenu.parentNode.removeChild(submenu);\n }\n });\n this.activeSubmenus = [];\n }\n\n /**\n * 调整菜单位置\n */\n private positionMenu(menu: HTMLElement, x: number, y: number): void {\n const menuRect = menu.getBoundingClientRect();\n let left = x;\n let top = y;\n\n // 检查是否超出视窗右侧\n if (left + menuRect.width > window.innerWidth) {\n left = window.innerWidth - menuRect.width;\n }\n\n // 检查是否超出视窗底部\n if (top + menuRect.height > window.innerHeight) {\n top = window.innerHeight - menuRect.height;\n }\n\n menu.style.left = `${left}px`;\n menu.style.top = `${top}px`;\n }\n\n /**\n * 处理菜单项点击\n */\n private handleMenuItemClick(args: MenuClickEventArgs): void {\n // 关闭菜单\n this.release();\n // 调用回调\n if (this.clickCallback && this.table) {\n this.clickCallback(args, this.table);\n }\n }\n\n /**\n * 处理文档点击,用于关闭菜单\n */\n private handleDocumentClick = (event: MouseEvent): void => {\n // 如果点击的是菜单内部,不关闭菜单\n if (\n this.menuContainer &&\n (event.target === this.menuContainer || this.menuContainer.contains(event.target as Node))\n ) {\n return;\n }\n\n // 如果点击的是子菜单内部,不关闭菜单\n for (const submenu of this.activeSubmenus) {\n if (event.target === submenu || submenu.contains(event.target as Node)) {\n return;\n }\n }\n\n // 关闭菜单\n this.release();\n };\n\n /**\n * 销毁菜单\n */\n release(): void {\n // 关闭所有子菜单\n this.closeAllSubmenus();\n\n // 移除菜单容器\n if (this.menuContainer && this.menuContainer.parentNode) {\n this.menuContainer.parentNode.removeChild(this.menuContainer);\n this.menuContainer = null;\n }\n\n // 清除定时器\n if (this.hideTimeout !== null) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n\n // 移除全局事件监听\n vglobal.removeEventListener('click', this.handleDocumentClick);\n }\n}\n"]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
export declare const MENU_CONTAINER_CLASS = "vtable-context-menu-container";
|
|
2
|
+
export declare const MENU_ITEM_CLASS = "vtable-context-menu-item";
|
|
3
|
+
export declare const MENU_ITEM_DISABLED_CLASS = "vtable-context-menu-item-disabled";
|
|
4
|
+
export declare const MENU_ITEM_SEPARATOR_CLASS = "vtable-context-menu-item-separator";
|
|
5
|
+
export declare const MENU_ITEM_SUBMENU_CLASS = "vtable-context-menu-item-submenu";
|
|
6
|
+
export declare const MENU_STYLES: {
|
|
7
|
+
menuContainer: {
|
|
8
|
+
position: string;
|
|
9
|
+
backgroundColor: string;
|
|
10
|
+
boxShadow: string;
|
|
11
|
+
borderRadius: string;
|
|
12
|
+
padding: string;
|
|
13
|
+
zIndex: number;
|
|
14
|
+
minWidth: string;
|
|
15
|
+
maxHeight: string;
|
|
16
|
+
overflowY: string;
|
|
17
|
+
fontSize: string;
|
|
18
|
+
};
|
|
19
|
+
menuItem: {
|
|
20
|
+
padding: string;
|
|
21
|
+
cursor: string;
|
|
22
|
+
whiteSpace: string;
|
|
23
|
+
position: string;
|
|
24
|
+
display: string;
|
|
25
|
+
alignItems: string;
|
|
26
|
+
justifyContent: string;
|
|
27
|
+
};
|
|
28
|
+
menuItemHover: {
|
|
29
|
+
backgroundColor: string;
|
|
30
|
+
};
|
|
31
|
+
menuItemDisabled: {
|
|
32
|
+
opacity: number;
|
|
33
|
+
cursor: string;
|
|
34
|
+
};
|
|
35
|
+
menuItemSeparator: {
|
|
36
|
+
height: string;
|
|
37
|
+
backgroundColor: string;
|
|
38
|
+
margin: string;
|
|
39
|
+
};
|
|
40
|
+
menuItemIcon: {
|
|
41
|
+
marginRight: string;
|
|
42
|
+
width: string;
|
|
43
|
+
height: string;
|
|
44
|
+
display: string;
|
|
45
|
+
alignItems: string;
|
|
46
|
+
justifyContent: string;
|
|
47
|
+
};
|
|
48
|
+
menuItemText: {
|
|
49
|
+
flex: number;
|
|
50
|
+
};
|
|
51
|
+
menuItemShortcut: {
|
|
52
|
+
marginLeft: string;
|
|
53
|
+
color: string;
|
|
54
|
+
fontSize: string;
|
|
55
|
+
};
|
|
56
|
+
submenuArrow: {
|
|
57
|
+
marginLeft: string;
|
|
58
|
+
fontSize: string;
|
|
59
|
+
color: string;
|
|
60
|
+
};
|
|
61
|
+
submenuContainer: {
|
|
62
|
+
position: string;
|
|
63
|
+
left: string;
|
|
64
|
+
top: string;
|
|
65
|
+
backgroundColor: string;
|
|
66
|
+
boxShadow: string;
|
|
67
|
+
borderRadius: string;
|
|
68
|
+
padding: string;
|
|
69
|
+
zIndex: number;
|
|
70
|
+
minWidth: string;
|
|
71
|
+
fontSize: string;
|
|
72
|
+
};
|
|
73
|
+
inputContainer: {
|
|
74
|
+
padding: string;
|
|
75
|
+
display: string;
|
|
76
|
+
alignItems: string;
|
|
77
|
+
};
|
|
78
|
+
inputLabel: {
|
|
79
|
+
marginRight: string;
|
|
80
|
+
whiteSpace: string;
|
|
81
|
+
};
|
|
82
|
+
inputField: {
|
|
83
|
+
width: string;
|
|
84
|
+
padding: string;
|
|
85
|
+
border: string;
|
|
86
|
+
borderRadius: string;
|
|
87
|
+
};
|
|
88
|
+
buttonContainer: {
|
|
89
|
+
display: string;
|
|
90
|
+
justifyContent: string;
|
|
91
|
+
padding: string;
|
|
92
|
+
};
|
|
93
|
+
button: {
|
|
94
|
+
padding: string;
|
|
95
|
+
backgroundColor: string;
|
|
96
|
+
color: string;
|
|
97
|
+
border: string;
|
|
98
|
+
borderRadius: string;
|
|
99
|
+
cursor: string;
|
|
100
|
+
fontSize: string;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export declare function createElement(tag: string, className?: string, styles?: Record<string, any>): HTMLElement;
|
|
104
|
+
export declare function applyStyles(element: HTMLElement, styles: Record<string, any>): void;
|
|
105
|
+
export declare function createIcon(iconName: string): HTMLElement;
|
|
106
|
+
export declare function createNumberInputItem(label: string, defaultValue: number, iconName: string, callback: (value: number) => void): HTMLElement;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function createElement(tag, className, styles) {
|
|
4
|
+
const element = document.createElement(tag);
|
|
5
|
+
return className && (element.className = className), styles && applyStyles(element, styles),
|
|
6
|
+
element;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function applyStyles(element, styles) {
|
|
10
|
+
Object.entries(styles).forEach((([key, value]) => {
|
|
11
|
+
element.style[key] = value;
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function createIcon(iconName) {
|
|
16
|
+
const iconElement = createElement("span");
|
|
17
|
+
switch (iconName) {
|
|
18
|
+
case "copy":
|
|
19
|
+
iconElement.innerHTML = "📋";
|
|
20
|
+
break;
|
|
21
|
+
|
|
22
|
+
case "paste":
|
|
23
|
+
iconElement.innerHTML = "📌";
|
|
24
|
+
break;
|
|
25
|
+
|
|
26
|
+
case "cut":
|
|
27
|
+
iconElement.innerHTML = "✂️";
|
|
28
|
+
break;
|
|
29
|
+
|
|
30
|
+
case "delete":
|
|
31
|
+
iconElement.innerHTML = "🗑️";
|
|
32
|
+
break;
|
|
33
|
+
|
|
34
|
+
case "insert":
|
|
35
|
+
iconElement.innerHTML = "➕";
|
|
36
|
+
break;
|
|
37
|
+
|
|
38
|
+
case "sort":
|
|
39
|
+
iconElement.innerHTML = "🔃";
|
|
40
|
+
break;
|
|
41
|
+
|
|
42
|
+
case "protect":
|
|
43
|
+
iconElement.innerHTML = "🔒";
|
|
44
|
+
break;
|
|
45
|
+
|
|
46
|
+
case "hide":
|
|
47
|
+
iconElement.innerHTML = "👁️";
|
|
48
|
+
break;
|
|
49
|
+
|
|
50
|
+
case "freeze":
|
|
51
|
+
iconElement.innerHTML = "❄️";
|
|
52
|
+
break;
|
|
53
|
+
|
|
54
|
+
case "up-arrow":
|
|
55
|
+
iconElement.innerHTML = "🔼";
|
|
56
|
+
break;
|
|
57
|
+
|
|
58
|
+
case "down-arrow":
|
|
59
|
+
iconElement.innerHTML = "🔽";
|
|
60
|
+
break;
|
|
61
|
+
|
|
62
|
+
case "left-arrow":
|
|
63
|
+
iconElement.innerHTML = "◀️";
|
|
64
|
+
break;
|
|
65
|
+
|
|
66
|
+
case "right-arrow":
|
|
67
|
+
iconElement.innerHTML = "▶️";
|
|
68
|
+
break;
|
|
69
|
+
|
|
70
|
+
default:
|
|
71
|
+
iconElement.innerHTML = "•";
|
|
72
|
+
}
|
|
73
|
+
return applyStyles(iconElement, exports.MENU_STYLES.menuItemIcon), iconElement;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function createNumberInputItem(label, defaultValue = 1, iconName, callback) {
|
|
77
|
+
const container = createElement("div");
|
|
78
|
+
if (applyStyles(container, exports.MENU_STYLES.inputContainer), iconName) {
|
|
79
|
+
const icon = createIcon(iconName);
|
|
80
|
+
container.appendChild(icon);
|
|
81
|
+
}
|
|
82
|
+
const labelElement = createElement("label");
|
|
83
|
+
labelElement.textContent = label, applyStyles(labelElement, exports.MENU_STYLES.inputLabel),
|
|
84
|
+
container.appendChild(labelElement);
|
|
85
|
+
const input = createElement("input");
|
|
86
|
+
input.type = "number", input.min = "1", input.value = defaultValue.toString(), applyStyles(input, exports.MENU_STYLES.inputField),
|
|
87
|
+
container.appendChild(input);
|
|
88
|
+
const wrapper = createElement("div");
|
|
89
|
+
return wrapper.appendChild(container), wrapper;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
Object.defineProperty(exports, "__esModule", {
|
|
93
|
+
value: !0
|
|
94
|
+
}), exports.createNumberInputItem = exports.createIcon = exports.applyStyles = exports.createElement = exports.MENU_STYLES = exports.MENU_ITEM_SUBMENU_CLASS = exports.MENU_ITEM_SEPARATOR_CLASS = exports.MENU_ITEM_DISABLED_CLASS = exports.MENU_ITEM_CLASS = exports.MENU_CONTAINER_CLASS = void 0,
|
|
95
|
+
exports.MENU_CONTAINER_CLASS = "vtable-context-menu-container", exports.MENU_ITEM_CLASS = "vtable-context-menu-item",
|
|
96
|
+
exports.MENU_ITEM_DISABLED_CLASS = "vtable-context-menu-item-disabled", exports.MENU_ITEM_SEPARATOR_CLASS = "vtable-context-menu-item-separator",
|
|
97
|
+
exports.MENU_ITEM_SUBMENU_CLASS = "vtable-context-menu-item-submenu", exports.MENU_STYLES = {
|
|
98
|
+
menuContainer: {
|
|
99
|
+
position: "absolute",
|
|
100
|
+
backgroundColor: "#ffffff",
|
|
101
|
+
boxShadow: "0 2px 10px rgba(0, 0, 0, 0.2)",
|
|
102
|
+
borderRadius: "4px",
|
|
103
|
+
padding: "5px 0",
|
|
104
|
+
zIndex: 1e3,
|
|
105
|
+
minWidth: "180px",
|
|
106
|
+
maxHeight: "300px",
|
|
107
|
+
overflowY: "auto",
|
|
108
|
+
fontSize: "12px"
|
|
109
|
+
},
|
|
110
|
+
menuItem: {
|
|
111
|
+
padding: "6px 20px",
|
|
112
|
+
cursor: "pointer",
|
|
113
|
+
whiteSpace: "nowrap",
|
|
114
|
+
position: "relative",
|
|
115
|
+
display: "flex",
|
|
116
|
+
alignItems: "center",
|
|
117
|
+
justifyContent: "space-between"
|
|
118
|
+
},
|
|
119
|
+
menuItemHover: {
|
|
120
|
+
backgroundColor: "#f5f5f5"
|
|
121
|
+
},
|
|
122
|
+
menuItemDisabled: {
|
|
123
|
+
opacity: .5,
|
|
124
|
+
cursor: "not-allowed"
|
|
125
|
+
},
|
|
126
|
+
menuItemSeparator: {
|
|
127
|
+
height: "1px",
|
|
128
|
+
backgroundColor: "#e0e0e0",
|
|
129
|
+
margin: "5px 0"
|
|
130
|
+
},
|
|
131
|
+
menuItemIcon: {
|
|
132
|
+
marginRight: "8px",
|
|
133
|
+
width: "16px",
|
|
134
|
+
height: "16px",
|
|
135
|
+
display: "inline-flex",
|
|
136
|
+
alignItems: "center",
|
|
137
|
+
justifyContent: "center"
|
|
138
|
+
},
|
|
139
|
+
menuItemText: {
|
|
140
|
+
flex: 1
|
|
141
|
+
},
|
|
142
|
+
menuItemShortcut: {
|
|
143
|
+
marginLeft: "20px",
|
|
144
|
+
color: "#999",
|
|
145
|
+
fontSize: "11px"
|
|
146
|
+
},
|
|
147
|
+
submenuArrow: {
|
|
148
|
+
marginLeft: "5px",
|
|
149
|
+
fontSize: "12px",
|
|
150
|
+
color: "#666"
|
|
151
|
+
},
|
|
152
|
+
submenuContainer: {
|
|
153
|
+
position: "absolute",
|
|
154
|
+
left: "100%",
|
|
155
|
+
top: "0",
|
|
156
|
+
backgroundColor: "#ffffff",
|
|
157
|
+
boxShadow: "0 2px 10px rgba(0, 0, 0, 0.2)",
|
|
158
|
+
borderRadius: "4px",
|
|
159
|
+
padding: "5px 0",
|
|
160
|
+
zIndex: 1001,
|
|
161
|
+
minWidth: "180px",
|
|
162
|
+
fontSize: "12px"
|
|
163
|
+
},
|
|
164
|
+
inputContainer: {
|
|
165
|
+
padding: "8px 12px",
|
|
166
|
+
display: "flex",
|
|
167
|
+
alignItems: "center"
|
|
168
|
+
},
|
|
169
|
+
inputLabel: {
|
|
170
|
+
marginRight: "8px",
|
|
171
|
+
whiteSpace: "nowrap"
|
|
172
|
+
},
|
|
173
|
+
inputField: {
|
|
174
|
+
width: "60px",
|
|
175
|
+
padding: "4px",
|
|
176
|
+
border: "1px solid #ddd",
|
|
177
|
+
borderRadius: "3px"
|
|
178
|
+
},
|
|
179
|
+
buttonContainer: {
|
|
180
|
+
display: "flex",
|
|
181
|
+
justifyContent: "flex-end",
|
|
182
|
+
padding: "5px 12px"
|
|
183
|
+
},
|
|
184
|
+
button: {
|
|
185
|
+
padding: "4px 8px",
|
|
186
|
+
backgroundColor: "#1890ff",
|
|
187
|
+
color: "white",
|
|
188
|
+
border: "none",
|
|
189
|
+
borderRadius: "3px",
|
|
190
|
+
cursor: "pointer",
|
|
191
|
+
fontSize: "12px"
|
|
192
|
+
}
|
|
193
|
+
}, exports.createElement = createElement, exports.applyStyles = applyStyles, exports.createIcon = createIcon,
|
|
194
|
+
exports.createNumberInputItem = createNumberInputItem;
|
|
195
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contextmenu/styles.ts"],"names":[],"mappings":"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","file":"styles.js","sourcesContent":["/**\n * 右键菜单的样式定义\n */\n\nexport const MENU_CONTAINER_CLASS = 'vtable-context-menu-container';\nexport const MENU_ITEM_CLASS = 'vtable-context-menu-item';\nexport const MENU_ITEM_DISABLED_CLASS = 'vtable-context-menu-item-disabled';\nexport const MENU_ITEM_SEPARATOR_CLASS = 'vtable-context-menu-item-separator';\nexport const MENU_ITEM_SUBMENU_CLASS = 'vtable-context-menu-item-submenu';\n\nexport const MENU_STYLES = {\n menuContainer: {\n position: 'absolute',\n backgroundColor: '#ffffff',\n boxShadow: '0 2px 10px rgba(0, 0, 0, 0.2)',\n borderRadius: '4px',\n padding: '5px 0',\n zIndex: 1000,\n minWidth: '180px',\n maxHeight: '300px', // 设置最大高度\n overflowY: 'auto', // 添加垂直滚动\n fontSize: '12px'\n },\n menuItem: {\n padding: '6px 20px',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between'\n },\n menuItemHover: {\n backgroundColor: '#f5f5f5'\n },\n menuItemDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed'\n },\n menuItemSeparator: {\n height: '1px',\n backgroundColor: '#e0e0e0',\n margin: '5px 0'\n },\n menuItemIcon: {\n marginRight: '8px',\n width: '16px',\n height: '16px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n menuItemText: {\n flex: 1\n },\n menuItemShortcut: {\n marginLeft: '20px',\n color: '#999',\n fontSize: '11px'\n },\n submenuArrow: {\n marginLeft: '5px',\n fontSize: '12px',\n color: '#666'\n },\n submenuContainer: {\n position: 'absolute',\n left: '100%',\n top: '0',\n backgroundColor: '#ffffff',\n boxShadow: '0 2px 10px rgba(0, 0, 0, 0.2)',\n borderRadius: '4px',\n padding: '5px 0',\n zIndex: 1001,\n minWidth: '180px',\n fontSize: '12px'\n },\n inputContainer: {\n padding: '8px 12px',\n display: 'flex',\n alignItems: 'center'\n },\n inputLabel: {\n marginRight: '8px',\n whiteSpace: 'nowrap'\n },\n inputField: {\n width: '60px',\n padding: '4px',\n border: '1px solid #ddd',\n borderRadius: '3px'\n },\n buttonContainer: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '5px 12px'\n },\n button: {\n padding: '4px 8px',\n backgroundColor: '#1890ff',\n color: 'white',\n border: 'none',\n borderRadius: '3px',\n cursor: 'pointer',\n fontSize: '12px'\n }\n};\n\n/**\n * 创建DOM元素\n */\nexport function createElement(tag: string, className?: string, styles?: Record<string, any>): HTMLElement {\n const element = document.createElement(tag);\n if (className) {\n element.className = className;\n }\n if (styles) {\n applyStyles(element, styles);\n }\n return element;\n}\n\n/**\n * 应用样式到元素\n */\nexport function applyStyles(element: HTMLElement, styles: Record<string, any>): void {\n Object.entries(styles).forEach(([key, value]) => {\n (element.style as any)[key] = value;\n });\n}\n\n/**\n * 创建图标元素\n */\nexport function createIcon(iconName: string): HTMLElement {\n const iconElement = createElement('span');\n\n // 根据图标名称设置不同的内容\n switch (iconName) {\n case 'copy':\n iconElement.innerHTML = '📋';\n break;\n case 'paste':\n iconElement.innerHTML = '📌';\n break;\n case 'cut':\n iconElement.innerHTML = '✂️';\n break;\n case 'delete':\n iconElement.innerHTML = '🗑️';\n break;\n case 'insert':\n iconElement.innerHTML = '➕';\n break;\n case 'sort':\n iconElement.innerHTML = '🔃';\n break;\n // case 'merge':\n // iconElement.innerHTML = ;\n // break;\n // case 'unmerge':\n // iconElement.innerHTML = ;\n // break;\n case 'protect':\n iconElement.innerHTML = '🔒';\n break;\n case 'hide':\n iconElement.innerHTML = '👁️';\n break;\n case 'freeze':\n iconElement.innerHTML = '❄️';\n break;\n case 'up-arrow':\n iconElement.innerHTML = '🔼';\n break;\n case 'down-arrow':\n iconElement.innerHTML = '🔽';\n break;\n case 'left-arrow':\n iconElement.innerHTML = '◀️';\n break;\n case 'right-arrow':\n iconElement.innerHTML = '▶️';\n break;\n default:\n iconElement.innerHTML = '•';\n }\n\n applyStyles(iconElement, MENU_STYLES.menuItemIcon);\n return iconElement;\n}\n\n/**\n * 创建带有数字输入框的菜单项\n */\nexport function createNumberInputItem(\n label: string,\n defaultValue: number = 1,\n iconName: string,\n callback: (value: number) => void\n): HTMLElement {\n // 创建容器\n const container = createElement('div');\n applyStyles(container, MENU_STYLES.inputContainer);\n\n // 创建左侧图标容器\n\n // 添加图标\n if (iconName) {\n const icon = createIcon(iconName);\n container.appendChild(icon);\n }\n // 创建标签\n const labelElement = createElement('label');\n labelElement.textContent = label;\n applyStyles(labelElement, MENU_STYLES.inputLabel);\n container.appendChild(labelElement);\n\n // 创建输入框\n const input = createElement('input') as HTMLInputElement;\n input.type = 'number';\n input.min = '1';\n input.value = defaultValue.toString();\n applyStyles(input, MENU_STYLES.inputField);\n container.appendChild(input);\n // 创建包装容器\n const wrapper = createElement('div');\n wrapper.appendChild(container);\n\n return wrapper;\n}\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export interface MenuClickEventArgs {
|
|
2
|
+
menuKey: MenuKey;
|
|
3
|
+
menuText: string;
|
|
4
|
+
rowIndex?: number;
|
|
5
|
+
colIndex?: number;
|
|
6
|
+
cellValue?: any;
|
|
7
|
+
inputValue?: number | string;
|
|
8
|
+
}
|
|
9
|
+
export declare enum MenuKey {
|
|
10
|
+
EMPTY = 0,
|
|
11
|
+
COPY = "copy",
|
|
12
|
+
CUT = "cut",
|
|
13
|
+
PASTE = "paste",
|
|
14
|
+
INSERT_COLUMN_LEFT = "insert_column_left",
|
|
15
|
+
INSERT_COLUMN_RIGHT = "insert_column_right",
|
|
16
|
+
INSERT_ROW_ABOVE = "insert_row_above",
|
|
17
|
+
INSERT_ROW_BELOW = "insert_row_below",
|
|
18
|
+
DELETE_ROW = "delete_row",
|
|
19
|
+
DELETE_COLUMN = "delete_column",
|
|
20
|
+
FREEZE_TO_THIS_ROW = "freeze_to_this_row",
|
|
21
|
+
FREEZE_TO_THIS_COLUMN = "freeze_to_this_column",
|
|
22
|
+
FREEZE_TO_THIS_ROW_AND_COLUMN = "freeze_to_this_row_and_column",
|
|
23
|
+
UNFREEZE = "unfreeze",
|
|
24
|
+
MERGE_CELLS = "merge_cells",
|
|
25
|
+
UNMERGE_CELLS = "unmerge_cells",
|
|
26
|
+
HIDE_COLUMN = "hide_column",
|
|
27
|
+
SORT = "sort"
|
|
28
|
+
}
|
|
29
|
+
export interface MenuItem {
|
|
30
|
+
text: string;
|
|
31
|
+
menuKey: MenuKey | string;
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
shortcut?: string;
|
|
34
|
+
iconName?: string;
|
|
35
|
+
iconPlaceholder?: boolean;
|
|
36
|
+
inputDefaultValue?: number;
|
|
37
|
+
children?: (MenuItem | string)[];
|
|
38
|
+
}
|
|
39
|
+
export type MenuItemOrSeparator = MenuItem | string;
|
|
40
|
+
export declare const DEFAULT_BODY_MENU_ITEMS: (string | {
|
|
41
|
+
text: string;
|
|
42
|
+
menuKey: MenuKey;
|
|
43
|
+
} | {
|
|
44
|
+
text: string;
|
|
45
|
+
menuKey: MenuKey;
|
|
46
|
+
iconName: string;
|
|
47
|
+
children: {
|
|
48
|
+
text: string;
|
|
49
|
+
menuKey: MenuKey;
|
|
50
|
+
}[];
|
|
51
|
+
})[];
|
|
52
|
+
export declare const DEFAULT_HEADER_MENU_ITEMS: (string | {
|
|
53
|
+
text: string;
|
|
54
|
+
menuKey: MenuKey;
|
|
55
|
+
})[];
|
|
56
|
+
export declare const DEFAULT_COLUMN_SERIES_MENU_ITEMS: (string | {
|
|
57
|
+
text: string;
|
|
58
|
+
menuKey: MenuKey;
|
|
59
|
+
})[];
|
|
60
|
+
export declare const DEFAULT_ROW_SERIES_MENU_ITEMS: (string | {
|
|
61
|
+
text: string;
|
|
62
|
+
menuKey: MenuKey;
|
|
63
|
+
})[];
|
|
64
|
+
export declare const DEFAULT_CORNER_SERIES_MENU_ITEMS: {
|
|
65
|
+
text: string;
|
|
66
|
+
menuKey: MenuKey;
|
|
67
|
+
iconName: string;
|
|
68
|
+
shortcut: string;
|
|
69
|
+
}[];
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var MenuKey;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: !0
|
|
7
|
+
}), exports.DEFAULT_CORNER_SERIES_MENU_ITEMS = exports.DEFAULT_ROW_SERIES_MENU_ITEMS = exports.DEFAULT_COLUMN_SERIES_MENU_ITEMS = exports.DEFAULT_HEADER_MENU_ITEMS = exports.DEFAULT_BODY_MENU_ITEMS = exports.MenuKey = void 0,
|
|
8
|
+
function(MenuKey) {
|
|
9
|
+
MenuKey[MenuKey.EMPTY = 0] = "EMPTY", MenuKey.COPY = "copy", MenuKey.CUT = "cut",
|
|
10
|
+
MenuKey.PASTE = "paste", MenuKey.INSERT_COLUMN_LEFT = "insert_column_left", MenuKey.INSERT_COLUMN_RIGHT = "insert_column_right",
|
|
11
|
+
MenuKey.INSERT_ROW_ABOVE = "insert_row_above", MenuKey.INSERT_ROW_BELOW = "insert_row_below",
|
|
12
|
+
MenuKey.DELETE_ROW = "delete_row", MenuKey.DELETE_COLUMN = "delete_column", MenuKey.FREEZE_TO_THIS_ROW = "freeze_to_this_row",
|
|
13
|
+
MenuKey.FREEZE_TO_THIS_COLUMN = "freeze_to_this_column", MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN = "freeze_to_this_row_and_column",
|
|
14
|
+
MenuKey.UNFREEZE = "unfreeze", MenuKey.MERGE_CELLS = "merge_cells", MenuKey.UNMERGE_CELLS = "unmerge_cells",
|
|
15
|
+
MenuKey.HIDE_COLUMN = "hide_column", MenuKey.SORT = "sort";
|
|
16
|
+
}(MenuKey = exports.MenuKey || (exports.MenuKey = {}));
|
|
17
|
+
|
|
18
|
+
const DEFAULT_MENU_ITEMS = {
|
|
19
|
+
[MenuKey.COPY]: {
|
|
20
|
+
text: "复制",
|
|
21
|
+
menuKey: MenuKey.COPY,
|
|
22
|
+
iconName: "copy",
|
|
23
|
+
shortcut: "Ctrl+C"
|
|
24
|
+
},
|
|
25
|
+
[MenuKey.CUT]: {
|
|
26
|
+
text: "剪切",
|
|
27
|
+
menuKey: MenuKey.CUT,
|
|
28
|
+
iconName: "cut",
|
|
29
|
+
shortcut: "Ctrl+X"
|
|
30
|
+
},
|
|
31
|
+
[MenuKey.PASTE]: {
|
|
32
|
+
text: "粘贴",
|
|
33
|
+
menuKey: MenuKey.PASTE,
|
|
34
|
+
iconName: "paste",
|
|
35
|
+
shortcut: "Ctrl+V"
|
|
36
|
+
},
|
|
37
|
+
[MenuKey.INSERT_COLUMN_LEFT]: {
|
|
38
|
+
text: "向左插入列数:",
|
|
39
|
+
menuKey: MenuKey.INSERT_COLUMN_LEFT,
|
|
40
|
+
iconName: "left-arrow",
|
|
41
|
+
inputDefaultValue: 1
|
|
42
|
+
},
|
|
43
|
+
[MenuKey.INSERT_COLUMN_RIGHT]: {
|
|
44
|
+
text: "向右插入列数:",
|
|
45
|
+
menuKey: MenuKey.INSERT_COLUMN_RIGHT,
|
|
46
|
+
iconName: "right-arrow",
|
|
47
|
+
inputDefaultValue: 1
|
|
48
|
+
},
|
|
49
|
+
[MenuKey.INSERT_ROW_ABOVE]: {
|
|
50
|
+
text: "向上插入行数:",
|
|
51
|
+
menuKey: MenuKey.INSERT_ROW_ABOVE,
|
|
52
|
+
iconName: "up-arrow",
|
|
53
|
+
inputDefaultValue: 1
|
|
54
|
+
},
|
|
55
|
+
[MenuKey.INSERT_ROW_BELOW]: {
|
|
56
|
+
text: "向下插入行数:",
|
|
57
|
+
menuKey: MenuKey.INSERT_ROW_BELOW,
|
|
58
|
+
iconName: "down-arrow",
|
|
59
|
+
inputDefaultValue: 1
|
|
60
|
+
},
|
|
61
|
+
[MenuKey.DELETE_ROW]: {
|
|
62
|
+
text: "删除行",
|
|
63
|
+
menuKey: MenuKey.DELETE_ROW
|
|
64
|
+
},
|
|
65
|
+
[MenuKey.DELETE_COLUMN]: {
|
|
66
|
+
text: "删除列",
|
|
67
|
+
menuKey: MenuKey.DELETE_COLUMN
|
|
68
|
+
},
|
|
69
|
+
[MenuKey.FREEZE_TO_THIS_ROW]: {
|
|
70
|
+
text: "冻结到本行",
|
|
71
|
+
menuKey: MenuKey.FREEZE_TO_THIS_ROW
|
|
72
|
+
},
|
|
73
|
+
[MenuKey.FREEZE_TO_THIS_COLUMN]: {
|
|
74
|
+
text: "冻结到本列",
|
|
75
|
+
menuKey: MenuKey.FREEZE_TO_THIS_COLUMN
|
|
76
|
+
},
|
|
77
|
+
[MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN]: {
|
|
78
|
+
text: "冻结到本行本列",
|
|
79
|
+
menuKey: MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN
|
|
80
|
+
},
|
|
81
|
+
[MenuKey.UNFREEZE]: {
|
|
82
|
+
text: "取消冻结",
|
|
83
|
+
menuKey: MenuKey.UNFREEZE
|
|
84
|
+
},
|
|
85
|
+
[MenuKey.MERGE_CELLS]: {
|
|
86
|
+
text: "合并单元格",
|
|
87
|
+
menuKey: MenuKey.MERGE_CELLS
|
|
88
|
+
},
|
|
89
|
+
[MenuKey.UNMERGE_CELLS]: {
|
|
90
|
+
text: "取消合并单元格",
|
|
91
|
+
menuKey: MenuKey.UNMERGE_CELLS
|
|
92
|
+
},
|
|
93
|
+
[MenuKey.HIDE_COLUMN]: {
|
|
94
|
+
text: "隐藏列",
|
|
95
|
+
menuKey: MenuKey.HIDE_COLUMN
|
|
96
|
+
},
|
|
97
|
+
[MenuKey.SORT]: {
|
|
98
|
+
text: "排序",
|
|
99
|
+
menuKey: MenuKey.SORT
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
exports.DEFAULT_BODY_MENU_ITEMS = [ DEFAULT_MENU_ITEMS[MenuKey.COPY], DEFAULT_MENU_ITEMS[MenuKey.CUT], DEFAULT_MENU_ITEMS[MenuKey.PASTE], "---", {
|
|
104
|
+
text: "插入",
|
|
105
|
+
menuKey: MenuKey.EMPTY,
|
|
106
|
+
iconName: "insert",
|
|
107
|
+
children: [ DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_ABOVE], DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_BELOW], DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_LEFT], DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_RIGHT] ]
|
|
108
|
+
}, {
|
|
109
|
+
text: "删除",
|
|
110
|
+
menuKey: MenuKey.EMPTY,
|
|
111
|
+
iconName: "delete",
|
|
112
|
+
children: [ DEFAULT_MENU_ITEMS[MenuKey.DELETE_ROW], DEFAULT_MENU_ITEMS[MenuKey.DELETE_COLUMN] ]
|
|
113
|
+
}, {
|
|
114
|
+
text: "冻结",
|
|
115
|
+
menuKey: MenuKey.EMPTY,
|
|
116
|
+
iconName: "freeze",
|
|
117
|
+
children: [ DEFAULT_MENU_ITEMS[MenuKey.FREEZE_TO_THIS_ROW], DEFAULT_MENU_ITEMS[MenuKey.FREEZE_TO_THIS_COLUMN], DEFAULT_MENU_ITEMS[MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN], DEFAULT_MENU_ITEMS[MenuKey.UNFREEZE] ]
|
|
118
|
+
}, "---", DEFAULT_MENU_ITEMS[MenuKey.MERGE_CELLS], DEFAULT_MENU_ITEMS[MenuKey.UNMERGE_CELLS] ],
|
|
119
|
+
exports.DEFAULT_HEADER_MENU_ITEMS = [ DEFAULT_MENU_ITEMS[MenuKey.COPY], DEFAULT_MENU_ITEMS[MenuKey.CUT], DEFAULT_MENU_ITEMS[MenuKey.PASTE], "---", DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_LEFT], DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_RIGHT], DEFAULT_MENU_ITEMS[MenuKey.DELETE_COLUMN] ],
|
|
120
|
+
exports.DEFAULT_COLUMN_SERIES_MENU_ITEMS = [ DEFAULT_MENU_ITEMS[MenuKey.COPY], DEFAULT_MENU_ITEMS[MenuKey.CUT], DEFAULT_MENU_ITEMS[MenuKey.PASTE], "---", DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_LEFT], DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_RIGHT], DEFAULT_MENU_ITEMS[MenuKey.DELETE_COLUMN] ],
|
|
121
|
+
exports.DEFAULT_ROW_SERIES_MENU_ITEMS = [ DEFAULT_MENU_ITEMS[MenuKey.COPY], DEFAULT_MENU_ITEMS[MenuKey.CUT], DEFAULT_MENU_ITEMS[MenuKey.PASTE], "---", DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_ABOVE], DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_BELOW], DEFAULT_MENU_ITEMS[MenuKey.DELETE_ROW] ],
|
|
122
|
+
exports.DEFAULT_CORNER_SERIES_MENU_ITEMS = [ DEFAULT_MENU_ITEMS[MenuKey.COPY], DEFAULT_MENU_ITEMS[MenuKey.CUT], DEFAULT_MENU_ITEMS[MenuKey.PASTE] ];
|
|
123
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contextmenu/types.ts"],"names":[],"mappings":"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","file":"types.js","sourcesContent":["export interface MenuClickEventArgs {\n menuKey: MenuKey;\n menuText: string;\n rowIndex?: number;\n colIndex?: number;\n cellValue?: any;\n inputValue?: number | string;\n}\n\n/**menuKey的枚举类型 */\nexport enum MenuKey {\n /** 空白无意义的key,用于占位 */\n EMPTY = undefined,\n COPY = 'copy',\n CUT = 'cut',\n PASTE = 'paste',\n INSERT_COLUMN_LEFT = 'insert_column_left',\n INSERT_COLUMN_RIGHT = 'insert_column_right',\n INSERT_ROW_ABOVE = 'insert_row_above',\n INSERT_ROW_BELOW = 'insert_row_below',\n DELETE_ROW = 'delete_row',\n DELETE_COLUMN = 'delete_column',\n FREEZE_TO_THIS_ROW = 'freeze_to_this_row',\n FREEZE_TO_THIS_COLUMN = 'freeze_to_this_column',\n FREEZE_TO_THIS_ROW_AND_COLUMN = 'freeze_to_this_row_and_column',\n UNFREEZE = 'unfreeze',\n MERGE_CELLS = 'merge_cells',\n UNMERGE_CELLS = 'unmerge_cells',\n HIDE_COLUMN = 'hide_column',\n SORT = 'sort'\n}\n\nexport interface MenuItem {\n text: string;\n menuKey: MenuKey | string;\n disabled?: boolean;\n shortcut?: string;\n iconName?: string;\n iconPlaceholder?: boolean; //如果没有iconName时 是否显示占位图标位置 让他与其他有图标的item对齐\n inputDefaultValue?: number;\n children?: (MenuItem | string)[];\n}\n\nexport type MenuItemOrSeparator = MenuItem | string;\n\nconst DEFAULT_MENU_ITEMS = {\n [MenuKey.COPY]: { text: '复制', menuKey: MenuKey.COPY, iconName: 'copy', shortcut: 'Ctrl+C' },\n [MenuKey.CUT]: { text: '剪切', menuKey: MenuKey.CUT, iconName: 'cut', shortcut: 'Ctrl+X' },\n [MenuKey.PASTE]: { text: '粘贴', menuKey: MenuKey.PASTE, iconName: 'paste', shortcut: 'Ctrl+V' },\n [MenuKey.INSERT_COLUMN_LEFT]: {\n text: '向左插入列数:',\n menuKey: MenuKey.INSERT_COLUMN_LEFT,\n iconName: 'left-arrow',\n inputDefaultValue: 1\n },\n [MenuKey.INSERT_COLUMN_RIGHT]: {\n text: '向右插入列数:',\n menuKey: MenuKey.INSERT_COLUMN_RIGHT,\n iconName: 'right-arrow',\n inputDefaultValue: 1\n },\n [MenuKey.INSERT_ROW_ABOVE]: {\n text: '向上插入行数:',\n menuKey: MenuKey.INSERT_ROW_ABOVE,\n iconName: 'up-arrow',\n inputDefaultValue: 1\n },\n [MenuKey.INSERT_ROW_BELOW]: {\n text: '向下插入行数:',\n menuKey: MenuKey.INSERT_ROW_BELOW,\n iconName: 'down-arrow',\n inputDefaultValue: 1\n },\n [MenuKey.DELETE_ROW]: { text: '删除行', menuKey: MenuKey.DELETE_ROW },\n [MenuKey.DELETE_COLUMN]: { text: '删除列', menuKey: MenuKey.DELETE_COLUMN },\n [MenuKey.FREEZE_TO_THIS_ROW]: { text: '冻结到本行', menuKey: MenuKey.FREEZE_TO_THIS_ROW },\n [MenuKey.FREEZE_TO_THIS_COLUMN]: { text: '冻结到本列', menuKey: MenuKey.FREEZE_TO_THIS_COLUMN },\n [MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN]: { text: '冻结到本行本列', menuKey: MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN },\n [MenuKey.UNFREEZE]: { text: '取消冻结', menuKey: MenuKey.UNFREEZE },\n [MenuKey.MERGE_CELLS]: { text: '合并单元格', menuKey: MenuKey.MERGE_CELLS },\n [MenuKey.UNMERGE_CELLS]: { text: '取消合并单元格', menuKey: MenuKey.UNMERGE_CELLS },\n [MenuKey.HIDE_COLUMN]: { text: '隐藏列', menuKey: MenuKey.HIDE_COLUMN },\n [MenuKey.SORT]: { text: '排序', menuKey: MenuKey.SORT }\n};\n\nexport const DEFAULT_BODY_MENU_ITEMS = [\n DEFAULT_MENU_ITEMS[MenuKey.COPY],\n DEFAULT_MENU_ITEMS[MenuKey.CUT],\n DEFAULT_MENU_ITEMS[MenuKey.PASTE],\n '---',\n {\n text: '插入',\n menuKey: MenuKey.EMPTY,\n iconName: 'insert',\n children: [\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_ABOVE],\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_BELOW],\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_LEFT],\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_RIGHT]\n ]\n },\n {\n text: '删除',\n menuKey: MenuKey.EMPTY,\n iconName: 'delete',\n children: [DEFAULT_MENU_ITEMS[MenuKey.DELETE_ROW], DEFAULT_MENU_ITEMS[MenuKey.DELETE_COLUMN]]\n },\n {\n text: '冻结',\n menuKey: MenuKey.EMPTY,\n iconName: 'freeze',\n children: [\n DEFAULT_MENU_ITEMS[MenuKey.FREEZE_TO_THIS_ROW],\n DEFAULT_MENU_ITEMS[MenuKey.FREEZE_TO_THIS_COLUMN],\n DEFAULT_MENU_ITEMS[MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN],\n DEFAULT_MENU_ITEMS[MenuKey.UNFREEZE]\n ]\n },\n '---',\n DEFAULT_MENU_ITEMS[MenuKey.MERGE_CELLS], //鼠标右键所在单元格如果未被合并,则显示合并单元格\n DEFAULT_MENU_ITEMS[MenuKey.UNMERGE_CELLS] //鼠标右键所在单元格如果被合并了,则显示取消合并单元格\n // { text: '设置保护范围', menuKey: 'set_protection', iconName: 'protect' }\n];\nexport const DEFAULT_HEADER_MENU_ITEMS = [\n DEFAULT_MENU_ITEMS[MenuKey.COPY],\n DEFAULT_MENU_ITEMS[MenuKey.CUT],\n DEFAULT_MENU_ITEMS[MenuKey.PASTE],\n '---',\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_LEFT],\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_RIGHT],\n DEFAULT_MENU_ITEMS[MenuKey.DELETE_COLUMN]\n];\nexport const DEFAULT_COLUMN_SERIES_MENU_ITEMS = [\n DEFAULT_MENU_ITEMS[MenuKey.COPY],\n DEFAULT_MENU_ITEMS[MenuKey.CUT],\n DEFAULT_MENU_ITEMS[MenuKey.PASTE],\n '---',\n\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_LEFT],\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_COLUMN_RIGHT],\n DEFAULT_MENU_ITEMS[MenuKey.DELETE_COLUMN]\n];\n\nexport const DEFAULT_ROW_SERIES_MENU_ITEMS = [\n DEFAULT_MENU_ITEMS[MenuKey.COPY],\n DEFAULT_MENU_ITEMS[MenuKey.CUT],\n DEFAULT_MENU_ITEMS[MenuKey.PASTE],\n '---',\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_ABOVE],\n DEFAULT_MENU_ITEMS[MenuKey.INSERT_ROW_BELOW],\n DEFAULT_MENU_ITEMS[MenuKey.DELETE_ROW]\n];\n\nexport const DEFAULT_CORNER_SERIES_MENU_ITEMS = [\n DEFAULT_MENU_ITEMS[MenuKey.COPY],\n DEFAULT_MENU_ITEMS[MenuKey.CUT],\n DEFAULT_MENU_ITEMS[MenuKey.PASTE]\n];\n"]}
|
|
@@ -34,8 +34,8 @@ const VTable = __importStar(require("@visactor/vtable"));
|
|
|
34
34
|
class ExcelEditCellKeyboardPlugin {
|
|
35
35
|
constructor(pluginOptions) {
|
|
36
36
|
var _a;
|
|
37
|
-
this.id =
|
|
38
|
-
this.
|
|
37
|
+
this.id = "excel-edit-cell-keyboard", this.name = "Excel Edit Cell Keyboard", this.runTime = [ VTable.TABLE_EVENT_TYPE.INITIALIZED ],
|
|
38
|
+
this.id = null !== (_a = null == pluginOptions ? void 0 : pluginOptions.id) && void 0 !== _a ? _a : this.id,
|
|
39
39
|
this.pluginOptions = pluginOptions, this.bindEvent();
|
|
40
40
|
}
|
|
41
41
|
run(...args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["excel-edit-cell-keyboard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAU3C,MAAa,2BAA2B;IAMtC,YAAY,aAAmD;;QAL/D,OAAE,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/excel-edit-cell-keyboard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2C;AAU3C,MAAa,2BAA2B;IAMtC,YAAY,aAAmD;;QAL/D,OAAE,GAAG,0BAA0B,CAAC;QAChC,SAAI,GAAG,0BAA0B,CAAC;QAClC,YAAO,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAI9C,IAAI,CAAC,EAAE,GAAG,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,EAAE,mCAAI,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IACD,GAAG,CAAC,GAAG,IAAwG;QAC7G,MAAM,KAAK,GAAwB,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAyB,CAAC;IACzC,CAAC;IAED,SAAS;QAEP,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAc5E,CAAC;IACD,aAAa,CAAC,KAAoB;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAE5B,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,KAAK,SAAS,EAAE;gBACnE,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;oBAC5E,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;oBACvD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;oBACxC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;oBAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;wBAEvD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;4BACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;yBACrC;6BAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;4BAC9B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;yBACrC;6BAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;4BACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;yBACrC;6BAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;4BACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;yBACrC;6BAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;4BACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;yBACrC;6BAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;4BAClC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;yBACrC;wBAED,KAAK,CAAC,eAAe,EAAE,CAAC;wBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;qBACxB;iBACF;aACF;iBAAM;gBACL,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC5D,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE;oBAC5F,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;oBACxC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;oBAChC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;wBACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;qBACrC;yBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;wBAC9B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;qBACrC;oBAED,KAAK,CAAC,eAAe,EAAE,CAAC;oBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;iBACxB;qBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;oBAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;oBACtD,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,IAAG,CAAC,EAAE;wBAE3B,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC5C;oBAED,KAAK,CAAC,eAAe,EAAE,CAAC;oBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;iBACxB;aACF;SACF;IACH,CAAC;IAED,kBAAkB,CAAC,KAAoB;QACrC,OAAO,CACL,KAAK,CAAC,GAAG,KAAK,OAAO;YACrB,KAAK,CAAC,GAAG,KAAK,KAAK;YACnB,KAAK,CAAC,GAAG,KAAK,WAAW;YACzB,KAAK,CAAC,GAAG,KAAK,YAAY;YAC1B,KAAK,CAAC,GAAG,KAAK,WAAW;YACzB,KAAK,CAAC,GAAG,KAAK,SAAS,CACxB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;CACF;AAvGD,kEAuGC;AAED,SAAS,iBAAiB,CAAC,WAAsC,EAAE,aAA+B;IAChG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,aAAa,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SACjF;KACF;AACH,CAAC","file":"excel-edit-cell-keyboard.js","sourcesContent":["import * as VTable from '@visactor/vtable';\nimport type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';\nimport type { EventArg } from './types';\n//备用 插件配置项 目前感觉都走默认逻辑就行\nexport type IExcelEditCellKeyboardPluginOptions = {\n id?: string;\n // 是否响应删除\n // enableDeleteKey?: boolean;\n};\n\nexport class ExcelEditCellKeyboardPlugin implements VTable.plugins.IVTablePlugin {\n id = `excel-edit-cell-keyboard`;\n name = 'Excel Edit Cell Keyboard';\n runTime = [VTable.TABLE_EVENT_TYPE.INITIALIZED];\n table: VTable.ListTable;\n pluginOptions: IExcelEditCellKeyboardPluginOptions;\n constructor(pluginOptions?: IExcelEditCellKeyboardPluginOptions) {\n this.id = pluginOptions?.id ?? this.id;\n this.pluginOptions = pluginOptions;\n\n this.bindEvent();\n }\n run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], VTable.BaseTableAPI]) {\n const table: VTable.BaseTableAPI = args[2];\n this.table = table as VTable.ListTable;\n }\n\n bindEvent() {\n //监听document全局的keydown事件 捕获阶段监听 可以及时阻止事件传播和默认行为\n document.addEventListener('keydown', this.handleKeyDown.bind(this), true);\n // this.table.on('selected_cell', () => {\n // this.updateHighlight();\n // });\n\n // this.table.on('selected_clear', () => {\n // this.clearHighlight();\n // });\n\n // this.table.on('mousemove_table', () => {\n // if (this.table.stateManager.select.selecting) {\n // this.updateHighlight();\n // }\n // });\n }\n handleKeyDown(event: KeyboardEvent) {\n if (this.table.editorManager) {\n //判断是键盘触发编辑单元格的情况下,那么在编辑状态中切换方向需要选中下一个继续编辑\n if (this.table.editorManager.beginTriggerEditCellMode === 'keydown') {\n if (this.table.editorManager.editingEditor && this.isExcelShortcutKey(event)) {\n const { col, row } = this.table.editorManager.editCell;\n this.table.editorManager.completeEdit();\n this.table.getElement().focus();\n if (!event.shiftKey && !event.ctrlKey && !event.metaKey) {\n //有这些配合键,则不进行选中下一个单元格的行为 执行vtable内部逻辑\n if (event.key === 'Enter') {\n this.table.selectCell(col, row + 1);\n } else if (event.key === 'Tab') {\n this.table.selectCell(col + 1, row);\n } else if (event.key === 'ArrowLeft') {\n this.table.selectCell(col - 1, row);\n } else if (event.key === 'ArrowRight') {\n this.table.selectCell(col + 1, row);\n } else if (event.key === 'ArrowDown') {\n this.table.selectCell(col, row + 1);\n } else if (event.key === 'ArrowUp') {\n this.table.selectCell(col, row - 1);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n }\n } else {\n const { col, row } = this.table.stateManager.select.cellPos;\n if (this.table.editorManager.editingEditor && (event.key === 'Enter' || event.key === 'Tab')) {\n this.table.editorManager.completeEdit();\n this.table.getElement().focus();\n if (event.key === 'Enter') {\n this.table.selectCell(col, row + 1);\n } else if (event.key === 'Tab') {\n this.table.selectCell(col + 1, row);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n } else if (event.key === 'Delete') {\n //响应删除键,删除\n const selectCells = this.table.getSelectedCellInfos();\n if (selectCells?.length > 0) {\n // 如果选中的是范围,则删除范围内的所有单元格\n deleteSelectRange(selectCells, this.table);\n }\n // 阻止事件传播和默认行为\n event.stopPropagation();\n event.preventDefault();\n }\n }\n }\n }\n // 判断event的keyCode是否是excel的快捷键\n isExcelShortcutKey(event: KeyboardEvent) {\n return (\n event.key === 'Enter' ||\n event.key === 'Tab' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n );\n }\n release() {\n document.removeEventListener('keydown', this.handleKeyDown, true);\n }\n}\n//将选中单元格的值设置为空\nfunction deleteSelectRange(selectCells: VTable.TYPES.CellInfo[][], tableInstance: VTable.ListTable) {\n for (let i = 0; i < selectCells.length; i++) {\n for (let j = 0; j < selectCells[i].length; j++) {\n tableInstance.changeCellValue(selectCells[i][j].col, selectCells[i][j].row, '');\n }\n }\n}\n"]}
|