@opentiny/fluent-editor 3.25.1 → 3.25.3-alpha.0
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 +105 -105
- package/es/attributors/line-height.es.js.map +1 -1
- package/es/config/base64-image.es.js.map +1 -1
- package/es/config/editor.config.es.js.map +1 -1
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/config/index.es.js.map +1 -1
- package/es/core/fluent-editor.es.js.map +1 -1
- package/es/fluent-editor.es.js.map +1 -1
- package/es/formats/soft-break.es.js.map +1 -1
- package/es/formats/strike.es.js.map +1 -1
- package/es/formats/video.es.js.map +1 -1
- package/es/modules/counter.es.js.map +1 -1
- package/es/modules/custom-clipboard.es.js.map +1 -1
- package/es/modules/custom-image/BlotFormatter.es.js +28 -0
- package/es/modules/custom-image/BlotFormatter.es.js.map +1 -1
- package/es/modules/custom-image/Options.es.js.map +1 -1
- package/es/modules/custom-image/actions/Action.es.js.map +1 -1
- package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +1 -1
- package/es/modules/custom-image/actions/DeleteAction.es.js.map +1 -1
- package/es/modules/custom-image/image-bar.es.js +126 -0
- package/es/modules/custom-image/image-bar.es.js.map +1 -0
- package/es/modules/custom-image/image.es.js.map +1 -1
- package/es/modules/custom-image/specs/BlotSpec.es.js.map +1 -1
- package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +1 -1
- package/es/modules/custom-image/specs/ImageSpec.es.js.map +1 -1
- package/es/modules/custom-uploader.es.js.map +1 -1
- package/es/modules/divider.es.js.map +1 -1
- package/es/modules/emoji/emoji-list/people.es.js.map +1 -1
- package/es/modules/emoji/emoji-list.es.js.map +1 -1
- package/es/modules/emoji/emoji-map.es.js.map +1 -1
- package/es/modules/emoji/emoji-sprite.es.js.map +1 -1
- package/es/modules/emoji/formats/emoji-blot.es.js.map +1 -1
- package/es/modules/emoji/index.es.js.map +1 -1
- package/es/modules/emoji/modules/emoji.es.js.map +1 -1
- package/es/modules/emoji/modules/toolbar-emoji.es.js.map +1 -1
- package/es/modules/emoji/utils.es.js.map +1 -1
- package/es/modules/file/formats/file.es.js.map +1 -1
- package/es/modules/file/index.es.js.map +1 -1
- package/es/modules/file/modules/file-bar.es.js.map +1 -1
- package/es/modules/global-link/constants.es.js.map +1 -1
- package/es/modules/global-link/formats/customer-widget-link.es.js.map +1 -1
- package/es/modules/global-link/formats/doc-link.es.js.map +1 -1
- package/es/modules/global-link/formats/wiki-link.es.js.map +1 -1
- package/es/modules/global-link/formats/work-item-link.es.js.map +1 -1
- package/es/modules/global-link/index.es.js.map +1 -1
- package/es/modules/global-link/utils/createTable.es.js.map +1 -1
- package/es/modules/link/formats/link.es.js.map +1 -1
- package/es/modules/link/index.es.js.map +1 -1
- package/es/modules/link/modules/tooltip.es.js.map +1 -1
- package/es/modules/mathlive/formats.es.js.map +1 -1
- package/es/modules/mathlive/index.es.js.map +1 -1
- package/es/modules/mathlive/tooltip.es.js.map +1 -1
- package/es/modules/mention/Mention.es.js.map +1 -1
- package/es/modules/mention/MentionLink.es.js.map +1 -1
- package/es/modules/mention/constants.es.js.map +1 -1
- package/es/modules/quick-menu.es.js.map +1 -1
- package/es/modules/syntax.es.js.map +1 -1
- package/es/modules/table/better-table.es.js.map +1 -1
- package/es/modules/table/formats/header.es.js.map +1 -1
- package/es/modules/table/formats/list.es.js.map +1 -1
- package/es/modules/table/formats/table.es.js.map +1 -1
- package/es/modules/table/modules/table-column-tool.es.js.map +1 -1
- package/es/modules/table/modules/table-operation-menu.es.js.map +1 -1
- package/es/modules/table/modules/table-scroll-bar.es.js.map +1 -1
- package/es/modules/table/modules/table-selection.es.js.map +1 -1
- package/es/modules/table/modules/table-selector.es.js.map +1 -1
- package/es/modules/table/table-config.es.js.map +1 -1
- package/es/modules/table/utils/index.es.js.map +1 -1
- package/es/modules/table/utils/node-matchers.es.js.map +1 -1
- package/es/modules/toolbar/better-picker.es.js.map +1 -1
- package/es/modules/toolbar/index.es.js.map +1 -1
- package/es/themes/snow.es.js.map +1 -1
- package/es/tools/screenshot.es.js.map +1 -1
- package/es/ui/icons.config.es.js.map +1 -1
- package/es/ui/icons.es.js.map +1 -1
- package/es/utils/debounce.es.js.map +1 -1
- package/es/utils/method.es.js.map +1 -1
- package/lib/attributors/line-height.cjs.js.map +1 -1
- package/lib/config/base64-image.cjs.js.map +1 -1
- package/lib/config/editor.config.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/config/index.cjs.js.map +1 -1
- package/lib/core/fluent-editor.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/formats/soft-break.cjs.js.map +1 -1
- package/lib/formats/strike.cjs.js.map +1 -1
- package/lib/formats/video.cjs.js.map +1 -1
- package/lib/modules/counter.cjs.js.map +1 -1
- package/lib/modules/custom-clipboard.cjs.js.map +1 -1
- package/lib/modules/custom-image/BlotFormatter.cjs.js +28 -0
- package/lib/modules/custom-image/BlotFormatter.cjs.js.map +1 -1
- package/lib/modules/custom-image/Options.cjs.js.map +1 -1
- package/lib/modules/custom-image/actions/Action.cjs.js.map +1 -1
- package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
- package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +1 -1
- package/lib/modules/custom-image/image-bar.cjs.js +126 -0
- package/lib/modules/custom-image/image-bar.cjs.js.map +1 -0
- package/lib/modules/custom-image/image.cjs.js.map +1 -1
- package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +1 -1
- package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
- package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +1 -1
- package/lib/modules/custom-uploader.cjs.js.map +1 -1
- package/lib/modules/divider.cjs.js.map +1 -1
- package/lib/modules/emoji/emoji-list/people.cjs.js.map +1 -1
- package/lib/modules/emoji/emoji-list.cjs.js.map +1 -1
- package/lib/modules/emoji/emoji-map.cjs.js.map +1 -1
- package/lib/modules/emoji/emoji-sprite.cjs.js.map +1 -1
- package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +1 -1
- package/lib/modules/emoji/index.cjs.js.map +1 -1
- package/lib/modules/emoji/modules/emoji.cjs.js.map +1 -1
- package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
- package/lib/modules/emoji/utils.cjs.js.map +1 -1
- package/lib/modules/file/formats/file.cjs.js.map +1 -1
- package/lib/modules/file/index.cjs.js.map +1 -1
- package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
- package/lib/modules/global-link/constants.cjs.js.map +1 -1
- package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +1 -1
- package/lib/modules/global-link/formats/doc-link.cjs.js.map +1 -1
- package/lib/modules/global-link/formats/wiki-link.cjs.js.map +1 -1
- package/lib/modules/global-link/formats/work-item-link.cjs.js.map +1 -1
- package/lib/modules/global-link/index.cjs.js.map +1 -1
- package/lib/modules/global-link/utils/createTable.cjs.js.map +1 -1
- package/lib/modules/link/formats/link.cjs.js.map +1 -1
- package/lib/modules/link/index.cjs.js.map +1 -1
- package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/modules/mathlive/formats.cjs.js.map +1 -1
- package/lib/modules/mathlive/index.cjs.js.map +1 -1
- package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
- package/lib/modules/mention/Mention.cjs.js.map +1 -1
- package/lib/modules/mention/MentionLink.cjs.js.map +1 -1
- package/lib/modules/mention/constants.cjs.js.map +1 -1
- package/lib/modules/quick-menu.cjs.js.map +1 -1
- package/lib/modules/syntax.cjs.js.map +1 -1
- package/lib/modules/table/better-table.cjs.js.map +1 -1
- package/lib/modules/table/formats/header.cjs.js.map +1 -1
- package/lib/modules/table/formats/list.cjs.js.map +1 -1
- package/lib/modules/table/formats/table.cjs.js.map +1 -1
- package/lib/modules/table/modules/table-column-tool.cjs.js.map +1 -1
- package/lib/modules/table/modules/table-operation-menu.cjs.js.map +1 -1
- package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +1 -1
- package/lib/modules/table/modules/table-selection.cjs.js.map +1 -1
- package/lib/modules/table/modules/table-selector.cjs.js.map +1 -1
- package/lib/modules/table/table-config.cjs.js.map +1 -1
- package/lib/modules/table/utils/index.cjs.js.map +1 -1
- package/lib/modules/table/utils/node-matchers.cjs.js.map +1 -1
- package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/modules/toolbar/index.cjs.js.map +1 -1
- package/lib/themes/snow.cjs.js.map +1 -1
- package/lib/tools/screenshot.cjs.js.map +1 -1
- package/lib/ui/icons.cjs.js.map +1 -1
- package/lib/ui/icons.config.cjs.js.map +1 -1
- package/lib/utils/debounce.cjs.js.map +1 -1
- package/lib/utils/method.cjs.js.map +1 -1
- package/package.json +57 -56
- package/style.css +193 -0
- package/types/attributors/font-size.d.ts +1 -1
- package/types/attributors/font-style.d.ts +1 -1
- package/types/attributors/index.d.ts +4 -4
- package/types/attributors/line-height.d.ts +1 -1
- package/types/attributors/text-indent.d.ts +1 -1
- package/types/config/base64-image.d.ts +2 -2
- package/types/config/editor.config.d.ts +229 -229
- package/types/config/editor.utils.d.ts +42 -42
- package/types/config/i18n/en-us.d.ts +108 -108
- package/types/config/i18n/zh-cn.d.ts +108 -108
- package/types/config/index.d.ts +6 -6
- package/types/config/types/additional-toolbar-item.interface.d.ts +7 -6
- package/types/config/types/content-change.interface.d.ts +13 -13
- package/types/config/types/content-save.interface.d.ts +6 -6
- package/types/config/types/counter-option.interface.d.ts +8 -7
- package/types/config/types/editor-config.interface.d.ts +34 -33
- package/types/config/types/editor-modules.interface.d.ts +30 -29
- package/types/config/types/editor-toolbar.interface.d.ts +4 -3
- package/types/config/types/file-operation.interface.d.ts +11 -10
- package/types/config/types/focus-change.interface.d.ts +4 -4
- package/types/config/types/fullscreen-module.interface.d.ts +4 -4
- package/types/config/types/help-panel-item.interface.d.ts +5 -5
- package/types/config/types/help-panel-option.interface.d.ts +6 -5
- package/types/config/types/image-module.interface.d.ts +3 -3
- package/types/config/types/image-upload.interface.d.ts +6 -5
- package/types/config/types/index.d.ts +23 -23
- package/types/config/types/load-on-demand-module.interface.d.ts +5 -5
- package/types/config/types/mention-module.interface.d.ts +8 -8
- package/types/config/types/paste-change.interface.d.ts +5 -4
- package/types/config/types/quick-menu-module.interface.d.ts +3 -3
- package/types/config/types/range.interface.d.ts +4 -4
- package/types/config/types/registry-options.interface.d.ts +5 -5
- package/types/config/types/selection-change.interface.d.ts +7 -6
- package/types/config/types/toolbar-item.interface.d.ts +13 -13
- package/types/config/types/type.d.ts +5 -4
- package/types/config/types/validate-error.interface.d.ts +13 -13
- package/types/core/fluent-editor.d.ts +10 -9
- package/types/fluent-editor.d.ts +2 -1
- package/types/formats/soft-break.d.ts +14 -14
- package/types/formats/strike.d.ts +7 -7
- package/types/formats/video.d.ts +15 -14
- package/types/index.d.ts +4 -3
- package/types/modules/counter.d.ts +15 -14
- package/types/modules/custom-clipboard.d.ts +27 -26
- package/types/modules/custom-image/BlotFormatter.d.ts +26 -20
- package/types/modules/custom-image/Options.d.ts +36 -36
- package/types/modules/custom-image/actions/Action.d.ts +7 -7
- package/types/modules/custom-image/actions/CustomResizeAction.d.ts +23 -22
- package/types/modules/custom-image/actions/DeleteAction.d.ts +6 -5
- package/types/modules/custom-image/image-bar.d.ts +15 -0
- package/types/modules/custom-image/image.d.ts +28 -28
- package/types/modules/custom-image/specs/BlotSpec.d.ts +11 -10
- package/types/modules/custom-image/specs/CustomImageSpec.d.ts +18 -17
- package/types/modules/custom-image/specs/ImageSpec.d.ts +9 -8
- package/types/modules/custom-uploader.d.ts +30 -29
- package/types/modules/divider.d.ts +7 -7
- package/types/modules/emoji/emoji-list/index.d.ts +1 -1
- package/types/modules/emoji/emoji-list/people.d.ts +1 -1
- package/types/modules/emoji/emoji-list.d.ts +2 -2
- package/types/modules/emoji/emoji-map.d.ts +2 -2
- package/types/modules/emoji/emoji-sprite.d.ts +1 -1
- package/types/modules/emoji/formats/emoji-blot.d.ts +13 -13
- package/types/modules/emoji/index.d.ts +7 -6
- package/types/modules/emoji/modules/emoji.d.ts +38 -38
- package/types/modules/emoji/modules/toolbar-emoji.d.ts +8 -8
- package/types/modules/emoji/utils.d.ts +1 -1
- package/types/modules/file/formats/file.d.ts +15 -15
- package/types/modules/file/index.d.ts +10 -9
- package/types/modules/file/modules/file-bar.d.ts +14 -14
- package/types/modules/global-link/constants.d.ts +3 -3
- package/types/modules/global-link/formats/customer-widget-link.d.ts +14 -14
- package/types/modules/global-link/formats/doc-link.d.ts +17 -17
- package/types/modules/global-link/formats/wiki-link.d.ts +16 -16
- package/types/modules/global-link/formats/work-item-link.d.ts +16 -16
- package/types/modules/global-link/global-link-panel.d.ts +18 -17
- package/types/modules/global-link/index.d.ts +18 -18
- package/types/modules/global-link/utils/createTable.d.ts +1 -1
- package/types/modules/i18n.d.ts +15 -14
- package/types/modules/link/formats/link.d.ts +15 -14
- package/types/modules/link/index.d.ts +6 -6
- package/types/modules/link/modules/tooltip.d.ts +32 -31
- package/types/modules/mathlive/formats.d.ts +21 -20
- package/types/modules/mathlive/index.d.ts +7 -6
- package/types/modules/mathlive/tooltip.d.ts +15 -14
- package/types/modules/mention/Mention.d.ts +54 -53
- package/types/modules/mention/MentionLink.d.ts +15 -14
- package/types/modules/mention/constants.d.ts +3 -3
- package/types/modules/quick-menu.d.ts +21 -20
- package/types/modules/syntax.d.ts +13 -12
- package/types/modules/table/better-table.d.ts +32 -31
- package/types/modules/table/formats/header.d.ts +22 -21
- package/types/modules/table/formats/list.d.ts +34 -34
- package/types/modules/table/formats/table.d.ts +146 -145
- package/types/modules/table/modules/table-column-tool.d.ts +23 -23
- package/types/modules/table/modules/table-operation-menu.d.ts +38 -38
- package/types/modules/table/modules/table-scroll-bar.d.ts +33 -33
- package/types/modules/table/modules/table-selection.d.ts +37 -37
- package/types/modules/table/modules/table-selector.d.ts +22 -22
- package/types/modules/table/table-config.d.ts +38 -38
- package/types/modules/table/utils/index.d.ts +17 -17
- package/types/modules/table/utils/node-matchers.d.ts +9 -9
- package/types/modules/toolbar/better-picker.d.ts +1 -1
- package/types/modules/toolbar/index.d.ts +8 -7
- package/types/modules/toolbar/toolbar-tip.d.ts +8 -7
- package/types/themes/snow.d.ts +3 -2
- package/types/tools/format-painter.d.ts +14 -13
- package/types/tools/fullscreen.d.ts +2 -1
- package/types/tools/screenshot.d.ts +18 -17
- package/types/ui/icons.config.d.ts +36 -36
- package/types/ui/icons.d.ts +6 -6
- package/types/utils/debounce.d.ts +6 -6
- package/types/utils/image.d.ts +1 -1
- package/types/utils/is.d.ts +4 -4
- package/types/utils/method.d.ts +6 -6
- package/types/utils/scroll-lock.d.ts +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-table.cjs.js","sources":["../../../../src/modules/table/better-table.ts"],"sourcesContent":["import Quill from 'quill'\nimport {\n getEventComposedPath,\n insideTable,\n isNullOrUndefined,\n isPureIE,\n} from '../../config/editor.utils'\nimport Header from './formats/header'\nimport List from './formats/list'\nimport {\n cellId,\n rowId,\n TableBody,\n TableCell,\n TableCellLine,\n TableCol,\n TableColGroup,\n TableContainer,\n TableRow,\n TableViewWrapper,\n} from './formats/table'\nimport TableColumnTool from './modules/table-column-tool'\nimport TableOperationMenu from './modules/table-operation-menu'\nimport TableScrollBar from './modules/table-scroll-bar'\nimport TableSelection from './modules/table-selection'\nimport TableSelector from './modules/table-selector'\nimport { css } from './utils'\n// import table node matchers\nimport {\n matchHeader,\n matchInline,\n matchList,\n matchMentionLink,\n matchTable,\n matchTableCell,\n matchTableHeader,\n matchTableRow,\n matchWordShapeImage,\n} from './utils/node-matchers'\n\nconst Block = Quill.imports['blots/block']\nconst Delta = Quill.imports.delta\nconst Module = Quill.imports['core/module']\n\n// @dynamic\nclass BetterTable extends Module {\n static keyboardBindings: any\n isComposition: boolean\n quill: any\n table: any\n modulesContainer: any\n tableSelection: any\n subscriber: any\n tableOperationMenu: any\n columnTool: TableColumnTool\n tableScrollBar: TableScrollBar\n tableSelector: TableSelector\n isTableSelectorVisible: boolean\n tableSelectorWrapper: HTMLDivElement\n\n static register() {\n Quill.register(TableCol, true)\n Quill.register(TableColGroup, true)\n Quill.register(TableCellLine, true)\n Quill.register(TableCell, true)\n Quill.register(TableRow, true)\n Quill.register(TableBody, true)\n Quill.register(TableContainer, true)\n Quill.register(TableViewWrapper, true)\n // register customized Header, overwriting quill built-in Header\n Quill.register('formats/header', Header, true)\n // register customized List, overwriting quill built-in Header\n Quill.register('formats/list', List, true)\n }\n\n constructor(quill, options) {\n super(quill, options)\n\n // handle click on quill-better-table\n this.isComposition = false\n this.isTableSelectorVisible = false\n this.quill.root.addEventListener('mousedown', event => this.handleMouseDown(event, quill), false)\n this.quill.root.addEventListener('compositionend', () => this.handleCompositionend(quill), false)\n this.quill.root.addEventListener('compositionstart', () => this.handleCompositionstart(quill), false)\n this.quill.root.addEventListener('keypress', event => this.handleKeyDown(event, quill), false)\n\n // handle right click on quill-better-table\n this.quill.root.addEventListener(\n 'contextmenu',\n (evt) => {\n if (!this.table) return true\n evt.preventDefault()\n\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\n const path = getEventComposedPath(evt)\n if (!path || path.length <= 0) return\n\n const tableNode = path.filter((node) => {\n return (\n node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\n )\n })[0]\n\n const rowNode = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TR' && node.getAttribute('data-row')\n })[0]\n\n const cellNode = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TD' && node.getAttribute('data-row')\n })[0]\n\n const isTargetCellSelected = this.tableSelection.selectedTds\n .map(tableCell => tableCell.domNode)\n .includes(cellNode)\n\n if (this.tableSelection.selectedTds.length <= 0 || !isTargetCellSelected) {\n this.tableSelection.setSelection(cellNode.getBoundingClientRect(), cellNode.getBoundingClientRect())\n }\n\n if (this.tableOperationMenu) {\n this.tableOperationMenu = this.tableOperationMenu.destroy()\n }\n\n if (tableNode) {\n this.tableOperationMenu = new TableOperationMenu(\n {\n table: tableNode,\n row: rowNode,\n cell: cellNode,\n left: evt.x + 15,\n top: evt.y,\n },\n quill,\n options.operationMenu,\n )\n }\n },\n false,\n )\n\n // add keyboard binding:Backspace\n // prevent user hits backspace to delete table cell\n quill.keyboard.addBinding({ key: 'Backspace' }, {}, (range, context) => {\n if (range.index === 0 || this.quill.getLength() <= 1) return true\n if (context.offset === 0 && range.length === 0) {\n const [prev] = this.quill.getLine(range.index - 1)\n const [line] = this.quill.getLine(range.index)\n if (!isNullOrUndefined(prev)) {\n if (prev.statics.blotName === 'table-cell-line' && line.statics.blotName !== 'table-cell-line') {\n const betterTableModule = this.quill.getModule('better-table')\n let tableBlot\n try {\n tableBlot = prev.parent.parent.parent.parent\n }\n catch (_e) { }\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\n betterTableModule.hideTableTools()\n tableBlot.remove()\n this.quill.update(Quill.sources.USER)\n }\n return false\n }\n }\n }\n return true\n })\n // since only one matched bindings callback will execute.\n // expected my binding callback execute first\n // I changed the order of binding callbacks\n const thisBinding = quill.keyboard.bindings.Backspace.pop()\n quill.keyboard.bindings.Backspace.splice(1, 0, thisBinding)\n\n // add Matchers to match and render quill-better-table for initialization\n // or pasting\n quill.clipboard.addMatcher('td', matchTableCell)\n quill.clipboard.addMatcher('th', matchTableHeader)\n quill.clipboard.addMatcher('table', matchTable)\n quill.clipboard.addMatcher('h1, h2, h3, h4, h5, h6', matchHeader)\n quill.clipboard.addMatcher('ol, ul', matchList)\n quill.clipboard.addMatcher('span', matchMentionLink)\n quill.clipboard.addMatcher('v:imageData', matchWordShapeImage)\n quill.clipboard.addMatcher(Node.ELEMENT_NODE, matchInline)\n\n // remove matcher for tr tag\n quill.clipboard.matchers = quill.clipboard.matchers.filter((matcher) => {\n return matcher[0] !== 'tr'\n })\n\n // fix: 处理空<tr>标签被忽略的情况\n quill.clipboard.addMatcher('tr', matchTableRow)\n\n this.quill.on(Quill.events.EDITOR_CHANGE, () => {\n const tableContainer = Quill.find(this.table)\n if (!tableContainer) {\n this.hideTableTools()\n }\n })\n\n this.quill.on(Quill.events.SELECTION_CHANGE, (range, _oldRange, source) => {\n if (!range) return\n const selectionStart = range.index\n const selectionEnd = range.index + range.length\n if (source === Quill.sources.USER) {\n const tables = this.quill.root.getElementsByTagName('table')\n if (tables && tables.length) {\n [].forEach.call(tables, (table) => {\n const tableContainer = Quill.find(table)\n if (tableContainer) {\n const tableStart = tableContainer.offset(this.quill.scroll)\n const tableEnd = tableStart + tableContainer.length()\n // @ts-ignore\n const classes = Array.from(table.parentNode.classList)\n\n if (selectionStart <= tableStart && tableEnd <= selectionEnd) {\n // @ts-ignore\n table.parentNode.classList.add('quill-better-table-selected')\n }\n else if (classes.includes('quill-better-table-selected')) {\n // @ts-ignore\n table.parentNode.classList.remove('quill-better-table-selected')\n }\n }\n })\n }\n }\n })\n this.initTableSelector()\n }\n\n initTableSelector() {\n // feat table selector ,在better-table按钮上套一层容器,往容器添加table selector\n const toolbar = this.quill.getModule('toolbar')\n if (!toolbar) return\n const tableButton = toolbar.container.querySelector('.ql-better-table')\n if (!tableButton) return\n const tableSelectorWrapper = this.tableSelectorWrapperCreator()\n tableButton.parentNode.insertBefore(tableSelectorWrapper, tableButton)\n tableSelectorWrapper.appendChild(tableButton)\n this.tableSelectorWrapper = tableSelectorWrapper\n tableSelectorWrapper.addEventListener('mouseenter', this.handleTableSelectorHover.bind(this), false)\n tableSelectorWrapper.addEventListener('mouseleave', this.handleTableSelectorMouseOut.bind(this), false)\n }\n\n tableSelectorWrapperCreator() {\n const wrapper = document.createElement('div')\n wrapper.className = 'ql-better-table-wrapper'\n const cssContent = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n }\n css(wrapper, cssContent)\n return wrapper\n }\n\n handleMouseDown(evt, quill) {\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\n const path = getEventComposedPath(evt)\n if (!path || path.length <= 0) return\n const tableNode = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\n })[0]\n if (tableNode) {\n tableNode.parentNode.classList.remove('quill-better-table-selected')\n // current table clicked\n if (this.table === tableNode) return\n // other table clicked\n if (this.table) {\n this.hideTableTools()\n }\n if (!quill.options.readOnly) { // not show table tool in readonly mode\n this.showTableTools(tableNode, quill)\n }\n }\n else if (this.table) {\n // other clicked\n this.hideTableTools()\n }\n }\n\n handleKeyDown(evt, quill) {\n const key = evt.key\n const range = quill.getSelection()\n if (this.isComposition || !range) return\n const [col] = quill.getLine(range.index)\n const [td] = quill.getLine(range.index - 1)\n if (key && key !== 'Delete' && col && range) {\n if (col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n betterTableModule.hideTableTools()\n quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\n quill.insertText(range.index, '\\n', Quill.sources.USER)\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n }\n }\n\n handleCompositionstart(quill) {\n this.isComposition = true\n const range = quill.getSelection()\n const [col] = quill.getLine(range.index)\n const [td] = quill.getLine(range.index - 1)\n if (col && range) {\n if (col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n betterTableModule.hideTableTools()\n quill.insertText(range.index - 1, '\\n\\t', Quill.sources.USER)\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n }\n }\n\n handleCompositionend(quill) {\n // fix: 解决在空行行首用中文输入法输入字符,然后按退格导致插入多余空行的问题\n const range = quill.getSelection()\n const [line] = quill.getLine(range.index)\n const domNode = line.domNode\n const isInParagraph = domNode.nodeName === 'P'\n const isInTableCell = line.statics.blotName === 'table-cell-line'\n if ((isInParagraph || isInTableCell)\n && domNode.childNodes.length > 1\n && domNode.childNodes[0].nodeName === 'BR') {\n domNode.childNodes[0].remove()\n }\n\n if (isPureIE && line instanceof Block) {\n // 设置光标位置防止跳入下一行\n quill.setSelection(range.index, 0, Quill.sources.SILENT)\n }\n\n this.isComposition = false\n }\n\n // 触发table selector\n handleTableSelectorHover() {\n if (this.isTableSelectorVisible) return\n if (!this.tableSelectorWrapper) return\n this.isTableSelectorVisible = true\n this.tableSelector = new TableSelector({\n onSelect: (rows, cols) => this.insertTable(rows, cols),\n })\n this.tableSelectorWrapper.appendChild(this.tableSelector.container)\n const buttonRect = this.tableSelectorWrapper.getBoundingClientRect()\n this.tableSelector.show(\n 0,\n buttonRect.height,\n )\n }\n\n // table selector 鼠标离开\n handleTableSelectorMouseOut() {\n if (this.tableSelector) {\n this.tableSelector.destroy()\n }\n this.tableSelector = null\n this.isTableSelectorVisible = false\n }\n\n getTable(range = this.quill.getSelection()) {\n if (isNullOrUndefined(range)) return [null, null, null, -1]\n const [cellLine, offset] = this.quill.getLine(range.index)\n if (isNullOrUndefined(cellLine) || cellLine.statics.blotName !== TableCellLine.blotName) {\n return [null, null, null, -1]\n }\n const cell = cellLine.tableCell()\n const row = cell.row()\n const table = row.table()\n return [table, row, cell, offset]\n }\n\n insertTable(rows, columns) {\n const range = this.quill.getSelection(true)\n const isInsideTable = insideTable(range, this.quill)\n if (isNullOrUndefined(range) || isInsideTable) return\n // let currentBlot = this.quill.getLeaf(range.index)[0]\n // let nextBlot = this.quill.getLeaf(range.index + 1)[0]\n let delta = new Delta().retain(range.index)\n\n delta.insert('\\n')\n // insert table column\n delta = new Array(columns).fill('\\n').reduce((memo, text) => {\n memo.insert(text, { 'table-col': true })\n return memo\n }, delta)\n // insert table cell line with empty line\n delta = new Array(rows).fill(0).reduce((memo) => {\n const tableRowId = rowId()\n return new Array(columns).fill('\\n').reduce((op, text) => {\n op.insert(text, { 'table-cell-line': { row: tableRowId, cell: cellId() } })\n return op\n }, memo)\n }, delta)\n\n const [col] = this.quill.getLine(range.index)\n if (col && col.statics.blotName === 'table-col') {\n delta.insert('\\n')\n }\n\n this.quill.updateContents(delta, Quill.sources.USER)\n\n // feature: 新增表格后首格自动激活编辑状态,initEvent兼容IE\n const [cellLine] = this.quill.getLine(range.index + columns + 1)\n if (cellLine) {\n const cell = cellLine.tableCell()\n const td = cell.domNode\n const mousedownEvent = document.createEvent('MouseEvent')\n const mouseupEvent = document.createEvent('MouseEvent')\n const keyEvent = document.createEvent('Event')\n mousedownEvent.initEvent('mousedown', true, false)\n mouseupEvent.initEvent('mouseup', true, false)\n keyEvent.initEvent('keypress', true, false)\n td.dispatchEvent(mousedownEvent)\n td.dispatchEvent(mouseupEvent)\n td.dispatchEvent(keyEvent)\n this.tableSelection.endTd = td\n }\n }\n\n showTableTools(table, quill) {\n this.table = table\n this.modulesContainer = document.createElement('div')\n this.modulesContainer.classList.add('qlbt-modules-container')\n // fix:表格容器插入时获取ql-tooltip容器,用insertBefore插入到它前面,避免遮挡链接浮窗\n const linkContainer = this.quill.root.parentNode.querySelector('.ql-tooltip ')\n this.quill.root.parentNode.insertBefore(this.modulesContainer, linkContainer)\n this.tableSelection = new TableSelection(table, quill, this.modulesContainer)\n this.columnTool = new TableColumnTool(table, quill, this.modulesContainer)\n this.tableScrollBar = new TableScrollBar(table, quill, this.modulesContainer)\n let timeoutID\n this.subscriber = () => {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(this.hideTableTools, 300)\n }\n window.addEventListener('resize', this.subscriber, false)\n }\n\n hideTableTools() {\n if (this.columnTool) {\n this.columnTool.destroy()\n }\n if (this.tableSelection) {\n this.tableSelection.destroy()\n }\n if (this.tableOperationMenu) {\n this.tableOperationMenu.destroy()\n }\n if (this.tableScrollBar) {\n this.tableScrollBar.destroy()\n }\n if (this.modulesContainer) {\n this.modulesContainer.remove()\n }\n this.columnTool = null\n this.tableSelection = null\n this.tableOperationMenu = null\n this.tableScrollBar = null\n this.modulesContainer = null\n this.table = null\n if (this.subscriber) {\n window.removeEventListener('resize', this.subscriber)\n }\n }\n}\n\nBetterTable.keyboardBindings = {\n 'line delete': {\n key: 'Delete',\n shiftKey: null,\n format: { 'table-col': false, 'table-cell-line': false },\n collapsed: true,\n offset: 0,\n handler(range, context) {\n // fix: 当光标在编辑器最前且之后为表格时按delete不执行操作\n if (range.index === 0 && context.line.next && context.line.next.statics.blotName === 'table-view') {\n const [p] = this.quill.getLine(range.index - 1)\n const [col] = this.quill.getLine(range.index + 1)\n if (p && p.statics.blotName === 'block' && col && col.statics.blotName === 'table-col') {\n return false\n }\n }\n return true\n },\n },\n 'table-col enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table-col'],\n collapsed: true,\n offset: 0,\n handler(range, context) {\n if (context.offset === 0 && range.length === 0) {\n const [col] = this.quill.getLine(range.index)\n if (col && col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n betterTableModule.hideTableTools()\n this.quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\n this.quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n }\n },\n },\n 'table-col delete': {\n key: 'Delete',\n shiftKey: null,\n format: ['table-col'],\n collapsed: true,\n offset: 0,\n handler(range, context) {\n if (context.offset === 0 && range.length === 0) {\n const [col] = this.quill.getLine(range.index)\n if (col && col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n let tableBlot\n try {\n tableBlot = col.parent.parent.parent\n }\n catch (_e) { }\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\n betterTableModule.hideTableTools()\n tableBlot.remove()\n this.quill.update(Quill.sources.USER)\n }\n }\n }\n },\n },\n 'table-col backspace': {\n key: 'Backspace',\n shiftKey: null,\n format: ['table-col'],\n collapsed: true,\n offset: 0,\n handler() { },\n },\n 'table-cell-line backspace': {\n key: 'Backspace',\n format: ['table-cell-line'],\n collapsed: true,\n offset: 0,\n handler(range) {\n const [line] = this.quill.getLine(range.index)\n // 移除原有对非table-cell-line的阻止条件,使table-cell-line前的list等内容可以被删除\n if (!line.prev) {\n return false\n }\n return true\n },\n },\n 'table-cell-line delete': {\n key: 'Delete',\n format: ['table-cell-line'],\n handler(range, _context) {\n // 获取table-cell-line的索引和长度\n const [line] = this.quill.getLine(range.index)\n const index = this.quill.getIndex(line)\n const length = line.length()\n if (!line.next // 当无下一个元素且满足以下情况阻止删除操作\n && ((!line.prev && length === 1) // 单元格内只有一个table-cell-line且无内容\n || (range.index !== index && range.index + 1 >= index + length))) { // 光标在有内容的table-cell-line最后\n return false\n }\n return true\n },\n },\n 'table-cell-line enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table-cell-line'],\n handler(range, context) {\n // fix:通过window的光标选区当前指向判断,如果为HTMLElement且为表格容器则定位至下一行\n const node = window.getSelection().anchorNode\n if (node instanceof HTMLDivElement && node.classList.contains('quill-better-table-wrapper')) {\n this.quill.setSelection(range.index + 1, 0, Quill.sources.USER)\n this.quill.focus()\n return\n }\n // bugfix: a unexpected new line inserted when user compositionend with hitting Enter\n if (this.quill.selection && this.quill.selection.composing) return\n const Scope = Quill.imports.parchment.Scope\n if (range.length > 0) {\n this.quill.scroll.deleteAt(range.index, range.length) // So we do not trigger text-change\n }\n const lineFormats = Object.keys(context.format).reduce((formats, format) => {\n if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {\n formats[format] = context.format[format]\n }\n return formats\n }, {})\n // insert new cellLine with lineFormats\n this.quill.insertText(range.index, '\\n', lineFormats['table-cell-line'], Quill.sources.USER)\n // Earlier scroll.deleteAt might have messed up our selection,\n // so insertText's built in selection preservation is not reliable\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\n this.quill.focus()\n Object.keys(context.format).forEach((name) => {\n if (!isNullOrUndefined(lineFormats[name])) return\n if (Array.isArray(context.format[name])) return\n if (name === 'link') return\n this.quill.format(name, context.format[name], Quill.sources.USER)\n })\n },\n },\n}\n\nexport default BetterTable\n"],"names":["TableCol","TableColGroup","TableCellLine","TableCell","TableRow","TableBody","TableContainer","TableViewWrapper","Header","List","getEventComposedPath","TableOperationMenu","isNullOrUndefined","matchTableCell","matchTableHeader","matchTable","matchHeader","matchList","matchMentionLink","matchWordShapeImage","matchInline","matchTableRow","table","css","isPureIE","TableSelector","insideTable","rowId","cellId","TableSelection","TableColumnTool","TableScrollBar","index"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"better-table.cjs.js","sources":["../../../../src/modules/table/better-table.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport {\r\n getEventComposedPath,\r\n insideTable,\r\n isNullOrUndefined,\r\n isPureIE,\r\n} from '../../config/editor.utils'\r\nimport Header from './formats/header'\r\nimport List from './formats/list'\r\nimport {\r\n cellId,\r\n rowId,\r\n TableBody,\r\n TableCell,\r\n TableCellLine,\r\n TableCol,\r\n TableColGroup,\r\n TableContainer,\r\n TableRow,\r\n TableViewWrapper,\r\n} from './formats/table'\r\nimport TableColumnTool from './modules/table-column-tool'\r\nimport TableOperationMenu from './modules/table-operation-menu'\r\nimport TableScrollBar from './modules/table-scroll-bar'\r\nimport TableSelection from './modules/table-selection'\r\nimport TableSelector from './modules/table-selector'\r\nimport { css } from './utils'\r\n// import table node matchers\r\nimport {\r\n matchHeader,\r\n matchInline,\r\n matchList,\r\n matchMentionLink,\r\n matchTable,\r\n matchTableCell,\r\n matchTableHeader,\r\n matchTableRow,\r\n matchWordShapeImage,\r\n} from './utils/node-matchers'\r\n\r\nconst Block = Quill.imports['blots/block']\r\nconst Delta = Quill.imports.delta\r\nconst Module = Quill.imports['core/module']\r\n\r\n// @dynamic\r\nclass BetterTable extends Module {\r\n static keyboardBindings: any\r\n isComposition: boolean\r\n quill: any\r\n table: any\r\n modulesContainer: any\r\n tableSelection: any\r\n subscriber: any\r\n tableOperationMenu: any\r\n columnTool: TableColumnTool\r\n tableScrollBar: TableScrollBar\r\n tableSelector: TableSelector\r\n isTableSelectorVisible: boolean\r\n tableSelectorWrapper: HTMLDivElement\r\n\r\n static register() {\r\n Quill.register(TableCol, true)\r\n Quill.register(TableColGroup, true)\r\n Quill.register(TableCellLine, true)\r\n Quill.register(TableCell, true)\r\n Quill.register(TableRow, true)\r\n Quill.register(TableBody, true)\r\n Quill.register(TableContainer, true)\r\n Quill.register(TableViewWrapper, true)\r\n // register customized Header, overwriting quill built-in Header\r\n Quill.register('formats/header', Header, true)\r\n // register customized List, overwriting quill built-in Header\r\n Quill.register('formats/list', List, true)\r\n }\r\n\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n // handle click on quill-better-table\r\n this.isComposition = false\r\n this.isTableSelectorVisible = false\r\n this.quill.root.addEventListener('mousedown', event => this.handleMouseDown(event, quill), false)\r\n this.quill.root.addEventListener('compositionend', () => this.handleCompositionend(quill), false)\r\n this.quill.root.addEventListener('compositionstart', () => this.handleCompositionstart(quill), false)\r\n this.quill.root.addEventListener('keypress', event => this.handleKeyDown(event, quill), false)\r\n\r\n // handle right click on quill-better-table\r\n this.quill.root.addEventListener(\r\n 'contextmenu',\r\n (evt) => {\r\n if (!this.table) return true\r\n evt.preventDefault()\r\n\r\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\r\n const path = getEventComposedPath(evt)\r\n if (!path || path.length <= 0) return\r\n\r\n const tableNode = path.filter((node) => {\r\n return (\r\n node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\r\n )\r\n })[0]\r\n\r\n const rowNode = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TR' && node.getAttribute('data-row')\r\n })[0]\r\n\r\n const cellNode = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TD' && node.getAttribute('data-row')\r\n })[0]\r\n\r\n const isTargetCellSelected = this.tableSelection.selectedTds\r\n .map(tableCell => tableCell.domNode)\r\n .includes(cellNode)\r\n\r\n if (this.tableSelection.selectedTds.length <= 0 || !isTargetCellSelected) {\r\n this.tableSelection.setSelection(cellNode.getBoundingClientRect(), cellNode.getBoundingClientRect())\r\n }\r\n\r\n if (this.tableOperationMenu) {\r\n this.tableOperationMenu = this.tableOperationMenu.destroy()\r\n }\r\n\r\n if (tableNode) {\r\n this.tableOperationMenu = new TableOperationMenu(\r\n {\r\n table: tableNode,\r\n row: rowNode,\r\n cell: cellNode,\r\n left: evt.x + 15,\r\n top: evt.y,\r\n },\r\n quill,\r\n options.operationMenu,\r\n )\r\n }\r\n },\r\n false,\r\n )\r\n\r\n // add keyboard binding:Backspace\r\n // prevent user hits backspace to delete table cell\r\n quill.keyboard.addBinding({ key: 'Backspace' }, {}, (range, context) => {\r\n if (range.index === 0 || this.quill.getLength() <= 1) return true\r\n if (context.offset === 0 && range.length === 0) {\r\n const [prev] = this.quill.getLine(range.index - 1)\r\n const [line] = this.quill.getLine(range.index)\r\n if (!isNullOrUndefined(prev)) {\r\n if (prev.statics.blotName === 'table-cell-line' && line.statics.blotName !== 'table-cell-line') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n let tableBlot\r\n try {\r\n tableBlot = prev.parent.parent.parent.parent\r\n }\r\n catch (_e) { }\r\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\r\n betterTableModule.hideTableTools()\r\n tableBlot.remove()\r\n this.quill.update(Quill.sources.USER)\r\n }\r\n return false\r\n }\r\n }\r\n }\r\n return true\r\n })\r\n // since only one matched bindings callback will execute.\r\n // expected my binding callback execute first\r\n // I changed the order of binding callbacks\r\n const thisBinding = quill.keyboard.bindings.Backspace.pop()\r\n quill.keyboard.bindings.Backspace.splice(1, 0, thisBinding)\r\n\r\n // add Matchers to match and render quill-better-table for initialization\r\n // or pasting\r\n quill.clipboard.addMatcher('td', matchTableCell)\r\n quill.clipboard.addMatcher('th', matchTableHeader)\r\n quill.clipboard.addMatcher('table', matchTable)\r\n quill.clipboard.addMatcher('h1, h2, h3, h4, h5, h6', matchHeader)\r\n quill.clipboard.addMatcher('ol, ul', matchList)\r\n quill.clipboard.addMatcher('span', matchMentionLink)\r\n quill.clipboard.addMatcher('v:imageData', matchWordShapeImage)\r\n quill.clipboard.addMatcher(Node.ELEMENT_NODE, matchInline)\r\n\r\n // remove matcher for tr tag\r\n quill.clipboard.matchers = quill.clipboard.matchers.filter((matcher) => {\r\n return matcher[0] !== 'tr'\r\n })\r\n\r\n // fix: 处理空<tr>标签被忽略的情况\r\n quill.clipboard.addMatcher('tr', matchTableRow)\r\n\r\n this.quill.on(Quill.events.EDITOR_CHANGE, () => {\r\n const tableContainer = Quill.find(this.table)\r\n if (!tableContainer) {\r\n this.hideTableTools()\r\n }\r\n })\r\n\r\n this.quill.on(Quill.events.SELECTION_CHANGE, (range, _oldRange, source) => {\r\n if (!range) return\r\n const selectionStart = range.index\r\n const selectionEnd = range.index + range.length\r\n if (source === Quill.sources.USER) {\r\n const tables = this.quill.root.getElementsByTagName('table')\r\n if (tables && tables.length) {\r\n [].forEach.call(tables, (table) => {\r\n const tableContainer = Quill.find(table)\r\n if (tableContainer) {\r\n const tableStart = tableContainer.offset(this.quill.scroll)\r\n const tableEnd = tableStart + tableContainer.length()\r\n // @ts-ignore\r\n const classes = Array.from(table.parentNode.classList)\r\n\r\n if (selectionStart <= tableStart && tableEnd <= selectionEnd) {\r\n // @ts-ignore\r\n table.parentNode.classList.add('quill-better-table-selected')\r\n }\r\n else if (classes.includes('quill-better-table-selected')) {\r\n // @ts-ignore\r\n table.parentNode.classList.remove('quill-better-table-selected')\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n this.initTableSelector()\r\n }\r\n\r\n initTableSelector() {\r\n // feat table selector ,在better-table按钮上套一层容器,往容器添加table selector\r\n const toolbar = this.quill.getModule('toolbar')\r\n if (!toolbar) return\r\n const tableButton = toolbar.container.querySelector('.ql-better-table')\r\n if (!tableButton) return\r\n const tableSelectorWrapper = this.tableSelectorWrapperCreator()\r\n tableButton.parentNode.insertBefore(tableSelectorWrapper, tableButton)\r\n tableSelectorWrapper.appendChild(tableButton)\r\n this.tableSelectorWrapper = tableSelectorWrapper\r\n tableSelectorWrapper.addEventListener('mouseenter', this.handleTableSelectorHover.bind(this), false)\r\n tableSelectorWrapper.addEventListener('mouseleave', this.handleTableSelectorMouseOut.bind(this), false)\r\n }\r\n\r\n tableSelectorWrapperCreator() {\r\n const wrapper = document.createElement('div')\r\n wrapper.className = 'ql-better-table-wrapper'\r\n const cssContent = {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxSizing: 'border-box',\r\n }\r\n css(wrapper, cssContent)\r\n return wrapper\r\n }\r\n\r\n handleMouseDown(evt, quill) {\r\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\r\n const path = getEventComposedPath(evt)\r\n if (!path || path.length <= 0) return\r\n const tableNode = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\r\n })[0]\r\n if (tableNode) {\r\n tableNode.parentNode.classList.remove('quill-better-table-selected')\r\n // current table clicked\r\n if (this.table === tableNode) return\r\n // other table clicked\r\n if (this.table) {\r\n this.hideTableTools()\r\n }\r\n if (!quill.options.readOnly) { // not show table tool in readonly mode\r\n this.showTableTools(tableNode, quill)\r\n }\r\n }\r\n else if (this.table) {\r\n // other clicked\r\n this.hideTableTools()\r\n }\r\n }\r\n\r\n handleKeyDown(evt, quill) {\r\n const key = evt.key\r\n const range = quill.getSelection()\r\n if (this.isComposition || !range) return\r\n const [col] = quill.getLine(range.index)\r\n const [td] = quill.getLine(range.index - 1)\r\n if (key && key !== 'Delete' && col && range) {\r\n if (col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n betterTableModule.hideTableTools()\r\n quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\r\n quill.insertText(range.index, '\\n', Quill.sources.USER)\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n }\r\n }\r\n\r\n handleCompositionstart(quill) {\r\n this.isComposition = true\r\n const range = quill.getSelection()\r\n const [col] = quill.getLine(range.index)\r\n const [td] = quill.getLine(range.index - 1)\r\n if (col && range) {\r\n if (col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n betterTableModule.hideTableTools()\r\n quill.insertText(range.index - 1, '\\n\\t', Quill.sources.USER)\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n }\r\n }\r\n\r\n handleCompositionend(quill) {\r\n // fix: 解决在空行行首用中文输入法输入字符,然后按退格导致插入多余空行的问题\r\n const range = quill.getSelection()\r\n const [line] = quill.getLine(range.index)\r\n const domNode = line.domNode\r\n const isInParagraph = domNode.nodeName === 'P'\r\n const isInTableCell = line.statics.blotName === 'table-cell-line'\r\n if ((isInParagraph || isInTableCell)\r\n && domNode.childNodes.length > 1\r\n && domNode.childNodes[0].nodeName === 'BR') {\r\n domNode.childNodes[0].remove()\r\n }\r\n\r\n if (isPureIE && line instanceof Block) {\r\n // 设置光标位置防止跳入下一行\r\n quill.setSelection(range.index, 0, Quill.sources.SILENT)\r\n }\r\n\r\n this.isComposition = false\r\n }\r\n\r\n // 触发table selector\r\n handleTableSelectorHover() {\r\n if (this.isTableSelectorVisible) return\r\n if (!this.tableSelectorWrapper) return\r\n this.isTableSelectorVisible = true\r\n this.tableSelector = new TableSelector({\r\n onSelect: (rows, cols) => this.insertTable(rows, cols),\r\n })\r\n this.tableSelectorWrapper.appendChild(this.tableSelector.container)\r\n const buttonRect = this.tableSelectorWrapper.getBoundingClientRect()\r\n this.tableSelector.show(\r\n 0,\r\n buttonRect.height,\r\n )\r\n }\r\n\r\n // table selector 鼠标离开\r\n handleTableSelectorMouseOut() {\r\n if (this.tableSelector) {\r\n this.tableSelector.destroy()\r\n }\r\n this.tableSelector = null\r\n this.isTableSelectorVisible = false\r\n }\r\n\r\n getTable(range = this.quill.getSelection()) {\r\n if (isNullOrUndefined(range)) return [null, null, null, -1]\r\n const [cellLine, offset] = this.quill.getLine(range.index)\r\n if (isNullOrUndefined(cellLine) || cellLine.statics.blotName !== TableCellLine.blotName) {\r\n return [null, null, null, -1]\r\n }\r\n const cell = cellLine.tableCell()\r\n const row = cell.row()\r\n const table = row.table()\r\n return [table, row, cell, offset]\r\n }\r\n\r\n insertTable(rows, columns) {\r\n const range = this.quill.getSelection(true)\r\n const isInsideTable = insideTable(range, this.quill)\r\n if (isNullOrUndefined(range) || isInsideTable) return\r\n // let currentBlot = this.quill.getLeaf(range.index)[0]\r\n // let nextBlot = this.quill.getLeaf(range.index + 1)[0]\r\n let delta = new Delta().retain(range.index)\r\n\r\n delta.insert('\\n')\r\n // insert table column\r\n delta = new Array(columns).fill('\\n').reduce((memo, text) => {\r\n memo.insert(text, { 'table-col': true })\r\n return memo\r\n }, delta)\r\n // insert table cell line with empty line\r\n delta = new Array(rows).fill(0).reduce((memo) => {\r\n const tableRowId = rowId()\r\n return new Array(columns).fill('\\n').reduce((op, text) => {\r\n op.insert(text, { 'table-cell-line': { row: tableRowId, cell: cellId() } })\r\n return op\r\n }, memo)\r\n }, delta)\r\n\r\n const [col] = this.quill.getLine(range.index)\r\n if (col && col.statics.blotName === 'table-col') {\r\n delta.insert('\\n')\r\n }\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n\r\n // feature: 新增表格后首格自动激活编辑状态,initEvent兼容IE\r\n const [cellLine] = this.quill.getLine(range.index + columns + 1)\r\n if (cellLine) {\r\n const cell = cellLine.tableCell()\r\n const td = cell.domNode\r\n const mousedownEvent = document.createEvent('MouseEvent')\r\n const mouseupEvent = document.createEvent('MouseEvent')\r\n const keyEvent = document.createEvent('Event')\r\n mousedownEvent.initEvent('mousedown', true, false)\r\n mouseupEvent.initEvent('mouseup', true, false)\r\n keyEvent.initEvent('keypress', true, false)\r\n td.dispatchEvent(mousedownEvent)\r\n td.dispatchEvent(mouseupEvent)\r\n td.dispatchEvent(keyEvent)\r\n this.tableSelection.endTd = td\r\n }\r\n }\r\n\r\n showTableTools(table, quill) {\r\n this.table = table\r\n this.modulesContainer = document.createElement('div')\r\n this.modulesContainer.classList.add('qlbt-modules-container')\r\n // fix:表格容器插入时获取ql-tooltip容器,用insertBefore插入到它前面,避免遮挡链接浮窗\r\n const linkContainer = this.quill.root.parentNode.querySelector('.ql-tooltip ')\r\n this.quill.root.parentNode.insertBefore(this.modulesContainer, linkContainer)\r\n this.tableSelection = new TableSelection(table, quill, this.modulesContainer)\r\n this.columnTool = new TableColumnTool(table, quill, this.modulesContainer)\r\n this.tableScrollBar = new TableScrollBar(table, quill, this.modulesContainer)\r\n let timeoutID\r\n this.subscriber = () => {\r\n clearTimeout(timeoutID)\r\n timeoutID = setTimeout(this.hideTableTools, 300)\r\n }\r\n window.addEventListener('resize', this.subscriber, false)\r\n }\r\n\r\n hideTableTools() {\r\n if (this.columnTool) {\r\n this.columnTool.destroy()\r\n }\r\n if (this.tableSelection) {\r\n this.tableSelection.destroy()\r\n }\r\n if (this.tableOperationMenu) {\r\n this.tableOperationMenu.destroy()\r\n }\r\n if (this.tableScrollBar) {\r\n this.tableScrollBar.destroy()\r\n }\r\n if (this.modulesContainer) {\r\n this.modulesContainer.remove()\r\n }\r\n this.columnTool = null\r\n this.tableSelection = null\r\n this.tableOperationMenu = null\r\n this.tableScrollBar = null\r\n this.modulesContainer = null\r\n this.table = null\r\n if (this.subscriber) {\r\n window.removeEventListener('resize', this.subscriber)\r\n }\r\n }\r\n}\r\n\r\nBetterTable.keyboardBindings = {\r\n 'line delete': {\r\n key: 'Delete',\r\n shiftKey: null,\r\n format: { 'table-col': false, 'table-cell-line': false },\r\n collapsed: true,\r\n offset: 0,\r\n handler(range, context) {\r\n // fix: 当光标在编辑器最前且之后为表格时按delete不执行操作\r\n if (range.index === 0 && context.line.next && context.line.next.statics.blotName === 'table-view') {\r\n const [p] = this.quill.getLine(range.index - 1)\r\n const [col] = this.quill.getLine(range.index + 1)\r\n if (p && p.statics.blotName === 'block' && col && col.statics.blotName === 'table-col') {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n },\r\n 'table-col enter': {\r\n key: 'Enter',\r\n shiftKey: null,\r\n format: ['table-col'],\r\n collapsed: true,\r\n offset: 0,\r\n handler(range, context) {\r\n if (context.offset === 0 && range.length === 0) {\r\n const [col] = this.quill.getLine(range.index)\r\n if (col && col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n betterTableModule.hideTableTools()\r\n this.quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\r\n this.quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n }\r\n },\r\n },\r\n 'table-col delete': {\r\n key: 'Delete',\r\n shiftKey: null,\r\n format: ['table-col'],\r\n collapsed: true,\r\n offset: 0,\r\n handler(range, context) {\r\n if (context.offset === 0 && range.length === 0) {\r\n const [col] = this.quill.getLine(range.index)\r\n if (col && col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n let tableBlot\r\n try {\r\n tableBlot = col.parent.parent.parent\r\n }\r\n catch (_e) { }\r\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\r\n betterTableModule.hideTableTools()\r\n tableBlot.remove()\r\n this.quill.update(Quill.sources.USER)\r\n }\r\n }\r\n }\r\n },\r\n },\r\n 'table-col backspace': {\r\n key: 'Backspace',\r\n shiftKey: null,\r\n format: ['table-col'],\r\n collapsed: true,\r\n offset: 0,\r\n handler() { },\r\n },\r\n 'table-cell-line backspace': {\r\n key: 'Backspace',\r\n format: ['table-cell-line'],\r\n collapsed: true,\r\n offset: 0,\r\n handler(range) {\r\n const [line] = this.quill.getLine(range.index)\r\n // 移除原有对非table-cell-line的阻止条件,使table-cell-line前的list等内容可以被删除\r\n if (!line.prev) {\r\n return false\r\n }\r\n return true\r\n },\r\n },\r\n 'table-cell-line delete': {\r\n key: 'Delete',\r\n format: ['table-cell-line'],\r\n handler(range, _context) {\r\n // 获取table-cell-line的索引和长度\r\n const [line] = this.quill.getLine(range.index)\r\n const index = this.quill.getIndex(line)\r\n const length = line.length()\r\n if (!line.next // 当无下一个元素且满足以下情况阻止删除操作\r\n && ((!line.prev && length === 1) // 单元格内只有一个table-cell-line且无内容\r\n || (range.index !== index && range.index + 1 >= index + length))) { // 光标在有内容的table-cell-line最后\r\n return false\r\n }\r\n return true\r\n },\r\n },\r\n 'table-cell-line enter': {\r\n key: 'Enter',\r\n shiftKey: null,\r\n format: ['table-cell-line'],\r\n handler(range, context) {\r\n // fix:通过window的光标选区当前指向判断,如果为HTMLElement且为表格容器则定位至下一行\r\n const node = window.getSelection().anchorNode\r\n if (node instanceof HTMLDivElement && node.classList.contains('quill-better-table-wrapper')) {\r\n this.quill.setSelection(range.index + 1, 0, Quill.sources.USER)\r\n this.quill.focus()\r\n return\r\n }\r\n // bugfix: a unexpected new line inserted when user compositionend with hitting Enter\r\n if (this.quill.selection && this.quill.selection.composing) return\r\n const Scope = Quill.imports.parchment.Scope\r\n if (range.length > 0) {\r\n this.quill.scroll.deleteAt(range.index, range.length) // So we do not trigger text-change\r\n }\r\n const lineFormats = Object.keys(context.format).reduce((formats, format) => {\r\n if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {\r\n formats[format] = context.format[format]\r\n }\r\n return formats\r\n }, {})\r\n // insert new cellLine with lineFormats\r\n this.quill.insertText(range.index, '\\n', lineFormats['table-cell-line'], Quill.sources.USER)\r\n // Earlier scroll.deleteAt might have messed up our selection,\r\n // so insertText's built in selection preservation is not reliable\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n this.quill.focus()\r\n Object.keys(context.format).forEach((name) => {\r\n if (!isNullOrUndefined(lineFormats[name])) return\r\n if (Array.isArray(context.format[name])) return\r\n if (name === 'link') return\r\n this.quill.format(name, context.format[name], Quill.sources.USER)\r\n })\r\n },\r\n },\r\n}\r\n\r\nexport default BetterTable\r\n"],"names":["TableCol","TableColGroup","TableCellLine","TableCell","TableRow","TableBody","TableContainer","TableViewWrapper","Header","List","getEventComposedPath","TableOperationMenu","isNullOrUndefined","matchTableCell","matchTableHeader","matchTable","matchHeader","matchList","matchMentionLink","matchWordShapeImage","matchInline","matchTableRow","table","css","isPureIE","TableSelector","insideTable","rowId","cellId","TableSelection","TableColumnTool","TableScrollBar","index"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AACzC,MAAM,QAAQ,MAAM,QAAQ;AAC5B,MAAM,SAAS,MAAM,QAAQ,aAAa;AAG1C,MAAM,oBAAoB,OAAO;AAAA,EAe/B,OAAO,WAAW;AACV,UAAA,SAASA,gBAAU,IAAI;AACvB,UAAA,SAASC,qBAAe,IAAI;AAC5B,UAAA,SAASC,qBAAe,IAAI;AAC5B,UAAA,SAASC,iBAAW,IAAI;AACxB,UAAA,SAASC,gBAAU,IAAI;AACvB,UAAA,SAASC,iBAAW,IAAI;AACxB,UAAA,SAASC,sBAAgB,IAAI;AAC7B,UAAA,SAASC,wBAAkB,IAAI;AAE/B,UAAA,SAAS,kBAAkBC,OAAAA,SAAQ,IAAI;AAEvC,UAAA,SAAS,gBAAgBC,KAAAA,SAAM,IAAI;AAAA,EAAA;AAAA,EAG3C,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AAGpB,SAAK,gBAAgB;AACrB,SAAK,yBAAyB;AACzB,SAAA,MAAM,KAAK,iBAAiB,aAAa,CAAA,UAAS,KAAK,gBAAgB,OAAO,KAAK,GAAG,KAAK;AAC3F,SAAA,MAAM,KAAK,iBAAiB,kBAAkB,MAAM,KAAK,qBAAqB,KAAK,GAAG,KAAK;AAC3F,SAAA,MAAM,KAAK,iBAAiB,oBAAoB,MAAM,KAAK,uBAAuB,KAAK,GAAG,KAAK;AAC/F,SAAA,MAAM,KAAK,iBAAiB,YAAY,CAAA,UAAS,KAAK,cAAc,OAAO,KAAK,GAAG,KAAK;AAG7F,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,QAAQ;AACH,YAAA,CAAC,KAAK,MAAc,QAAA;AACxB,YAAI,eAAe;AAGb,cAAA,OAAOC,kCAAqB,GAAG;AACrC,YAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAE/B,cAAM,YAAY,KAAK,OAAO,CAAC,SAAS;AAEpC,iBAAA,KAAK,WAAW,KAAK,QAAQ,kBAAkB,WAAW,KAAK,UAAU,SAAS,oBAAoB;AAAA,QAEzG,CAAA,EAAE,CAAC;AAEJ,cAAM,UAAU,KAAK,OAAO,CAAC,SAAS;AAC7B,iBAAA,KAAK,WAAW,KAAK,QAAQ,YAAkB,MAAA,QAAQ,KAAK,aAAa,UAAU;AAAA,QAC3F,CAAA,EAAE,CAAC;AAEJ,cAAM,WAAW,KAAK,OAAO,CAAC,SAAS;AAC9B,iBAAA,KAAK,WAAW,KAAK,QAAQ,YAAkB,MAAA,QAAQ,KAAK,aAAa,UAAU;AAAA,QAC3F,CAAA,EAAE,CAAC;AAEE,cAAA,uBAAuB,KAAK,eAAe,YAC9C,IAAI,eAAa,UAAU,OAAO,EAClC,SAAS,QAAQ;AAEpB,YAAI,KAAK,eAAe,YAAY,UAAU,KAAK,CAAC,sBAAsB;AACxE,eAAK,eAAe,aAAa,SAAS,yBAAyB,SAAS,uBAAuB;AAAA,QAAA;AAGrG,YAAI,KAAK,oBAAoB;AACtB,eAAA,qBAAqB,KAAK,mBAAmB,QAAQ;AAAA,QAAA;AAG5D,YAAI,WAAW;AACb,eAAK,qBAAqB,IAAIC,mBAAA;AAAA,YAC5B;AAAA,cACE,OAAO;AAAA,cACP,KAAK;AAAA,cACL,MAAM;AAAA,cACN,MAAM,IAAI,IAAI;AAAA,cACd,KAAK,IAAI;AAAA,YACX;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UACV;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA;AAAA,IACF;AAIM,UAAA,SAAS,WAAW,EAAE,KAAK,YAAA,GAAe,CAAC,GAAG,CAAC,OAAO,YAAY;AAClE,UAAA,MAAM,UAAU,KAAK,KAAK,MAAM,UAAU,KAAK,EAAU,QAAA;AAC7D,UAAI,QAAQ,WAAW,KAAK,MAAM,WAAW,GAAG;AACxC,cAAA,CAAC,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM,QAAQ,CAAC;AACjD,cAAM,CAAC,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK;AACzC,YAAA,CAACC,aAAAA,kBAAkB,IAAI,GAAG;AAC5B,cAAI,KAAK,QAAQ,aAAa,qBAAqB,KAAK,QAAQ,aAAa,mBAAmB;AAC9F,kBAAM,oBAAoB,KAAK,MAAM,UAAU,cAAc;AACzD,gBAAA;AACA,gBAAA;AACU,0BAAA,KAAK,OAAO,OAAO,OAAO;AAAA,qBAEjC,IAAI;AAAA,YAAA;AACX,gBAAI,aAAa,UAAU,YAAY,kBAAkB,OAAO;AAC9D,gCAAkB,eAAe;AACjC,wBAAU,OAAO;AACjB,mBAAK,MAAM,OAAO,MAAM,QAAQ,IAAI;AAAA,YAAA;AAE/B,mBAAA;AAAA,UAAA;AAAA,QACT;AAAA,MACF;AAEK,aAAA;AAAA,IAAA,CACR;AAID,UAAM,cAAc,MAAM,SAAS,SAAS,UAAU,IAAI;AAC1D,UAAM,SAAS,SAAS,UAAU,OAAO,GAAG,GAAG,WAAW;AAIpD,UAAA,UAAU,WAAW,MAAMC,aAAAA,cAAc;AACzC,UAAA,UAAU,WAAW,MAAMC,aAAAA,gBAAgB;AAC3C,UAAA,UAAU,WAAW,SAASC,aAAAA,UAAU;AACxC,UAAA,UAAU,WAAW,0BAA0BC,aAAAA,WAAW;AAC1D,UAAA,UAAU,WAAW,UAAUC,aAAAA,SAAS;AACxC,UAAA,UAAU,WAAW,QAAQC,aAAAA,gBAAgB;AAC7C,UAAA,UAAU,WAAW,eAAeC,aAAAA,mBAAmB;AAC7D,UAAM,UAAU,WAAW,KAAK,cAAcC,aAAAA,WAAW;AAGzD,UAAM,UAAU,WAAW,MAAM,UAAU,SAAS,OAAO,CAAC,YAAY;AAC/D,aAAA,QAAQ,CAAC,MAAM;AAAA,IAAA,CACvB;AAGK,UAAA,UAAU,WAAW,MAAMC,aAAAA,aAAa;AAE9C,SAAK,MAAM,GAAG,MAAM,OAAO,eAAe,MAAM;AAC9C,YAAM,iBAAiB,MAAM,KAAK,KAAK,KAAK;AAC5C,UAAI,CAAC,gBAAgB;AACnB,aAAK,eAAe;AAAA,MAAA;AAAA,IACtB,CACD;AAEI,SAAA,MAAM,GAAG,MAAM,OAAO,kBAAkB,CAAC,OAAO,WAAW,WAAW;AACzE,UAAI,CAAC,MAAO;AACZ,YAAM,iBAAiB,MAAM;AACvB,YAAA,eAAe,MAAM,QAAQ,MAAM;AACrC,UAAA,WAAW,MAAM,QAAQ,MAAM;AACjC,cAAM,SAAS,KAAK,MAAM,KAAK,qBAAqB,OAAO;AACvD,YAAA,UAAU,OAAO,QAAQ;AAC3B,WAAA,EAAG,QAAQ,KAAK,QAAQ,CAACC,WAAU;AAC3B,kBAAA,iBAAiB,MAAM,KAAKA,MAAK;AACvC,gBAAI,gBAAgB;AAClB,oBAAM,aAAa,eAAe,OAAO,KAAK,MAAM,MAAM;AACpD,oBAAA,WAAW,aAAa,eAAe,OAAO;AAEpD,oBAAM,UAAU,MAAM,KAAKA,OAAM,WAAW,SAAS;AAEjD,kBAAA,kBAAkB,cAAc,YAAY,cAAc;AAEtD,gBAAAA,OAAA,WAAW,UAAU,IAAI,6BAA6B;AAAA,cAErD,WAAA,QAAQ,SAAS,6BAA6B,GAAG;AAElD,gBAAAA,OAAA,WAAW,UAAU,OAAO,6BAA6B;AAAA,cAAA;AAAA,YACjE;AAAA,UACF,CACD;AAAA,QAAA;AAAA,MACH;AAAA,IACF,CACD;AACD,SAAK,kBAAkB;AAAA,EAAA;AAAA,EAGzB,oBAAoB;AAElB,UAAM,UAAU,KAAK,MAAM,UAAU,SAAS;AAC9C,QAAI,CAAC,QAAS;AACd,UAAM,cAAc,QAAQ,UAAU,cAAc,kBAAkB;AACtE,QAAI,CAAC,YAAa;AACZ,UAAA,uBAAuB,KAAK,4BAA4B;AAClD,gBAAA,WAAW,aAAa,sBAAsB,WAAW;AACrE,yBAAqB,YAAY,WAAW;AAC5C,SAAK,uBAAuB;AAC5B,yBAAqB,iBAAiB,cAAc,KAAK,yBAAyB,KAAK,IAAI,GAAG,KAAK;AACnG,yBAAqB,iBAAiB,cAAc,KAAK,4BAA4B,KAAK,IAAI,GAAG,KAAK;AAAA,EAAA;AAAA,EAGxG,8BAA8B;AACtB,UAAA,UAAU,SAAS,cAAc,KAAK;AAC5C,YAAQ,YAAY;AACpB,UAAM,aAAa;AAAA,MACjB,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,WAAW;AAAA,IACb;AACAC,UAAA,IAAI,SAAS,UAAU;AAChB,WAAA;AAAA,EAAA;AAAA,EAGT,gBAAgB,KAAK,OAAO;AAEpB,UAAA,OAAOb,kCAAqB,GAAG;AACrC,QAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAC/B,UAAM,YAAY,KAAK,OAAO,CAAC,SAAS;AAC/B,aAAA,KAAK,WAAW,KAAK,QAAQ,kBAAkB,WAAW,KAAK,UAAU,SAAS,oBAAoB;AAAA,IAC9G,CAAA,EAAE,CAAC;AACJ,QAAI,WAAW;AACH,gBAAA,WAAW,UAAU,OAAO,6BAA6B;AAE/D,UAAA,KAAK,UAAU,UAAW;AAE9B,UAAI,KAAK,OAAO;AACd,aAAK,eAAe;AAAA,MAAA;AAElB,UAAA,CAAC,MAAM,QAAQ,UAAU;AACtB,aAAA,eAAe,WAAW,KAAK;AAAA,MAAA;AAAA,IACtC,WAEO,KAAK,OAAO;AAEnB,WAAK,eAAe;AAAA,IAAA;AAAA,EACtB;AAAA,EAGF,cAAc,KAAK,OAAO;AACxB,UAAM,MAAM,IAAI;AACV,UAAA,QAAQ,MAAM,aAAa;AAC7B,QAAA,KAAK,iBAAiB,CAAC,MAAO;AAClC,UAAM,CAAC,GAAG,IAAI,MAAM,QAAQ,MAAM,KAAK;AACvC,UAAM,CAAC,EAAE,IAAI,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAC1C,QAAI,OAAO,QAAQ,YAAY,OAAO,OAAO;AACvC,UAAA,IAAI,QAAQ,aAAa,aAAa;AACxC,cAAM,oBAAoB,KAAK,MAAM,UAAU,cAAc;AAC7D,0BAAkB,eAAe;AACjC,cAAM,WAAW,MAAM,QAAQ,GAAG,MAAM,MAAM,QAAQ,IAAI;AAC1D,cAAM,aAAa,MAAM,OAAO,GAAG,MAAM,QAAQ,IAAI;AAAA,MAAA,WAE9C,MAAM,GAAG,QAAQ,aAAa,qBAAqB,IAAI,QAAQ,aAAa,SAAS;AAC5F,cAAM,WAAW,MAAM,OAAO,MAAM,MAAM,QAAQ,IAAI;AACtD,cAAM,aAAa,MAAM,OAAO,GAAG,MAAM,QAAQ,IAAI;AAAA,MAAA;AAAA,IACvD;AAAA,EACF;AAAA,EAGF,uBAAuB,OAAO;AAC5B,SAAK,gBAAgB;AACf,UAAA,QAAQ,MAAM,aAAa;AACjC,UAAM,CAAC,GAAG,IAAI,MAAM,QAAQ,MAAM,KAAK;AACvC,UAAM,CAAC,EAAE,IAAI,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAC1C,QAAI,OAAO,OAAO;AACZ,UAAA,IAAI,QAAQ,aAAa,aAAa;AACxC,cAAM,oBAAoB,KAAK,MAAM,UAAU,cAAc;AAC7D,0BAAkB,eAAe;AACjC,cAAM,WAAW,MAAM,QAAQ,GAAG,OAAQ,MAAM,QAAQ,IAAI;AAC5D,cAAM,aAAa,MAAM,OAAO,GAAG,MAAM,QAAQ,IAAI;AAAA,MAAA,WAE9C,MAAM,GAAG,QAAQ,aAAa,qBAAqB,IAAI,QAAQ,aAAa,SAAS;AAC5F,cAAM,aAAa,MAAM,OAAO,GAAG,MAAM,QAAQ,IAAI;AAAA,MAAA;AAAA,IACvD;AAAA,EACF;AAAA,EAGF,qBAAqB,OAAO;AAEpB,UAAA,QAAQ,MAAM,aAAa;AACjC,UAAM,CAAC,IAAI,IAAI,MAAM,QAAQ,MAAM,KAAK;AACxC,UAAM,UAAU,KAAK;AACf,UAAA,gBAAgB,QAAQ,aAAa;AACrC,UAAA,gBAAgB,KAAK,QAAQ,aAAa;AAC3C,SAAA,iBAAiB,kBACjB,QAAQ,WAAW,SAAS,KAC5B,QAAQ,WAAW,CAAC,EAAE,aAAa,MAAM;AACpC,cAAA,WAAW,CAAC,EAAE,OAAO;AAAA,IAAA;AAG3B,QAAAc,aAAA,YAAY,gBAAgB,OAAO;AAErC,YAAM,aAAa,MAAM,OAAO,GAAG,MAAM,QAAQ,MAAM;AAAA,IAAA;AAGzD,SAAK,gBAAgB;AAAA,EAAA;AAAA;AAAA,EAIvB,2BAA2B;AACzB,QAAI,KAAK,uBAAwB;AAC7B,QAAA,CAAC,KAAK,qBAAsB;AAChC,SAAK,yBAAyB;AACzB,SAAA,gBAAgB,IAAIC,sBAAc;AAAA,MACrC,UAAU,CAAC,MAAM,SAAS,KAAK,YAAY,MAAM,IAAI;AAAA,IAAA,CACtD;AACD,SAAK,qBAAqB,YAAY,KAAK,cAAc,SAAS;AAC5D,UAAA,aAAa,KAAK,qBAAqB,sBAAsB;AACnE,SAAK,cAAc;AAAA,MACjB;AAAA,MACA,WAAW;AAAA,IACb;AAAA,EAAA;AAAA;AAAA,EAIF,8BAA8B;AAC5B,QAAI,KAAK,eAAe;AACtB,WAAK,cAAc,QAAQ;AAAA,IAAA;AAE7B,SAAK,gBAAgB;AACrB,SAAK,yBAAyB;AAAA,EAAA;AAAA,EAGhC,SAAS,QAAQ,KAAK,MAAM,gBAAgB;AACtC,QAAAb,aAAA,kBAAkB,KAAK,EAAG,QAAO,CAAC,MAAM,MAAM,MAAM,EAAE;AACpD,UAAA,CAAC,UAAU,MAAM,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK;AACzD,QAAIA,aAAAA,kBAAkB,QAAQ,KAAK,SAAS,QAAQ,aAAaV,oBAAc,UAAU;AACvF,aAAO,CAAC,MAAM,MAAM,MAAM,EAAE;AAAA,IAAA;AAExB,UAAA,OAAO,SAAS,UAAU;AAC1B,UAAA,MAAM,KAAK,IAAI;AACf,UAAAoB,UAAQ,IAAI,MAAM;AACxB,WAAO,CAACA,SAAO,KAAK,MAAM,MAAM;AAAA,EAAA;AAAA,EAGlC,YAAY,MAAM,SAAS;AACzB,UAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AAC1C,UAAM,gBAAgBI,aAAA,YAAY,OAAO,KAAK,KAAK;AAC/C,QAAAd,aAAA,kBAAkB,KAAK,KAAK,cAAe;AAG/C,QAAI,QAAQ,IAAI,MAAA,EAAQ,OAAO,MAAM,KAAK;AAE1C,UAAM,OAAO,IAAI;AAET,YAAA,IAAI,MAAM,OAAO,EAAE,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,SAAS;AAC3D,WAAK,OAAO,MAAM,EAAE,aAAa,MAAM;AAChC,aAAA;AAAA,OACN,KAAK;AAEA,YAAA,IAAI,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS;AAC/C,YAAM,aAAae,MAAAA,MAAM;AAClB,aAAA,IAAI,MAAM,OAAO,EAAE,KAAK,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS;AACrD,WAAA,OAAO,MAAM,EAAE,mBAAmB,EAAE,KAAK,YAAY,MAAMC,aAAS,EAAA,GAAG;AACnE,eAAA;AAAA,SACN,IAAI;AAAA,OACN,KAAK;AAER,UAAM,CAAC,GAAG,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK;AAC5C,QAAI,OAAO,IAAI,QAAQ,aAAa,aAAa;AAC/C,YAAM,OAAO,IAAI;AAAA,IAAA;AAGnB,SAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AAG7C,UAAA,CAAC,QAAQ,IAAI,KAAK,MAAM,QAAQ,MAAM,QAAQ,UAAU,CAAC;AAC/D,QAAI,UAAU;AACN,YAAA,OAAO,SAAS,UAAU;AAChC,YAAM,KAAK,KAAK;AACV,YAAA,iBAAiB,SAAS,YAAY,YAAY;AAClD,YAAA,eAAe,SAAS,YAAY,YAAY;AAChD,YAAA,WAAW,SAAS,YAAY,OAAO;AAC9B,qBAAA,UAAU,aAAa,MAAM,KAAK;AACpC,mBAAA,UAAU,WAAW,MAAM,KAAK;AACpC,eAAA,UAAU,YAAY,MAAM,KAAK;AAC1C,SAAG,cAAc,cAAc;AAC/B,SAAG,cAAc,YAAY;AAC7B,SAAG,cAAc,QAAQ;AACzB,WAAK,eAAe,QAAQ;AAAA,IAAA;AAAA,EAC9B;AAAA,EAGF,eAAeN,QAAO,OAAO;AAC3B,SAAK,QAAQA;AACR,SAAA,mBAAmB,SAAS,cAAc,KAAK;AAC/C,SAAA,iBAAiB,UAAU,IAAI,wBAAwB;AAE5D,UAAM,gBAAgB,KAAK,MAAM,KAAK,WAAW,cAAc,cAAc;AAC7E,SAAK,MAAM,KAAK,WAAW,aAAa,KAAK,kBAAkB,aAAa;AAC5E,SAAK,iBAAiB,IAAIO,eAAA,QAAeP,QAAO,OAAO,KAAK,gBAAgB;AAC5E,SAAK,aAAa,IAAIQ,gBAAA,QAAgBR,QAAO,OAAO,KAAK,gBAAgB;AACzE,SAAK,iBAAiB,IAAIS,eAAA,QAAeT,QAAO,OAAO,KAAK,gBAAgB;AACxE,QAAA;AACJ,SAAK,aAAa,MAAM;AACtB,mBAAa,SAAS;AACV,kBAAA,WAAW,KAAK,gBAAgB,GAAG;AAAA,IACjD;AACA,WAAO,iBAAiB,UAAU,KAAK,YAAY,KAAK;AAAA,EAAA;AAAA,EAG1D,iBAAiB;AACf,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,QAAQ;AAAA,IAAA;AAE1B,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,QAAQ;AAAA,IAAA;AAE9B,QAAI,KAAK,oBAAoB;AAC3B,WAAK,mBAAmB,QAAQ;AAAA,IAAA;AAElC,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,QAAQ;AAAA,IAAA;AAE9B,QAAI,KAAK,kBAAkB;AACzB,WAAK,iBAAiB,OAAO;AAAA,IAAA;AAE/B,SAAK,aAAa;AAClB,SAAK,iBAAiB;AACtB,SAAK,qBAAqB;AAC1B,SAAK,iBAAiB;AACtB,SAAK,mBAAmB;AACxB,SAAK,QAAQ;AACb,QAAI,KAAK,YAAY;AACZ,aAAA,oBAAoB,UAAU,KAAK,UAAU;AAAA,IAAA;AAAA,EACtD;AAEJ;AAEA,YAAY,mBAAmB;AAAA,EAC7B,eAAe;AAAA,IACb,KAAK;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,EAAE,aAAa,OAAO,mBAAmB,MAAM;AAAA,IACvD,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ,OAAO,SAAS;AAElB,UAAA,MAAM,UAAU,KAAK,QAAQ,KAAK,QAAQ,QAAQ,KAAK,KAAK,QAAQ,aAAa,cAAc;AAC3F,cAAA,CAAC,CAAC,IAAI,KAAK,MAAM,QAAQ,MAAM,QAAQ,CAAC;AACxC,cAAA,CAAC,GAAG,IAAI,KAAK,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAC5C,YAAA,KAAK,EAAE,QAAQ,aAAa,WAAW,OAAO,IAAI,QAAQ,aAAa,aAAa;AAC/E,iBAAA;AAAA,QAAA;AAAA,MACT;AAEK,aAAA;AAAA,IAAA;AAAA,EAEX;AAAA,EACA,mBAAmB;AAAA,IACjB,KAAK;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,CAAC,WAAW;AAAA,IACpB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ,OAAO,SAAS;AACtB,UAAI,QAAQ,WAAW,KAAK,MAAM,WAAW,GAAG;AAC9C,cAAM,CAAC,GAAG,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK;AAC5C,YAAI,OAAO,IAAI,QAAQ,aAAa,aAAa;AAC/C,gBAAM,oBAAoB,KAAK,MAAM,UAAU,cAAc;AAC7D,4BAAkB,eAAe;AAC5B,eAAA,MAAM,WAAW,MAAM,QAAQ,GAAG,MAAM,MAAM,QAAQ,IAAI;AAC/D,eAAK,MAAM,aAAa,MAAM,OAAO,GAAG,MAAM,QAAQ,IAAI;AAAA,QAAA;AAAA,MAC5D;AAAA,IACF;AAAA,EAEJ;AAAA,EACA,oBAAoB;AAAA,IAClB,KAAK;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,CAAC,WAAW;AAAA,IACpB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ,OAAO,SAAS;AACtB,UAAI,QAAQ,WAAW,KAAK,MAAM,WAAW,GAAG;AAC9C,cAAM,CAAC,GAAG,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK;AAC5C,YAAI,OAAO,IAAI,QAAQ,aAAa,aAAa;AAC/C,gBAAM,oBAAoB,KAAK,MAAM,UAAU,cAAc;AACzD,cAAA;AACA,cAAA;AACU,wBAAA,IAAI,OAAO,OAAO;AAAA,mBAEzB,IAAI;AAAA,UAAA;AACX,cAAI,aAAa,UAAU,YAAY,kBAAkB,OAAO;AAC9D,8BAAkB,eAAe;AACjC,sBAAU,OAAO;AACjB,iBAAK,MAAM,OAAO,MAAM,QAAQ,IAAI;AAAA,UAAA;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;AAAA,EACA,uBAAuB;AAAA,IACrB,KAAK;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,CAAC,WAAW;AAAA,IACpB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EACA,6BAA6B;AAAA,IAC3B,KAAK;AAAA,IACL,QAAQ,CAAC,iBAAiB;AAAA,IAC1B,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ,OAAO;AACb,YAAM,CAAC,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK;AAEzC,UAAA,CAAC,KAAK,MAAM;AACP,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IAAA;AAAA,EAEX;AAAA,EACA,0BAA0B;AAAA,IACxB,KAAK;AAAA,IACL,QAAQ,CAAC,iBAAiB;AAAA,IAC1B,QAAQ,OAAO,UAAU;AAEvB,YAAM,CAAC,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK;AAC7C,YAAMU,SAAQ,KAAK,MAAM,SAAS,IAAI;AAChC,YAAA,SAAS,KAAK,OAAO;AAC3B,UAAI,CAAC,KAAK,SACH,CAAC,KAAK,QAAQ,WAAW,KACxB,MAAM,UAAUA,UAAS,MAAM,QAAQ,KAAKA,SAAQ,SAAU;AAC7D,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IAAA;AAAA,EAEX;AAAA,EACA,yBAAyB;AAAA,IACvB,KAAK;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,CAAC,iBAAiB;AAAA,IAC1B,QAAQ,OAAO,SAAS;AAEhB,YAAA,OAAO,OAAO,aAAA,EAAe;AACnC,UAAI,gBAAgB,kBAAkB,KAAK,UAAU,SAAS,4BAA4B,GAAG;AACtF,aAAA,MAAM,aAAa,MAAM,QAAQ,GAAG,GAAG,MAAM,QAAQ,IAAI;AAC9D,aAAK,MAAM,MAAM;AACjB;AAAA,MAAA;AAGF,UAAI,KAAK,MAAM,aAAa,KAAK,MAAM,UAAU,UAAW;AACtD,YAAA,QAAQ,MAAM,QAAQ,UAAU;AAClC,UAAA,MAAM,SAAS,GAAG;AACpB,aAAK,MAAM,OAAO,SAAS,MAAM,OAAO,MAAM,MAAM;AAAA,MAAA;AAEhD,YAAA,cAAc,OAAO,KAAK,QAAQ,MAAM,EAAE,OAAO,CAAC,SAAS,WAAW;AAC1E,YAAI,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC,MAAM,QAAQ,QAAQ,OAAO,MAAM,CAAC,GAAG;AAC1F,kBAAQ,MAAM,IAAI,QAAQ,OAAO,MAAM;AAAA,QAAA;AAElC,eAAA;AAAA,MACT,GAAG,EAAE;AAEA,WAAA,MAAM,WAAW,MAAM,OAAO,MAAM,YAAY,iBAAiB,GAAG,MAAM,QAAQ,IAAI;AAG3F,WAAK,MAAM,aAAa,MAAM,QAAQ,GAAG,MAAM,QAAQ,MAAM;AAC7D,WAAK,MAAM,MAAM;AACjB,aAAO,KAAK,QAAQ,MAAM,EAAE,QAAQ,CAAC,SAAS;AAC5C,YAAI,CAACpB,aAAA,kBAAkB,YAAY,IAAI,CAAC,EAAG;AAC3C,YAAI,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC,EAAG;AACzC,YAAI,SAAS,OAAQ;AAChB,aAAA,MAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,GAAG,MAAM,QAAQ,IAAI;AAAA,MAAA,CACjE;AAAA,IAAA;AAAA,EACH;AAEJ;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.cjs.js","sources":["../../../../../src/modules/table/formats/header.ts"],"sourcesContent":["import type TypeHeader from 'quill/formats/header'\nimport Quill from 'quill'\nimport { isNullOrUndefined } from '../../../config/editor.utils'\nimport { CELL_ATTRIBUTES, CELL_IDENTITY_KEYS } from '../table-config'\n\nconst OriginHeader = Quill.import('formats/header') as typeof TypeHeader\n// @dynamic\nclass Header extends OriginHeader {\n static tagName: any\n static blotName: string\n domNode: any\n replaceWith: any\n parent: any\n wrap: any\n enforceAllowedChildren: any\n uiNode: any\n children: any\n appendChild: any\n remove: any\n cache: Record<string, any>\n scroll: any\n static create(value) {\n if (typeof value === 'string') {\n value = { value }\n }\n\n const node = super.create(value.value)\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n if (value[key]) {\n node.setAttribute(`data-${key}`, value[key])\n }\n })\n\n CELL_ATTRIBUTES.forEach((key) => {\n if (value[key]) {\n node.setAttribute(`data-${key}`, value[key])\n }\n })\n\n return node\n }\n\n static formats(domNode) {\n const formats: any = {}\n formats.value = this.tagName.indexOf(domNode.tagName) + 1\n\n return CELL_ATTRIBUTES.concat(CELL_IDENTITY_KEYS).reduce((tableFormats, attribute) => {\n if (domNode.hasAttribute(`data-${attribute}`)) {\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\n }\n return tableFormats\n }, formats)\n }\n\n format(name, value) {\n // fix: 在标题处粘贴内容,会导致该粘贴内容的格式错误\n if (Object.prototype.toString.call(value) === '[object Object]') {\n value = value.value\n }\n const headerDom: any = Header.formats(this.domNode)\n const { row, cell, rowspan, colspan } = headerDom\n if (name === Header.blotName) {\n if (value) {\n super.format(name, {\n value,\n row,\n cell,\n rowspan,\n colspan,\n })\n }\n else {\n if (row) {\n this.replaceWith('table-cell-line', {\n row,\n cell,\n rowspan,\n colspan,\n })\n }\n else {\n super.format(name, value)\n }\n }\n }\n else {\n super.format(name, value)\n }\n }\n\n optimize(_context) {\n const { row, cell, rowspan, colspan } = Header.formats(this.domNode)\n\n if (row && this.parent.statics.blotName !== 'table') {\n this.wrap('table', {\n row,\n cell,\n colspan,\n rowspan,\n })\n }\n\n // ShadowBlot optimize\n this.enforceAllowedChildren()\n if (!isNullOrUndefined(this.uiNode) && this.uiNode !== this.domNode.firstChild) {\n this.domNode.insertBefore(this.uiNode, this.domNode.firstChild)\n }\n if (this.children.length === 0) {\n if (!isNullOrUndefined(this.statics.defaultChild)) {\n const child = this.scroll.create(this.statics.defaultChild.blotName)\n this.appendChild(child)\n // TODO double check if necessary\n // child.optimize(context);\n }\n else {\n this.remove()\n }\n }\n // Block optimize\n this.cache = {}\n }\n}\n\nHeader.blotName = 'header'\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6']\n\nexport default Header\n"],"names":["CELL_IDENTITY_KEYS","CELL_ATTRIBUTES","isNullOrUndefined"],"mappings":";;;;;AAKA,MAAM,eAAe,MAAM,OAAO,gBAAgB;AAElD,MAAM,eAAe,aAAa;AAAA,EAchC,OAAO,OAAO,OAAO;AACf,QAAA,OAAO,UAAU,UAAU;AAC7B,cAAQ,EAAE,MAAM;AAAA,IAAA;AAGlB,UAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AAElBA,mCAAA,QAAQ,CAAC,QAAQ;AAC9B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,MAAA;AAAA,IAC7C,CACD;AAEeC,gCAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,MAAA;AAAA,IAC7C,CACD;AAEM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAS;AACtB,UAAM,UAAe,CAAC;AACtB,YAAQ,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,OAAO,IAAI;AAExD,WAAOA,YAAAA,gBAAgB,OAAOD,YAAkB,kBAAA,EAAE,OAAO,CAAC,cAAc,cAAc;AACpF,UAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,GAAG;AAC7C,qBAAa,SAAS,IAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,KAAK;AAAA,MAAA;AAElE,aAAA;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAGZ,OAAO,MAAM,OAAO;AAElB,QAAI,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,mBAAmB;AAC/D,cAAQ,MAAM;AAAA,IAAA;AAEhB,UAAM,YAAiB,OAAO,QAAQ,KAAK,OAAO;AAClD,UAAM,EAAE,KAAK,MAAM,SAAS,QAAY,IAAA;AACpC,QAAA,SAAS,OAAO,UAAU;AAC5B,UAAI,OAAO;AACT,cAAM,OAAO,MAAM;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MAAA,OAEE;AACH,YAAI,KAAK;AACP,eAAK,YAAY,mBAAmB;AAAA,YAClC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA,CACD;AAAA,QAAA,OAEE;AACG,gBAAA,OAAO,MAAM,KAAK;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF,OAEG;AACG,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA;AAAA,EAC1B;AAAA,EAGF,SAAS,UAAU;AACX,UAAA,EAAE,KAAK,MAAM,SAAS,QAAY,IAAA,OAAO,QAAQ,KAAK,OAAO;AAEnE,QAAI,OAAO,KAAK,OAAO,QAAQ,aAAa,SAAS;AACnD,WAAK,KAAK,SAAS;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAIH,SAAK,uBAAuB;AACxB,QAAA,CAACE,aAAAA,kBAAkB,KAAK,MAAM,KAAK,KAAK,WAAW,KAAK,QAAQ,YAAY;AAC9E,WAAK,QAAQ,aAAa,KAAK,QAAQ,KAAK,QAAQ,UAAU;AAAA,IAAA;AAE5D,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,UAAI,CAACA,aAAAA,kBAAkB,KAAK,QAAQ,YAAY,GAAG;AACjD,cAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,QAAQ,aAAa,QAAQ;AACnE,aAAK,YAAY,KAAK;AAAA,MAAA,OAInB;AACH,aAAK,OAAO;AAAA,MAAA;AAAA,IACd;AAGF,SAAK,QAAQ,CAAC;AAAA,EAAA;AAElB;AAEA,OAAO,WAAW;AAClB,OAAO,UAAU,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;;"}
|
|
1
|
+
{"version":3,"file":"header.cjs.js","sources":["../../../../../src/modules/table/formats/header.ts"],"sourcesContent":["import type TypeHeader from 'quill/formats/header'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../../config/editor.utils'\r\nimport { CELL_ATTRIBUTES, CELL_IDENTITY_KEYS } from '../table-config'\r\n\r\nconst OriginHeader = Quill.import('formats/header') as typeof TypeHeader\r\n// @dynamic\r\nclass Header extends OriginHeader {\r\n static tagName: any\r\n static blotName: string\r\n domNode: any\r\n replaceWith: any\r\n parent: any\r\n wrap: any\r\n enforceAllowedChildren: any\r\n uiNode: any\r\n children: any\r\n appendChild: any\r\n remove: any\r\n cache: Record<string, any>\r\n scroll: any\r\n static create(value) {\r\n if (typeof value === 'string') {\r\n value = { value }\r\n }\r\n\r\n const node = super.create(value.value)\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n if (value[key]) {\r\n node.setAttribute(`data-${key}`, value[key])\r\n }\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n node.setAttribute(`data-${key}`, value[key])\r\n }\r\n })\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats: any = {}\r\n formats.value = this.tagName.indexOf(domNode.tagName) + 1\r\n\r\n return CELL_ATTRIBUTES.concat(CELL_IDENTITY_KEYS).reduce((tableFormats, attribute) => {\r\n if (domNode.hasAttribute(`data-${attribute}`)) {\r\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\r\n }\r\n return tableFormats\r\n }, formats)\r\n }\r\n\r\n format(name, value) {\r\n // fix: 在标题处粘贴内容,会导致该粘贴内容的格式错误\r\n if (Object.prototype.toString.call(value) === '[object Object]') {\r\n value = value.value\r\n }\r\n const headerDom: any = Header.formats(this.domNode)\r\n const { row, cell, rowspan, colspan } = headerDom\r\n if (name === Header.blotName) {\r\n if (value) {\r\n super.format(name, {\r\n value,\r\n row,\r\n cell,\r\n rowspan,\r\n colspan,\r\n })\r\n }\r\n else {\r\n if (row) {\r\n this.replaceWith('table-cell-line', {\r\n row,\r\n cell,\r\n rowspan,\r\n colspan,\r\n })\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n }\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n }\r\n\r\n optimize(_context) {\r\n const { row, cell, rowspan, colspan } = Header.formats(this.domNode)\r\n\r\n if (row && this.parent.statics.blotName !== 'table') {\r\n this.wrap('table', {\r\n row,\r\n cell,\r\n colspan,\r\n rowspan,\r\n })\r\n }\r\n\r\n // ShadowBlot optimize\r\n this.enforceAllowedChildren()\r\n if (!isNullOrUndefined(this.uiNode) && this.uiNode !== this.domNode.firstChild) {\r\n this.domNode.insertBefore(this.uiNode, this.domNode.firstChild)\r\n }\r\n if (this.children.length === 0) {\r\n if (!isNullOrUndefined(this.statics.defaultChild)) {\r\n const child = this.scroll.create(this.statics.defaultChild.blotName)\r\n this.appendChild(child)\r\n // TODO double check if necessary\r\n // child.optimize(context);\r\n }\r\n else {\r\n this.remove()\r\n }\r\n }\r\n // Block optimize\r\n this.cache = {}\r\n }\r\n}\r\n\r\nHeader.blotName = 'header'\r\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6']\r\n\r\nexport default Header\r\n"],"names":["CELL_IDENTITY_KEYS","CELL_ATTRIBUTES","isNullOrUndefined"],"mappings":";;;;;AAKA,MAAM,eAAe,MAAM,OAAO,gBAAgB;AAElD,MAAM,eAAe,aAAa;AAAA,EAchC,OAAO,OAAO,OAAO;AACf,QAAA,OAAO,UAAU,UAAU;AAC7B,cAAQ,EAAE,MAAM;AAAA,IAAA;AAGlB,UAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AAElBA,mCAAA,QAAQ,CAAC,QAAQ;AAC9B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,MAAA;AAAA,IAC7C,CACD;AAEeC,gCAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,MAAA;AAAA,IAC7C,CACD;AAEM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAS;AACtB,UAAM,UAAe,CAAC;AACtB,YAAQ,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,OAAO,IAAI;AAExD,WAAOA,YAAAA,gBAAgB,OAAOD,YAAkB,kBAAA,EAAE,OAAO,CAAC,cAAc,cAAc;AACpF,UAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,GAAG;AAC7C,qBAAa,SAAS,IAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,KAAK;AAAA,MAAA;AAElE,aAAA;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAGZ,OAAO,MAAM,OAAO;AAElB,QAAI,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,mBAAmB;AAC/D,cAAQ,MAAM;AAAA,IAAA;AAEhB,UAAM,YAAiB,OAAO,QAAQ,KAAK,OAAO;AAClD,UAAM,EAAE,KAAK,MAAM,SAAS,QAAY,IAAA;AACpC,QAAA,SAAS,OAAO,UAAU;AAC5B,UAAI,OAAO;AACT,cAAM,OAAO,MAAM;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MAAA,OAEE;AACH,YAAI,KAAK;AACP,eAAK,YAAY,mBAAmB;AAAA,YAClC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA,CACD;AAAA,QAAA,OAEE;AACG,gBAAA,OAAO,MAAM,KAAK;AAAA,QAAA;AAAA,MAC1B;AAAA,IACF,OAEG;AACG,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA;AAAA,EAC1B;AAAA,EAGF,SAAS,UAAU;AACX,UAAA,EAAE,KAAK,MAAM,SAAS,QAAY,IAAA,OAAO,QAAQ,KAAK,OAAO;AAEnE,QAAI,OAAO,KAAK,OAAO,QAAQ,aAAa,SAAS;AACnD,WAAK,KAAK,SAAS;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA;AAIH,SAAK,uBAAuB;AACxB,QAAA,CAACE,aAAAA,kBAAkB,KAAK,MAAM,KAAK,KAAK,WAAW,KAAK,QAAQ,YAAY;AAC9E,WAAK,QAAQ,aAAa,KAAK,QAAQ,KAAK,QAAQ,UAAU;AAAA,IAAA;AAE5D,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,UAAI,CAACA,aAAAA,kBAAkB,KAAK,QAAQ,YAAY,GAAG;AACjD,cAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,QAAQ,aAAa,QAAQ;AACnE,aAAK,YAAY,KAAK;AAAA,MAAA,OAInB;AACH,aAAK,OAAO;AAAA,MAAA;AAAA,IACd;AAGF,SAAK,QAAQ,CAAC;AAAA,EAAA;AAElB;AAEA,OAAO,WAAW;AAClB,OAAO,UAAU,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.cjs.js","sources":["../../../../../src/modules/table/formats/list.ts"],"sourcesContent":["import Quill from 'quill'\nimport { CELL_ATTRIBUTES, CELL_IDENTITY_KEYS } from '../table-config'\n\nconst Block = Quill.imports['blots/block']\nconst Container = Quill.imports['blots/container']\n\n// @dynamic\nclass ListContainer extends Container {\n static allowedChildren: any\n static blotName: string\n static tagName: string\n replaceWith: any\n domNode: any\n parent: any\n statics: any\n wrap: any\n\n format(name, value) {\n const { row, cell, rowspan, colspan } = this.domNode.dataset\n if (name === ListContainer.blotName) {\n if (value) {\n super.format(name, { row, cell, rowspan, colspan })\n }\n else if (row) {\n this.replaceWith('table-cell-line', { row, cell, rowspan, colspan })\n }\n }\n }\n}\n/**\n * bugfix: quill源码中(quill/core/editor.js 272行)在处理拷贝时\n * hard code了这个blotName用于处理ol中的li。所以在quill\n * 源码内写法不变的情况下这个名字不能改,否则拷贝有bug\n */\nListContainer.blotName = 'list-container'\nListContainer.tagName = 'OL'\n\n// @dynamic\nclass ListItem extends Block {\n static blotName: string\n static tagName: string\n static requiredContainer: typeof ListContainer\n statics: any\n attachUI: any\n domNode: any\n replaceWith: any\n parent: any\n wrap: any\n children: any\n prev: any\n remove: () => void\n\n static create(value) {\n const node = super.create()\n if (typeof value === 'string') {\n value = { value }\n }\n else {\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach((key) => {\n if (value[key]) {\n node.dataset[key] = value[key]\n }\n })\n }\n node.classList.add(value.value)\n return node\n }\n\n static formats(domNode) {\n const formats: any = {}\n formats.value = domNode.classList.item(0) || undefined\n\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, key) => {\n if (domNode.dataset[key]) {\n tableFormats[key] = domNode.dataset[key]\n }\n return tableFormats\n }, formats)\n }\n\n static register() {\n Quill.register({ 'formats/list-container': ListContainer }, true)\n }\n\n constructor(scroll, domNode) {\n super(scroll, domNode)\n const quill = Quill.find(scroll.domNode.parentNode)\n const range = quill.getSelection()\n if (range) {\n const [line] = quill.getLine(range.index)\n const td = line.domNode.closest('td')\n if (td) {\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach(key =>\n td.dataset[key] && domNode.setAttribute(`data-${key}`, td.dataset[key]))\n }\n }\n\n const ui = domNode.ownerDocument.createElement('span')\n const listEventHandler = (e) => {\n if (!scroll.isEnabled()) return\n const { value } = this.statics.formats(domNode, scroll)\n if (value === 'checked') {\n this.format('list', 'unchecked')\n e.preventDefault()\n }\n else if (value === 'unchecked') {\n this.format('list', 'checked')\n e.preventDefault()\n }\n }\n ui.addEventListener('mousedown', listEventHandler)\n ui.addEventListener('touchstart', listEventHandler)\n this.attachUI(ui)\n }\n\n format(name, value) {\n if (name !== ListItem.blotName) {\n super.format(name, value)\n return\n }\n const type = (value && typeof value === 'object') ? value.value : value\n const oldClass = this.domNode.classList[0]\n const tdDom = this.domNode.closest('.editing-select-able')\n const tableCellBlot = tdDom && Quill.find(tdDom)\n const images = this.domNode.querySelectorAll('img[data-image-id]')\n if (!type || type === oldClass) {\n // 消除格式或相同list抵消格式时恢复图片对齐,li转化为table-cell-line\n if (images && images.length) {\n images.forEach((img) => {\n img.style.verticalAlign = 'baseLine'\n })\n }\n if (tableCellBlot && tableCellBlot.statics.blotName === 'table') {\n const tableCellFormats = tableCellBlot.formats()\n this.replaceWith('table-cell-line', tableCellFormats)\n // fix: 移除list格式时移除父级的ol或ul,避免table-cell-line判断无td自动生成td容器\n if (this.parent.statics.blotName === ListContainer.blotName) {\n this.parent.unwrap()\n }\n }\n else {\n super.format(name, value)\n }\n }\n else if (oldClass) {\n this.domNode.className = this.domNode.className.replace(oldClass, type)\n }\n else {\n this.domNode.classList.add(type)\n }\n }\n\n optimize(context) {\n // 判断前一个li是否包含软回车,如果包含则将当前li与之合并后移除\n const tail = this.prev && this.prev.domNode.lastChild\n if (tail && tail.className && tail.className.includes('ql-soft-break')) {\n // 合并dom\n this.domNode.childNodes.forEach((v, i) => {\n if (i > 0) {\n this.prev.domNode.appendChild(v)\n }\n })\n this.remove()\n return\n }\n\n super.optimize(context)\n\n // list类型\n const parentFormats = getFormats(this.parent.domNode)\n const formats = ListItem.formats(this.domNode)\n // 单元格属性\n const data = this.domNode.dataset || []\n const images = this.domNode.querySelectorAll('img[data-image-id]')\n\n // li更新后判断父容器的对应属性是否与自身一致,如果不一致则向上覆盖\n if (parentFormats.list !== formats.value) {\n const oldClass = this.parent.domNode.classList[0]\n if (oldClass) {\n this.parent.domNode.className = this.parent.domNode.className.replace(oldClass, formats.value)\n }\n else {\n this.parent.domNode.classList.add(formats.value)\n }\n }\n\n if (data.cell && !parentFormats.cell) {\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach(key =>\n (formats[key] || data[key]) && this.parent.domNode.setAttribute(`data-${key}`, formats[key] || data[key]))\n // 如果父容器不在表格内则用单元格包裹\n if (this.parent.parent.statics.blotName !== 'table') {\n delete formats.list\n this.wrap('table', formats)\n }\n }\n\n // 当list中包含图片时,设置图片顶对齐\n if (images) {\n images.forEach((img) => {\n img.style.verticalAlign = 'top'\n })\n }\n }\n}\n\nListItem.blotName = 'list'\nListItem.tagName = 'LI'\n\nListContainer.allowedChildren = [ListItem]\nListItem.requiredContainer = ListContainer\n\n// 属性读取方法:兼容table-cell-line、ol、li\n// 因为构造时当前range对应的元素最开始是table-cell-line,然后是li,且ol的formats方法不允许覆写,会导致报错,所以整合一个兼容方法来读取需要的属性。\nfunction getFormats(dom): any {\n const formats = {}\n\n if (dom.tagName === 'OL') {\n formats.list = dom.classList.item(0)\n }\n\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\n if (dom.hasAttribute(`data-${attribute}`)) {\n tableFormats[attribute] = dom.getAttribute(`data-${attribute}`) || undefined\n }\n return tableFormats\n }, formats)\n}\n\nexport { ListItem as default, ListContainer }\n"],"names":["CELL_IDENTITY_KEYS","CELL_ATTRIBUTES"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list.cjs.js","sources":["../../../../../src/modules/table/formats/list.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { CELL_ATTRIBUTES, CELL_IDENTITY_KEYS } from '../table-config'\r\n\r\nconst Block = Quill.imports['blots/block']\r\nconst Container = Quill.imports['blots/container']\r\n\r\n// @dynamic\r\nclass ListContainer extends Container {\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n replaceWith: any\r\n domNode: any\r\n parent: any\r\n statics: any\r\n wrap: any\r\n\r\n format(name, value) {\r\n const { row, cell, rowspan, colspan } = this.domNode.dataset\r\n if (name === ListContainer.blotName) {\r\n if (value) {\r\n super.format(name, { row, cell, rowspan, colspan })\r\n }\r\n else if (row) {\r\n this.replaceWith('table-cell-line', { row, cell, rowspan, colspan })\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * bugfix: quill源码中(quill/core/editor.js 272行)在处理拷贝时\r\n * hard code了这个blotName用于处理ol中的li。所以在quill\r\n * 源码内写法不变的情况下这个名字不能改,否则拷贝有bug\r\n */\r\nListContainer.blotName = 'list-container'\r\nListContainer.tagName = 'OL'\r\n\r\n// @dynamic\r\nclass ListItem extends Block {\r\n static blotName: string\r\n static tagName: string\r\n static requiredContainer: typeof ListContainer\r\n statics: any\r\n attachUI: any\r\n domNode: any\r\n replaceWith: any\r\n parent: any\r\n wrap: any\r\n children: any\r\n prev: any\r\n remove: () => void\r\n\r\n static create(value) {\r\n const node = super.create()\r\n if (typeof value === 'string') {\r\n value = { value }\r\n }\r\n else {\r\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach((key) => {\r\n if (value[key]) {\r\n node.dataset[key] = value[key]\r\n }\r\n })\r\n }\r\n node.classList.add(value.value)\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats: any = {}\r\n formats.value = domNode.classList.item(0) || undefined\r\n\r\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, key) => {\r\n if (domNode.dataset[key]) {\r\n tableFormats[key] = domNode.dataset[key]\r\n }\r\n return tableFormats\r\n }, formats)\r\n }\r\n\r\n static register() {\r\n Quill.register({ 'formats/list-container': ListContainer }, true)\r\n }\r\n\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n const range = quill.getSelection()\r\n if (range) {\r\n const [line] = quill.getLine(range.index)\r\n const td = line.domNode.closest('td')\r\n if (td) {\r\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach(key =>\r\n td.dataset[key] && domNode.setAttribute(`data-${key}`, td.dataset[key]))\r\n }\r\n }\r\n\r\n const ui = domNode.ownerDocument.createElement('span')\r\n const listEventHandler = (e) => {\r\n if (!scroll.isEnabled()) return\r\n const { value } = this.statics.formats(domNode, scroll)\r\n if (value === 'checked') {\r\n this.format('list', 'unchecked')\r\n e.preventDefault()\r\n }\r\n else if (value === 'unchecked') {\r\n this.format('list', 'checked')\r\n e.preventDefault()\r\n }\r\n }\r\n ui.addEventListener('mousedown', listEventHandler)\r\n ui.addEventListener('touchstart', listEventHandler)\r\n this.attachUI(ui)\r\n }\r\n\r\n format(name, value) {\r\n if (name !== ListItem.blotName) {\r\n super.format(name, value)\r\n return\r\n }\r\n const type = (value && typeof value === 'object') ? value.value : value\r\n const oldClass = this.domNode.classList[0]\r\n const tdDom = this.domNode.closest('.editing-select-able')\r\n const tableCellBlot = tdDom && Quill.find(tdDom)\r\n const images = this.domNode.querySelectorAll('img[data-image-id]')\r\n if (!type || type === oldClass) {\r\n // 消除格式或相同list抵消格式时恢复图片对齐,li转化为table-cell-line\r\n if (images && images.length) {\r\n images.forEach((img) => {\r\n img.style.verticalAlign = 'baseLine'\r\n })\r\n }\r\n if (tableCellBlot && tableCellBlot.statics.blotName === 'table') {\r\n const tableCellFormats = tableCellBlot.formats()\r\n this.replaceWith('table-cell-line', tableCellFormats)\r\n // fix: 移除list格式时移除父级的ol或ul,避免table-cell-line判断无td自动生成td容器\r\n if (this.parent.statics.blotName === ListContainer.blotName) {\r\n this.parent.unwrap()\r\n }\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n }\r\n else if (oldClass) {\r\n this.domNode.className = this.domNode.className.replace(oldClass, type)\r\n }\r\n else {\r\n this.domNode.classList.add(type)\r\n }\r\n }\r\n\r\n optimize(context) {\r\n // 判断前一个li是否包含软回车,如果包含则将当前li与之合并后移除\r\n const tail = this.prev && this.prev.domNode.lastChild\r\n if (tail && tail.className && tail.className.includes('ql-soft-break')) {\r\n // 合并dom\r\n this.domNode.childNodes.forEach((v, i) => {\r\n if (i > 0) {\r\n this.prev.domNode.appendChild(v)\r\n }\r\n })\r\n this.remove()\r\n return\r\n }\r\n\r\n super.optimize(context)\r\n\r\n // list类型\r\n const parentFormats = getFormats(this.parent.domNode)\r\n const formats = ListItem.formats(this.domNode)\r\n // 单元格属性\r\n const data = this.domNode.dataset || []\r\n const images = this.domNode.querySelectorAll('img[data-image-id]')\r\n\r\n // li更新后判断父容器的对应属性是否与自身一致,如果不一致则向上覆盖\r\n if (parentFormats.list !== formats.value) {\r\n const oldClass = this.parent.domNode.classList[0]\r\n if (oldClass) {\r\n this.parent.domNode.className = this.parent.domNode.className.replace(oldClass, formats.value)\r\n }\r\n else {\r\n this.parent.domNode.classList.add(formats.value)\r\n }\r\n }\r\n\r\n if (data.cell && !parentFormats.cell) {\r\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach(key =>\r\n (formats[key] || data[key]) && this.parent.domNode.setAttribute(`data-${key}`, formats[key] || data[key]))\r\n // 如果父容器不在表格内则用单元格包裹\r\n if (this.parent.parent.statics.blotName !== 'table') {\r\n delete formats.list\r\n this.wrap('table', formats)\r\n }\r\n }\r\n\r\n // 当list中包含图片时,设置图片顶对齐\r\n if (images) {\r\n images.forEach((img) => {\r\n img.style.verticalAlign = 'top'\r\n })\r\n }\r\n }\r\n}\r\n\r\nListItem.blotName = 'list'\r\nListItem.tagName = 'LI'\r\n\r\nListContainer.allowedChildren = [ListItem]\r\nListItem.requiredContainer = ListContainer\r\n\r\n// 属性读取方法:兼容table-cell-line、ol、li\r\n// 因为构造时当前range对应的元素最开始是table-cell-line,然后是li,且ol的formats方法不允许覆写,会导致报错,所以整合一个兼容方法来读取需要的属性。\r\nfunction getFormats(dom): any {\r\n const formats = {}\r\n\r\n if (dom.tagName === 'OL') {\r\n formats.list = dom.classList.item(0)\r\n }\r\n\r\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\r\n if (dom.hasAttribute(`data-${attribute}`)) {\r\n tableFormats[attribute] = dom.getAttribute(`data-${attribute}`) || undefined\r\n }\r\n return tableFormats\r\n }, formats)\r\n}\r\n\r\nexport { ListItem as default, ListContainer }\r\n"],"names":["CELL_IDENTITY_KEYS","CELL_ATTRIBUTES"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.cjs.js","sources":["../../../../../src/modules/table/formats/table.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../../config/editor.utils'\nimport { compare } from '../../../utils/method'\nimport {\n CELL_ATTRIBUTES,\n CELL_DEFAULT,\n CELL_IDENTITY_KEYS,\n CELL_MIN_HEIGHT,\n COL_ATTRIBUTES,\n COL_DEFAULT,\n ERROR_LIMIT,\n} from '../table-config'\nimport { getRelativeRect } from '../utils'\nimport Header from './header'\nimport ListItem, { ListContainer } from './list'\n\nconst Break = Quill.imports['blots/break']\nconst Block = Quill.imports['blots/block']\nconst Container = Quill.imports['blots/container']\n\n// @dynamic\nclass TableCellLine extends Block {\n static requiredContainer: any\n static tagName: string\n static className: string\n static blotName: any\n domNode: any\n statics: any\n wrap: any\n parent: any\n\n static create(value) {\n const node = super.create(value)\n\n // fix: when td has background-color, quill can't set it to table-cell blot\n if (value.tdBgColor) {\n node.setAttribute(`data-parent-bg`, value.tdBgColor)\n delete value.tdBgColor\n }\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n const identityMaker = key === 'row' ? rowId : cellId\n node.setAttribute(`data-${key}`, value[key] || identityMaker())\n })\n\n CELL_ATTRIBUTES.forEach((attrName) => {\n const keyValue = value[attrName] || CELL_DEFAULT[attrName]\n keyValue && node.setAttribute(`data-${attrName}`, keyValue)\n })\n\n if (value.height) {\n node.setAttribute('height', value.height)\n }\n\n return node\n }\n\n static formats(domNode) {\n const formats = {}\n if (formats.list) {\n formats.list = domNode.classList.item(0)\n }\n return reduceFormats(domNode, formats)\n }\n\n toggleAttribute(name, value) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n\n formatChildren(name, value) {\n this.children.forEach((child) => {\n child.format && child.format(name, value)\n if (!child.domNode.style) {\n return\n }\n if (child.domNode.tagName === 'SPAN' && value) {\n child.domNode.style.backgroundColor = value\n }\n else {\n child.domNode.style.backgroundColor = 'initial'\n }\n })\n }\n\n format(name, value) {\n if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, 'parent-bg'].includes(name)) {\n if (value) {\n this.domNode.setAttribute(`data-${name}`, value)\n }\n else {\n this.domNode.removeAttribute(`data-${name}`)\n }\n }\n else if (name === 'header') {\n if (!value) {\n return\n }\n const { row, cell, rowspan, colspan }: any = TableCellLine.formats(this.domNode)\n super.format(name, {\n value,\n row,\n cell,\n rowspan,\n colspan,\n })\n }\n else {\n super.format(name, value)\n }\n switch (true) {\n case name === 'cell-bg': {\n this.toggleAttribute('data-cell-bg', value)\n }\n }\n }\n\n optimize(context) {\n super.optimize(context)\n\n // cover shadowBlot's wrap call, pass params parentBlot initialize\n // needed\n const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset\n const formats: Record<string, any> = TableCellLine.formats(this.domNode)\n const parentFormats = this.parent.formats()\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg })\n }\n else if (!compare(formats, parentFormats)) {\n this.parent.format('row', formats.row)\n this.parent.format('cell', formats.cell)\n this.parent.format('rowspan', formats.rowspan)\n this.parent.format('colspan', formats.colspan)\n formats['cell-bg'] && this.parent.setCellBg(formats['cell-bg'])\n }\n\n const parentHeight = this.domNode.getAttribute('height')\n if (parentHeight) {\n this.parent.domNode.style.height = parentHeight\n }\n }\n\n tableCell() {\n return this.parent\n }\n}\nTableCellLine.blotName = 'table-cell-line'\nTableCellLine.className = 'qlbt-cell-line'\nTableCellLine.tagName = 'DIV'\n\n// @dynamic\nclass TableCell extends Container {\n static allowedChildren: any\n static blotName: any\n static requiredContainer: any\n static tagName: string\n next: any\n children: any\n parent: any\n domNode: any\n statics: any\n wrap: any\n splitAfter: any\n prev: any\n scroll: any\n\n static create(value = { row: rowId() }) {\n const node = super.create(value)\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n node.setAttribute(`data-${key}`, value[key])\n })\n\n CELL_ATTRIBUTES.forEach((attrName) => {\n if (value[attrName]) {\n node.setAttribute(attrName, value[attrName])\n }\n })\n\n return node\n }\n\n static formats(domNode) {\n const formats = {\n height: undefined,\n row: undefined,\n }\n\n formats.height = domNode.getAttribute('height') || undefined\n\n if (domNode.hasAttribute('data-row')) {\n formats.row = domNode.getAttribute('data-row')\n }\n\n if (domNode.hasAttribute('data-cell-bg')) {\n formats['cell-bg'] = domNode.getAttribute('data-cell-bg') || undefined\n }\n return CELL_ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute)\n }\n\n return formats\n }, formats)\n }\n\n checkMerge() {\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\n const getCellId = (node) => {\n return (\n (node.formats && node.formats()[node.statics.blotName]) || {\n cell: node.domNode.getAttribute('data-cell'),\n }\n )\n }\n const thisHead = getCellId(this.children.head)\n const thisTail = getCellId(this.children.tail)\n const nextHead = getCellId(this.next.children.head)\n const nextTail = getCellId(this.next.children.tail)\n return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell\n }\n return false\n }\n\n cellOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this)\n }\n return -1\n }\n\n formats() {\n const formats = {}\n\n if (this.domNode.hasAttribute('data-row')) {\n formats.row = this.domNode.getAttribute('data-row')\n }\n if (this.domNode.hasAttribute('data-cell')) {\n formats.cell = this.domNode.getAttribute('data-cell')\n }\n\n return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {\n if (this.domNode.hasAttribute(attribute)) {\n tableFormats[attribute] = this.domNode.getAttribute(attribute)\n }\n\n return tableFormats\n }, formats)\n }\n\n toggleAttribute(name, value) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n\n formatChildren(name, value) {\n this.children.forEach((child) => {\n child.format(name, value)\n })\n }\n\n /**\n * this method is for TableCellLine to change cell background color\n * if use `format('cell-bg', value)` will loop trigger\n * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...\n */\n setCellBg(value?: string) {\n if (value) {\n this.domNode.style.backgroundColor = value\n }\n else {\n this.domNode.style.backgroundColor = 'initial'\n }\n }\n\n format(name, value) {\n const quill = Quill.find(this.scroll.domNode.parentNode)\n switch (true) {\n case CELL_ATTRIBUTES.includes(name):\n this.toggleAttribute(name, value)\n break\n case ['row', 'cell'].includes(name):\n this.toggleAttribute(`data-${name}`, value)\n break\n case name === 'background': {\n const hasBgColor = this.domNode.querySelectorAll('div.qlbt-cell-line[data-parent-bg]')\n hasBgColor.forEach(child => child.removeAttribute('data-parent-bg'))\n this.domNode.style.background = ''\n this.domNode.style.backgroundColor = value\n this.children.head.format('parent-bg', value)\n break\n }\n // TODO: 其他格式可同理实现,但已有格式清除时会清除所有格式,待解决\n case name === 'size': {\n const start = quill.getIndex(this.children.head)\n const total = quill.getIndex(this.children.tail) + this.children.tail.length()\n const length = total - start > 0 ? total - start : 0\n quill.setSelection(start, length, Quill.sources.USER)\n quill.format(name, value, Quill.sources.USER)\n // 设置选区后需清除选区,否则会固定处理选区内容\n quill.setSelection(start)\n break\n }\n case name === 'cell-bg': {\n this.toggleAttribute('data-cell-bg', value)\n this.toggleAttribute('data-parent-bg', value)\n this.formatChildren(name, value)\n this.setCellBg(value)\n break\n }\n }\n }\n\n optimize(context) {\n // fix: when td has background-color, quill can't set it to table-cell bolt\n const hasBg: any = Array.from(this.domNode.childNodes).find((item: any) => item.getAttribute('data-parent-bg'))\n const bgColor = hasBg && hasBg.getAttribute('data-parent-bg')\n if (bgColor && bgColor !== this.domNode.style.backgroundColor) {\n this.domNode.style.backgroundColor = bgColor\n }\n\n const rId = this.domNode.getAttribute('data-row')\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName, {\n row: rId,\n })\n }\n else if (rId !== this.parent.formats().row) {\n this.parent.format('row', rId)\n }\n\n this.children.forEach((child) => {\n if (isNullOrUndefined(child.next)) {\n return\n }\n const childFormats: any = this.getFormat(child.domNode)\n const nextFormats: any = this.getFormat(child.next.domNode)\n if (childFormats.cell !== nextFormats.cell) {\n const next = this.splitAfter(child)\n if (next) {\n next.optimize()\n }\n // We might be able to merge with prev now\n if (this.prev) {\n this.prev.optimize()\n }\n }\n })\n\n super.optimize(context)\n }\n\n // 兼容读取TableCell中的子blot,包括table-cell-line、line、head\n getFormat(domNode) {\n const formats = {}\n const firstChild = domNode.childNodes[0]\n if (firstChild && domNode.tagName === 'OL') {\n formats.list = firstChild.classList.item(0)\n }\n\n return reduceFormats(domNode, formats)\n }\n\n row() {\n return this.parent\n }\n\n rowOffset() {\n if (this.row()) {\n return -1\n }\n return this.row().rowOffset()\n }\n\n table() {\n return this.row() && this.row().table()\n }\n}\nTableCell.blotName = 'table'\nTableCell.tagName = 'TD'\n\n// @dynamic\nclass TableRow extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n next: any\n children: any\n domNode: any\n statics: any\n wrap: any\n splitAfter: any\n enforceAllowedChildren: any\n uiNode: any\n parent: any\n prev: any\n\n static create(value) {\n const node = super.create(value)\n if (value.row) {\n node.setAttribute('data-row', value.row)\n }\n return node\n }\n\n checkMerge() {\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\n const thisHead = this.children.head.formats()\n const thisTail = this.children.tail.formats()\n const nextHead = this.next.children.head.formats()\n const nextTail = this.next.children.tail.formats()\n\n return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row\n }\n return false\n }\n\n formats() {\n return ['row'].reduce((formats, attrName) => {\n if (this.domNode.hasAttribute(`data-${attrName}`)) {\n formats[attrName] = this.domNode.getAttribute(`data-${attrName}`)\n }\n return formats\n }, {})\n }\n\n format(key, value) {\n this.domNode.setAttribute(`data-${key}`, value)\n }\n\n optimize(context) {\n // optimize function of ShadowBlot\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName)\n }\n\n this.children.forEach((child) => {\n if (isNullOrUndefined(child.next)) {\n return\n }\n const childFormats = child.formats()\n const nextFormats = child.next.formats()\n if (childFormats.row !== nextFormats.row) {\n const next = this.splitAfter(child)\n if (next) {\n next.optimize()\n }\n if (this.prev) {\n this.prev.optimize()\n }\n }\n })\n\n super.optimize(context)\n }\n\n rowOffset() {\n if (!this.parent) {\n return -1\n }\n return this.parent.children.indexOf(this)\n }\n\n table() {\n return this.parent && this.parent.parent\n }\n}\nTableRow.blotName = 'table-row'\nTableRow.tagName = 'TR'\n\n// @dynamic\nclass TableBody extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n}\nTableBody.blotName = 'table-body'\nTableBody.tagName = 'TBODY'\n\n// @dynamic\nclass TableCol extends Block {\n static requiredContainer: any\n static blotName: string\n static tagName: string\n domNode: any\n\n static create(value) {\n const node = super.create(value)\n COL_ATTRIBUTES.forEach((attrName) => {\n node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName])\n })\n return node\n }\n\n static formats(domNode) {\n return COL_ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(`${attribute}`)) {\n formats[attribute] = domNode.getAttribute(`${attribute}`) || undefined\n }\n return formats\n }, {})\n }\n\n format(name, value) {\n if (COL_ATTRIBUTES.includes(name)) {\n this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name])\n }\n else {\n super.format(name, value)\n }\n }\n\n html() {\n return this.domNode.outerHTML\n }\n}\nTableCol.blotName = 'table-col'\nTableCol.tagName = 'col'\n\n// @dynamic\nclass TableColGroup extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n parent: any\n statics: any\n\n optimize(context) {\n super.optimize(context)\n // optimize 是当前slot更新后调用的callback方法,当TableBody更新后判断父容器的存在和类型相符则调用更新表格宽度方法更新宽度\n // 切记不要在当前slot内调用能改变当前slot的方法,会造成无限循环,一般通过子更新改变父较好\n if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {\n this.parent.updateTableWidth()\n }\n // 此时colgroup创建完毕,检查colgroup的col数量是否正确\n // fix:colgroup的col数量不正确导致最后一列宽度为空\n if (this.parent.parent.domNode.className === 'quill-better-table-wrapper'\n && this.parent.parent.domNode.tagName === 'DIV'\n && this.parent.domNode.children.length >= 2\n && this.parent.domNode.children[0].tagName === 'COLGROUP'\n && this.parent.domNode.children[1].tagName === 'TBODY'\n ) {\n let trId = ''\n let colSpan = 0\n let colgroupNumber = 0\n for (let i = 0; i < this.parent.domNode.children.length; i++) {\n if (this.parent.domNode.children[i].tagName === 'TBODY') {\n if (trId === '') {\n trId = this.parent.domNode.children[i].children[0].getAttribute('data-row')\n }\n colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId)\n }\n else if (this.parent.domNode.children[i].tagName === 'COLGROUP') {\n colgroupNumber = this.parent.domNode.children[i].children.length\n }\n }\n let elementSibling = this.parent.domNode.nextElementSibling\n\n while (elementSibling && elementSibling.tagName === 'TABLE') {\n for (let i = 0; i < elementSibling.children.length; i++) {\n if (elementSibling.children[i].tagName === 'TBODY') {\n colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId)\n }\n }\n elementSibling = elementSibling.nextElementSibling\n }\n\n if (colgroupNumber < colSpan) {\n const length = colSpan - colgroupNumber\n\n for (let i = 0; i < length; i++) {\n const newCol = document.createElement('col')\n newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width\n const newBr = document.createElement('br')\n newCol.appendChild(newBr)\n this.parent.domNode.children[0].appendChild(newCol)\n this.parent.domNode.style.width += newCol.width\n }\n }\n }\n }\n\n // this.parent.domNode.children[1].children[0].children[0].colSpan\n findTdColspanInTbody(tbody, trId) {\n let colSpan = 0\n // let tbodyChildrenLength\n for (let i = 0; i < tbody.children.length; i++) {\n if (tbody.children[i].getAttribute('data-row') !== trId) {\n return colSpan\n }\n for (let j = 0; j < tbody.children[i].children.length; j++) {\n if (tbody.children[i].children[j].colSpan) {\n colSpan += tbody.children[i].children[j].colSpan\n }\n }\n }\n return colSpan\n }\n}\nTableColGroup.blotName = 'table-col-group'\nTableColGroup.tagName = 'colgroup'\n\n// @dynamic\nclass TableContainer extends Container {\n static blotName: string\n static className: string\n static tagName: string\n static requiredContainer: any\n static allowedChildren: any\n domNode: any\n parent: any\n children: any\n descendants: any\n scroll: any\n remove: any\n static create() {\n const node = super.create()\n return node\n }\n\n constructor(scroll, domNode) {\n super(scroll, domNode)\n domNode.setAttribute('contenteditable', false)\n this.updateTableWidth()\n }\n\n updateTableWidth() {\n let colGroup = this.colGroup()\n if (!colGroup) {\n // undo时原表格dom被移除,因此colGroup和domNode都不对应当前新表格,需从父容器dom树重新获取\n // 如果表格有style属性则不为新添加表格,避免错误赋值\n if (this.parent && this.parent.children.head && this.domNode.hasAttribute('style')) {\n colGroup = this.parent.children.head.children.head\n this.domNode = this.parent.children.head.domNode\n }\n else if (this.domNode.tagName === 'TABLE') {\n // this.domNode.forEach\n return\n }\n else {\n return\n }\n }\n const tableWidth = colGroup.children.reduce((sumWidth, col) => {\n // 兼容 table-col 不存在的情况\n const tableCol = col.formats()[TableCol.blotName]\n let tableColWidth = COL_DEFAULT.width\n if (tableCol && tableCol.width) {\n tableColWidth = Number.parseInt(tableCol.width, 10)\n }\n sumWidth = sumWidth + tableColWidth\n return sumWidth\n }, 0)\n this.domNode.removeAttribute('style')\n this.domNode.style.width = `${tableWidth}px`\n // 当表格加载结束后修正width设定为auto的列宽度\n if (colGroup.next) {\n setTimeout(() => {\n let tdIndex = 0\n let maxTds\n const colNum = colGroup.children.length\n const tableRows = this.descendants(TableRow)\n // 查询单元格数等于列数的行作为宽度赋值依据\n for (let i = 0; i < tableRows.length; i++) {\n const tds = tableRows[i].domNode.querySelectorAll('td')\n if (tds.length === colNum) {\n maxTds = tds\n break\n }\n }\n colGroup.children.forEach((col) => {\n if (maxTds && col.domNode.width === 'auto') {\n const width = getComputedStyle(maxTds[tdIndex]).width\n const num = Number.parseInt(width, 10)\n col.domNode.width = (num < COL_DEFAULT.width && COL_DEFAULT.width) || num\n }\n tdIndex++\n })\n })\n }\n }\n\n cells(column) {\n return this.rows().map(row => row.children.at(column))\n }\n\n colGroup() {\n return this.children.head\n }\n\n deleteColumns(compareRect, delIndexes = [], editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const removedCells = []\n const modifiedCells = []\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {\n removedCells.push(cell)\n }\n else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n })\n\n if (removedCells.length === tableCells.length) {\n this.tableDestroy()\n return true\n }\n\n // remove the matches column tool cell\n delIndexes.forEach(() => {\n const col = this.colGroup().children.at(delIndexes[0])\n if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {\n this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]])\n }\n else {\n col.remove()\n }\n })\n\n removedCells.forEach((cell) => {\n cell.remove()\n })\n\n modifiedCells.forEach((cell) => {\n const cellColspan = Number.parseInt(cell.formats().colspan, 10)\n // const cellWidth = parseInt(cell.formats().width, 10);\n cell.format('colspan', cellColspan - delIndexes.length)\n })\n\n this.updateTableWidth()\n }\n\n deleteRow(compareRect, editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const tableRows = this.descendants(TableRow)\n const removedCells = [] // cells to be removed\n const modifiedCells = [] // cells to be modified\n const fallCells = [] // cells to fall into next row\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {\n removedCells.push(cell)\n }\n else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {\n modifiedCells.push(cell)\n\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\n fallCells.push(cell)\n }\n }\n })\n\n if (removedCells.length === tableCells.length) {\n this.tableDestroy()\n return\n }\n\n // compute length of removed rows\n const removedRowsLength = this.rows().reduce((sum, row) => {\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\n\n if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {\n sum += 1\n }\n return sum\n }, 0)\n\n // it must execute before the table layout changed with other operation\n fallCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n const nextRow = cell.parent.next\n const cellsInNextRow = nextRow.children\n\n const refCell = cellsInNextRow.reduce((ref, compareCell) => {\n const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper)\n if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {\n ref = compareCell\n }\n return ref\n }, null)\n\n nextRow.insertBefore(cell, refCell)\n const curRowId = nextRow.formats().row\n cell.format('row', curRowId)\n cell.children.forEach((cellLine) => {\n cellLine.format('row', curRowId)\n })\n })\n\n modifiedCells.forEach((cell) => {\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\n const curRowspan = cellRowspan - removedRowsLength\n cell.domNode.removeAttribute('style')\n cell.format('rowspan', curRowspan)\n cell.children.forEach((cellLine) => {\n cellLine.format('rowspan', curRowspan)\n })\n })\n\n removedCells.forEach((cell) => {\n cell.remove()\n })\n\n // fix: There will be a empty tr left if i delete the last row of a table,\n // this will cause the bottom border of the table to disappear,\n // and the empty tr will execute the matchTableRow method.\n tableRows.forEach((row) => {\n if (row.children.length === 0) {\n row.remove()\n }\n })\n }\n\n tableDestroy() {\n const quill = Quill.find(this.scroll.domNode.parentNode)\n const tableModule = quill.getModule('better-table')\n this.remove()\n tableModule.hideTableTools()\n quill.update(Quill.sources.USER)\n }\n\n insertCell(tableRow, ref, bg = '') {\n const id = cellId()\n const rId = tableRow.formats().row\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId },\n )\n tableCell.domNode.style.backgroundColor = bg\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: id,\n })\n tableCell.appendChild(cellLine)\n\n if (ref) {\n tableRow.insertBefore(tableCell, ref)\n }\n else {\n tableRow.appendChild(tableCell)\n }\n }\n\n insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {\n const [body] = this.descendants(TableBody)\n const [tableColGroup] = this.descendants(TableColGroup)\n const tableCols = this.descendants(TableCol)\n const addAsideCells = []\n const modifiedCells = []\n const affectedCells = []\n\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n const tableCells = this.descendants(TableCell)\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (isRight) {\n if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {\n // the right of selected boundary equal to the right of table cell,\n // add a new table cell right aside this table cell\n addAsideCells.push(cell)\n }\n else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {\n // the right of selected boundary is inside this table cell\n // colspan of this table cell will increase 1\n modifiedCells.push(cell)\n }\n }\n else {\n if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {\n // left of selected boundary equal to left of table cell,\n // add a new table cell left aside this table cell\n addAsideCells.push(cell)\n }\n else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {\n // the left of selected boundary is inside this table cell\n // colspan of this table cell will increase 1\n modifiedCells.push(cell)\n }\n }\n })\n\n addAsideCells.forEach((cell) => {\n const ref = isRight ? cell.next : cell\n const id = cellId()\n const tableRow = cell.parent\n const rId = tableRow.formats().row\n const cellFormats = cell.formats()\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId, rowspan: cellFormats.rowspan },\n )\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: id,\n rowspan: cellFormats.rowspan,\n })\n tableCell.appendChild(cellLine)\n\n if (ref) {\n tableRow.insertBefore(tableCell, ref)\n }\n else {\n tableRow.appendChild(tableCell)\n }\n affectedCells.push(tableCell)\n })\n\n // insert new tableCol\n const tableCol = this.scroll.create(TableCol.blotName, true)\n let colRef\n if (isRight) {\n colRef = tableCols[colIndex] && tableCols[colIndex].next\n }\n else {\n colRef = tableCols[colIndex]\n }\n\n if (colRef) {\n tableColGroup.insertBefore(tableCol, colRef)\n }\n else {\n tableColGroup.appendChild(tableCol)\n }\n\n modifiedCells.forEach((cell) => {\n const cellColspan = cell.formats().colspan\n cell.format('colspan', Number.parseInt(cellColspan, 10) + 1)\n affectedCells.push(cell)\n })\n\n affectedCells.sort((cellA, cellB) => {\n const y1 = cellA.domNode.getBoundingClientRect().y\n const y2 = cellB.domNode.getBoundingClientRect().y\n return y1 - y2\n })\n\n this.updateTableWidth()\n return affectedCells\n }\n\n insertRow(compareRect, isDown, editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const rId = rowId()\n const newRow = this.scroll.create(TableRow.blotName, {\n row: rId,\n })\n const addBelowCells = []\n const modifiedCells = []\n const affectedCells = []\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (isDown) {\n if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {\n addBelowCells.push(cell)\n }\n else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n }\n else {\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\n addBelowCells.push(cell)\n }\n else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n }\n })\n\n // ordered table cells with rect.x, fix error for inserting\n // new table cell in complicated table with wrong order.\n const sortFunc = (cellA, cellB) => {\n const x1 = cellA.domNode.getBoundingClientRect().x\n const x2 = cellB.domNode.getBoundingClientRect().x\n return x1 - x2\n }\n addBelowCells.sort(sortFunc)\n\n addBelowCells.forEach((cell) => {\n const cId = cellId()\n const cellFormats = cell.formats()\n\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan },\n )\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: cId,\n colspan: cellFormats.colspan,\n })\n const empty = this.scroll.create(Break.blotName)\n cellLine.appendChild(empty)\n tableCell.appendChild(cellLine)\n newRow.appendChild(tableCell)\n affectedCells.push(tableCell)\n })\n\n modifiedCells.forEach((cell) => {\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\n cell.format('rowspan', cellRowspan + 1)\n affectedCells.push(cell)\n })\n\n const refRow = this.rows().find((row) => {\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\n if (isDown) {\n return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT\n }\n else {\n return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT\n }\n })\n body.insertBefore(newRow, refRow)\n\n // reordering affectedCells\n affectedCells.sort(sortFunc)\n return affectedCells\n }\n\n mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {\n const mergedCell = mergingCells.reduce((result, tableCell, index) => {\n if (index !== 0) {\n if (result) {\n tableCell.moveChildren(result)\n }\n tableCell.remove()\n }\n else {\n tableCell.format('colspan', colspan)\n tableCell.format('rowspan', rowspan)\n result = tableCell\n if (rowspan > 1) {\n // fix: 比较当前单元格高度样式与rowspan最小高度,小于则设置高度,不判断实际高度,因为合并时这一刻实际高度可能高于最小高度\n const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1\n const cellHeight = Number.parseInt(tableCell.domNode.style.height, 10) || 0\n if (cellHeight < minHeight) {\n tableCell.domNode.style.height = `${minHeight}px`\n }\n }\n }\n\n return result\n }, null)\n\n const rId = mergedCell.domNode.getAttribute('data-row')\n const cId = mergedCell.children.head.domNode.getAttribute('data-cell')\n mergedCell.children.forEach((cellLine) => {\n cellLine.domNode.setAttribute('data-parent-bg', mergedCell.domNode.style.backgroundColor)\n if (cellLine.children.head.domNode.style) {\n cellLine.children.head.domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor\n }\n\n if (!cellLine.prev || cellLine.domNode.textContent.trim()) {\n cellLine.format('cell', cId)\n cellLine.format('row', rId)\n cellLine.format('colspan', colspan)\n cellLine.format('rowspan', rowspan)\n }\n else {\n cellLine.remove()\n }\n })\n\n return mergedCell\n }\n\n unmergeCells(unmergingCells, editorWrapper) {\n let cellFormats: any = {}\n let cellRowspan = 1\n let cellColspan = 1\n\n unmergingCells.forEach((tableCell) => {\n const tableCellBgColor = tableCell.domNode.style.backgroundColor\n cellFormats = tableCell.formats()\n cellRowspan = cellFormats.rowspan\n cellColspan = cellFormats.colspan\n\n if (cellColspan > 1) {\n const ref = tableCell.next\n const row = tableCell.row()\n tableCell.format('colspan', 1)\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-colspan')) {\n tableCell.domNode.children[0].setAttribute('data-colspan', 1)\n }\n for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {\n this.insertCell(row, ref, tableCellBgColor)\n }\n }\n\n if (cellRowspan > 1) {\n let rowspanIndex = cellRowspan\n let nextRow = tableCell.row().next\n while (rowspanIndex > 1) {\n const refInNextRow = nextRow.children.reduce((result, cell) => {\n const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper)\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {\n result = cell\n }\n return result\n }, null)\n\n for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {\n this.insertCell(nextRow, refInNextRow, tableCellBgColor)\n }\n\n rowspanIndex -= 1\n nextRow = nextRow.next\n }\n\n tableCell.domNode.removeAttribute('style')\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-rowspan')) {\n tableCell.domNode.children[0].setAttribute('data-rowspan', 1)\n }\n tableCell.format('rowspan', 1)\n }\n })\n }\n\n emptyCells(selectedTds) {\n selectedTds.forEach((selectedTd) => {\n // 构造空的table cell line, 优先使用单元格已有rowId和cellId,避免从table-cell-line向上层td提交id时不一致导致错位\n const cellFormats = selectedTd.formats()\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: cellFormats.row || rowId(),\n cell: cellFormats.cell || cellId(),\n rowspan: cellFormats.rowspan,\n colspan: cellFormats.colspan,\n })\n const empty = this.scroll.create(Break.blotName)\n cellLine.appendChild(empty)\n\n selectedTd.domNode.innerHTML = ''\n selectedTd.appendChild(cellLine)\n })\n }\n\n rows() {\n const body = this.children.tail\n if (isNullOrUndefined(body)) {\n return []\n }\n return body.children.map(row => row)\n }\n}\nTableContainer.blotName = 'ql-table-container'\nTableContainer.className = 'quill-better-table'\nTableContainer.tagName = 'TABLE'\n\n// @dynamic\nclass TableViewWrapper extends Container {\n static blotName: string\n static tagName: string\n static className: string\n static allowedChildren: any\n constructor(scroll, domNode) {\n super(scroll, domNode)\n const quill = Quill.find(scroll.domNode.parentNode)\n // fix: 只读模式时超长表格默认包含滚动条\n if (quill.options.readOnly) {\n domNode.style.overflow = 'auto'\n }\n domNode.addEventListener(\n 'scroll',\n (e) => {\n const tableModule = quill.getModule('better-table')\n if (tableModule.columnTool) {\n tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft\n }\n\n if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {\n tableModule.tableSelection.repositionHelpLines()\n }\n },\n false,\n )\n }\n}\nTableViewWrapper.blotName = 'table-view'\nTableViewWrapper.className = 'quill-better-table-wrapper'\nTableViewWrapper.tagName = 'DIV'\n\nTableViewWrapper.allowedChildren = [TableContainer]\nTableContainer.requiredContainer = TableViewWrapper\n\nTableContainer.allowedChildren = [TableBody, TableColGroup]\nTableBody.requiredContainer = TableContainer\n\nTableBody.allowedChildren = [TableRow]\nTableRow.requiredContainer = TableBody\n\nTableRow.allowedChildren = [TableCell]\nTableCell.requiredContainer = TableRow\n\nTableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer]\nTableCellLine.requiredContainer = TableCell\n\nTableColGroup.allowedChildren = [TableCol]\nTableColGroup.requiredContainer = TableContainer\n\nTableCol.requiredContainer = TableColGroup\n\nfunction rowId() {\n const id = Math.random().toString(36).slice(2, 6)\n return `row-${id}`\n}\n\nfunction cellId() {\n const id = Math.random().toString(36).slice(2, 6)\n return `cell-${id}`\n}\n\nfunction reduceFormats(domNode: HTMLElement, formats: Record<string, any>) {\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\n if (domNode.hasAttribute(`data-${attribute}`)) {\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\n }\n return tableFormats\n }, formats)\n}\n\nexport {\n CELL_ATTRIBUTES,\n CELL_IDENTITY_KEYS,\n cellId,\n rowId,\n TableBody,\n TableCell,\n TableCellLine,\n TableCol,\n TableColGroup,\n TableContainer,\n TableRow,\n TableViewWrapper,\n}\n"],"names":["CELL_IDENTITY_KEYS","CELL_ATTRIBUTES","CELL_DEFAULT","compare","formats","isNullOrUndefined","COL_ATTRIBUTES","COL_DEFAULT","getRelativeRect","ERROR_LIMIT","index","CELL_MIN_HEIGHT","Header","ListItem","ListContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table.cjs.js","sources":["../../../../../src/modules/table/formats/table.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../../config/editor.utils'\r\nimport { compare } from '../../../utils/method'\r\nimport {\r\n CELL_ATTRIBUTES,\r\n CELL_DEFAULT,\r\n CELL_IDENTITY_KEYS,\r\n CELL_MIN_HEIGHT,\r\n COL_ATTRIBUTES,\r\n COL_DEFAULT,\r\n ERROR_LIMIT,\r\n} from '../table-config'\r\nimport { getRelativeRect } from '../utils'\r\nimport Header from './header'\r\nimport ListItem, { ListContainer } from './list'\r\n\r\nconst Break = Quill.imports['blots/break']\r\nconst Block = Quill.imports['blots/block']\r\nconst Container = Quill.imports['blots/container']\r\n\r\n// @dynamic\r\nclass TableCellLine extends Block {\r\n static requiredContainer: any\r\n static tagName: string\r\n static className: string\r\n static blotName: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n parent: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n\r\n // fix: when td has background-color, quill can't set it to table-cell blot\r\n if (value.tdBgColor) {\r\n node.setAttribute(`data-parent-bg`, value.tdBgColor)\r\n delete value.tdBgColor\r\n }\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n const identityMaker = key === 'row' ? rowId : cellId\r\n node.setAttribute(`data-${key}`, value[key] || identityMaker())\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n const keyValue = value[attrName] || CELL_DEFAULT[attrName]\r\n keyValue && node.setAttribute(`data-${attrName}`, keyValue)\r\n })\r\n\r\n if (value.height) {\r\n node.setAttribute('height', value.height)\r\n }\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {}\r\n if (formats.list) {\r\n formats.list = domNode.classList.item(0)\r\n }\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format && child.format(name, value)\r\n if (!child.domNode.style) {\r\n return\r\n }\r\n if (child.domNode.tagName === 'SPAN' && value) {\r\n child.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n child.domNode.style.backgroundColor = 'initial'\r\n }\r\n })\r\n }\r\n\r\n format(name, value) {\r\n if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, 'parent-bg'].includes(name)) {\r\n if (value) {\r\n this.domNode.setAttribute(`data-${name}`, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(`data-${name}`)\r\n }\r\n }\r\n else if (name === 'header') {\r\n if (!value) {\r\n return\r\n }\r\n const { row, cell, rowspan, colspan }: any = TableCellLine.formats(this.domNode)\r\n super.format(name, {\r\n value,\r\n row,\r\n cell,\r\n rowspan,\r\n colspan,\r\n })\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n switch (true) {\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n\r\n // cover shadowBlot's wrap call, pass params parentBlot initialize\r\n // needed\r\n const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset\r\n const formats: Record<string, any> = TableCellLine.formats(this.domNode)\r\n const parentFormats = this.parent.formats()\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg })\r\n }\r\n else if (!compare(formats, parentFormats)) {\r\n this.parent.format('row', formats.row)\r\n this.parent.format('cell', formats.cell)\r\n this.parent.format('rowspan', formats.rowspan)\r\n this.parent.format('colspan', formats.colspan)\r\n formats['cell-bg'] && this.parent.setCellBg(formats['cell-bg'])\r\n }\r\n\r\n const parentHeight = this.domNode.getAttribute('height')\r\n if (parentHeight) {\r\n this.parent.domNode.style.height = parentHeight\r\n }\r\n }\r\n\r\n tableCell() {\r\n return this.parent\r\n }\r\n}\r\nTableCellLine.blotName = 'table-cell-line'\r\nTableCellLine.className = 'qlbt-cell-line'\r\nTableCellLine.tagName = 'DIV'\r\n\r\n// @dynamic\r\nclass TableCell extends Container {\r\n static allowedChildren: any\r\n static blotName: any\r\n static requiredContainer: any\r\n static tagName: string\r\n next: any\r\n children: any\r\n parent: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n prev: any\r\n scroll: any\r\n\r\n static create(value = { row: rowId() }) {\r\n const node = super.create(value)\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n node.setAttribute(`data-${key}`, value[key])\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n if (value[attrName]) {\r\n node.setAttribute(attrName, value[attrName])\r\n }\r\n })\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {\r\n height: undefined,\r\n row: undefined,\r\n }\r\n\r\n formats.height = domNode.getAttribute('height') || undefined\r\n\r\n if (domNode.hasAttribute('data-row')) {\r\n formats.row = domNode.getAttribute('data-row')\r\n }\r\n\r\n if (domNode.hasAttribute('data-cell-bg')) {\r\n formats['cell-bg'] = domNode.getAttribute('data-cell-bg') || undefined\r\n }\r\n return CELL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(attribute)) {\r\n formats[attribute] = domNode.getAttribute(attribute)\r\n }\r\n\r\n return formats\r\n }, formats)\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const getCellId = (node) => {\r\n return (\r\n (node.formats && node.formats()[node.statics.blotName]) || {\r\n cell: node.domNode.getAttribute('data-cell'),\r\n }\r\n )\r\n }\r\n const thisHead = getCellId(this.children.head)\r\n const thisTail = getCellId(this.children.tail)\r\n const nextHead = getCellId(this.next.children.head)\r\n const nextTail = getCellId(this.next.children.tail)\r\n return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell\r\n }\r\n return false\r\n }\r\n\r\n cellOffset() {\r\n if (this.parent) {\r\n return this.parent.children.indexOf(this)\r\n }\r\n return -1\r\n }\r\n\r\n formats() {\r\n const formats = {}\r\n\r\n if (this.domNode.hasAttribute('data-row')) {\r\n formats.row = this.domNode.getAttribute('data-row')\r\n }\r\n if (this.domNode.hasAttribute('data-cell')) {\r\n formats.cell = this.domNode.getAttribute('data-cell')\r\n }\r\n\r\n return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {\r\n if (this.domNode.hasAttribute(attribute)) {\r\n tableFormats[attribute] = this.domNode.getAttribute(attribute)\r\n }\r\n\r\n return tableFormats\r\n }, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format(name, value)\r\n })\r\n }\r\n\r\n /**\r\n * this method is for TableCellLine to change cell background color\r\n * if use `format('cell-bg', value)` will loop trigger\r\n * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...\r\n */\r\n setCellBg(value?: string) {\r\n if (value) {\r\n this.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n this.domNode.style.backgroundColor = 'initial'\r\n }\r\n }\r\n\r\n format(name, value) {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n switch (true) {\r\n case CELL_ATTRIBUTES.includes(name):\r\n this.toggleAttribute(name, value)\r\n break\r\n case ['row', 'cell'].includes(name):\r\n this.toggleAttribute(`data-${name}`, value)\r\n break\r\n case name === 'background': {\r\n const hasBgColor = this.domNode.querySelectorAll('div.qlbt-cell-line[data-parent-bg]')\r\n hasBgColor.forEach(child => child.removeAttribute('data-parent-bg'))\r\n this.domNode.style.background = ''\r\n this.domNode.style.backgroundColor = value\r\n this.children.head.format('parent-bg', value)\r\n break\r\n }\r\n // TODO: 其他格式可同理实现,但已有格式清除时会清除所有格式,待解决\r\n case name === 'size': {\r\n const start = quill.getIndex(this.children.head)\r\n const total = quill.getIndex(this.children.tail) + this.children.tail.length()\r\n const length = total - start > 0 ? total - start : 0\r\n quill.setSelection(start, length, Quill.sources.USER)\r\n quill.format(name, value, Quill.sources.USER)\r\n // 设置选区后需清除选区,否则会固定处理选区内容\r\n quill.setSelection(start)\r\n break\r\n }\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n this.toggleAttribute('data-parent-bg', value)\r\n this.formatChildren(name, value)\r\n this.setCellBg(value)\r\n break\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n // fix: when td has background-color, quill can't set it to table-cell bolt\r\n const hasBg: any = Array.from(this.domNode.childNodes).find((item: any) => item.getAttribute('data-parent-bg'))\r\n const bgColor = hasBg && hasBg.getAttribute('data-parent-bg')\r\n if (bgColor && bgColor !== this.domNode.style.backgroundColor) {\r\n this.domNode.style.backgroundColor = bgColor\r\n }\r\n\r\n const rId = this.domNode.getAttribute('data-row')\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, {\r\n row: rId,\r\n })\r\n }\r\n else if (rId !== this.parent.formats().row) {\r\n this.parent.format('row', rId)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats: any = this.getFormat(child.domNode)\r\n const nextFormats: any = this.getFormat(child.next.domNode)\r\n if (childFormats.cell !== nextFormats.cell) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n // We might be able to merge with prev now\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n // 兼容读取TableCell中的子blot,包括table-cell-line、line、head\r\n getFormat(domNode) {\r\n const formats = {}\r\n const firstChild = domNode.childNodes[0]\r\n if (firstChild && domNode.tagName === 'OL') {\r\n formats.list = firstChild.classList.item(0)\r\n }\r\n\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n row() {\r\n return this.parent\r\n }\r\n\r\n rowOffset() {\r\n if (this.row()) {\r\n return -1\r\n }\r\n return this.row().rowOffset()\r\n }\r\n\r\n table() {\r\n return this.row() && this.row().table()\r\n }\r\n}\r\nTableCell.blotName = 'table'\r\nTableCell.tagName = 'TD'\r\n\r\n// @dynamic\r\nclass TableRow extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n next: any\r\n children: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n enforceAllowedChildren: any\r\n uiNode: any\r\n parent: any\r\n prev: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n if (value.row) {\r\n node.setAttribute('data-row', value.row)\r\n }\r\n return node\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const thisHead = this.children.head.formats()\r\n const thisTail = this.children.tail.formats()\r\n const nextHead = this.next.children.head.formats()\r\n const nextTail = this.next.children.tail.formats()\r\n\r\n return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row\r\n }\r\n return false\r\n }\r\n\r\n formats() {\r\n return ['row'].reduce((formats, attrName) => {\r\n if (this.domNode.hasAttribute(`data-${attrName}`)) {\r\n formats[attrName] = this.domNode.getAttribute(`data-${attrName}`)\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(key, value) {\r\n this.domNode.setAttribute(`data-${key}`, value)\r\n }\r\n\r\n optimize(context) {\r\n // optimize function of ShadowBlot\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats = child.formats()\r\n const nextFormats = child.next.formats()\r\n if (childFormats.row !== nextFormats.row) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n rowOffset() {\r\n if (!this.parent) {\r\n return -1\r\n }\r\n return this.parent.children.indexOf(this)\r\n }\r\n\r\n table() {\r\n return this.parent && this.parent.parent\r\n }\r\n}\r\nTableRow.blotName = 'table-row'\r\nTableRow.tagName = 'TR'\r\n\r\n// @dynamic\r\nclass TableBody extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n}\r\nTableBody.blotName = 'table-body'\r\nTableBody.tagName = 'TBODY'\r\n\r\n// @dynamic\r\nclass TableCol extends Block {\r\n static requiredContainer: any\r\n static blotName: string\r\n static tagName: string\r\n domNode: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n COL_ATTRIBUTES.forEach((attrName) => {\r\n node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName])\r\n })\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n return COL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(`${attribute}`)) {\r\n formats[attribute] = domNode.getAttribute(`${attribute}`) || undefined\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(name, value) {\r\n if (COL_ATTRIBUTES.includes(name)) {\r\n this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name])\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n }\r\n\r\n html() {\r\n return this.domNode.outerHTML\r\n }\r\n}\r\nTableCol.blotName = 'table-col'\r\nTableCol.tagName = 'col'\r\n\r\n// @dynamic\r\nclass TableColGroup extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n parent: any\r\n statics: any\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n // optimize 是当前slot更新后调用的callback方法,当TableBody更新后判断父容器的存在和类型相符则调用更新表格宽度方法更新宽度\r\n // 切记不要在当前slot内调用能改变当前slot的方法,会造成无限循环,一般通过子更新改变父较好\r\n if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {\r\n this.parent.updateTableWidth()\r\n }\r\n // 此时colgroup创建完毕,检查colgroup的col数量是否正确\r\n // fix:colgroup的col数量不正确导致最后一列宽度为空\r\n if (this.parent.parent.domNode.className === 'quill-better-table-wrapper'\r\n && this.parent.parent.domNode.tagName === 'DIV'\r\n && this.parent.domNode.children.length >= 2\r\n && this.parent.domNode.children[0].tagName === 'COLGROUP'\r\n && this.parent.domNode.children[1].tagName === 'TBODY'\r\n ) {\r\n let trId = ''\r\n let colSpan = 0\r\n let colgroupNumber = 0\r\n for (let i = 0; i < this.parent.domNode.children.length; i++) {\r\n if (this.parent.domNode.children[i].tagName === 'TBODY') {\r\n if (trId === '') {\r\n trId = this.parent.domNode.children[i].children[0].getAttribute('data-row')\r\n }\r\n colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId)\r\n }\r\n else if (this.parent.domNode.children[i].tagName === 'COLGROUP') {\r\n colgroupNumber = this.parent.domNode.children[i].children.length\r\n }\r\n }\r\n let elementSibling = this.parent.domNode.nextElementSibling\r\n\r\n while (elementSibling && elementSibling.tagName === 'TABLE') {\r\n for (let i = 0; i < elementSibling.children.length; i++) {\r\n if (elementSibling.children[i].tagName === 'TBODY') {\r\n colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId)\r\n }\r\n }\r\n elementSibling = elementSibling.nextElementSibling\r\n }\r\n\r\n if (colgroupNumber < colSpan) {\r\n const length = colSpan - colgroupNumber\r\n\r\n for (let i = 0; i < length; i++) {\r\n const newCol = document.createElement('col')\r\n newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width\r\n const newBr = document.createElement('br')\r\n newCol.appendChild(newBr)\r\n this.parent.domNode.children[0].appendChild(newCol)\r\n this.parent.domNode.style.width += newCol.width\r\n }\r\n }\r\n }\r\n }\r\n\r\n // this.parent.domNode.children[1].children[0].children[0].colSpan\r\n findTdColspanInTbody(tbody, trId) {\r\n let colSpan = 0\r\n // let tbodyChildrenLength\r\n for (let i = 0; i < tbody.children.length; i++) {\r\n if (tbody.children[i].getAttribute('data-row') !== trId) {\r\n return colSpan\r\n }\r\n for (let j = 0; j < tbody.children[i].children.length; j++) {\r\n if (tbody.children[i].children[j].colSpan) {\r\n colSpan += tbody.children[i].children[j].colSpan\r\n }\r\n }\r\n }\r\n return colSpan\r\n }\r\n}\r\nTableColGroup.blotName = 'table-col-group'\r\nTableColGroup.tagName = 'colgroup'\r\n\r\n// @dynamic\r\nclass TableContainer extends Container {\r\n static blotName: string\r\n static className: string\r\n static tagName: string\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n domNode: any\r\n parent: any\r\n children: any\r\n descendants: any\r\n scroll: any\r\n remove: any\r\n static create() {\r\n const node = super.create()\r\n return node\r\n }\r\n\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n domNode.setAttribute('contenteditable', false)\r\n this.updateTableWidth()\r\n }\r\n\r\n updateTableWidth() {\r\n let colGroup = this.colGroup()\r\n if (!colGroup) {\r\n // undo时原表格dom被移除,因此colGroup和domNode都不对应当前新表格,需从父容器dom树重新获取\r\n // 如果表格有style属性则不为新添加表格,避免错误赋值\r\n if (this.parent && this.parent.children.head && this.domNode.hasAttribute('style')) {\r\n colGroup = this.parent.children.head.children.head\r\n this.domNode = this.parent.children.head.domNode\r\n }\r\n else if (this.domNode.tagName === 'TABLE') {\r\n // this.domNode.forEach\r\n return\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n const tableWidth = colGroup.children.reduce((sumWidth, col) => {\r\n // 兼容 table-col 不存在的情况\r\n const tableCol = col.formats()[TableCol.blotName]\r\n let tableColWidth = COL_DEFAULT.width\r\n if (tableCol && tableCol.width) {\r\n tableColWidth = Number.parseInt(tableCol.width, 10)\r\n }\r\n sumWidth = sumWidth + tableColWidth\r\n return sumWidth\r\n }, 0)\r\n this.domNode.removeAttribute('style')\r\n this.domNode.style.width = `${tableWidth}px`\r\n // 当表格加载结束后修正width设定为auto的列宽度\r\n if (colGroup.next) {\r\n setTimeout(() => {\r\n let tdIndex = 0\r\n let maxTds\r\n const colNum = colGroup.children.length\r\n const tableRows = this.descendants(TableRow)\r\n // 查询单元格数等于列数的行作为宽度赋值依据\r\n for (let i = 0; i < tableRows.length; i++) {\r\n const tds = tableRows[i].domNode.querySelectorAll('td')\r\n if (tds.length === colNum) {\r\n maxTds = tds\r\n break\r\n }\r\n }\r\n colGroup.children.forEach((col) => {\r\n if (maxTds && col.domNode.width === 'auto') {\r\n const width = getComputedStyle(maxTds[tdIndex]).width\r\n const num = Number.parseInt(width, 10)\r\n col.domNode.width = (num < COL_DEFAULT.width && COL_DEFAULT.width) || num\r\n }\r\n tdIndex++\r\n })\r\n })\r\n }\r\n }\r\n\r\n cells(column) {\r\n return this.rows().map(row => row.children.at(column))\r\n }\r\n\r\n colGroup() {\r\n return this.children.head\r\n }\r\n\r\n deleteColumns(compareRect, delIndexes = [], editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const removedCells = []\r\n const modifiedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return true\r\n }\r\n\r\n // remove the matches column tool cell\r\n delIndexes.forEach(() => {\r\n const col = this.colGroup().children.at(delIndexes[0])\r\n if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {\r\n this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]])\r\n }\r\n else {\r\n col.remove()\r\n }\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = Number.parseInt(cell.formats().colspan, 10)\r\n // const cellWidth = parseInt(cell.formats().width, 10);\r\n cell.format('colspan', cellColspan - delIndexes.length)\r\n })\r\n\r\n this.updateTableWidth()\r\n }\r\n\r\n deleteRow(compareRect, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const tableRows = this.descendants(TableRow)\r\n const removedCells = [] // cells to be removed\r\n const modifiedCells = [] // cells to be modified\r\n const fallCells = [] // cells to fall into next row\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n fallCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return\r\n }\r\n\r\n // compute length of removed rows\r\n const removedRowsLength = this.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // it must execute before the table layout changed with other operation\r\n fallCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n const nextRow = cell.parent.next\r\n const cellsInNextRow = nextRow.children\r\n\r\n const refCell = cellsInNextRow.reduce((ref, compareCell) => {\r\n const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {\r\n ref = compareCell\r\n }\r\n return ref\r\n }, null)\r\n\r\n nextRow.insertBefore(cell, refCell)\r\n const curRowId = nextRow.formats().row\r\n cell.format('row', curRowId)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('row', curRowId)\r\n })\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\r\n const curRowspan = cellRowspan - removedRowsLength\r\n cell.domNode.removeAttribute('style')\r\n cell.format('rowspan', curRowspan)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('rowspan', curRowspan)\r\n })\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n // fix: There will be a empty tr left if i delete the last row of a table,\r\n // this will cause the bottom border of the table to disappear,\r\n // and the empty tr will execute the matchTableRow method.\r\n tableRows.forEach((row) => {\r\n if (row.children.length === 0) {\r\n row.remove()\r\n }\r\n })\r\n }\r\n\r\n tableDestroy() {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n const tableModule = quill.getModule('better-table')\r\n this.remove()\r\n tableModule.hideTableTools()\r\n quill.update(Quill.sources.USER)\r\n }\r\n\r\n insertCell(tableRow, ref, bg = '') {\r\n const id = cellId()\r\n const rId = tableRow.formats().row\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId },\r\n )\r\n tableCell.domNode.style.backgroundColor = bg\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n }\r\n\r\n insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n const [tableColGroup] = this.descendants(TableColGroup)\r\n const tableCols = this.descendants(TableCol)\r\n const addAsideCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n const tableCells = this.descendants(TableCell)\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isRight) {\r\n if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {\r\n // the right of selected boundary equal to the right of table cell,\r\n // add a new table cell right aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {\r\n // the right of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {\r\n // left of selected boundary equal to left of table cell,\r\n // add a new table cell left aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {\r\n // the left of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n addAsideCells.forEach((cell) => {\r\n const ref = isRight ? cell.next : cell\r\n const id = cellId()\r\n const tableRow = cell.parent\r\n const rId = tableRow.formats().row\r\n const cellFormats = cell.formats()\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId, rowspan: cellFormats.rowspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n rowspan: cellFormats.rowspan,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n // insert new tableCol\r\n const tableCol = this.scroll.create(TableCol.blotName, true)\r\n let colRef\r\n if (isRight) {\r\n colRef = tableCols[colIndex] && tableCols[colIndex].next\r\n }\r\n else {\r\n colRef = tableCols[colIndex]\r\n }\r\n\r\n if (colRef) {\r\n tableColGroup.insertBefore(tableCol, colRef)\r\n }\r\n else {\r\n tableColGroup.appendChild(tableCol)\r\n }\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = cell.formats().colspan\r\n cell.format('colspan', Number.parseInt(cellColspan, 10) + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n affectedCells.sort((cellA, cellB) => {\r\n const y1 = cellA.domNode.getBoundingClientRect().y\r\n const y2 = cellB.domNode.getBoundingClientRect().y\r\n return y1 - y2\r\n })\r\n\r\n this.updateTableWidth()\r\n return affectedCells\r\n }\r\n\r\n insertRow(compareRect, isDown, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const rId = rowId()\r\n const newRow = this.scroll.create(TableRow.blotName, {\r\n row: rId,\r\n })\r\n const addBelowCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isDown) {\r\n if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n // ordered table cells with rect.x, fix error for inserting\r\n // new table cell in complicated table with wrong order.\r\n const sortFunc = (cellA, cellB) => {\r\n const x1 = cellA.domNode.getBoundingClientRect().x\r\n const x2 = cellB.domNode.getBoundingClientRect().x\r\n return x1 - x2\r\n }\r\n addBelowCells.sort(sortFunc)\r\n\r\n addBelowCells.forEach((cell) => {\r\n const cId = cellId()\r\n const cellFormats = cell.formats()\r\n\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: cId,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n tableCell.appendChild(cellLine)\r\n newRow.appendChild(tableCell)\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\r\n cell.format('rowspan', cellRowspan + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n const refRow = this.rows().find((row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n if (isDown) {\r\n return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT\r\n }\r\n else {\r\n return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT\r\n }\r\n })\r\n body.insertBefore(newRow, refRow)\r\n\r\n // reordering affectedCells\r\n affectedCells.sort(sortFunc)\r\n return affectedCells\r\n }\r\n\r\n mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {\r\n const mergedCell = mergingCells.reduce((result, tableCell, index) => {\r\n if (index !== 0) {\r\n if (result) {\r\n tableCell.moveChildren(result)\r\n }\r\n tableCell.remove()\r\n }\r\n else {\r\n tableCell.format('colspan', colspan)\r\n tableCell.format('rowspan', rowspan)\r\n result = tableCell\r\n if (rowspan > 1) {\r\n // fix: 比较当前单元格高度样式与rowspan最小高度,小于则设置高度,不判断实际高度,因为合并时这一刻实际高度可能高于最小高度\r\n const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1\r\n const cellHeight = Number.parseInt(tableCell.domNode.style.height, 10) || 0\r\n if (cellHeight < minHeight) {\r\n tableCell.domNode.style.height = `${minHeight}px`\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }, null)\r\n\r\n const rId = mergedCell.domNode.getAttribute('data-row')\r\n const cId = mergedCell.children.head.domNode.getAttribute('data-cell')\r\n mergedCell.children.forEach((cellLine) => {\r\n cellLine.domNode.setAttribute('data-parent-bg', mergedCell.domNode.style.backgroundColor)\r\n if (cellLine.children.head.domNode.style) {\r\n cellLine.children.head.domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor\r\n }\r\n\r\n if (!cellLine.prev || cellLine.domNode.textContent.trim()) {\r\n cellLine.format('cell', cId)\r\n cellLine.format('row', rId)\r\n cellLine.format('colspan', colspan)\r\n cellLine.format('rowspan', rowspan)\r\n }\r\n else {\r\n cellLine.remove()\r\n }\r\n })\r\n\r\n return mergedCell\r\n }\r\n\r\n unmergeCells(unmergingCells, editorWrapper) {\r\n let cellFormats: any = {}\r\n let cellRowspan = 1\r\n let cellColspan = 1\r\n\r\n unmergingCells.forEach((tableCell) => {\r\n const tableCellBgColor = tableCell.domNode.style.backgroundColor\r\n cellFormats = tableCell.formats()\r\n cellRowspan = cellFormats.rowspan\r\n cellColspan = cellFormats.colspan\r\n\r\n if (cellColspan > 1) {\r\n const ref = tableCell.next\r\n const row = tableCell.row()\r\n tableCell.format('colspan', 1)\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-colspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-colspan', 1)\r\n }\r\n for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {\r\n this.insertCell(row, ref, tableCellBgColor)\r\n }\r\n }\r\n\r\n if (cellRowspan > 1) {\r\n let rowspanIndex = cellRowspan\r\n let nextRow = tableCell.row().next\r\n while (rowspanIndex > 1) {\r\n const refInNextRow = nextRow.children.reduce((result, cell) => {\r\n const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper)\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {\r\n result = cell\r\n }\r\n return result\r\n }, null)\r\n\r\n for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {\r\n this.insertCell(nextRow, refInNextRow, tableCellBgColor)\r\n }\r\n\r\n rowspanIndex -= 1\r\n nextRow = nextRow.next\r\n }\r\n\r\n tableCell.domNode.removeAttribute('style')\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-rowspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-rowspan', 1)\r\n }\r\n tableCell.format('rowspan', 1)\r\n }\r\n })\r\n }\r\n\r\n emptyCells(selectedTds) {\r\n selectedTds.forEach((selectedTd) => {\r\n // 构造空的table cell line, 优先使用单元格已有rowId和cellId,避免从table-cell-line向上层td提交id时不一致导致错位\r\n const cellFormats = selectedTd.formats()\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: cellFormats.row || rowId(),\r\n cell: cellFormats.cell || cellId(),\r\n rowspan: cellFormats.rowspan,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n\r\n selectedTd.domNode.innerHTML = ''\r\n selectedTd.appendChild(cellLine)\r\n })\r\n }\r\n\r\n rows() {\r\n const body = this.children.tail\r\n if (isNullOrUndefined(body)) {\r\n return []\r\n }\r\n return body.children.map(row => row)\r\n }\r\n}\r\nTableContainer.blotName = 'ql-table-container'\r\nTableContainer.className = 'quill-better-table'\r\nTableContainer.tagName = 'TABLE'\r\n\r\n// @dynamic\r\nclass TableViewWrapper extends Container {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n static allowedChildren: any\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n // fix: 只读模式时超长表格默认包含滚动条\r\n if (quill.options.readOnly) {\r\n domNode.style.overflow = 'auto'\r\n }\r\n domNode.addEventListener(\r\n 'scroll',\r\n (e) => {\r\n const tableModule = quill.getModule('better-table')\r\n if (tableModule.columnTool) {\r\n tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft\r\n }\r\n\r\n if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {\r\n tableModule.tableSelection.repositionHelpLines()\r\n }\r\n },\r\n false,\r\n )\r\n }\r\n}\r\nTableViewWrapper.blotName = 'table-view'\r\nTableViewWrapper.className = 'quill-better-table-wrapper'\r\nTableViewWrapper.tagName = 'DIV'\r\n\r\nTableViewWrapper.allowedChildren = [TableContainer]\r\nTableContainer.requiredContainer = TableViewWrapper\r\n\r\nTableContainer.allowedChildren = [TableBody, TableColGroup]\r\nTableBody.requiredContainer = TableContainer\r\n\r\nTableBody.allowedChildren = [TableRow]\r\nTableRow.requiredContainer = TableBody\r\n\r\nTableRow.allowedChildren = [TableCell]\r\nTableCell.requiredContainer = TableRow\r\n\r\nTableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer]\r\nTableCellLine.requiredContainer = TableCell\r\n\r\nTableColGroup.allowedChildren = [TableCol]\r\nTableColGroup.requiredContainer = TableContainer\r\n\r\nTableCol.requiredContainer = TableColGroup\r\n\r\nfunction rowId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `row-${id}`\r\n}\r\n\r\nfunction cellId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `cell-${id}`\r\n}\r\n\r\nfunction reduceFormats(domNode: HTMLElement, formats: Record<string, any>) {\r\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\r\n if (domNode.hasAttribute(`data-${attribute}`)) {\r\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\r\n }\r\n return tableFormats\r\n }, formats)\r\n}\r\n\r\nexport {\r\n CELL_ATTRIBUTES,\r\n CELL_IDENTITY_KEYS,\r\n cellId,\r\n rowId,\r\n TableBody,\r\n TableCell,\r\n TableCellLine,\r\n TableCol,\r\n TableColGroup,\r\n TableContainer,\r\n TableRow,\r\n TableViewWrapper,\r\n}\r\n"],"names":["CELL_IDENTITY_KEYS","CELL_ATTRIBUTES","CELL_DEFAULT","compare","formats","isNullOrUndefined","COL_ATTRIBUTES","COL_DEFAULT","getRelativeRect","ERROR_LIMIT","index","CELL_MIN_HEIGHT","Header","ListItem","ListContainer"],"mappings":";;;;;;;;;AAgBA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AACzC,MAAM,QAAQ,MAAM,QAAQ,aAAa;AACzC,MAAM,YAAY,MAAM,QAAQ,iBAAiB;AAGjD,MAAM,sBAAsB,MAAM;AAAA,EAUhC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAG/B,QAAI,MAAM,WAAW;AACd,WAAA,aAAa,kBAAkB,MAAM,SAAS;AACnD,aAAO,MAAM;AAAA,IAAA;AAGIA,mCAAA,QAAQ,CAAC,QAAQ;AAC5B,YAAA,gBAAgB,QAAQ,QAAQ,QAAQ;AACzC,WAAA,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,KAAK,eAAe;AAAA,IAAA,CAC/D;AAEeC,gCAAA,QAAQ,CAAC,aAAa;AACpC,YAAM,WAAW,MAAM,QAAQ,KAAKC,YAAAA,aAAa,QAAQ;AACzD,kBAAY,KAAK,aAAa,QAAQ,QAAQ,IAAI,QAAQ;AAAA,IAAA,CAC3D;AAED,QAAI,MAAM,QAAQ;AACX,WAAA,aAAa,UAAU,MAAM,MAAM;AAAA,IAAA;AAGnC,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAS;AACtB,UAAM,UAAU,CAAC;AACjB,QAAI,QAAQ,MAAM;AAChB,cAAQ,OAAO,QAAQ,UAAU,KAAK,CAAC;AAAA,IAAA;AAElC,WAAA,cAAc,SAAS,OAAO;AAAA,EAAA;AAAA,EAGvC,gBAAgB,MAAM,OAAO;AAC3B,QAAI,OAAO;AACJ,WAAA,QAAQ,aAAa,MAAM,KAAK;AAAA,IAAA,OAElC;AACE,WAAA,QAAQ,gBAAgB,IAAI;AAAA,IAAA;AAAA,EACnC;AAAA,EAGF,eAAe,MAAM,OAAO;AACrB,SAAA,SAAS,QAAQ,CAAC,UAAU;AAC/B,YAAM,UAAU,MAAM,OAAO,MAAM,KAAK;AACpC,UAAA,CAAC,MAAM,QAAQ,OAAO;AACxB;AAAA,MAAA;AAEF,UAAI,MAAM,QAAQ,YAAY,UAAU,OAAO;AACvC,cAAA,QAAQ,MAAM,kBAAkB;AAAA,MAAA,OAEnC;AACG,cAAA,QAAQ,MAAM,kBAAkB;AAAA,MAAA;AAAA,IACxC,CACD;AAAA,EAAA;AAAA,EAGH,OAAO,MAAM,OAAO;AACd,QAAA,CAAC,GAAGD,YAAAA,iBAAiB,GAAGD,YAAAA,oBAAoB,WAAW,EAAE,SAAS,IAAI,GAAG;AAC3E,UAAI,OAAO;AACT,aAAK,QAAQ,aAAa,QAAQ,IAAI,IAAI,KAAK;AAAA,MAAA,OAE5C;AACH,aAAK,QAAQ,gBAAgB,QAAQ,IAAI,EAAE;AAAA,MAAA;AAAA,IAC7C,WAEO,SAAS,UAAU;AAC1B,UAAI,CAAC,OAAO;AACV;AAAA,MAAA;AAEI,YAAA,EAAE,KAAK,MAAM,SAAS,QAAiB,IAAA,cAAc,QAAQ,KAAK,OAAO;AAC/E,YAAM,OAAO,MAAM;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA,OAEE;AACG,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA;AAE1B,YAAQ,MAAM;AAAA,MACZ,KAAK,SAAS,WAAW;AAClB,aAAA,gBAAgB,gBAAgB,KAAK;AAAA,MAAA;AAAA,IAC5C;AAAA,EACF;AAAA,EAGF,SAAS,SAAS;AAChB,UAAM,SAAS,OAAO;AAIhB,UAAA,EAAE,KAAK,MAAM,SAAS,SAAS,OAAO,IAAI,KAAK,QAAQ;AAC7D,UAAM,UAA+B,cAAc,QAAQ,KAAK,OAAO;AACjE,UAAA,gBAAgB,KAAK,OAAO,QAAQ;AACtC,QAAA,KAAK,QAAQ,qBAAqB,EAAE,KAAK,kBAAkB,KAAK,QAAQ,oBAAoB;AACzF,WAAA,KAAK,KAAK,QAAQ,kBAAkB,UAAU,EAAE,KAAK,MAAM,SAAS,SAAS,OAAA,CAAQ;AAAA,IAEnF,WAAA,CAACG,OAAAA,QAAQ,SAAS,aAAa,GAAG;AACzC,WAAK,OAAO,OAAO,OAAO,QAAQ,GAAG;AACrC,WAAK,OAAO,OAAO,QAAQ,QAAQ,IAAI;AACvC,WAAK,OAAO,OAAO,WAAW,QAAQ,OAAO;AAC7C,WAAK,OAAO,OAAO,WAAW,QAAQ,OAAO;AAC7C,cAAQ,SAAS,KAAK,KAAK,OAAO,UAAU,QAAQ,SAAS,CAAC;AAAA,IAAA;AAGhE,UAAM,eAAe,KAAK,QAAQ,aAAa,QAAQ;AACvD,QAAI,cAAc;AACX,WAAA,OAAO,QAAQ,MAAM,SAAS;AAAA,IAAA;AAAA,EACrC;AAAA,EAGF,YAAY;AACV,WAAO,KAAK;AAAA,EAAA;AAEhB;AACA,cAAc,WAAW;AACzB,cAAc,YAAY;AAC1B,cAAc,UAAU;AAGxB,MAAM,kBAAkB,UAAU;AAAA,EAehC,OAAO,OAAO,QAAQ,EAAE,KAAK,WAAW;AAChC,UAAA,OAAO,MAAM,OAAO,KAAK;AAEZH,mCAAA,QAAQ,CAAC,QAAQ;AAClC,WAAK,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,IAAA,CAC5C;AAEeC,gCAAA,QAAQ,CAAC,aAAa;AAChC,UAAA,MAAM,QAAQ,GAAG;AACnB,aAAK,aAAa,UAAU,MAAM,QAAQ,CAAC;AAAA,MAAA;AAAA,IAC7C,CACD;AAEM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAS;AACtB,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAEA,YAAQ,SAAS,QAAQ,aAAa,QAAQ,KAAK;AAE/C,QAAA,QAAQ,aAAa,UAAU,GAAG;AAC5B,cAAA,MAAM,QAAQ,aAAa,UAAU;AAAA,IAAA;AAG3C,QAAA,QAAQ,aAAa,cAAc,GAAG;AACxC,cAAQ,SAAS,IAAI,QAAQ,aAAa,cAAc,KAAK;AAAA,IAAA;AAE/D,WAAOA,4BAAgB,OAAO,CAACG,UAAS,cAAc;AAChD,UAAA,QAAQ,aAAa,SAAS,GAAG;AACnCA,iBAAQ,SAAS,IAAI,QAAQ,aAAa,SAAS;AAAA,MAAA;AAG9CA,aAAAA;AAAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAGZ,aAAa;AACP,QAAA,MAAM,gBAAgB,CAACC,aAAAA,kBAAkB,KAAK,KAAK,SAAS,IAAI,GAAG;AAC/D,YAAA,YAAY,CAAC,SAAS;AAEvB,eAAA,KAAK,WAAW,KAAK,UAAU,KAAK,QAAQ,QAAQ,KAAM;AAAA,UACzD,MAAM,KAAK,QAAQ,aAAa,WAAW;AAAA,QAC7C;AAAA,MAEJ;AACA,YAAM,WAAW,UAAU,KAAK,SAAS,IAAI;AAC7C,YAAM,WAAW,UAAU,KAAK,SAAS,IAAI;AAC7C,YAAM,WAAW,UAAU,KAAK,KAAK,SAAS,IAAI;AAClD,YAAM,WAAW,UAAU,KAAK,KAAK,SAAS,IAAI;AAC3C,aAAA,SAAS,SAAS,SAAS,QAAQ,SAAS,SAAS,SAAS,QAAQ,SAAS,SAAS,SAAS;AAAA,IAAA;AAEnG,WAAA;AAAA,EAAA;AAAA,EAGT,aAAa;AACX,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK,OAAO,SAAS,QAAQ,IAAI;AAAA,IAAA;AAEnC,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU;AACR,UAAM,UAAU,CAAC;AAEjB,QAAI,KAAK,QAAQ,aAAa,UAAU,GAAG;AACzC,cAAQ,MAAM,KAAK,QAAQ,aAAa,UAAU;AAAA,IAAA;AAEpD,QAAI,KAAK,QAAQ,aAAa,WAAW,GAAG;AAC1C,cAAQ,OAAO,KAAK,QAAQ,aAAa,WAAW;AAAA,IAAA;AAGtD,WAAOJ,4BAAgB,OAAO,CAAC,cAAc,cAAc;AACzD,UAAI,KAAK,QAAQ,aAAa,SAAS,GAAG;AACxC,qBAAa,SAAS,IAAI,KAAK,QAAQ,aAAa,SAAS;AAAA,MAAA;AAGxD,aAAA;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAGZ,gBAAgB,MAAM,OAAO;AAC3B,QAAI,OAAO;AACJ,WAAA,QAAQ,aAAa,MAAM,KAAK;AAAA,IAAA,OAElC;AACE,WAAA,QAAQ,gBAAgB,IAAI;AAAA,IAAA;AAAA,EACnC;AAAA,EAGF,eAAe,MAAM,OAAO;AACrB,SAAA,SAAS,QAAQ,CAAC,UAAU;AACzB,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA,CACzB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQH,UAAU,OAAgB;AACxB,QAAI,OAAO;AACJ,WAAA,QAAQ,MAAM,kBAAkB;AAAA,IAAA,OAElC;AACE,WAAA,QAAQ,MAAM,kBAAkB;AAAA,IAAA;AAAA,EACvC;AAAA,EAGF,OAAO,MAAM,OAAO;AAClB,UAAM,QAAQ,MAAM,KAAK,KAAK,OAAO,QAAQ,UAAU;AACvD,YAAQ,MAAM;AAAA,MACZ,KAAKA,YAAgB,gBAAA,SAAS,IAAI;AAC3B,aAAA,gBAAgB,MAAM,KAAK;AAChC;AAAA,MACF,KAAK,CAAC,OAAO,MAAM,EAAE,SAAS,IAAI;AAChC,aAAK,gBAAgB,QAAQ,IAAI,IAAI,KAAK;AAC1C;AAAA,MACF,KAAK,SAAS,cAAc;AAC1B,cAAM,aAAa,KAAK,QAAQ,iBAAiB,oCAAoC;AACrF,mBAAW,QAAQ,CAAA,UAAS,MAAM,gBAAgB,gBAAgB,CAAC;AAC9D,aAAA,QAAQ,MAAM,aAAa;AAC3B,aAAA,QAAQ,MAAM,kBAAkB;AACrC,aAAK,SAAS,KAAK,OAAO,aAAa,KAAK;AAC5C;AAAA,MAAA;AAAA,MAGF,KAAK,SAAS,QAAQ;AACpB,cAAM,QAAQ,MAAM,SAAS,KAAK,SAAS,IAAI;AACzC,cAAA,QAAQ,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,KAAK,OAAO;AAC7E,cAAM,SAAS,QAAQ,QAAQ,IAAI,QAAQ,QAAQ;AACnD,cAAM,aAAa,OAAO,QAAQ,MAAM,QAAQ,IAAI;AACpD,cAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,IAAI;AAE5C,cAAM,aAAa,KAAK;AACxB;AAAA,MAAA;AAAA,MAEF,KAAK,SAAS,WAAW;AAClB,aAAA,gBAAgB,gBAAgB,KAAK;AACrC,aAAA,gBAAgB,kBAAkB,KAAK;AACvC,aAAA,eAAe,MAAM,KAAK;AAC/B,aAAK,UAAU,KAAK;AACpB;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAAA,EAGF,SAAS,SAAS;AAEhB,UAAM,QAAa,MAAM,KAAK,KAAK,QAAQ,UAAU,EAAE,KAAK,CAAC,SAAc,KAAK,aAAa,gBAAgB,CAAC;AAC9G,UAAM,UAAU,SAAS,MAAM,aAAa,gBAAgB;AAC5D,QAAI,WAAW,YAAY,KAAK,QAAQ,MAAM,iBAAiB;AACxD,WAAA,QAAQ,MAAM,kBAAkB;AAAA,IAAA;AAGvC,UAAM,MAAM,KAAK,QAAQ,aAAa,UAAU;AAC5C,QAAA,KAAK,QAAQ,qBAAqB,EAAE,KAAK,kBAAkB,KAAK,QAAQ,oBAAoB;AAC9F,WAAK,KAAK,KAAK,QAAQ,kBAAkB,UAAU;AAAA,QACjD,KAAK;AAAA,MAAA,CACN;AAAA,IAAA,WAEM,QAAQ,KAAK,OAAO,QAAA,EAAU,KAAK;AACrC,WAAA,OAAO,OAAO,OAAO,GAAG;AAAA,IAAA;AAG1B,SAAA,SAAS,QAAQ,CAAC,UAAU;AAC3B,UAAAI,aAAA,kBAAkB,MAAM,IAAI,GAAG;AACjC;AAAA,MAAA;AAEF,YAAM,eAAoB,KAAK,UAAU,MAAM,OAAO;AACtD,YAAM,cAAmB,KAAK,UAAU,MAAM,KAAK,OAAO;AACtD,UAAA,aAAa,SAAS,YAAY,MAAM;AACpC,cAAA,OAAO,KAAK,WAAW,KAAK;AAClC,YAAI,MAAM;AACR,eAAK,SAAS;AAAA,QAAA;AAGhB,YAAI,KAAK,MAAM;AACb,eAAK,KAAK,SAAS;AAAA,QAAA;AAAA,MACrB;AAAA,IACF,CACD;AAED,UAAM,SAAS,OAAO;AAAA,EAAA;AAAA;AAAA,EAIxB,UAAU,SAAS;AACjB,UAAM,UAAU,CAAC;AACX,UAAA,aAAa,QAAQ,WAAW,CAAC;AACnC,QAAA,cAAc,QAAQ,YAAY,MAAM;AAC1C,cAAQ,OAAO,WAAW,UAAU,KAAK,CAAC;AAAA,IAAA;AAGrC,WAAA,cAAc,SAAS,OAAO;AAAA,EAAA;AAAA,EAGvC,MAAM;AACJ,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,YAAY;AACN,QAAA,KAAK,OAAO;AACP,aAAA;AAAA,IAAA;AAEF,WAAA,KAAK,IAAI,EAAE,UAAU;AAAA,EAAA;AAAA,EAG9B,QAAQ;AACN,WAAO,KAAK,IAAI,KAAK,KAAK,IAAA,EAAM,MAAM;AAAA,EAAA;AAE1C;AACA,UAAU,WAAW;AACrB,UAAU,UAAU;AAGpB,MAAM,iBAAiB,UAAU;AAAA,EAgB/B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,MAAM,KAAK;AACR,WAAA,aAAa,YAAY,MAAM,GAAG;AAAA,IAAA;AAElC,WAAA;AAAA,EAAA;AAAA,EAGT,aAAa;AACP,QAAA,MAAM,gBAAgB,CAACA,aAAAA,kBAAkB,KAAK,KAAK,SAAS,IAAI,GAAG;AACrE,YAAM,WAAW,KAAK,SAAS,KAAK,QAAQ;AAC5C,YAAM,WAAW,KAAK,SAAS,KAAK,QAAQ;AAC5C,YAAM,WAAW,KAAK,KAAK,SAAS,KAAK,QAAQ;AACjD,YAAM,WAAW,KAAK,KAAK,SAAS,KAAK,QAAQ;AAE1C,aAAA,SAAS,QAAQ,SAAS,OAAO,SAAS,QAAQ,SAAS,OAAO,SAAS,QAAQ,SAAS;AAAA,IAAA;AAE9F,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU;AACR,WAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,aAAa;AAC3C,UAAI,KAAK,QAAQ,aAAa,QAAQ,QAAQ,EAAE,GAAG;AACjD,gBAAQ,QAAQ,IAAI,KAAK,QAAQ,aAAa,QAAQ,QAAQ,EAAE;AAAA,MAAA;AAE3D,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAAA,EAGP,OAAO,KAAK,OAAO;AACjB,SAAK,QAAQ,aAAa,QAAQ,GAAG,IAAI,KAAK;AAAA,EAAA;AAAA,EAGhD,SAAS,SAAS;AAEZ,QAAA,KAAK,QAAQ,qBAAqB,EAAE,KAAK,kBAAkB,KAAK,QAAQ,oBAAoB;AAC9F,WAAK,KAAK,KAAK,QAAQ,kBAAkB,QAAQ;AAAA,IAAA;AAG9C,SAAA,SAAS,QAAQ,CAAC,UAAU;AAC3B,UAAAA,aAAA,kBAAkB,MAAM,IAAI,GAAG;AACjC;AAAA,MAAA;AAEI,YAAA,eAAe,MAAM,QAAQ;AAC7B,YAAA,cAAc,MAAM,KAAK,QAAQ;AACnC,UAAA,aAAa,QAAQ,YAAY,KAAK;AAClC,cAAA,OAAO,KAAK,WAAW,KAAK;AAClC,YAAI,MAAM;AACR,eAAK,SAAS;AAAA,QAAA;AAEhB,YAAI,KAAK,MAAM;AACb,eAAK,KAAK,SAAS;AAAA,QAAA;AAAA,MACrB;AAAA,IACF,CACD;AAED,UAAM,SAAS,OAAO;AAAA,EAAA;AAAA,EAGxB,YAAY;AACN,QAAA,CAAC,KAAK,QAAQ;AACT,aAAA;AAAA,IAAA;AAET,WAAO,KAAK,OAAO,SAAS,QAAQ,IAAI;AAAA,EAAA;AAAA,EAG1C,QAAQ;AACC,WAAA,KAAK,UAAU,KAAK,OAAO;AAAA,EAAA;AAEtC;AACA,SAAS,WAAW;AACpB,SAAS,UAAU;AAGnB,MAAM,kBAAkB,UAAU;AAKlC;AACA,UAAU,WAAW;AACrB,UAAU,UAAU;AAGpB,MAAM,iBAAiB,MAAM;AAAA,EAM3B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAChBC,+BAAA,QAAQ,CAAC,aAAa;AAC9B,WAAA,aAAa,GAAG,QAAQ,IAAI,MAAM,QAAQ,KAAKC,wBAAY,QAAQ,CAAC;AAAA,IAAA,CAC1E;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAS;AACtB,WAAOD,2BAAe,OAAO,CAAC,SAAS,cAAc;AACnD,UAAI,QAAQ,aAAa,GAAG,SAAS,EAAE,GAAG;AACxC,gBAAQ,SAAS,IAAI,QAAQ,aAAa,GAAG,SAAS,EAAE,KAAK;AAAA,MAAA;AAExD,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAAA,EAGP,OAAO,MAAM,OAAO;AACd,QAAAA,YAAA,eAAe,SAAS,IAAI,GAAG;AAC5B,WAAA,QAAQ,aAAa,GAAG,IAAI,IAAI,SAASC,wBAAY,IAAI,CAAC;AAAA,IAAA,OAE5D;AACG,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA;AAAA,EAC1B;AAAA,EAGF,OAAO;AACL,WAAO,KAAK,QAAQ;AAAA,EAAA;AAExB;AACA,SAAS,WAAW;AACpB,SAAS,UAAU;AAGnB,MAAM,sBAAsB,UAAU;AAAA,EAQpC,SAAS,SAAS;AAChB,UAAM,SAAS,OAAO;AAGlB,QAAA,KAAK,UAAU,KAAK,QAAQ,qBAAqB,KAAK,kBAAkB,KAAK,QAAQ,mBAAmB;AAC1G,WAAK,OAAO,iBAAiB;AAAA,IAAA;AAI/B,QAAI,KAAK,OAAO,OAAO,QAAQ,cAAc,gCACxC,KAAK,OAAO,OAAO,QAAQ,YAAY,SACvC,KAAK,OAAO,QAAQ,SAAS,UAAU,KACvC,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,YAAY,cAC5C,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,YAAY,SAC/C;AACA,UAAI,OAAO;AACX,UAAI,UAAU;AACd,UAAI,iBAAiB;AACZ,eAAA,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,SAAS,QAAQ,KAAK;AAC5D,YAAI,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,YAAY,SAAS;AACvD,cAAI,SAAS,IAAI;AACR,mBAAA,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,aAAa,UAAU;AAAA,UAAA;AAElE,oBAAA,KAAK,qBAAqB,KAAK,OAAO,QAAQ,SAAS,CAAC,GAAG,IAAI;AAAA,QAAA,WAElE,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,YAAY,YAAY;AAC/D,2BAAiB,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,SAAS;AAAA,QAAA;AAAA,MAC5D;AAEE,UAAA,iBAAiB,KAAK,OAAO,QAAQ;AAElC,aAAA,kBAAkB,eAAe,YAAY,SAAS;AAC3D,iBAAS,IAAI,GAAG,IAAI,eAAe,SAAS,QAAQ,KAAK;AACvD,cAAI,eAAe,SAAS,CAAC,EAAE,YAAY,SAAS;AAClD,uBAAW,KAAK,qBAAqB,eAAe,SAAS,CAAC,GAAG,IAAI;AAAA,UAAA;AAAA,QACvE;AAEF,yBAAiB,eAAe;AAAA,MAAA;AAGlC,UAAI,iBAAiB,SAAS;AAC5B,cAAM,SAAS,UAAU;AAEzB,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AACzB,gBAAA,SAAS,SAAS,cAAc,KAAK;AAC3C,iBAAO,QAAQ,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,SAAS,KAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,SAAS,SAAS,CAAC,EAAE;AACvG,gBAAA,QAAQ,SAAS,cAAc,IAAI;AACzC,iBAAO,YAAY,KAAK;AACxB,eAAK,OAAO,QAAQ,SAAS,CAAC,EAAE,YAAY,MAAM;AAClD,eAAK,OAAO,QAAQ,MAAM,SAAS,OAAO;AAAA,QAAA;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIF,qBAAqB,OAAO,MAAM;AAChC,QAAI,UAAU;AAEd,aAAS,IAAI,GAAG,IAAI,MAAM,SAAS,QAAQ,KAAK;AAC9C,UAAI,MAAM,SAAS,CAAC,EAAE,aAAa,UAAU,MAAM,MAAM;AAChD,eAAA;AAAA,MAAA;AAEA,eAAA,IAAI,GAAG,IAAI,MAAM,SAAS,CAAC,EAAE,SAAS,QAAQ,KAAK;AAC1D,YAAI,MAAM,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS;AACzC,qBAAW,MAAM,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE;AAAA,QAAA;AAAA,MAC3C;AAAA,IACF;AAEK,WAAA;AAAA,EAAA;AAEX;AACA,cAAc,WAAW;AACzB,cAAc,UAAU;AAGxB,MAAM,uBAAuB,UAAU;AAAA,EAYrC,OAAO,SAAS;AACR,UAAA,OAAO,MAAM,OAAO;AACnB,WAAA;AAAA,EAAA;AAAA,EAGT,YAAY,QAAQ,SAAS;AAC3B,UAAM,QAAQ,OAAO;AACb,YAAA,aAAa,mBAAmB,KAAK;AAC7C,SAAK,iBAAiB;AAAA,EAAA;AAAA,EAGxB,mBAAmB;AACb,QAAA,WAAW,KAAK,SAAS;AAC7B,QAAI,CAAC,UAAU;AAGT,UAAA,KAAK,UAAU,KAAK,OAAO,SAAS,QAAQ,KAAK,QAAQ,aAAa,OAAO,GAAG;AAClF,mBAAW,KAAK,OAAO,SAAS,KAAK,SAAS;AAC9C,aAAK,UAAU,KAAK,OAAO,SAAS,KAAK;AAAA,MAElC,WAAA,KAAK,QAAQ,YAAY,SAAS;AAEzC;AAAA,MAAA,OAEG;AACH;AAAA,MAAA;AAAA,IACF;AAEF,UAAM,aAAa,SAAS,SAAS,OAAO,CAAC,UAAU,QAAQ;AAE7D,YAAM,WAAW,IAAI,QAAQ,EAAE,SAAS,QAAQ;AAChD,UAAI,gBAAgBA,YAAAA,YAAY;AAC5B,UAAA,YAAY,SAAS,OAAO;AAC9B,wBAAgB,OAAO,SAAS,SAAS,OAAO,EAAE;AAAA,MAAA;AAEpD,iBAAW,WAAW;AACf,aAAA;AAAA,OACN,CAAC;AACC,SAAA,QAAQ,gBAAgB,OAAO;AACpC,SAAK,QAAQ,MAAM,QAAQ,GAAG,UAAU;AAExC,QAAI,SAAS,MAAM;AACjB,iBAAW,MAAM;AACf,YAAI,UAAU;AACV,YAAA;AACE,cAAA,SAAS,SAAS,SAAS;AAC3B,cAAA,YAAY,KAAK,YAAY,QAAQ;AAE3C,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,iBAAiB,IAAI;AAClD,cAAA,IAAI,WAAW,QAAQ;AAChB,qBAAA;AACT;AAAA,UAAA;AAAA,QACF;AAEO,iBAAA,SAAS,QAAQ,CAAC,QAAQ;AACjC,cAAI,UAAU,IAAI,QAAQ,UAAU,QAAQ;AAC1C,kBAAM,QAAQ,iBAAiB,OAAO,OAAO,CAAC,EAAE;AAChD,kBAAM,MAAM,OAAO,SAAS,OAAO,EAAE;AACrC,gBAAI,QAAQ,QAAS,MAAMA,YAAY,YAAA,SAASA,YAAAA,YAAY,SAAU;AAAA,UAAA;AAExE;AAAA,QAAA,CACD;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,EACH;AAAA,EAGF,MAAM,QAAQ;AACL,WAAA,KAAK,KAAO,EAAA,IAAI,SAAO,IAAI,SAAS,GAAG,MAAM,CAAC;AAAA,EAAA;AAAA,EAGvD,WAAW;AACT,WAAO,KAAK,SAAS;AAAA,EAAA;AAAA,EAGvB,cAAc,aAAa,aAAa,CAAA,GAAI,eAAe;AACzD,UAAM,CAAC,IAAI,IAAI,KAAK,YAAY,SAAS;AACzC,QAAIF,aAAAA,kBAAkB,IAAI,KAAKA,aAAAA,kBAAkB,KAAK,SAAS,IAAI,GAAG;AACpE;AAAA,IAAA;AAGI,UAAA,aAAa,KAAK,YAAY,SAAS;AAC7C,UAAM,eAAe,CAAC;AACtB,UAAM,gBAAgB,CAAC;AAEZ,eAAA,QAAQ,CAAC,SAAS;AAC3B,YAAM,WAAWG,MAAAA,gBAAgB,KAAK,QAAQ,yBAAyB,aAAa;AAEhF,UAAA,SAAS,IAAIC,YAAc,cAAA,YAAY,KAAK,SAAS,KAAKA,YAAAA,cAAc,YAAY,IAAI;AAC1F,qBAAa,KAAK,IAAI;AAAA,MACxB,WACS,SAAS,IAAI,YAAY,IAAIA,2BAAe,SAAS,KAAK,YAAY,KAAKA,YAAAA,aAAa;AAC/F,sBAAc,KAAK,IAAI;AAAA,MAAA;AAAA,IACzB,CACD;AAEG,QAAA,aAAa,WAAW,WAAW,QAAQ;AAC7C,WAAK,aAAa;AACX,aAAA;AAAA,IAAA;AAIT,eAAW,QAAQ,MAAM;AACjB,YAAA,MAAM,KAAK,SAAS,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;AACjD,UAAA,CAAC,OAAO,KAAK,WAAW,SAAS,GAAG,WAAW,CAAC,CAAC,EAAE,YAAY,KAAK,WAAW,QAAQ,SAAS,WAAW,CAAC,CAAC,GAAG;AAClH,aAAK,SAAS,EAAE,QAAQ,YAAY,KAAK,SAAW,EAAA,QAAQ,SAAS,WAAW,CAAC,CAAC,CAAC;AAAA,MAAA,OAEhF;AACH,YAAI,OAAO;AAAA,MAAA;AAAA,IACb,CACD;AAEY,iBAAA,QAAQ,CAAC,SAAS;AAC7B,WAAK,OAAO;AAAA,IAAA,CACb;AAEa,kBAAA,QAAQ,CAAC,SAAS;AAC9B,YAAM,cAAc,OAAO,SAAS,KAAK,QAAQ,EAAE,SAAS,EAAE;AAE9D,WAAK,OAAO,WAAW,cAAc,WAAW,MAAM;AAAA,IAAA,CACvD;AAED,SAAK,iBAAiB;AAAA,EAAA;AAAA,EAGxB,UAAU,aAAa,eAAe;AACpC,UAAM,CAAC,IAAI,IAAI,KAAK,YAAY,SAAS;AACzC,QAAIJ,aAAAA,kBAAkB,IAAI,KAAKA,aAAAA,kBAAkB,KAAK,SAAS,IAAI,GAAG;AACpE;AAAA,IAAA;AAGI,UAAA,aAAa,KAAK,YAAY,SAAS;AACvC,UAAA,YAAY,KAAK,YAAY,QAAQ;AAC3C,UAAM,eAAe,CAAC;AACtB,UAAM,gBAAgB,CAAC;AACvB,UAAM,YAAY,CAAC;AAER,eAAA,QAAQ,CAAC,SAAS;AAC3B,YAAM,WAAWG,MAAAA,gBAAgB,KAAK,QAAQ,yBAAyB,aAAa;AAEhF,UAAA,SAAS,IAAI,YAAY,IAAIC,YAAAA,eAAe,SAAS,KAAK,YAAY,KAAKA,yBAAa;AAC1F,qBAAa,KAAK,IAAI;AAAA,MACxB,WACS,SAAS,IAAI,YAAY,IAAIA,2BAAe,SAAS,KAAK,YAAY,KAAKA,YAAAA,aAAa;AAC/F,sBAAc,KAAK,IAAI;AAEvB,YAAI,KAAK,IAAI,SAAS,IAAI,YAAY,CAAC,IAAIA,yBAAa;AACtD,oBAAU,KAAK,IAAI;AAAA,QAAA;AAAA,MACrB;AAAA,IACF,CACD;AAEG,QAAA,aAAa,WAAW,WAAW,QAAQ;AAC7C,WAAK,aAAa;AAClB;AAAA,IAAA;AAIF,UAAM,oBAAoB,KAAK,KAAA,EAAO,OAAO,CAAC,KAAK,QAAQ;AACzD,YAAM,UAAUD,MAAAA,gBAAgB,IAAI,QAAQ,yBAAyB,aAAa;AAE9E,UAAA,QAAQ,IAAI,YAAY,IAAIC,YAAAA,eAAe,QAAQ,KAAK,YAAY,KAAKA,yBAAa;AACjF,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,OACN,CAAC;AAGM,cAAA,QAAQ,CAAC,SAAS;AAC1B,YAAM,WAAWD,MAAAA,gBAAgB,KAAK,QAAQ,yBAAyB,aAAa;AAC9E,YAAA,UAAU,KAAK,OAAO;AAC5B,YAAM,iBAAiB,QAAQ;AAE/B,YAAM,UAAU,eAAe,OAAO,CAAC,KAAK,gBAAgB;AAC1D,cAAM,kBAAkBA,MAAAA,gBAAgB,YAAY,QAAQ,yBAAyB,aAAa;AAClG,YAAI,SAAS,KAAK,gBAAgB,IAAIC,YAAAA,aAAa;AAC3C,gBAAA;AAAA,QAAA;AAED,eAAA;AAAA,SACN,IAAI;AAEC,cAAA,aAAa,MAAM,OAAO;AAC5B,YAAA,WAAW,QAAQ,QAAA,EAAU;AAC9B,WAAA,OAAO,OAAO,QAAQ;AACtB,WAAA,SAAS,QAAQ,CAAC,aAAa;AACzB,iBAAA,OAAO,OAAO,QAAQ;AAAA,MAAA,CAChC;AAAA,IAAA,CACF;AAEa,kBAAA,QAAQ,CAAC,SAAS;AAC9B,YAAM,cAAc,OAAO,SAAS,KAAK,QAAQ,EAAE,SAAS,EAAE;AAC9D,YAAM,aAAa,cAAc;AAC5B,WAAA,QAAQ,gBAAgB,OAAO;AAC/B,WAAA,OAAO,WAAW,UAAU;AAC5B,WAAA,SAAS,QAAQ,CAAC,aAAa;AACzB,iBAAA,OAAO,WAAW,UAAU;AAAA,MAAA,CACtC;AAAA,IAAA,CACF;AAEY,iBAAA,QAAQ,CAAC,SAAS;AAC7B,WAAK,OAAO;AAAA,IAAA,CACb;AAKS,cAAA,QAAQ,CAAC,QAAQ;AACrB,UAAA,IAAI,SAAS,WAAW,GAAG;AAC7B,YAAI,OAAO;AAAA,MAAA;AAAA,IACb,CACD;AAAA,EAAA;AAAA,EAGH,eAAe;AACb,UAAM,QAAQ,MAAM,KAAK,KAAK,OAAO,QAAQ,UAAU;AACjD,UAAA,cAAc,MAAM,UAAU,cAAc;AAClD,SAAK,OAAO;AACZ,gBAAY,eAAe;AACrB,UAAA,OAAO,MAAM,QAAQ,IAAI;AAAA,EAAA;AAAA,EAGjC,WAAW,UAAU,KAAK,KAAK,IAAI;AACjC,UAAM,KAAK,OAAO;AACZ,UAAA,MAAM,SAAS,QAAA,EAAU;AACzB,UAAA,YAAY,KAAK,OAAO;AAAA,MAC5B,UAAU;AAAA,MACV,EAAE,GAAGP,YAAAA,cAAc,KAAK,IAAI;AAAA,IAC9B;AACU,cAAA,QAAQ,MAAM,kBAAkB;AAC1C,UAAM,WAAW,KAAK,OAAO,OAAO,cAAc,UAAU;AAAA,MAC1D,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;AACD,cAAU,YAAY,QAAQ;AAE9B,QAAI,KAAK;AACE,eAAA,aAAa,WAAW,GAAG;AAAA,IAAA,OAEjC;AACH,eAAS,YAAY,SAAS;AAAA,IAAA;AAAA,EAChC;AAAA,EAGF,aAAa,aAAa,UAAU,UAAU,MAAM,eAAe;AACjE,UAAM,CAAC,IAAI,IAAI,KAAK,YAAY,SAAS;AACzC,UAAM,CAAC,aAAa,IAAI,KAAK,YAAY,aAAa;AAChD,UAAA,YAAY,KAAK,YAAY,QAAQ;AAC3C,UAAM,gBAAgB,CAAC;AACvB,UAAM,gBAAgB,CAAC;AACvB,UAAM,gBAAgB,CAAC;AAEvB,QAAIG,aAAAA,kBAAkB,IAAI,KAAKA,aAAAA,kBAAkB,KAAK,SAAS,IAAI,GAAG;AACpE;AAAA,IAAA;AAEI,UAAA,aAAa,KAAK,YAAY,SAAS;AAClC,eAAA,QAAQ,CAAC,SAAS;AAC3B,YAAM,WAAWG,MAAAA,gBAAgB,KAAK,QAAQ,yBAAyB,aAAa;AAEpF,UAAI,SAAS;AACX,YAAI,KAAK,IAAI,SAAS,KAAK,YAAY,EAAE,IAAIC,yBAAa;AAGxD,wBAAc,KAAK,IAAI;AAAA,QACzB,WACS,YAAY,KAAK,SAAS,IAAIA,YAAAA,eAAe,YAAY,KAAK,SAAS,KAAK,CAACA,YAAAA,aAAa;AAGjG,wBAAc,KAAK,IAAI;AAAA,QAAA;AAAA,MACzB,OAEG;AACH,YAAI,KAAK,IAAI,SAAS,IAAI,YAAY,CAAC,IAAIA,yBAAa;AAGtD,wBAAc,KAAK,IAAI;AAAA,QACzB,WACS,YAAY,IAAI,SAAS,IAAIA,YAAAA,eAAe,YAAY,IAAI,SAAS,KAAK,CAACA,YAAAA,aAAa;AAG/F,wBAAc,KAAK,IAAI;AAAA,QAAA;AAAA,MACzB;AAAA,IACF,CACD;AAEa,kBAAA,QAAQ,CAAC,SAAS;AACxB,YAAA,MAAM,UAAU,KAAK,OAAO;AAClC,YAAM,KAAK,OAAO;AAClB,YAAM,WAAW,KAAK;AAChB,YAAA,MAAM,SAAS,QAAA,EAAU;AACzB,YAAA,cAAc,KAAK,QAAQ;AAC3B,YAAA,YAAY,KAAK,OAAO;AAAA,QAC5B,UAAU;AAAA,QACV,EAAE,GAAGP,YAAA,cAAc,KAAK,KAAK,SAAS,YAAY,QAAQ;AAAA,MAC5D;AACA,YAAM,WAAW,KAAK,OAAO,OAAO,cAAc,UAAU;AAAA,QAC1D,KAAK;AAAA,QACL,MAAM;AAAA,QACN,SAAS,YAAY;AAAA,MAAA,CACtB;AACD,gBAAU,YAAY,QAAQ;AAE9B,UAAI,KAAK;AACE,iBAAA,aAAa,WAAW,GAAG;AAAA,MAAA,OAEjC;AACH,iBAAS,YAAY,SAAS;AAAA,MAAA;AAEhC,oBAAc,KAAK,SAAS;AAAA,IAAA,CAC7B;AAGD,UAAM,WAAW,KAAK,OAAO,OAAO,SAAS,UAAU,IAAI;AACvD,QAAA;AACJ,QAAI,SAAS;AACX,eAAS,UAAU,QAAQ,KAAK,UAAU,QAAQ,EAAE;AAAA,IAAA,OAEjD;AACH,eAAS,UAAU,QAAQ;AAAA,IAAA;AAG7B,QAAI,QAAQ;AACI,oBAAA,aAAa,UAAU,MAAM;AAAA,IAAA,OAExC;AACH,oBAAc,YAAY,QAAQ;AAAA,IAAA;AAGtB,kBAAA,QAAQ,CAAC,SAAS;AACxB,YAAA,cAAc,KAAK,QAAA,EAAU;AACnC,WAAK,OAAO,WAAW,OAAO,SAAS,aAAa,EAAE,IAAI,CAAC;AAC3D,oBAAc,KAAK,IAAI;AAAA,IAAA,CACxB;AAEa,kBAAA,KAAK,CAAC,OAAO,UAAU;AACnC,YAAM,KAAK,MAAM,QAAQ,sBAAwB,EAAA;AACjD,YAAM,KAAK,MAAM,QAAQ,sBAAwB,EAAA;AACjD,aAAO,KAAK;AAAA,IAAA,CACb;AAED,SAAK,iBAAiB;AACf,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU,aAAa,QAAQ,eAAe;AAC5C,UAAM,CAAC,IAAI,IAAI,KAAK,YAAY,SAAS;AACzC,QAAIG,aAAAA,kBAAkB,IAAI,KAAKA,aAAAA,kBAAkB,KAAK,SAAS,IAAI,GAAG;AACpE;AAAA,IAAA;AAGI,UAAA,aAAa,KAAK,YAAY,SAAS;AAC7C,UAAM,MAAM,MAAM;AAClB,UAAM,SAAS,KAAK,OAAO,OAAO,SAAS,UAAU;AAAA,MACnD,KAAK;AAAA,IAAA,CACN;AACD,UAAM,gBAAgB,CAAC;AACvB,UAAM,gBAAgB,CAAC;AACvB,UAAM,gBAAgB,CAAC;AAEZ,eAAA,QAAQ,CAAC,SAAS;AAC3B,YAAM,WAAWG,MAAAA,gBAAgB,KAAK,QAAQ,yBAAyB,aAAa;AAEpF,UAAI,QAAQ;AACV,YAAI,KAAK,IAAI,SAAS,KAAK,YAAY,EAAE,IAAIC,yBAAa;AACxD,wBAAc,KAAK,IAAI;AAAA,QACzB,WACS,YAAY,KAAK,SAAS,IAAIA,YAAAA,eAAe,YAAY,KAAK,SAAS,KAAK,CAACA,YAAAA,aAAa;AACjG,wBAAc,KAAK,IAAI;AAAA,QAAA;AAAA,MACzB,OAEG;AACH,YAAI,KAAK,IAAI,SAAS,IAAI,YAAY,CAAC,IAAIA,yBAAa;AACtD,wBAAc,KAAK,IAAI;AAAA,QACzB,WACS,YAAY,IAAI,SAAS,IAAIA,YAAAA,eAAe,YAAY,IAAI,SAAS,KAAK,CAACA,YAAAA,aAAa;AAC/F,wBAAc,KAAK,IAAI;AAAA,QAAA;AAAA,MACzB;AAAA,IACF,CACD;AAIK,UAAA,WAAW,CAAC,OAAO,UAAU;AACjC,YAAM,KAAK,MAAM,QAAQ,sBAAwB,EAAA;AACjD,YAAM,KAAK,MAAM,QAAQ,sBAAwB,EAAA;AACjD,aAAO,KAAK;AAAA,IACd;AACA,kBAAc,KAAK,QAAQ;AAEb,kBAAA,QAAQ,CAAC,SAAS;AAC9B,YAAM,MAAM,OAAO;AACb,YAAA,cAAc,KAAK,QAAQ;AAE3B,YAAA,YAAY,KAAK,OAAO;AAAA,QAC5B,UAAU;AAAA,QACV,EAAE,GAAGP,YAAAA,cAAc,KAAK,KAAK,MAAM,KAAK,SAAS,YAAY,QAAQ;AAAA,MACvE;AACA,YAAM,WAAW,KAAK,OAAO,OAAO,cAAc,UAAU;AAAA,QAC1D,KAAK;AAAA,QACL,MAAM;AAAA,QACN,SAAS,YAAY;AAAA,MAAA,CACtB;AACD,YAAM,QAAQ,KAAK,OAAO,OAAO,MAAM,QAAQ;AAC/C,eAAS,YAAY,KAAK;AAC1B,gBAAU,YAAY,QAAQ;AAC9B,aAAO,YAAY,SAAS;AAC5B,oBAAc,KAAK,SAAS;AAAA,IAAA,CAC7B;AAEa,kBAAA,QAAQ,CAAC,SAAS;AAC9B,YAAM,cAAc,OAAO,SAAS,KAAK,QAAQ,EAAE,SAAS,EAAE;AACzD,WAAA,OAAO,WAAW,cAAc,CAAC;AACtC,oBAAc,KAAK,IAAI;AAAA,IAAA,CACxB;AAED,UAAM,SAAS,KAAK,KAAO,EAAA,KAAK,CAAC,QAAQ;AACvC,YAAM,UAAUM,MAAAA,gBAAgB,IAAI,QAAQ,yBAAyB,aAAa;AAClF,UAAI,QAAQ;AACH,eAAA,KAAK,IAAI,QAAQ,IAAI,YAAY,IAAI,YAAY,MAAM,IAAIC,YAAA;AAAA,MAAA,OAE/D;AACH,eAAO,KAAK,IAAI,QAAQ,IAAI,YAAY,CAAC,IAAIA,YAAA;AAAA,MAAA;AAAA,IAC/C,CACD;AACI,SAAA,aAAa,QAAQ,MAAM;AAGhC,kBAAc,KAAK,QAAQ;AACpB,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW,cAAc,cAAc,SAAS,SAAS,gBAAgB;AACvE,UAAM,aAAa,aAAa,OAAO,CAAC,QAAQ,WAAWC,WAAU;AACnE,UAAIA,WAAU,GAAG;AACf,YAAI,QAAQ;AACV,oBAAU,aAAa,MAAM;AAAA,QAAA;AAE/B,kBAAU,OAAO;AAAA,MAAA,OAEd;AACO,kBAAA,OAAO,WAAW,OAAO;AACzB,kBAAA,OAAO,WAAW,OAAO;AAC1B,iBAAA;AACT,YAAI,UAAU,GAAG;AAET,gBAAA,YAAYC,YAAAA,kBAAkB,UAAU,UAAU;AAClD,gBAAA,aAAa,OAAO,SAAS,UAAU,QAAQ,MAAM,QAAQ,EAAE,KAAK;AAC1E,cAAI,aAAa,WAAW;AAC1B,sBAAU,QAAQ,MAAM,SAAS,GAAG,SAAS;AAAA,UAAA;AAAA,QAC/C;AAAA,MACF;AAGK,aAAA;AAAA,OACN,IAAI;AAEP,UAAM,MAAM,WAAW,QAAQ,aAAa,UAAU;AACtD,UAAM,MAAM,WAAW,SAAS,KAAK,QAAQ,aAAa,WAAW;AAC1D,eAAA,SAAS,QAAQ,CAAC,aAAa;AACxC,eAAS,QAAQ,aAAa,kBAAkB,WAAW,QAAQ,MAAM,eAAe;AACxF,UAAI,SAAS,SAAS,KAAK,QAAQ,OAAO;AACxC,iBAAS,SAAS,KAAK,QAAQ,MAAM,kBAAkB,WAAW,QAAQ,MAAM;AAAA,MAAA;AAGlF,UAAI,CAAC,SAAS,QAAQ,SAAS,QAAQ,YAAY,QAAQ;AAChD,iBAAA,OAAO,QAAQ,GAAG;AAClB,iBAAA,OAAO,OAAO,GAAG;AACjB,iBAAA,OAAO,WAAW,OAAO;AACzB,iBAAA,OAAO,WAAW,OAAO;AAAA,MAAA,OAE/B;AACH,iBAAS,OAAO;AAAA,MAAA;AAAA,IAClB,CACD;AAEM,WAAA;AAAA,EAAA;AAAA,EAGT,aAAa,gBAAgB,eAAe;AAC1C,QAAI,cAAmB,CAAC;AACxB,QAAI,cAAc;AAClB,QAAI,cAAc;AAEH,mBAAA,QAAQ,CAAC,cAAc;AAC9B,YAAA,mBAAmB,UAAU,QAAQ,MAAM;AACjD,oBAAc,UAAU,QAAQ;AAChC,oBAAc,YAAY;AAC1B,oBAAc,YAAY;AAE1B,UAAI,cAAc,GAAG;AACnB,cAAM,MAAM,UAAU;AAChB,cAAA,MAAM,UAAU,IAAI;AAChB,kBAAA,OAAO,WAAW,CAAC;AAC7B,YAAI,UAAU,QAAQ,YAAY,UAAU,QAAQ,SAAS,CAAC,EAAE,YAAY,SAAS,UAAU,QAAQ,SAAS,CAAC,EAAE,aAAa,cAAc,GAAG;AAC/I,oBAAU,QAAQ,SAAS,CAAC,EAAE,aAAa,gBAAgB,CAAC;AAAA,QAAA;AAE9D,iBAAS,eAAe,aAAa,eAAe,GAAG,gBAAgB;AAChE,eAAA,WAAW,KAAK,KAAK,gBAAgB;AAAA,QAAA;AAAA,MAC5C;AAGF,UAAI,cAAc,GAAG;AACnB,YAAI,eAAe;AACf,YAAA,UAAU,UAAU,IAAA,EAAM;AAC9B,eAAO,eAAe,GAAG;AACvB,gBAAM,eAAe,QAAQ,SAAS,OAAO,CAAC,QAAQ,SAAS;AAC7D,kBAAM,cAAcH,MAAAA,gBAAgB,UAAU,QAAQ,yBAAyB,aAAa;AAC5F,kBAAM,WAAWA,MAAAA,gBAAgB,KAAK,QAAQ,yBAAyB,aAAa;AACpF,gBAAI,KAAK,IAAI,YAAY,KAAK,SAAS,CAAC,IAAIC,yBAAa;AAC9C,uBAAA;AAAA,YAAA;AAEJ,mBAAA;AAAA,aACN,IAAI;AAEP,mBAAS,eAAe,aAAa,eAAe,GAAG,gBAAgB;AAChE,iBAAA,WAAW,SAAS,cAAc,gBAAgB;AAAA,UAAA;AAGzC,0BAAA;AAChB,oBAAU,QAAQ;AAAA,QAAA;AAGV,kBAAA,QAAQ,gBAAgB,OAAO;AACzC,YAAI,UAAU,QAAQ,YAAY,UAAU,QAAQ,SAAS,CAAC,EAAE,YAAY,SAAS,UAAU,QAAQ,SAAS,CAAC,EAAE,aAAa,cAAc,GAAG;AAC/I,oBAAU,QAAQ,SAAS,CAAC,EAAE,aAAa,gBAAgB,CAAC;AAAA,QAAA;AAEpD,kBAAA,OAAO,WAAW,CAAC;AAAA,MAAA;AAAA,IAC/B,CACD;AAAA,EAAA;AAAA,EAGH,WAAW,aAAa;AACV,gBAAA,QAAQ,CAAC,eAAe;AAE5B,YAAA,cAAc,WAAW,QAAQ;AACvC,YAAM,WAAW,KAAK,OAAO,OAAO,cAAc,UAAU;AAAA,QAC1D,KAAK,YAAY,OAAO,MAAM;AAAA,QAC9B,MAAM,YAAY,QAAQ,OAAO;AAAA,QACjC,SAAS,YAAY;AAAA,QACrB,SAAS,YAAY;AAAA,MAAA,CACtB;AACD,YAAM,QAAQ,KAAK,OAAO,OAAO,MAAM,QAAQ;AAC/C,eAAS,YAAY,KAAK;AAE1B,iBAAW,QAAQ,YAAY;AAC/B,iBAAW,YAAY,QAAQ;AAAA,IAAA,CAChC;AAAA,EAAA;AAAA,EAGH,OAAO;AACC,UAAA,OAAO,KAAK,SAAS;AACvB,QAAAJ,aAAAA,kBAAkB,IAAI,GAAG;AAC3B,aAAO,CAAC;AAAA,IAAA;AAEV,WAAO,KAAK,SAAS,IAAI,CAAA,QAAO,GAAG;AAAA,EAAA;AAEvC;AACA,eAAe,WAAW;AAC1B,eAAe,YAAY;AAC3B,eAAe,UAAU;AAGzB,MAAM,yBAAyB,UAAU;AAAA,EAKvC,YAAY,QAAQ,SAAS;AAC3B,UAAM,QAAQ,OAAO;AACrB,UAAM,QAAQ,MAAM,KAAK,OAAO,QAAQ,UAAU;AAE9C,QAAA,MAAM,QAAQ,UAAU;AAC1B,cAAQ,MAAM,WAAW;AAAA,IAAA;AAEnB,YAAA;AAAA,MACN;AAAA,MACA,CAAC,MAAM;AACC,cAAA,cAAc,MAAM,UAAU,cAAc;AAClD,YAAI,YAAY,YAAY;AAC1B,sBAAY,WAAW,QAAQ,aAAa,EAAE,OAAO;AAAA,QAAA;AAGvD,YAAI,YAAY,kBAAkB,YAAY,eAAe,YAAY,SAAS,GAAG;AACnF,sBAAY,eAAe,oBAAoB;AAAA,QAAA;AAAA,MAEnD;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEJ;AACA,iBAAiB,WAAW;AAC5B,iBAAiB,YAAY;AAC7B,iBAAiB,UAAU;AAE3B,iBAAiB,kBAAkB,CAAC,cAAc;AAClD,eAAe,oBAAoB;AAEnC,eAAe,kBAAkB,CAAC,WAAW,aAAa;AAC1D,UAAU,oBAAoB;AAE9B,UAAU,kBAAkB,CAAC,QAAQ;AACrC,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB,CAAC,SAAS;AACrC,UAAU,oBAAoB;AAE9B,UAAU,kBAAkB,CAAC,eAAeO,OAAAA,SAAQC,KAAAA,SAAUC,KAAAA,aAAa;AAC3E,cAAc,oBAAoB;AAElC,cAAc,kBAAkB,CAAC,QAAQ;AACzC,cAAc,oBAAoB;AAElC,SAAS,oBAAoB;AAE7B,SAAS,QAAQ;AACT,QAAA,KAAK,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;AAChD,SAAO,OAAO,EAAE;AAClB;AAEA,SAAS,SAAS;AACV,QAAA,KAAK,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;AAChD,SAAO,QAAQ,EAAE;AACnB;AAEA,SAAS,cAAc,SAAsB,SAA8B;AAClE,SAAA,CAAC,GAAGb,YAAAA,iBAAiB,GAAGD,YAAAA,kBAAkB,EAAE,OAAO,CAAC,cAAc,cAAc;AACrF,QAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,GAAG;AAC7C,mBAAa,SAAS,IAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,KAAK;AAAA,IAAA;AAElE,WAAA;AAAA,KACN,OAAO;AACZ;;;;;;;;;;;;;"}
|